From 35342b634417b71d367963d5eaf391d0016dc099 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 8 Jun 2026 12:06:30 +0200 Subject: [PATCH 1/3] Migrate off gogo/protobuf to google.golang.org/protobuf MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace the unmaintained github.com/gogo/protobuf code generator and runtime with the official google.golang.org/protobuf stack. SwarmKit's own code no longer imports gogo; it now survives only as an indirect dependency pulled in by the etcd stack (go.etcd.io/raft, go.etcd.io/etcd/{api,server}), which is gogo-generated until etcd 3.7 ships stable. Tooling - Add cmd/protoc-gen-goswarm: reimplements the deepcopy, storeobject, raftproxy and authenticatedwrapper plugins on the google.golang.org/protobuf/compiler/ protogen API (replaces the removed cmd/protoc-gen-gogoswarm). - Add cmd/proto-name-fix: post-processor that restores the historical Go field and enum names (ID, NodeID, NanoCPUs, TTY, ...) from a generated rename map, preserving the public API that gogoproto.customname / customnameid produced. - Add protobuf/plugin/naming: shared ID-capitalization + go_name extension logic. - Add internal/protoc-stubs/gogoproto/gogo.proto so protoc can resolve the gogoproto import that vendored etcd raftpb still carries. Proto definitions - Drop the gogoproto import and all (gogoproto.*) options from api/*.proto. - Replace customname/enum_customname/enumvalue_customname with new (docker.protobuf.plugin.go_name|go_enum_name|go_enum_value_name) extensions. - nullable=false embedded fields become pointer fields; stdduration becomes *durationpb.Duration; the os.FileMode customtype becomes uint32. Generated code - Regenerate all api/*.pb.go with protoc-gen-go + protoc-gen-go-grpc, with the swarmkit-specific helpers emitted into *.pb.{deepcopy,storeobject,raftproxy, authwrapper}.go. - The deepcopy plugin copies scalar fields individually instead of *m = *o, so the embedded protoimpl.MessageState mutex is never copied (no go vet copylocks warnings in api/). Application code - Convert gogotypes/proto usage to timestamppb/durationpb/anypb/wrapperspb and google.golang.org/protobuf/proto (Marshal/Unmarshal/Equal/Size). - Adjust for pointer fields (struct literals, nil-safe accessors) and for proto messages no longer being valid map keys / comparable by reflect.DeepEqual (use proto.Equal; PeerKey/portConfigKey helpers for maps). - StoreObject interface: GetMeta()/SetMeta() now use *Meta. Build - Replace protobuild + Protobuild.toml with direct protoc invocations in direct.mk; plugin.proto is generated with protoc-gen-go only. - Remove the orphaned gogo testgen plugin and regenerate the deepcopy/raftproxy plugin test fixtures with the new toolchain. Not included: the swarmd/ sub-module still uses gogotypes and is migrated separately. Full unit/integration suite for the main module passes. Co-Authored-By: Claude Opus 4.8 (1M context) Signed-off-by: Paweł Gronowski --- .gitignore | 4 + Protobuild.toml | 38 - agent/agent.go | 26 +- agent/agent_test.go | 14 +- agent/exec/controller.go | 30 +- agent/exec/controller_test.go | 48 +- agent/secrets/secrets_test.go | 2 +- agent/session.go | 4 +- agent/storage.go | 4 +- agent/storage_test.go | 29 +- agent/task.go | 2 +- agent/task_test.go | 2 +- agent/testutils/fakes.go | 3 +- agent/worker.go | 22 +- agent/worker_test.go | 110 +- api/ca.pb.authwrapper.go | 54 + api/ca.pb.deepcopy.go | 149 + api/ca.pb.go | 2648 +- api/ca.pb.raftproxy.go | 299 + api/ca.proto | 13 +- api/ca_grpc.pb.go | 299 + api/control.pb.authwrapper.go | 363 + api/control.pb.deepcopy.go | 2012 + api/control.pb.go | 30689 +++------------ api/control.pb.raftproxy.go | 1592 + api/control.proto | 13 +- api/control_grpc.pb.go | 1915 + api/deepcopy/copy.go | 26 +- api/defaults/service.go | 21 +- api/dispatcher.pb.authwrapper.go | 67 + api/dispatcher.pb.deepcopy.go | 347 + api/dispatcher.pb.go | 5740 +-- api/dispatcher.pb.raftproxy.go | 346 + api/dispatcher.proto | 15 +- api/dispatcher_grpc.pb.go | 386 + api/equality/equality.go | 44 +- api/equality/equality_test.go | 58 +- api/health.pb.authwrapper.go | 27 + api/health.pb.deepcopy.go | 33 + api/health.pb.go | 879 +- api/health.pb.raftproxy.go | 122 + api/health.proto | 5 +- api/health_grpc.pb.go | 128 + api/logbroker.pb.authwrapper.go | 55 + api/logbroker.pb.deepcopy.go | 252 + api/logbroker.pb.go | 4306 +-- api/logbroker.pb.raftproxy.go | 318 + api/logbroker.proto | 22 +- api/logbroker_grpc.pb.go | 304 + api/naming/naming.go | 11 +- api/naming/naming_test.go | 8 +- api/objects.pb.deepcopy.go | 580 + api/objects.pb.go | 11104 +----- api/objects.pb.storeobject.go | 2915 ++ api/objects.proto | 73 +- api/raft.pb.authwrapper.go | 71 + api/raft.pb.deepcopy.go | 257 + api/raft.pb.go | 5048 +-- api/raft.pb.raftproxy.go | 357 + api/raft.proto | 25 +- api/raft_grpc.pb.go | 359 + api/resource.pb.authwrapper.go | 35 + api/resource.pb.deepcopy.go | 68 + api/resource.pb.go | 1355 +- api/resource.pb.raftproxy.go | 157 + api/resource.proto | 7 +- api/resource_grpc.pb.go | 165 + api/snapshot.pb.deepcopy.go | 153 + api/snapshot.pb.go | 1800 +- api/snapshot.proto | 12 +- api/specs.pb.deepcopy.go | 713 + api/specs.pb.go | 10376 +----- api/specs.proto | 77 +- api/storeobject.go | 17 +- api/types.pb.deepcopy.go | 1943 + api/types.pb.go | 30724 +++------------- api/types.proto | 219 +- api/watch.pb.authwrapper.go | 27 + api/watch.pb.deepcopy.go | 299 + api/watch.pb.go | 5357 +-- api/watch.pb.raftproxy.go | 138 + api/watch.proto | 38 +- api/watch_grpc.pb.go | 136 + ca/certificates_test.go | 27 +- ca/config_test.go | 4 +- ca/reconciler.go | 6 +- ca/server.go | 56 +- ca/server_test.go | 53 +- ca/testutils/cautils.go | 30 +- cli/external_ca.go | 2 +- cli/external_ca_test.go | 2 +- cmd/proto-name-fix/main.go | 108 + cmd/protoc-gen-gogoswarm/customnameid.go | 57 - cmd/protoc-gen-gogoswarm/main.go | 36 - cmd/protoc-gen-goswarm/main.go | 148 + cmd/swarm-bench/benchmark.go | 4 +- direct.mk | 72 +- go.mod | 2 +- integration/cluster_test.go | 16 +- integration/integration_test.go | 2 +- internal/protoc-stubs/gogoproto/gogo.proto | 95 + manager/allocator/allocator_test_suite.go | 214 +- .../allocator/allocator_test_suite_linux.go | 12 +- manager/allocator/network.go | 4 +- manager/allocator/network_test.go | 2 +- manager/allocator/networkallocator/inert.go | 4 +- manager/allocator/portallocator.go | 14 +- manager/allocator/portallocator_test.go | 52 +- manager/controlapi/ca_rotation.go | 19 +- manager/controlapi/ca_rotation_test.go | 101 +- manager/controlapi/cluster.go | 83 +- manager/controlapi/cluster_test.go | 137 +- manager/controlapi/config.go | 6 +- manager/controlapi/config_test.go | 29 +- manager/controlapi/extension.go | 2 +- manager/controlapi/extension_test.go | 3 +- manager/controlapi/network.go | 4 +- manager/controlapi/network_test.go | 8 +- manager/controlapi/node.go | 24 +- manager/controlapi/node_test.go | 74 +- manager/controlapi/resource.go | 6 +- manager/controlapi/resource_test.go | 34 +- manager/controlapi/secret.go | 6 +- manager/controlapi/secret_test.go | 31 +- manager/controlapi/server_test.go | 2 +- manager/controlapi/service.go | 92 +- manager/controlapi/service_test.go | 213 +- manager/controlapi/task.go | 2 +- manager/controlapi/task_test.go | 2 +- manager/controlapi/volume.go | 29 +- manager/controlapi/volume_test.go | 63 +- manager/csi/manager_test.go | 44 +- manager/csi/plugin_test.go | 24 +- manager/deallocator/deallocator_test.go | 12 +- manager/dirty.go | 4 + manager/dispatcher/assignments.go | 25 +- manager/dispatcher/assignments_test.go | 20 +- manager/dispatcher/dispatcher.go | 42 +- manager/dispatcher/dispatcher_test.go | 163 +- manager/encryption/encryption.go | 4 +- manager/encryption/fernet.go | 2 +- manager/encryption/fernet_test.go | 2 +- manager/encryption/nacl.go | 2 +- manager/encryption/nacl_test.go | 2 +- manager/keymanager/keymanager.go | 4 +- manager/keymanager/keymanager_test.go | 4 +- manager/logbroker/broker_test.go | 45 +- manager/manager.go | 41 +- manager/manager_test.go | 13 +- manager/metrics/collector.go | 12 +- .../constraintenforcer/constraint_enforcer.go | 14 +- .../constraint_enforcer_test.go | 78 +- manager/orchestrator/global/global.go | 20 +- manager/orchestrator/global/global_test.go | 142 +- .../orchestrator/jobs/global/reconciler.go | 18 +- .../jobs/global/reconciler_test.go | 41 +- ...rchestrator_controlapi_integration_test.go | 7 +- .../jobs/orchestrator_restart_test.go | 12 +- .../orchestrator/jobs/orchestrator_test.go | 40 +- .../jobs/replicated/reconciler.go | 10 +- .../jobs/replicated/reconciler_test.go | 16 +- manager/orchestrator/replicated/drain_test.go | 60 +- .../replicated/replicated_test.go | 159 +- .../orchestrator/replicated/restart_test.go | 73 +- manager/orchestrator/replicated/slot.go | 4 +- .../orchestrator/replicated/update_test.go | 16 +- manager/orchestrator/restart/restart.go | 80 +- manager/orchestrator/service_test.go | 4 +- manager/orchestrator/task.go | 71 +- manager/orchestrator/task_test.go | 37 +- manager/orchestrator/taskinit/init.go | 25 +- .../taskreaper/task_reaper_test.go | 173 +- manager/orchestrator/testutils/testutils.go | 2 +- manager/orchestrator/update/updater.go | 23 +- manager/orchestrator/update/updater_test.go | 93 +- .../volumeenforcer/volume_enforcer_test.go | 8 +- manager/resourceapi/allocator.go | 4 +- manager/role_manager_test.go | 8 +- manager/scheduler/constraint_test.go | 12 +- manager/scheduler/filter.go | 61 +- manager/scheduler/nodeinfo.go | 16 +- manager/scheduler/nodeinfo_test.go | 4 +- manager/scheduler/nodeset_test.go | 20 +- manager/scheduler/scheduler.go | 69 +- manager/scheduler/scheduler_ginkgo_test.go | 88 +- manager/scheduler/scheduler_test.go | 668 +- manager/scheduler/volumes.go | 20 +- manager/scheduler/volumes_test.go | 61 +- manager/state/raft/membership/cluster.go | 2 +- manager/state/raft/membership/cluster_test.go | 9 +- manager/state/raft/raft.go | 44 +- manager/state/raft/raft_test.go | 61 +- manager/state/raft/storage.go | 35 +- manager/state/raft/storage/snapwrap_test.go | 17 +- manager/state/raft/storage/walwrap_test.go | 17 +- manager/state/raft/storage_test.go | 4 +- manager/state/raft/swarm-root-ca.crt | 10 + manager/state/raft/testutils/testutils.go | 17 +- manager/state/raft/transport/peer.go | 5 +- manager/state/store/clusters.go | 4 +- manager/state/store/configs.go | 4 +- manager/state/store/memory.go | 39 +- manager/state/store/memory_test.go | 232 +- manager/state/store/networks.go | 4 +- manager/state/store/nodes.go | 2 +- manager/state/store/secrets.go | 4 +- manager/state/store/services.go | 14 +- manager/state/store/tasks.go | 4 +- manager/state/store/volumes.go | 10 +- manager/watchapi/server_test.go | 4 +- manager/watchapi/watch_test.go | 31 +- node/node.go | 21 +- node/node_test.go | 7 +- proto-name-fix | Bin 0 -> 9397886 bytes .../authenticatedwrapper.go | 231 +- protobuf/plugin/deepcopy/deepcopy.go | 550 +- protobuf/plugin/deepcopy/deepcopytest.go | 112 - .../deepcopy/test/deepcopy.pb.deepcopy.go | 394 + protobuf/plugin/deepcopy/test/deepcopy.pb.go | 3200 +- protobuf/plugin/deepcopy/test/deepcopy.proto | 44 +- .../plugin/deepcopy/test/deepcopy_test.go | 213 + .../plugin/deepcopy/test/deepcopypb_test.go | 1136 - protobuf/plugin/helpers.go | 22 +- protobuf/plugin/naming/naming.go | 165 + protobuf/plugin/plugin.pb.go | 1526 +- protobuf/plugin/plugin.proto | 20 + protobuf/plugin/raftproxy/raftproxy.go | 427 +- .../raftproxy/test/service.pb.authwrapper.go | 56 + .../raftproxy/test/service.pb.deepcopy.go | 135 + protobuf/plugin/raftproxy/test/service.pb.go | 2935 +- .../raftproxy/test/service.pb.raftproxy.go | 406 + .../plugin/raftproxy/test/service_grpc.pb.go | 399 + protobuf/plugin/storeobject/storeobject.go | 1388 +- protobuf/ptypes/timestamp.go | 11 +- protoc-gen-goswarm | Bin 0 -> 12343178 bytes remotes/remotes.go | 57 +- remotes/remotes_test.go | 83 +- swarmd/dockerexec/container_test.go | 36 +- .../dockerexec/controller_integration_test.go | 4 +- swarmd/dockerexec/controller_test.go | 6 +- template/context_test.go | 26 +- template/expand.go | 32 +- template/getter.go | 4 +- template/getter_test.go | 68 +- .../github.com/gogo/protobuf/jsonpb/jsonpb.go | 1435 - .../gogo/protobuf/plugin/compare/compare.go | 580 - .../protobuf/plugin/compare/comparetest.go | 118 - .../plugin/defaultcheck/defaultcheck.go | 133 - .../plugin/description/description.go | 201 - .../plugin/description/descriptiontest.go | 73 - .../protobuf/plugin/embedcheck/embedcheck.go | 200 - .../plugin/enumstringer/enumstringer.go | 104 - .../gogo/protobuf/plugin/equal/equal.go | 694 - .../gogo/protobuf/plugin/equal/equaltest.go | 109 - .../gogo/protobuf/plugin/face/face.go | 233 - .../gogo/protobuf/plugin/face/facetest.go | 82 - .../gogo/protobuf/plugin/gostring/gostring.go | 386 - .../protobuf/plugin/gostring/gostringtest.go | 90 - .../protobuf/plugin/marshalto/marshalto.go | 1140 - .../protobuf/plugin/oneofcheck/oneofcheck.go | 93 - .../gogo/protobuf/plugin/populate/populate.go | 815 - .../gogo/protobuf/plugin/size/size.go | 696 - .../gogo/protobuf/plugin/size/sizetest.go | 134 - .../gogo/protobuf/plugin/stringer/stringer.go | 347 - .../protobuf/plugin/stringer/stringertest.go | 83 - .../gogo/protobuf/plugin/testgen/testgen.go | 608 - .../gogo/protobuf/plugin/union/union.go | 209 - .../gogo/protobuf/plugin/union/uniontest.go | 86 - .../protobuf/plugin/unmarshal/unmarshal.go | 1657 - .../gogo/protobuf/protobuf/Makefile | 65 - .../protobuf/google/protobuf/any.proto | 155 - .../protobuf/google/protobuf/api.proto | 210 - .../google/protobuf/compiler/plugin.proto | 168 - .../protobuf/google/protobuf/descriptor.proto | 885 - .../protobuf/google/protobuf/duration.proto | 116 - .../protobuf/google/protobuf/empty.proto | 52 - .../protobuf/google/protobuf/field_mask.proto | 245 - .../google/protobuf/source_context.proto | 48 - .../protobuf/google/protobuf/struct.proto | 95 - .../protobuf/google/protobuf/timestamp.proto | 138 - .../protobuf/google/protobuf/type.proto | 187 - .../protobuf/google/protobuf/wrappers.proto | 123 - .../protoc-gen-gogo/generator/generator.go | 3444 -- .../protoc-gen-gogo/generator/helper.go | 461 - .../generator/internal/remap/remap.go | 117 - .../protobuf/protoc-gen-gogo/grpc/grpc.go | 536 - .../protobuf/protoc-gen-gogo/plugin/Makefile | 37 - .../protoc-gen-gogo/plugin/plugin.pb.go | 365 - .../gogo/protobuf/sortkeys/sortkeys.go | 101 - vendor/github.com/gogo/protobuf/types/any.go | 140 - .../github.com/gogo/protobuf/types/any.pb.go | 694 - .../github.com/gogo/protobuf/types/api.pb.go | 2134 -- vendor/github.com/gogo/protobuf/types/doc.go | 35 - .../gogo/protobuf/types/duration.go | 100 - .../gogo/protobuf/types/duration.pb.go | 517 - .../gogo/protobuf/types/duration_gogo.go | 100 - .../gogo/protobuf/types/empty.pb.go | 462 - .../gogo/protobuf/types/field_mask.pb.go | 738 - .../gogo/protobuf/types/protosize.go | 34 - .../gogo/protobuf/types/source_context.pb.go | 524 - .../gogo/protobuf/types/struct.pb.go | 2271 -- .../gogo/protobuf/types/timestamp.go | 130 - .../gogo/protobuf/types/timestamp.pb.go | 539 - .../gogo/protobuf/types/timestamp_gogo.go | 94 - .../github.com/gogo/protobuf/types/type.pb.go | 3355 -- .../gogo/protobuf/types/wrappers.pb.go | 2703 -- .../gogo/protobuf/types/wrappers_gogo.go | 300 - .../gogo/protobuf/vanity/command/command.go | 161 - .../github.com/gogo/protobuf/vanity/enum.go | 78 - .../github.com/gogo/protobuf/vanity/field.go | 90 - .../github.com/gogo/protobuf/vanity/file.go | 197 - .../gogo/protobuf/vanity/foreach.go | 125 - vendor/github.com/gogo/protobuf/vanity/msg.go | 154 - .../protobuf/compiler/protogen/protogen.go | 1567 + .../compiler/protogen/protogen_apilevel.go | 173 + .../compiler/protogen/protogen_opaque.go | 110 + .../protobuf/types/dynamicpb/dynamic.go | 718 + .../protobuf/types/dynamicpb/types.go | 180 + .../protobuf/types/pluginpb/plugin.pb.go | 583 + vendor/modules.txt | 28 +- 320 files changed, 46447 insertions(+), 137951 deletions(-) delete mode 100644 Protobuild.toml create mode 100644 api/ca.pb.authwrapper.go create mode 100644 api/ca.pb.deepcopy.go create mode 100644 api/ca.pb.raftproxy.go create mode 100644 api/ca_grpc.pb.go create mode 100644 api/control.pb.authwrapper.go create mode 100644 api/control.pb.deepcopy.go create mode 100644 api/control.pb.raftproxy.go create mode 100644 api/control_grpc.pb.go create mode 100644 api/dispatcher.pb.authwrapper.go create mode 100644 api/dispatcher.pb.deepcopy.go create mode 100644 api/dispatcher.pb.raftproxy.go create mode 100644 api/dispatcher_grpc.pb.go create mode 100644 api/health.pb.authwrapper.go create mode 100644 api/health.pb.deepcopy.go create mode 100644 api/health.pb.raftproxy.go create mode 100644 api/health_grpc.pb.go create mode 100644 api/logbroker.pb.authwrapper.go create mode 100644 api/logbroker.pb.deepcopy.go create mode 100644 api/logbroker.pb.raftproxy.go create mode 100644 api/logbroker_grpc.pb.go create mode 100644 api/objects.pb.deepcopy.go create mode 100644 api/objects.pb.storeobject.go create mode 100644 api/raft.pb.authwrapper.go create mode 100644 api/raft.pb.deepcopy.go create mode 100644 api/raft.pb.raftproxy.go create mode 100644 api/raft_grpc.pb.go create mode 100644 api/resource.pb.authwrapper.go create mode 100644 api/resource.pb.deepcopy.go create mode 100644 api/resource.pb.raftproxy.go create mode 100644 api/resource_grpc.pb.go create mode 100644 api/snapshot.pb.deepcopy.go create mode 100644 api/specs.pb.deepcopy.go create mode 100644 api/types.pb.deepcopy.go create mode 100644 api/watch.pb.authwrapper.go create mode 100644 api/watch.pb.deepcopy.go create mode 100644 api/watch.pb.raftproxy.go create mode 100644 api/watch_grpc.pb.go create mode 100644 cmd/proto-name-fix/main.go delete mode 100644 cmd/protoc-gen-gogoswarm/customnameid.go delete mode 100644 cmd/protoc-gen-gogoswarm/main.go create mode 100644 cmd/protoc-gen-goswarm/main.go create mode 100644 internal/protoc-stubs/gogoproto/gogo.proto create mode 100644 manager/state/raft/swarm-root-ca.crt create mode 100755 proto-name-fix delete mode 100644 protobuf/plugin/deepcopy/deepcopytest.go create mode 100644 protobuf/plugin/deepcopy/test/deepcopy.pb.deepcopy.go create mode 100644 protobuf/plugin/deepcopy/test/deepcopy_test.go delete mode 100644 protobuf/plugin/deepcopy/test/deepcopypb_test.go create mode 100644 protobuf/plugin/naming/naming.go create mode 100644 protobuf/plugin/raftproxy/test/service.pb.authwrapper.go create mode 100644 protobuf/plugin/raftproxy/test/service.pb.deepcopy.go create mode 100644 protobuf/plugin/raftproxy/test/service.pb.raftproxy.go create mode 100644 protobuf/plugin/raftproxy/test/service_grpc.pb.go create mode 100755 protoc-gen-goswarm delete mode 100644 vendor/github.com/gogo/protobuf/jsonpb/jsonpb.go delete mode 100644 vendor/github.com/gogo/protobuf/plugin/compare/compare.go delete mode 100644 vendor/github.com/gogo/protobuf/plugin/compare/comparetest.go delete mode 100644 vendor/github.com/gogo/protobuf/plugin/defaultcheck/defaultcheck.go delete mode 100644 vendor/github.com/gogo/protobuf/plugin/description/description.go delete mode 100644 vendor/github.com/gogo/protobuf/plugin/description/descriptiontest.go delete mode 100644 vendor/github.com/gogo/protobuf/plugin/embedcheck/embedcheck.go delete mode 100644 vendor/github.com/gogo/protobuf/plugin/enumstringer/enumstringer.go delete mode 100644 vendor/github.com/gogo/protobuf/plugin/equal/equal.go delete mode 100644 vendor/github.com/gogo/protobuf/plugin/equal/equaltest.go delete mode 100644 vendor/github.com/gogo/protobuf/plugin/face/face.go delete mode 100644 vendor/github.com/gogo/protobuf/plugin/face/facetest.go delete mode 100644 vendor/github.com/gogo/protobuf/plugin/gostring/gostring.go delete mode 100644 vendor/github.com/gogo/protobuf/plugin/gostring/gostringtest.go delete mode 100644 vendor/github.com/gogo/protobuf/plugin/marshalto/marshalto.go delete mode 100644 vendor/github.com/gogo/protobuf/plugin/oneofcheck/oneofcheck.go delete mode 100644 vendor/github.com/gogo/protobuf/plugin/populate/populate.go delete mode 100644 vendor/github.com/gogo/protobuf/plugin/size/size.go delete mode 100644 vendor/github.com/gogo/protobuf/plugin/size/sizetest.go delete mode 100644 vendor/github.com/gogo/protobuf/plugin/stringer/stringer.go delete mode 100644 vendor/github.com/gogo/protobuf/plugin/stringer/stringertest.go delete mode 100644 vendor/github.com/gogo/protobuf/plugin/testgen/testgen.go delete mode 100644 vendor/github.com/gogo/protobuf/plugin/union/union.go delete mode 100644 vendor/github.com/gogo/protobuf/plugin/union/uniontest.go delete mode 100644 vendor/github.com/gogo/protobuf/plugin/unmarshal/unmarshal.go delete mode 100644 vendor/github.com/gogo/protobuf/protobuf/Makefile delete mode 100644 vendor/github.com/gogo/protobuf/protobuf/google/protobuf/any.proto delete mode 100644 vendor/github.com/gogo/protobuf/protobuf/google/protobuf/api.proto delete mode 100644 vendor/github.com/gogo/protobuf/protobuf/google/protobuf/compiler/plugin.proto delete mode 100644 vendor/github.com/gogo/protobuf/protobuf/google/protobuf/descriptor.proto delete mode 100644 vendor/github.com/gogo/protobuf/protobuf/google/protobuf/duration.proto delete mode 100644 vendor/github.com/gogo/protobuf/protobuf/google/protobuf/empty.proto delete mode 100644 vendor/github.com/gogo/protobuf/protobuf/google/protobuf/field_mask.proto delete mode 100644 vendor/github.com/gogo/protobuf/protobuf/google/protobuf/source_context.proto delete mode 100644 vendor/github.com/gogo/protobuf/protobuf/google/protobuf/struct.proto delete mode 100644 vendor/github.com/gogo/protobuf/protobuf/google/protobuf/timestamp.proto delete mode 100644 vendor/github.com/gogo/protobuf/protobuf/google/protobuf/type.proto delete mode 100644 vendor/github.com/gogo/protobuf/protobuf/google/protobuf/wrappers.proto delete mode 100644 vendor/github.com/gogo/protobuf/protoc-gen-gogo/generator/generator.go delete mode 100644 vendor/github.com/gogo/protobuf/protoc-gen-gogo/generator/helper.go delete mode 100644 vendor/github.com/gogo/protobuf/protoc-gen-gogo/generator/internal/remap/remap.go delete mode 100644 vendor/github.com/gogo/protobuf/protoc-gen-gogo/grpc/grpc.go delete mode 100644 vendor/github.com/gogo/protobuf/protoc-gen-gogo/plugin/Makefile delete mode 100644 vendor/github.com/gogo/protobuf/protoc-gen-gogo/plugin/plugin.pb.go delete mode 100644 vendor/github.com/gogo/protobuf/sortkeys/sortkeys.go delete mode 100644 vendor/github.com/gogo/protobuf/types/any.go delete mode 100644 vendor/github.com/gogo/protobuf/types/any.pb.go delete mode 100644 vendor/github.com/gogo/protobuf/types/api.pb.go delete mode 100644 vendor/github.com/gogo/protobuf/types/doc.go delete mode 100644 vendor/github.com/gogo/protobuf/types/duration.go delete mode 100644 vendor/github.com/gogo/protobuf/types/duration.pb.go delete mode 100644 vendor/github.com/gogo/protobuf/types/duration_gogo.go delete mode 100644 vendor/github.com/gogo/protobuf/types/empty.pb.go delete mode 100644 vendor/github.com/gogo/protobuf/types/field_mask.pb.go delete mode 100644 vendor/github.com/gogo/protobuf/types/protosize.go delete mode 100644 vendor/github.com/gogo/protobuf/types/source_context.pb.go delete mode 100644 vendor/github.com/gogo/protobuf/types/struct.pb.go delete mode 100644 vendor/github.com/gogo/protobuf/types/timestamp.go delete mode 100644 vendor/github.com/gogo/protobuf/types/timestamp.pb.go delete mode 100644 vendor/github.com/gogo/protobuf/types/timestamp_gogo.go delete mode 100644 vendor/github.com/gogo/protobuf/types/type.pb.go delete mode 100644 vendor/github.com/gogo/protobuf/types/wrappers.pb.go delete mode 100644 vendor/github.com/gogo/protobuf/types/wrappers_gogo.go delete mode 100644 vendor/github.com/gogo/protobuf/vanity/command/command.go delete mode 100644 vendor/github.com/gogo/protobuf/vanity/enum.go delete mode 100644 vendor/github.com/gogo/protobuf/vanity/field.go delete mode 100644 vendor/github.com/gogo/protobuf/vanity/file.go delete mode 100644 vendor/github.com/gogo/protobuf/vanity/foreach.go delete mode 100644 vendor/github.com/gogo/protobuf/vanity/msg.go create mode 100644 vendor/google.golang.org/protobuf/compiler/protogen/protogen.go create mode 100644 vendor/google.golang.org/protobuf/compiler/protogen/protogen_apilevel.go create mode 100644 vendor/google.golang.org/protobuf/compiler/protogen/protogen_opaque.go create mode 100644 vendor/google.golang.org/protobuf/types/dynamicpb/dynamic.go create mode 100644 vendor/google.golang.org/protobuf/types/dynamicpb/types.go create mode 100644 vendor/google.golang.org/protobuf/types/pluginpb/plugin.pb.go diff --git a/.gitignore b/.gitignore index 097fd203b0..a771ddb7f8 100644 --- a/.gitignore +++ b/.gitignore @@ -34,3 +34,7 @@ bin/swarmkitstate # dev sync, if used /.docker-sync/ + +# transient protobuf rename map produced by protoc-gen-goswarm and consumed by +# proto-name-fix during `make protos`; regenerated every time, not source. +/rename_map.json diff --git a/Protobuild.toml b/Protobuild.toml deleted file mode 100644 index afbb7dc669..0000000000 --- a/Protobuild.toml +++ /dev/null @@ -1,38 +0,0 @@ -version = "unstable" -generator = "gogoswarm" -plugins = ["grpc", "deepcopy", "storeobject", "raftproxy", "authenticatedwrapper"] - -# Control protoc include paths. Below are usually some good defaults, but feel -# free to try it without them if it works for your project. -[includes] - # Include paths that will be added before all others. Typically, you want to - # treat the root of the project as an include, but this may not be necessary. - before = ["."] - - # Paths that should be treated as include roots in relation to the vendor - # directory. These will be calculated with the vendor directory nearest the - # target package. - vendored = ["github.com/gogo/protobuf"] - - # Paths that will be added untouched to the end of the includes. We use - # `/usr/local/include` to pickup the common install location of protobuf. - # This is the default. - after = ["/usr/local/include"] - -[importpath] - -# This section map protobuf imports to Go packages. These will become -# `-M` directives in the call to the go protobuf generator. -[packages] - "gogoproto/gogo.proto" = "github.com/gogo/protobuf/gogoproto" - "google/protobuf/any.proto" = "github.com/gogo/protobuf/types" - "google/protobuf/descriptor.proto" = "github.com/gogo/protobuf/protoc-gen-gogo/descriptor" - "google/protobuf/field_mask.proto" = "github.com/gogo/protobuf/types" - "google/protobuf/timestamp.proto" = "github.com/gogo/protobuf/types" - "google/protobuf/duration.proto" = "github.com/gogo/protobuf/types" - "google/protobuf/wrappers.proto" = "github.com/gogo/protobuf/types" - "github.com/docker/swarmkit/protobuf/plugin/plugin.proto" = "github.com/moby/swarmkit/v2/protobuf/plugin" - -[[descriptors]] -prefix = "github.com/docker/swarmkit/api" -target = "api/api.pb.txt" diff --git a/agent/agent.go b/agent/agent.go index 60df8a602c..35af5f9cbe 100644 --- a/agent/agent.go +++ b/agent/agent.go @@ -4,13 +4,15 @@ import ( "bytes" "context" "math/rand" - "reflect" "sync" "time" + "google.golang.org/protobuf/proto" + "github.com/moby/swarmkit/v2/agent/exec" "github.com/moby/swarmkit/v2/api" "github.com/moby/swarmkit/v2/log" + "github.com/moby/swarmkit/v2/remotes" "github.com/pkg/errors" ) @@ -249,7 +251,7 @@ func (a *Agent) run(ctx context.Context) { // if the node description has changed, update it to the new one // and close the session. The old session will be stopped and a // new one will be created with the updated description - if !reflect.DeepEqual(nodeDescription, newNodeDescription) { + if !proto.Equal(nodeDescription, newNodeDescription) { nodeDescription = newNodeDescription // close the session log.G(ctx).Info("agent: found node update") @@ -414,14 +416,14 @@ func (a *Agent) run(ctx context.Context) { } func (a *Agent) handleSessionMessage(ctx context.Context, message *api.SessionMessage, nti *api.NodeTLSInfo) error { - seen := map[api.Peer]struct{}{} + seen := map[remotes.PeerKey]struct{}{} for _, manager := range message.Managers { - if manager.Peer.Addr == "" { + if manager.Peer == nil || manager.Peer.Addr == "" { continue } a.config.ConnBroker.Remotes().Observe(*manager.Peer, int(manager.Weight)) - seen[*manager.Peer] = struct{}{} + seen[remotes.ToPeerKey(*manager.Peer)] = struct{}{} } var changes *NodeChanges @@ -447,9 +449,9 @@ func (a *Agent) handleSessionMessage(ctx context.Context, message *api.SessionMe } // prune managers not in list. - for peer := range a.config.ConnBroker.Remotes().Weights() { - if _, ok := seen[peer]; !ok { - a.config.ConnBroker.Remotes().Remove(peer) + for pkey := range a.config.ConnBroker.Remotes().Weights() { + if _, ok := seen[pkey]; !ok { + a.config.ConnBroker.Remotes().Remove(remotes.FromPeerKey(pkey)) } } @@ -620,7 +622,7 @@ func (a *Agent) Publisher(ctx context.Context, subscriptionID string) (exec.LogP return publisher.Send(&api.PublishLogsMessage{ SubscriptionID: subscriptionID, - Messages: []api.LogMessage{message}, + Messages: []*api.LogMessage{&message}, }) }), func() { sendCloseMsg() @@ -649,8 +651,8 @@ func (a *Agent) nodeDescriptionWithHostname(ctx context.Context, tlsInfo *api.No func nodesEqual(a, b *api.Node) bool { a, b = a.Copy(), b.Copy() - a.Status, b.Status = api.NodeStatus{}, api.NodeStatus{} - a.Meta, b.Meta = api.Meta{}, api.Meta{} + a.Status, b.Status = nil, nil + a.Meta, b.Meta = nil, nil - return reflect.DeepEqual(a, b) + return proto.Equal(a, b) } diff --git a/agent/agent_test.go b/agent/agent_test.go index f514f757d6..97d4a091d9 100644 --- a/agent/agent_test.go +++ b/agent/agent_test.go @@ -12,6 +12,8 @@ import ( "time" "google.golang.org/grpc" + + "google.golang.org/protobuf/proto" "google.golang.org/grpc/credentials" events "github.com/docker/go-events" @@ -263,7 +265,7 @@ func TestSessionRestartedOnNodeDescriptionChange(t *testing.T) { } return nil }, 2*time.Second)) - require.NotEqual(t, currSession, gotSession) + require.False(t, proto.Equal(currSession, gotSession), "sessions should be different") require.NotNil(t, gotSession.Description) require.Equal(t, "testAgent", gotSession.Description.Hostname) require.True(t, gotSession.Description.FIPS) @@ -273,7 +275,7 @@ func TestSessionRestartedOnNodeDescriptionChange(t *testing.T) { tlsCh <- gotSession.Description.TLSInfo time.Sleep(1 * time.Second) gotSession, closedSessions = tester.dispatcher.GetSessions() - require.Equal(t, currSession, gotSession) + require.True(t, proto.Equal(currSession, gotSession), "sessions should be equal") require.Len(t, closedSessions, 1) newTLSInfo := &api.NodeTLSInfo{ @@ -292,10 +294,10 @@ func TestSessionRestartedOnNodeDescriptionChange(t *testing.T) { } return nil }, 2*time.Second)) - require.NotEqual(t, currSession, gotSession) + require.False(t, proto.Equal(currSession, gotSession), "sessions should be different") require.NotNil(t, gotSession.Description) require.Equal(t, "testAgent", gotSession.Description.Hostname) - require.Equal(t, newTLSInfo, gotSession.Description.TLSInfo) + require.True(t, proto.Equal(newTLSInfo, gotSession.Description.TLSInfo), "TLSInfo should match") require.True(t, gotSession.Description.FIPS) } @@ -575,10 +577,10 @@ type fakeRemotes struct { peer api.Peer } -func (f *fakeRemotes) Weights() map[api.Peer]int { +func (f *fakeRemotes) Weights() map[remotes.PeerKey]int { f.mu.Lock() defer f.mu.Unlock() - return map[api.Peer]int{f.peer: 1} + return map[remotes.PeerKey]int{remotes.ToPeerKey(f.peer): 1} } func (f *fakeRemotes) Select(...string) (api.Peer, error) { diff --git a/agent/exec/controller.go b/agent/exec/controller.go index ef0a3a4a7b..5b9cc6f39e 100644 --- a/agent/exec/controller.go +++ b/agent/exec/controller.go @@ -94,9 +94,16 @@ type PortStatuser interface { // error merely reports the failure at getting the controller. func Resolve(ctx context.Context, task *api.Task, executor Executor) (Controller, *api.TaskStatus, error) { status := task.Status.Copy() + if status == nil { + status = &api.TaskStatus{} + } defer func() { - logStateChange(ctx, task.DesiredState, task.Status.State, status.State) + taskStatusState := api.TaskState(0) + if task.Status != nil { + taskStatusState = task.Status.State + } + logStateChange(ctx, task.DesiredState, taskStatusState, status.State) }() ctlr, err := executor.Controller(task) @@ -109,12 +116,16 @@ func Resolve(ctx context.Context, task *api.Task, executor Executor) (Controller // before the task has been started, we consider it a rejection. // if task is running, consider the task has failed // otherwise keep the existing state - if task.Status.State < api.TaskStateStarting { + taskState := api.TaskState(0) + if task.Status != nil { + taskState = task.Status.State + } + if taskState < api.TaskStateStarting { status.State = api.TaskStateRejected - } else if task.Status.State <= api.TaskStateRunning { + } else if taskState <= api.TaskStateRunning { status.State = api.TaskStateFailed } - } else if task.Status.State < api.TaskStateAccepted { + } else if task.GetStatus().GetState() < api.TaskStateAccepted { // we always want to proceed to accepted when we resolve the controller status.Message = "accepted" status.State = api.TaskStateAccepted @@ -141,6 +152,9 @@ func Resolve(ctx context.Context, task *api.Task, executor Executor) (Controller // action. func Do(ctx context.Context, task *api.Task, ctlr Controller) (*api.TaskStatus, error) { status := task.Status.Copy() + if status == nil { + status = &api.TaskStatus{} + } // stay in the current state. noop := func(_ ...error) (*api.TaskStatus, error) { @@ -224,9 +238,13 @@ func Do(ctx context.Context, task *api.Task, ctlr Controller) (*api.TaskStatus, // below, we have several callbacks that are run after the state transition // is completed. defer func() { - logStateChange(ctx, task.DesiredState, task.Status.State, status.State) + taskStatusState := api.TaskState(0) + if task.Status != nil { + taskStatusState = task.Status.State + } + logStateChange(ctx, task.DesiredState, taskStatusState, status.State) - if !equality.TaskStatusesEqualStable(status, &task.Status) { + if !equality.TaskStatusesEqualStable(status, task.Status) { status.Timestamp = ptypes.MustTimestampProto(time.Now()) } }() diff --git a/agent/exec/controller_test.go b/agent/exec/controller_test.go index 666514d921..9a6601c3e9 100644 --- a/agent/exec/controller_test.go +++ b/agent/exec/controller_test.go @@ -7,7 +7,8 @@ import ( "runtime" "testing" - gogotypes "github.com/gogo/protobuf/types" + "google.golang.org/protobuf/proto" + "github.com/moby/swarmkit/v2/api" "github.com/moby/swarmkit/v2/log" "github.com/stretchr/testify/assert" @@ -25,11 +26,11 @@ func TestResolve(t *testing.T) { assert.Equal(t, api.TaskStateAccepted, status.State) assert.Equal(t, "accepted", status.Message) - task.Status = *status + task.Status = status // now, we get no status update. _, status, err = Resolve(ctx, task, executor) assert.NoError(t, err) - assert.Equal(t, task.Status, *status) + assert.True(t, proto.Equal(task.Status, status)) // now test an error causing rejection executor.err = errors.New("some error") @@ -53,11 +54,11 @@ func TestResolve(t *testing.T) { // task is now foobared, from a reporting perspective but we can now // resolve the controller for some reason. Ensure the task state isn't // touched. - task.Status = *status + task.Status = status executor.err = nil _, status, err = Resolve(ctx, task, executor) assert.NoError(t, err) - assert.Equal(t, task.Status, *status) + assert.True(t, proto.Equal(task.Status, status)) } func TestAcceptPrepare(t *testing.T) { @@ -81,14 +82,14 @@ func TestAcceptPrepare(t *testing.T) { }) // Actually prepare the task. - task.Status = *status + task.Status = status status = checkDo(ctx, t, task, ctlr, &api.TaskStatus{ State: api.TaskStatePreparing, Message: "preparing", }) - task.Status = *status + task.Status = status checkDo(ctx, t, task, ctlr, &api.TaskStatus{ State: api.TaskStateReady, @@ -116,14 +117,14 @@ func TestPrepareAlready(t *testing.T) { }) // Actually prepare the task. - task.Status = *status + task.Status = status status = checkDo(ctx, t, task, ctlr, &api.TaskStatus{ State: api.TaskStatePreparing, Message: "preparing", }) - task.Status = *status + task.Status = status checkDo(ctx, t, task, ctlr, &api.TaskStatus{ State: api.TaskStateReady, @@ -151,14 +152,14 @@ func TestPrepareFailure(t *testing.T) { }) // Actually prepare the task. - task.Status = *status + task.Status = status status = checkDo(ctx, t, task, ctlr, &api.TaskStatus{ State: api.TaskStatePreparing, Message: "preparing", }) - task.Status = *status + task.Status = status checkDo(ctx, t, task, ctlr, &api.TaskStatus{ State: api.TaskStateRejected, @@ -197,7 +198,7 @@ func TestReadyRunning(t *testing.T) { Message: "starting", }) - task.Status = *status + task.Status = status // start the container status = checkDo(ctx, t, task, ctlr, &api.TaskStatus{ @@ -205,7 +206,7 @@ func TestReadyRunning(t *testing.T) { Message: "started", }) - task.Status = *status + task.Status = status // resume waiting status = checkDo(ctx, t, task, ctlr, &api.TaskStatus{ @@ -213,7 +214,7 @@ func TestReadyRunning(t *testing.T) { Message: "started", }, ErrTaskRetry) - task.Status = *status + task.Status = status // wait and cancel dctlr := &StatuserController{ StubController: ctlr, @@ -256,7 +257,7 @@ func TestReadyRunningExitFailure(t *testing.T) { Message: "starting", }) - task.Status = *status + task.Status = status // start the container status = checkDo(ctx, t, task, ctlr, &api.TaskStatus{ @@ -264,7 +265,7 @@ func TestReadyRunningExitFailure(t *testing.T) { Message: "started", }) - task.Status = *status + task.Status = status dctlr := &StatuserController{ StubController: ctlr, cstatus: &api.ContainerStatus{ @@ -313,7 +314,7 @@ func TestAlreadyStarted(t *testing.T) { Message: "starting", }) - task.Status = *status + task.Status = status // start the container status = checkDo(ctx, t, task, ctlr, &api.TaskStatus{ @@ -321,14 +322,14 @@ func TestAlreadyStarted(t *testing.T) { Message: "started", }) - task.Status = *status + task.Status = status status = checkDo(ctx, t, task, ctlr, &api.TaskStatus{ State: api.TaskStateRunning, Message: "started", }, ErrTaskRetry) - task.Status = *status + task.Status = status // now take the real exit to test wait cancelling. dctlr := &StatuserController{ @@ -467,11 +468,8 @@ func checkDo(ctx context.Context, t *testing.T, task *api.Task, ctlr Controller, // if the status and task.Status are different, make sure new timestamp is greater if task.Status.Timestamp != nil { // crazy timestamp validation follows - previous, err := gogotypes.TimestampFromProto(task.Status.Timestamp) - assert.Nil(t, err) - - current, err := gogotypes.TimestampFromProto(status.Timestamp) - assert.Nil(t, err) + previous := task.Status.Timestamp.AsTime() + current := status.Timestamp.AsTime() if current.Before(previous) { // ensure that the timestamp always proceeds forward @@ -489,7 +487,7 @@ func checkDo(ctx context.Context, t *testing.T, task *api.Task, ctlr Controller, func newTestTask(t *testing.T, state, desired api.TaskState) *api.Task { return &api.Task{ ID: "test-task", - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: state, }, DesiredState: desired, diff --git a/agent/secrets/secrets_test.go b/agent/secrets/secrets_test.go index 810c136a10..a0bfe41f8a 100644 --- a/agent/secrets/secrets_test.go +++ b/agent/secrets/secrets_test.go @@ -88,7 +88,7 @@ func TestTaskRestrictedSecretsProvider(t *testing.T) { t.Logf("secretID=%s, taskID=%s, taskSpecificID=%s", originalSecretID, taskID, taskSpecificID) secretsManager.Add(api.Secret{ ID: testCase.secretID, - Spec: api.SecretSpec{ + Spec: &api.SecretSpec{ Data: []byte(testCase.value), }, }) diff --git a/agent/session.go b/agent/session.go index 6a510513eb..2191c50c8f 100644 --- a/agent/session.go +++ b/agent/session.go @@ -206,7 +206,7 @@ func (s *session) heartbeat(ctx context.Context) error { log.G(ctx).WithFields(fields).Debugf("heartbeat successful to manager %v, next heartbeat period: %v", s.conn.Peer(), resp.Period) - heartbeat.Reset(resp.Period) + heartbeat.Reset(resp.Period.AsDuration()) case <-s.closed: return errSessionClosed case <-ctx.Done(): @@ -339,7 +339,7 @@ func (s *session) watch(ctx context.Context) error { Task: t, }, }, - Action: api.AssignmentChange_AssignmentActionUpdate, + Action: api.AssignmentActionUpdate, } assignmentChanges = append(assignmentChanges, taskChange) diff --git a/agent/storage.go b/agent/storage.go index 8d75a3812d..6d92268386 100644 --- a/agent/storage.go +++ b/agent/storage.go @@ -1,7 +1,7 @@ package agent import ( - "github.com/gogo/protobuf/proto" + "google.golang.org/protobuf/proto" "github.com/moby/swarmkit/v2/api" bolt "go.etcd.io/bbolt" ) @@ -119,7 +119,7 @@ func WalkTaskStatus(tx *bolt.Tx, fn func(id string, status *api.TaskStatus) erro func PutTask(tx *bolt.Tx, task *api.Task) error { return withCreateTaskBucketIfNotExists(tx, task.ID, func(bkt *bolt.Bucket) error { taskCopy := *task - taskCopy.Status = api.TaskStatus{} // blank out the status. + taskCopy.Status = nil // blank out the status. p, err := proto.Marshal(&taskCopy) if err != nil { diff --git a/agent/storage_test.go b/agent/storage_test.go index a0d9025ce4..7cf5d480cd 100644 --- a/agent/storage_test.go +++ b/agent/storage_test.go @@ -7,6 +7,8 @@ import ( "sort" "testing" + "google.golang.org/protobuf/proto" + "github.com/moby/swarmkit/v2/api" "github.com/moby/swarmkit/v2/identity" "github.com/stretchr/testify/assert" @@ -39,7 +41,7 @@ func TestStoragePutGet(t *testing.T) { for i, task := range tasks { assert.NoError(t, PutTask(tx, task)) // remove status to make comparison work - tasks[i].Status = api.TaskStatus{} + tasks[i].Status = nil } return nil @@ -49,7 +51,7 @@ func TestStoragePutGet(t *testing.T) { for _, task := range tasks { retrieved, err := GetTask(tx, task.ID) assert.NoError(t, err) - assert.Equal(t, task, retrieved) + assert.True(t, proto.Equal(task, retrieved), "task %s not equal", task.ID) } return nil @@ -66,7 +68,7 @@ func TestStoragePutGetStatusAssigned(t *testing.T) { assert.NoError(t, db.Update(func(tx *bolt.Tx) error { for _, task := range tasks { assert.NoError(t, PutTask(tx, task)) - assert.NoError(t, PutTaskStatus(tx, task.ID, &task.Status)) + assert.NoError(t, PutTaskStatus(tx, task.ID, task.Status)) assert.NoError(t, SetTaskAssignment(tx, task.ID, true)) } @@ -77,13 +79,13 @@ func TestStoragePutGetStatusAssigned(t *testing.T) { for _, task := range tasks { status, err := GetTaskStatus(tx, task.ID) assert.NoError(t, err) - assert.Equal(t, &task.Status, status) + assert.True(t, proto.Equal(task.Status, status), "status mismatch for task %s", task.ID) retrieved, err := GetTask(tx, task.ID) assert.NoError(t, err) - task.Status = api.TaskStatus{} - assert.Equal(t, task, retrieved) + task.Status = nil + assert.True(t, proto.Equal(task, retrieved), "task %s not equal", task.ID) assert.True(t, TaskAssigned(tx, task.ID)) } @@ -94,8 +96,11 @@ func TestStoragePutGetStatusAssigned(t *testing.T) { // set evens to unassigned and updates all states plus one assert.NoError(t, db.Update(func(tx *bolt.Tx) error { for i, task := range tasks { + if task.Status == nil { + task.Status = &api.TaskStatus{} + } task.Status.State++ - assert.NoError(t, PutTaskStatus(tx, task.ID, &task.Status)) + assert.NoError(t, PutTaskStatus(tx, task.ID, task.Status)) if i%2 == 0 { assert.NoError(t, SetTaskAssignment(tx, task.ID, false)) @@ -109,13 +114,13 @@ func TestStoragePutGetStatusAssigned(t *testing.T) { for i, task := range tasks { status, err := GetTaskStatus(tx, task.ID) assert.NoError(t, err) - assert.Equal(t, &task.Status, status) + assert.True(t, proto.Equal(task.Status, status), "status mismatch for task %s", task.ID) retrieved, err := GetTask(tx, task.ID) assert.NoError(t, err) - task.Status = api.TaskStatus{} - assert.Equal(t, task, retrieved) + task.Status = nil + assert.True(t, proto.Equal(task, retrieved), "task %s not equal", task.ID) if i%2 == 0 { assert.False(t, TaskAssigned(tx, task.ID)) @@ -144,8 +149,8 @@ func genTask() *api.Task { return &api.Task{ ID: identity.NewID(), ServiceID: identity.NewID(), - Status: *genTaskStatus(), - Spec: api.TaskSpec{ + Status: genTaskStatus(), + Spec: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{ Image: "foo", diff --git a/agent/task.go b/agent/task.go index a000410445..b01bdf6e59 100644 --- a/agent/task.go +++ b/agent/task.go @@ -184,7 +184,7 @@ func (tm *taskManager) run(ctx context.Context) { default: } case status := <-statusq: - tm.task.Status = *status + tm.task.Status = status case task := <-tm.updateq: if equality.TasksEqualStable(task, tm.task) { continue // ignore the update diff --git a/agent/task_test.go b/agent/task_test.go index e735a2db42..582636ba63 100644 --- a/agent/task_test.go +++ b/agent/task_test.go @@ -20,7 +20,7 @@ func init() { func TestTaskManager(t *testing.T) { ctx := context.Background() task := &api.Task{ - Status: api.TaskStatus{}, + Status: &api.TaskStatus{}, DesiredState: api.TaskStateAccepted, } accepted := make(chan struct{}) diff --git a/agent/testutils/fakes.go b/agent/testutils/fakes.go index d6710326dd..f374b92114 100644 --- a/agent/testutils/fakes.go +++ b/agent/testutils/fakes.go @@ -10,6 +10,7 @@ import ( "time" "google.golang.org/grpc" + "google.golang.org/protobuf/types/known/durationpb" "github.com/moby/swarmkit/v2/agent/exec" "github.com/moby/swarmkit/v2/api" @@ -155,7 +156,7 @@ func (m *MockDispatcher) Assignments(_ *api.AssignmentsRequest, stream api.Dispa // Heartbeat always successfully heartbeats func (m *MockDispatcher) Heartbeat(context.Context, *api.HeartbeatRequest) (*api.HeartbeatResponse, error) { - return &api.HeartbeatResponse{Period: time.Second * 5}, nil + return &api.HeartbeatResponse{Period: durationpb.New(time.Second * 5)}, nil } // Session allows a session to be established, and sends the node info diff --git a/agent/worker.go b/agent/worker.go index a004a44a13..ad5d8d87c7 100644 --- a/agent/worker.go +++ b/agent/worker.go @@ -106,7 +106,7 @@ func (w *worker) Init(ctx context.Context) error { return nil } - task.Status = *status // merges the status into the task, ensuring we start at the right point. + task.Status = status // merges the status into the task, ensuring we start at the right point. return w.startTask(ctx, tx, task) }) }) @@ -203,9 +203,9 @@ func reconcileTaskState(ctx context.Context, w *worker, assignments []*api.Assig for _, a := range assignments { if t := a.Assignment.GetTask(); t != nil { switch a.Action { - case api.AssignmentChange_AssignmentActionUpdate: + case api.AssignmentActionUpdate: updatedTasks = append(updatedTasks, t) - case api.AssignmentChange_AssignmentActionRemove: + case api.AssignmentActionRemove: removedTasks = append(removedTasks, t) } } @@ -252,11 +252,11 @@ func reconcileTaskState(ctx context.Context, w *worker, assignments []*api.Assig } // never seen before, register the provided status - if err := PutTaskStatus(tx, task.ID, &task.Status); err != nil { + if err := PutTaskStatus(tx, task.ID, task.Status); err != nil { return err } } else { - task.Status = *status + task.Status = status } w.startTask(ctx, tx, task) } @@ -339,9 +339,9 @@ func reconcileSecrets(ctx context.Context, w *worker, assignments []*api.Assignm for _, a := range assignments { if s := a.Assignment.GetSecret(); s != nil { switch a.Action { - case api.AssignmentChange_AssignmentActionUpdate: + case api.AssignmentActionUpdate: updatedSecrets = append(updatedSecrets, *s) - case api.AssignmentChange_AssignmentActionRemove: + case api.AssignmentActionRemove: removedSecrets = append(removedSecrets, s.ID) } @@ -382,9 +382,9 @@ func reconcileConfigs(ctx context.Context, w *worker, assignments []*api.Assignm for _, a := range assignments { if r := a.Assignment.GetConfig(); r != nil { switch a.Action { - case api.AssignmentChange_AssignmentActionUpdate: + case api.AssignmentActionUpdate: updatedConfigs = append(updatedConfigs, *r) - case api.AssignmentChange_AssignmentActionRemove: + case api.AssignmentActionRemove: removedConfigs = append(removedConfigs, r.ID) } @@ -428,9 +428,9 @@ func reconcileVolumes(ctx context.Context, w *worker, assignments []*api.Assignm for _, a := range assignments { if r := a.Assignment.GetVolume(); r != nil { switch a.Action { - case api.AssignmentChange_AssignmentActionUpdate: + case api.AssignmentActionUpdate: updatedVolumes = append(updatedVolumes, *r) - case api.AssignmentChange_AssignmentActionRemove: + case api.AssignmentActionRemove: removedVolumes = append(removedVolumes, *r) } diff --git a/agent/worker_test.go b/agent/worker_test.go index 40de4adc75..ae98f70510 100644 --- a/agent/worker_test.go +++ b/agent/worker_test.go @@ -12,8 +12,24 @@ import ( "github.com/moby/swarmkit/v2/testutils" "github.com/stretchr/testify/assert" bolt "go.etcd.io/bbolt" + "google.golang.org/protobuf/proto" ) +// assertTasksEqual compares two slices of *api.Task using proto.Equal to avoid +// issues with unexported fields in protoimpl.MessageState. +func assertTasksEqual(t *testing.T, expected, actual []*api.Task, msgAndArgs ...interface{}) bool { + t.Helper() + if len(expected) != len(actual) { + return assert.Fail(t, "task slice lengths differ", "expected %d tasks, got %d", len(expected), len(actual)) + } + for i := range expected { + if !proto.Equal(expected[i], actual[i]) { + return assert.Fail(t, "tasks not equal", "tasks at index %d differ: expected %v, got %v", i, expected[i], actual[i]) + } + } + return true +} + type testPublisherProvider struct { } @@ -87,7 +103,7 @@ func TestWorkerAssign(t *testing.T) { Task: &api.Task{ID: "task-1"}, }, }, - Action: api.AssignmentChange_AssignmentActionUpdate, + Action: api.AssignmentActionUpdate, }, { Assignment: &api.Assignment{ @@ -95,7 +111,7 @@ func TestWorkerAssign(t *testing.T) { Secret: &api.Secret{ID: "secret-1"}, }, }, - Action: api.AssignmentChange_AssignmentActionUpdate, + Action: api.AssignmentActionUpdate, }, { Assignment: &api.Assignment{ @@ -103,7 +119,7 @@ func TestWorkerAssign(t *testing.T) { Config: &api.Config{ID: "config-1"}, }, }, - Action: api.AssignmentChange_AssignmentActionUpdate, + Action: api.AssignmentActionUpdate, }, { Assignment: &api.Assignment{ @@ -111,7 +127,7 @@ func TestWorkerAssign(t *testing.T) { Volume: &api.VolumeAssignment{ID: "volumeID1", VolumeID: "volume-1", Driver: &api.Driver{Name: "plugin-1"}}, }, }, - Action: api.AssignmentChange_AssignmentActionUpdate, + Action: api.AssignmentActionUpdate, }, // these should be ignored { @@ -120,7 +136,7 @@ func TestWorkerAssign(t *testing.T) { Secret: &api.Secret{ID: "secret-2"}, }, }, - Action: api.AssignmentChange_AssignmentActionRemove, + Action: api.AssignmentActionRemove, }, { Assignment: &api.Assignment{ @@ -128,7 +144,7 @@ func TestWorkerAssign(t *testing.T) { Task: &api.Task{ID: "task-2"}, }, }, - Action: api.AssignmentChange_AssignmentActionRemove, + Action: api.AssignmentActionRemove, }, { Assignment: &api.Assignment{ @@ -136,7 +152,7 @@ func TestWorkerAssign(t *testing.T) { Config: &api.Config{ID: "config-2"}, }, }, - Action: api.AssignmentChange_AssignmentActionRemove, + Action: api.AssignmentActionRemove, }, { Assignment: &api.Assignment{ @@ -144,7 +160,7 @@ func TestWorkerAssign(t *testing.T) { Volume: &api.VolumeAssignment{ID: "volumeID2", VolumeID: "volume-2", Driver: &api.Driver{Name: "plugin-2"}}, }, }, - Action: api.AssignmentChange_AssignmentActionRemove, + Action: api.AssignmentActionRemove, }, }, expectedTasks: []*api.Task{ @@ -171,7 +187,7 @@ func TestWorkerAssign(t *testing.T) { Task: &api.Task{ID: "task-2"}, }, }, - Action: api.AssignmentChange_AssignmentActionUpdate, + Action: api.AssignmentActionUpdate, }, { Assignment: &api.Assignment{ @@ -179,7 +195,7 @@ func TestWorkerAssign(t *testing.T) { Secret: &api.Secret{ID: "secret-2"}, }, }, - Action: api.AssignmentChange_AssignmentActionUpdate, + Action: api.AssignmentActionUpdate, }, { Assignment: &api.Assignment{ @@ -187,7 +203,7 @@ func TestWorkerAssign(t *testing.T) { Config: &api.Config{ID: "config-2"}, }, }, - Action: api.AssignmentChange_AssignmentActionUpdate, + Action: api.AssignmentActionUpdate, }, { Assignment: &api.Assignment{ @@ -195,7 +211,7 @@ func TestWorkerAssign(t *testing.T) { Volume: &api.VolumeAssignment{ID: "volumeID2", VolumeID: "volume-2", Driver: &api.Driver{Name: "plugin-2"}}, }, }, - Action: api.AssignmentChange_AssignmentActionUpdate, + Action: api.AssignmentActionUpdate, }, }, expectedTasks: []*api.Task{ @@ -241,8 +257,8 @@ func TestWorkerAssign(t *testing.T) { }) })) - assert.Equal(t, testcase.expectedTasks, tasks) - assert.Equal(t, testcase.expectedAssigned, assigned) + assertTasksEqual(t, testcase.expectedTasks, tasks) + assertTasksEqual(t, testcase.expectedAssigned, assigned) for _, secret := range testcase.expectedSecrets { secret, err := executor.Secrets().Get(secret.ID) assert.NoError(t, err) @@ -298,7 +314,7 @@ func TestWorkerWait(t *testing.T) { Task: &api.Task{ID: "task-1"}, }, }, - Action: api.AssignmentChange_AssignmentActionUpdate, + Action: api.AssignmentActionUpdate, }, { Assignment: &api.Assignment{ @@ -306,7 +322,7 @@ func TestWorkerWait(t *testing.T) { Task: &api.Task{ID: "task-2"}, }, }, - Action: api.AssignmentChange_AssignmentActionUpdate, + Action: api.AssignmentActionUpdate, }, { Assignment: &api.Assignment{ @@ -314,7 +330,7 @@ func TestWorkerWait(t *testing.T) { Secret: &api.Secret{ID: "secret-1"}, }, }, - Action: api.AssignmentChange_AssignmentActionUpdate, + Action: api.AssignmentActionUpdate, }, { Assignment: &api.Assignment{ @@ -322,7 +338,7 @@ func TestWorkerWait(t *testing.T) { Config: &api.Config{ID: "config-1"}, }, }, - Action: api.AssignmentChange_AssignmentActionUpdate, + Action: api.AssignmentActionUpdate, }, { Assignment: &api.Assignment{ @@ -330,7 +346,7 @@ func TestWorkerWait(t *testing.T) { Volume: &api.VolumeAssignment{ID: "volumeID1", VolumeID: "volume-1", Driver: &api.Driver{Name: "plugin-1"}}, }, }, - Action: api.AssignmentChange_AssignmentActionUpdate, + Action: api.AssignmentActionUpdate, }, } @@ -372,8 +388,8 @@ func TestWorkerWait(t *testing.T) { }) })) - assert.Equal(t, expectedTasks, tasks) - assert.Equal(t, expectedAssigned, assigned) + assertTasksEqual(t, expectedTasks, tasks) + assertTasksEqual(t, expectedAssigned, assigned) for _, secret := range expectedSecrets { secret, err := executor.Secrets().Get(secret.ID) assert.NoError(t, err) @@ -450,7 +466,7 @@ func TestWorkerUpdate(t *testing.T) { Task: &api.Task{ID: "task-1"}, }, }, - Action: api.AssignmentChange_AssignmentActionUpdate, + Action: api.AssignmentActionUpdate, }, { Assignment: &api.Assignment{ @@ -458,7 +474,7 @@ func TestWorkerUpdate(t *testing.T) { Secret: &api.Secret{ID: "secret-1"}, }, }, - Action: api.AssignmentChange_AssignmentActionUpdate, + Action: api.AssignmentActionUpdate, }, { Assignment: &api.Assignment{ @@ -466,7 +482,7 @@ func TestWorkerUpdate(t *testing.T) { Config: &api.Config{ID: "config-1"}, }, }, - Action: api.AssignmentChange_AssignmentActionUpdate, + Action: api.AssignmentActionUpdate, }, { Assignment: &api.Assignment{ @@ -474,7 +490,7 @@ func TestWorkerUpdate(t *testing.T) { Volume: &api.VolumeAssignment{ID: "volumeID1", VolumeID: "volume-1", Driver: &api.Driver{Name: "plugin-1"}}, }, }, - Action: api.AssignmentChange_AssignmentActionUpdate, + Action: api.AssignmentActionUpdate, }, })) @@ -512,7 +528,7 @@ func TestWorkerUpdate(t *testing.T) { Task: &api.Task{ID: "task-1"}, }, }, - Action: api.AssignmentChange_AssignmentActionUpdate, + Action: api.AssignmentActionUpdate, }, }, expectedTasks: []*api.Task{ @@ -540,7 +556,7 @@ func TestWorkerUpdate(t *testing.T) { Task: &api.Task{ID: "task-2"}, }, }, - Action: api.AssignmentChange_AssignmentActionUpdate, + Action: api.AssignmentActionUpdate, }, { Assignment: &api.Assignment{ @@ -548,7 +564,7 @@ func TestWorkerUpdate(t *testing.T) { Secret: &api.Secret{ID: "secret-2"}, }, }, - Action: api.AssignmentChange_AssignmentActionUpdate, + Action: api.AssignmentActionUpdate, }, { Assignment: &api.Assignment{ @@ -556,7 +572,7 @@ func TestWorkerUpdate(t *testing.T) { Config: &api.Config{ID: "config-2"}, }, }, - Action: api.AssignmentChange_AssignmentActionUpdate, + Action: api.AssignmentActionUpdate, }, { Assignment: &api.Assignment{ @@ -564,7 +580,7 @@ func TestWorkerUpdate(t *testing.T) { Volume: &api.VolumeAssignment{ID: "volumeID2", VolumeID: "volume-2", Driver: &api.Driver{Name: "plugin-2"}}, }, }, - Action: api.AssignmentChange_AssignmentActionUpdate, + Action: api.AssignmentActionUpdate, }, }, expectedTasks: []*api.Task{ @@ -597,7 +613,7 @@ func TestWorkerUpdate(t *testing.T) { Task: &api.Task{ID: "task-1"}, }, }, - Action: api.AssignmentChange_AssignmentActionRemove, + Action: api.AssignmentActionRemove, }, { Assignment: &api.Assignment{ @@ -605,7 +621,7 @@ func TestWorkerUpdate(t *testing.T) { Secret: &api.Secret{ID: "secret-1"}, }, }, - Action: api.AssignmentChange_AssignmentActionRemove, + Action: api.AssignmentActionRemove, }, { Assignment: &api.Assignment{ @@ -613,7 +629,7 @@ func TestWorkerUpdate(t *testing.T) { Secret: &api.Secret{ID: "secret-2"}, }, }, - Action: api.AssignmentChange_AssignmentActionUpdate, + Action: api.AssignmentActionUpdate, }, { Assignment: &api.Assignment{ @@ -621,7 +637,7 @@ func TestWorkerUpdate(t *testing.T) { Config: &api.Config{ID: "config-1"}, }, }, - Action: api.AssignmentChange_AssignmentActionRemove, + Action: api.AssignmentActionRemove, }, { Assignment: &api.Assignment{ @@ -629,7 +645,7 @@ func TestWorkerUpdate(t *testing.T) { Config: &api.Config{ID: "config-2"}, }, }, - Action: api.AssignmentChange_AssignmentActionUpdate, + Action: api.AssignmentActionUpdate, }, { Assignment: &api.Assignment{ @@ -637,7 +653,7 @@ func TestWorkerUpdate(t *testing.T) { Volume: &api.VolumeAssignment{ID: "volumeID1", VolumeID: "volume-1", Driver: &api.Driver{Name: "plugin-1"}}, }, }, - Action: api.AssignmentChange_AssignmentActionRemove, + Action: api.AssignmentActionRemove, }, { Assignment: &api.Assignment{ @@ -645,7 +661,7 @@ func TestWorkerUpdate(t *testing.T) { Volume: &api.VolumeAssignment{ID: "volumeID2", VolumeID: "volume-2", Driver: &api.Driver{Name: "plugin-2"}}, }, }, - Action: api.AssignmentChange_AssignmentActionUpdate, + Action: api.AssignmentActionUpdate, }, }, expectedTasks: []*api.Task{ @@ -673,7 +689,7 @@ func TestWorkerUpdate(t *testing.T) { Task: &api.Task{ID: "task-1"}, }, }, - Action: api.AssignmentChange_AssignmentActionRemove, + Action: api.AssignmentActionRemove, }, { Assignment: &api.Assignment{ @@ -681,7 +697,7 @@ func TestWorkerUpdate(t *testing.T) { Secret: &api.Secret{ID: "secret-1"}, }, }, - Action: api.AssignmentChange_AssignmentActionRemove, + Action: api.AssignmentActionRemove, }, { Assignment: &api.Assignment{ @@ -689,7 +705,7 @@ func TestWorkerUpdate(t *testing.T) { Task: &api.Task{ID: "task-2"}, }, }, - Action: api.AssignmentChange_AssignmentActionRemove, + Action: api.AssignmentActionRemove, }, { Assignment: &api.Assignment{ @@ -697,7 +713,7 @@ func TestWorkerUpdate(t *testing.T) { Secret: &api.Secret{ID: "secret-2"}, }, }, - Action: api.AssignmentChange_AssignmentActionRemove, + Action: api.AssignmentActionRemove, }, { Assignment: &api.Assignment{ @@ -705,7 +721,7 @@ func TestWorkerUpdate(t *testing.T) { Config: &api.Config{ID: "config-1"}, }, }, - Action: api.AssignmentChange_AssignmentActionRemove, + Action: api.AssignmentActionRemove, }, { Assignment: &api.Assignment{ @@ -713,7 +729,7 @@ func TestWorkerUpdate(t *testing.T) { Config: &api.Config{ID: "config-2"}, }, }, - Action: api.AssignmentChange_AssignmentActionRemove, + Action: api.AssignmentActionRemove, }, { Assignment: &api.Assignment{ @@ -721,7 +737,7 @@ func TestWorkerUpdate(t *testing.T) { Volume: &api.VolumeAssignment{ID: "volumeID1", VolumeID: "volume-1", Driver: &api.Driver{Name: "plugin-1"}}, }, }, - Action: api.AssignmentChange_AssignmentActionRemove, + Action: api.AssignmentActionRemove, }, { Assignment: &api.Assignment{ @@ -729,7 +745,7 @@ func TestWorkerUpdate(t *testing.T) { Volume: &api.VolumeAssignment{ID: "volumeID2", VolumeID: "volume-2", Driver: &api.Driver{Name: "plugin-2"}}, }, }, - Action: api.AssignmentChange_AssignmentActionRemove, + Action: api.AssignmentActionRemove, }, }, }, @@ -750,8 +766,8 @@ func TestWorkerUpdate(t *testing.T) { }) })) - assert.Equal(t, testcase.expectedTasks, tasks) - assert.Equal(t, testcase.expectedAssigned, assigned) + assertTasksEqual(t, testcase.expectedTasks, tasks) + assertTasksEqual(t, testcase.expectedAssigned, assigned) for _, secret := range testcase.expectedSecrets { secret, err := executor.Secrets().Get(secret.ID) assert.NoError(t, err) diff --git a/api/ca.pb.authwrapper.go b/api/ca.pb.authwrapper.go new file mode 100644 index 0000000000..02bb5d2875 --- /dev/null +++ b/api/ca.pb.authwrapper.go @@ -0,0 +1,54 @@ +// Code generated by protoc-gen-goswarm. DO NOT EDIT. + +package api + +import ( + context "context" +) + +type authenticatedWrapperCAServer struct { + local CAServer + authorize func(context.Context, []string) error +} + +func NewAuthenticatedWrapperCAServer(local CAServer, authorize func(context.Context, []string) error) CAServer { + return &authenticatedWrapperCAServer{ + local: local, + authorize: authorize, + } +} + +func (p *authenticatedWrapperCAServer) GetRootCACertificate(ctx context.Context, r *GetRootCACertificateRequest) (*GetRootCACertificateResponse, error) { + + return p.local.GetRootCACertificate(ctx, r) +} + +func (p *authenticatedWrapperCAServer) GetUnlockKey(ctx context.Context, r *GetUnlockKeyRequest) (*GetUnlockKeyResponse, error) { + + if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { + return nil, err + } + return p.local.GetUnlockKey(ctx, r) +} + +type authenticatedWrapperNodeCAServer struct { + local NodeCAServer + authorize func(context.Context, []string) error +} + +func NewAuthenticatedWrapperNodeCAServer(local NodeCAServer, authorize func(context.Context, []string) error) NodeCAServer { + return &authenticatedWrapperNodeCAServer{ + local: local, + authorize: authorize, + } +} + +func (p *authenticatedWrapperNodeCAServer) IssueNodeCertificate(ctx context.Context, r *IssueNodeCertificateRequest) (*IssueNodeCertificateResponse, error) { + + return p.local.IssueNodeCertificate(ctx, r) +} + +func (p *authenticatedWrapperNodeCAServer) NodeCertificateStatus(ctx context.Context, r *NodeCertificateStatusRequest) (*NodeCertificateStatusResponse, error) { + + return p.local.NodeCertificateStatus(ctx, r) +} diff --git a/api/ca.pb.deepcopy.go b/api/ca.pb.deepcopy.go new file mode 100644 index 0000000000..02de8bf68a --- /dev/null +++ b/api/ca.pb.deepcopy.go @@ -0,0 +1,149 @@ +// Code generated by protoc-gen-goswarm. DO NOT EDIT. + +package api + +import ( + deepcopy "github.com/moby/swarmkit/v2/api/deepcopy" +) + +func (m *NodeCertificateStatusRequest) Copy() *NodeCertificateStatusRequest { + if m == nil { + return nil + } + o := &NodeCertificateStatusRequest{} + o.CopyFrom(m) + return o +} + +func (m *NodeCertificateStatusRequest) CopyFrom(src interface{}) { + + o := src.(*NodeCertificateStatusRequest) + m.NodeID = o.NodeID +} + +func (m *NodeCertificateStatusResponse) Copy() *NodeCertificateStatusResponse { + if m == nil { + return nil + } + o := &NodeCertificateStatusResponse{} + o.CopyFrom(m) + return o +} + +func (m *NodeCertificateStatusResponse) CopyFrom(src interface{}) { + + o := src.(*NodeCertificateStatusResponse) + if o.Status != nil { + m.Status = &IssuanceStatus{} + deepcopy.Copy(m.Status, o.Status) + } + + if o.Certificate != nil { + m.Certificate = &Certificate{} + deepcopy.Copy(m.Certificate, o.Certificate) + } + +} + +func (m *IssueNodeCertificateRequest) Copy() *IssueNodeCertificateRequest { + if m == nil { + return nil + } + o := &IssueNodeCertificateRequest{} + o.CopyFrom(m) + return o +} + +func (m *IssueNodeCertificateRequest) CopyFrom(src interface{}) { + + o := src.(*IssueNodeCertificateRequest) + m.Role = o.Role + if o.CSR != nil { + m.CSR = make([]byte, len(o.CSR)) + copy(m.CSR, o.CSR) + } + + m.Token = o.Token + m.Availability = o.Availability +} + +func (m *IssueNodeCertificateResponse) Copy() *IssueNodeCertificateResponse { + if m == nil { + return nil + } + o := &IssueNodeCertificateResponse{} + o.CopyFrom(m) + return o +} + +func (m *IssueNodeCertificateResponse) CopyFrom(src interface{}) { + + o := src.(*IssueNodeCertificateResponse) + m.NodeID = o.NodeID + m.NodeMembership = o.NodeMembership +} + +func (m *GetRootCACertificateRequest) Copy() *GetRootCACertificateRequest { + if m == nil { + return nil + } + o := &GetRootCACertificateRequest{} + o.CopyFrom(m) + return o +} + +func (m *GetRootCACertificateRequest) CopyFrom(src interface{}) {} + +func (m *GetRootCACertificateResponse) Copy() *GetRootCACertificateResponse { + if m == nil { + return nil + } + o := &GetRootCACertificateResponse{} + o.CopyFrom(m) + return o +} + +func (m *GetRootCACertificateResponse) CopyFrom(src interface{}) { + + o := src.(*GetRootCACertificateResponse) + if o.Certificate != nil { + m.Certificate = make([]byte, len(o.Certificate)) + copy(m.Certificate, o.Certificate) + } + +} + +func (m *GetUnlockKeyRequest) Copy() *GetUnlockKeyRequest { + if m == nil { + return nil + } + o := &GetUnlockKeyRequest{} + o.CopyFrom(m) + return o +} + +func (m *GetUnlockKeyRequest) CopyFrom(src interface{}) {} + +func (m *GetUnlockKeyResponse) Copy() *GetUnlockKeyResponse { + if m == nil { + return nil + } + o := &GetUnlockKeyResponse{} + o.CopyFrom(m) + return o +} + +func (m *GetUnlockKeyResponse) CopyFrom(src interface{}) { + + o := src.(*GetUnlockKeyResponse) + if o.UnlockKey != nil { + m.UnlockKey = make([]byte, len(o.UnlockKey)) + copy(m.UnlockKey, o.UnlockKey) + } + + if o.Version != nil { + m.Version = &Version{} + deepcopy.Copy(m.Version, o.Version) + } + +} diff --git a/api/ca.pb.go b/api/ca.pb.go index 42e77d893d..894a1e6f06 100644 --- a/api/ca.pb.go +++ b/api/ca.pb.go @@ -1,2428 +1,526 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: github.com/docker/swarmkit/api/ca.proto +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.11 +// protoc v3.21.12 +// source: api/ca.proto package api import ( - context "context" - fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" - github_com_moby_swarmkit_v2_api_deepcopy "github.com/moby/swarmkit/v2/api/deepcopy" - raftselector "github.com/moby/swarmkit/v2/manager/raftselector" _ "github.com/moby/swarmkit/v2/protobuf/plugin" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - metadata "google.golang.org/grpc/metadata" - peer "google.golang.org/grpc/peer" - status "google.golang.org/grpc/status" - io "io" - math "math" - math_bits "math/bits" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" - strings "strings" - rafttime "time" + sync "sync" + unsafe "unsafe" ) -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package +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 NodeCertificateStatusRequest struct { - NodeID string `protobuf:"bytes,1,opt,name=node_id,json=nodeId,proto3" json:"node_id,omitempty"` -} - -func (m *NodeCertificateStatusRequest) Reset() { *m = NodeCertificateStatusRequest{} } -func (*NodeCertificateStatusRequest) ProtoMessage() {} -func (*NodeCertificateStatusRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_64a8db18191af608, []int{0} + state protoimpl.MessageState `protogen:"open.v1"` + NodeID string `protobuf:"bytes,1,opt,name=node_id,json=nodeId,proto3" json:"node_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *NodeCertificateStatusRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *NodeCertificateStatusRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_NodeCertificateStatusRequest.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 *NodeCertificateStatusRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_NodeCertificateStatusRequest.Merge(m, src) -} -func (m *NodeCertificateStatusRequest) XXX_Size() int { - return m.Size() -} -func (m *NodeCertificateStatusRequest) XXX_DiscardUnknown() { - xxx_messageInfo_NodeCertificateStatusRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_NodeCertificateStatusRequest proto.InternalMessageInfo - -type NodeCertificateStatusResponse struct { - Status *IssuanceStatus `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"` - Certificate *Certificate `protobuf:"bytes,2,opt,name=certificate,proto3" json:"certificate,omitempty"` -} - -func (m *NodeCertificateStatusResponse) Reset() { *m = NodeCertificateStatusResponse{} } -func (*NodeCertificateStatusResponse) ProtoMessage() {} -func (*NodeCertificateStatusResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_64a8db18191af608, []int{1} -} -func (m *NodeCertificateStatusResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *NodeCertificateStatusResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_NodeCertificateStatusResponse.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 *NodeCertificateStatusResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_NodeCertificateStatusResponse.Merge(m, src) -} -func (m *NodeCertificateStatusResponse) XXX_Size() int { - return m.Size() -} -func (m *NodeCertificateStatusResponse) XXX_DiscardUnknown() { - xxx_messageInfo_NodeCertificateStatusResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_NodeCertificateStatusResponse proto.InternalMessageInfo -type IssueNodeCertificateRequest struct { - // DEPRECATED: Role is now selected based on which secret is matched. - Role NodeRole `protobuf:"varint,1,opt,name=role,proto3,enum=docker.swarmkit.v1.NodeRole" json:"role,omitempty"` // Deprecated: Do not use. - // CSR is the certificate signing request. - CSR []byte `protobuf:"bytes,2,opt,name=csr,proto3" json:"csr,omitempty"` - // Token represents a user-provided string that is necessary for new - // nodes to join the cluster - Token string `protobuf:"bytes,3,opt,name=token,proto3" json:"token,omitempty"` - // Availability allows a user to control the current scheduling status of a node - Availability NodeSpec_Availability `protobuf:"varint,4,opt,name=availability,proto3,enum=docker.swarmkit.v1.NodeSpec_Availability" json:"availability,omitempty"` +func (x *NodeCertificateStatusRequest) Reset() { + *x = NodeCertificateStatusRequest{} + mi := &file_api_ca_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *IssueNodeCertificateRequest) Reset() { *m = IssueNodeCertificateRequest{} } -func (*IssueNodeCertificateRequest) ProtoMessage() {} -func (*IssueNodeCertificateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_64a8db18191af608, []int{2} -} -func (m *IssueNodeCertificateRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *IssueNodeCertificateRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_IssueNodeCertificateRequest.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 *IssueNodeCertificateRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_IssueNodeCertificateRequest.Merge(m, src) -} -func (m *IssueNodeCertificateRequest) XXX_Size() int { - return m.Size() -} -func (m *IssueNodeCertificateRequest) XXX_DiscardUnknown() { - xxx_messageInfo_IssueNodeCertificateRequest.DiscardUnknown(m) +func (x *NodeCertificateStatusRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -var xxx_messageInfo_IssueNodeCertificateRequest proto.InternalMessageInfo - -type IssueNodeCertificateResponse struct { - NodeID string `protobuf:"bytes,1,opt,name=node_id,json=nodeId,proto3" json:"node_id,omitempty"` - NodeMembership NodeSpec_Membership `protobuf:"varint,2,opt,name=node_membership,json=nodeMembership,proto3,enum=docker.swarmkit.v1.NodeSpec_Membership" json:"node_membership,omitempty"` -} +func (*NodeCertificateStatusRequest) ProtoMessage() {} -func (m *IssueNodeCertificateResponse) Reset() { *m = IssueNodeCertificateResponse{} } -func (*IssueNodeCertificateResponse) ProtoMessage() {} -func (*IssueNodeCertificateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_64a8db18191af608, []int{3} -} -func (m *IssueNodeCertificateResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *IssueNodeCertificateResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_IssueNodeCertificateResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err +func (x *NodeCertificateStatusRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_ca_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *IssueNodeCertificateResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_IssueNodeCertificateResponse.Merge(m, src) -} -func (m *IssueNodeCertificateResponse) XXX_Size() int { - return m.Size() -} -func (m *IssueNodeCertificateResponse) XXX_DiscardUnknown() { - xxx_messageInfo_IssueNodeCertificateResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_IssueNodeCertificateResponse proto.InternalMessageInfo -type GetRootCACertificateRequest struct { +// Deprecated: Use NodeCertificateStatusRequest.ProtoReflect.Descriptor instead. +func (*NodeCertificateStatusRequest) Descriptor() ([]byte, []int) { + return file_api_ca_proto_rawDescGZIP(), []int{0} } -func (m *GetRootCACertificateRequest) Reset() { *m = GetRootCACertificateRequest{} } -func (*GetRootCACertificateRequest) ProtoMessage() {} -func (*GetRootCACertificateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_64a8db18191af608, []int{4} -} -func (m *GetRootCACertificateRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *GetRootCACertificateRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_GetRootCACertificateRequest.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 (x *NodeCertificateStatusRequest) GetNodeID() string { + if x != nil { + return x.NodeID } -} -func (m *GetRootCACertificateRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetRootCACertificateRequest.Merge(m, src) -} -func (m *GetRootCACertificateRequest) XXX_Size() int { - return m.Size() -} -func (m *GetRootCACertificateRequest) XXX_DiscardUnknown() { - xxx_messageInfo_GetRootCACertificateRequest.DiscardUnknown(m) + return "" } -var xxx_messageInfo_GetRootCACertificateRequest proto.InternalMessageInfo - -type GetRootCACertificateResponse struct { - Certificate []byte `protobuf:"bytes,1,opt,name=certificate,proto3" json:"certificate,omitempty"` +type NodeCertificateStatusResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Status *IssuanceStatus `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"` + Certificate *Certificate `protobuf:"bytes,2,opt,name=certificate,proto3" json:"certificate,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *GetRootCACertificateResponse) Reset() { *m = GetRootCACertificateResponse{} } -func (*GetRootCACertificateResponse) ProtoMessage() {} -func (*GetRootCACertificateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_64a8db18191af608, []int{5} -} -func (m *GetRootCACertificateResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *GetRootCACertificateResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_GetRootCACertificateResponse.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 *GetRootCACertificateResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetRootCACertificateResponse.Merge(m, src) -} -func (m *GetRootCACertificateResponse) XXX_Size() int { - return m.Size() -} -func (m *GetRootCACertificateResponse) XXX_DiscardUnknown() { - xxx_messageInfo_GetRootCACertificateResponse.DiscardUnknown(m) +func (x *NodeCertificateStatusResponse) Reset() { + *x = NodeCertificateStatusResponse{} + mi := &file_api_ca_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -var xxx_messageInfo_GetRootCACertificateResponse proto.InternalMessageInfo - -type GetUnlockKeyRequest struct { +func (x *NodeCertificateStatusResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *GetUnlockKeyRequest) Reset() { *m = GetUnlockKeyRequest{} } -func (*GetUnlockKeyRequest) ProtoMessage() {} -func (*GetUnlockKeyRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_64a8db18191af608, []int{6} -} -func (m *GetUnlockKeyRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *GetUnlockKeyRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_GetUnlockKeyRequest.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 *GetUnlockKeyRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetUnlockKeyRequest.Merge(m, src) -} -func (m *GetUnlockKeyRequest) XXX_Size() int { - return m.Size() -} -func (m *GetUnlockKeyRequest) XXX_DiscardUnknown() { - xxx_messageInfo_GetUnlockKeyRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_GetUnlockKeyRequest proto.InternalMessageInfo - -type GetUnlockKeyResponse struct { - UnlockKey []byte `protobuf:"bytes,1,opt,name=unlock_key,json=unlockKey,proto3" json:"unlock_key,omitempty"` - Version Version `protobuf:"bytes,2,opt,name=version,proto3" json:"version"` -} +func (*NodeCertificateStatusResponse) ProtoMessage() {} -func (m *GetUnlockKeyResponse) Reset() { *m = GetUnlockKeyResponse{} } -func (*GetUnlockKeyResponse) ProtoMessage() {} -func (*GetUnlockKeyResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_64a8db18191af608, []int{7} -} -func (m *GetUnlockKeyResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *GetUnlockKeyResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_GetUnlockKeyResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err +func (x *NodeCertificateStatusResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_ca_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil - } -} -func (m *GetUnlockKeyResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetUnlockKeyResponse.Merge(m, src) -} -func (m *GetUnlockKeyResponse) XXX_Size() int { - return m.Size() -} -func (m *GetUnlockKeyResponse) XXX_DiscardUnknown() { - xxx_messageInfo_GetUnlockKeyResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_GetUnlockKeyResponse proto.InternalMessageInfo - -func init() { - proto.RegisterType((*NodeCertificateStatusRequest)(nil), "docker.swarmkit.v1.NodeCertificateStatusRequest") - proto.RegisterType((*NodeCertificateStatusResponse)(nil), "docker.swarmkit.v1.NodeCertificateStatusResponse") - proto.RegisterType((*IssueNodeCertificateRequest)(nil), "docker.swarmkit.v1.IssueNodeCertificateRequest") - proto.RegisterType((*IssueNodeCertificateResponse)(nil), "docker.swarmkit.v1.IssueNodeCertificateResponse") - proto.RegisterType((*GetRootCACertificateRequest)(nil), "docker.swarmkit.v1.GetRootCACertificateRequest") - proto.RegisterType((*GetRootCACertificateResponse)(nil), "docker.swarmkit.v1.GetRootCACertificateResponse") - proto.RegisterType((*GetUnlockKeyRequest)(nil), "docker.swarmkit.v1.GetUnlockKeyRequest") - proto.RegisterType((*GetUnlockKeyResponse)(nil), "docker.swarmkit.v1.GetUnlockKeyResponse") -} - -func init() { - proto.RegisterFile("github.com/docker/swarmkit/api/ca.proto", fileDescriptor_64a8db18191af608) -} - -var fileDescriptor_64a8db18191af608 = []byte{ - // 651 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x54, 0xc1, 0x4f, 0x13, 0x4f, - 0x14, 0xee, 0x2c, 0xfc, 0xca, 0x8f, 0x47, 0x05, 0x33, 0x42, 0x52, 0x4b, 0xd9, 0x92, 0xd5, 0x04, - 0x34, 0x71, 0x17, 0xaa, 0x89, 0x89, 0x5e, 0x6c, 0x6b, 0x42, 0x88, 0xc1, 0x98, 0x21, 0x7a, 0x25, - 0xdb, 0xed, 0x50, 0x26, 0x6d, 0x77, 0xd6, 0x9d, 0x59, 0xb4, 0x37, 0x13, 0x8d, 0x67, 0x2f, 0x46, - 0x4f, 0xfe, 0x09, 0xfe, 0x1d, 0xc4, 0x13, 0x89, 0x17, 0x4e, 0x44, 0x96, 0xbb, 0x7f, 0x83, 0xd9, - 0xd9, 0x5d, 0x69, 0x61, 0x5b, 0xf0, 0xd4, 0x9d, 0xf7, 0xbe, 0xef, 0x7b, 0xef, 0x7d, 0xf3, 0x3a, - 0xb0, 0xd2, 0x66, 0x72, 0x2f, 0x68, 0x9a, 0x0e, 0xef, 0x59, 0x2d, 0xee, 0x74, 0xa8, 0x6f, 0x89, - 0x37, 0xb6, 0xdf, 0xeb, 0x30, 0x69, 0xd9, 0x1e, 0xb3, 0x1c, 0xdb, 0xf4, 0x7c, 0x2e, 0x39, 0xc6, - 0x71, 0xd6, 0x4c, 0xb3, 0xe6, 0xfe, 0x7a, 0xe9, 0xee, 0x25, 0x64, 0xd9, 0xf7, 0xa8, 0x88, 0xf9, - 0x97, 0x62, 0x85, 0x47, 0x9d, 0x14, 0x3b, 0xdf, 0xe6, 0x6d, 0xae, 0x3e, 0xad, 0xe8, 0x2b, 0x89, - 0x3e, 0x1c, 0xa3, 0xa0, 0x10, 0xcd, 0x60, 0xd7, 0xf2, 0xba, 0x41, 0x9b, 0xb9, 0xc9, 0x4f, 0x4c, - 0x34, 0x1a, 0x50, 0x7e, 0xce, 0x5b, 0xb4, 0x41, 0x7d, 0xc9, 0x76, 0x99, 0x63, 0x4b, 0xba, 0x2d, - 0x6d, 0x19, 0x08, 0x42, 0x5f, 0x07, 0x54, 0x48, 0x7c, 0x0b, 0xa6, 0x5c, 0xde, 0xa2, 0x3b, 0xac, - 0x55, 0x44, 0xcb, 0x68, 0x75, 0xba, 0x0e, 0xe1, 0x71, 0x25, 0x1f, 0x51, 0x36, 0x9f, 0x92, 0x7c, - 0x94, 0xda, 0x6c, 0x19, 0xdf, 0x10, 0x2c, 0x8d, 0x50, 0x11, 0x1e, 0x77, 0x05, 0xc5, 0x8f, 0x20, - 0x2f, 0x54, 0x44, 0xa9, 0xcc, 0x54, 0x0d, 0xf3, 0xa2, 0x65, 0xe6, 0xa6, 0x10, 0x81, 0xed, 0x3a, - 0x29, 0x37, 0x61, 0xe0, 0x1a, 0xcc, 0x38, 0x67, 0xc2, 0x45, 0x4d, 0x09, 0x54, 0xb2, 0x04, 0x06, - 0xea, 0x93, 0x41, 0x8e, 0xf1, 0x13, 0xc1, 0x62, 0xa4, 0x4e, 0xcf, 0x75, 0x99, 0x4e, 0xf9, 0x00, - 0x26, 0x7d, 0xde, 0xa5, 0xaa, 0xb9, 0xd9, 0x6a, 0x39, 0x4b, 0x3b, 0x62, 0x12, 0xde, 0xa5, 0x75, - 0xad, 0x88, 0x88, 0x42, 0xe3, 0x9b, 0x30, 0xe1, 0x08, 0x5f, 0x35, 0x54, 0xa8, 0x4f, 0x85, 0xc7, - 0x95, 0x89, 0xc6, 0x36, 0x21, 0x51, 0x0c, 0xcf, 0xc3, 0x7f, 0x92, 0x77, 0xa8, 0x5b, 0x9c, 0x88, - 0x4c, 0x23, 0xf1, 0x01, 0x6f, 0x41, 0xc1, 0xde, 0xb7, 0x59, 0xd7, 0x6e, 0xb2, 0x2e, 0x93, 0xfd, - 0xe2, 0xa4, 0x2a, 0x77, 0x67, 0x54, 0xb9, 0x6d, 0x8f, 0x3a, 0x66, 0x6d, 0x80, 0x40, 0x86, 0xe8, - 0xc6, 0x67, 0x04, 0xe5, 0xec, 0xa9, 0x12, 0xd7, 0xaf, 0x72, 0x79, 0xf8, 0x05, 0xcc, 0x29, 0x50, - 0x8f, 0xf6, 0x9a, 0xd4, 0x17, 0x7b, 0xcc, 0x53, 0x13, 0xcd, 0x56, 0x57, 0xc6, 0xf6, 0xb5, 0xf5, - 0x17, 0x4e, 0x66, 0x23, 0xfe, 0xd9, 0xd9, 0x58, 0x82, 0xc5, 0x0d, 0x2a, 0x09, 0xe7, 0xb2, 0x51, - 0xbb, 0x68, 0xb6, 0xf1, 0x04, 0xca, 0xd9, 0xe9, 0xa4, 0xeb, 0xe5, 0xe1, 0xfb, 0x8e, 0x3a, 0x2f, - 0x0c, 0x5f, 0xe7, 0x02, 0xdc, 0xd8, 0xa0, 0xf2, 0xa5, 0xdb, 0xe5, 0x4e, 0xe7, 0x19, 0xed, 0xa7, - 0xc2, 0x3e, 0xcc, 0x0f, 0x87, 0x13, 0xc1, 0x25, 0x80, 0x40, 0x05, 0x77, 0x3a, 0xb4, 0x9f, 0xe8, - 0x4d, 0x07, 0x29, 0x0c, 0x3f, 0x86, 0xa9, 0x7d, 0xea, 0x0b, 0xc6, 0xdd, 0x64, 0xb7, 0x16, 0xb3, - 0x06, 0x7f, 0x15, 0x43, 0xea, 0x93, 0x07, 0xc7, 0x95, 0x1c, 0x49, 0x19, 0xd5, 0x0f, 0x1a, 0x68, - 0x8d, 0x1a, 0x7e, 0x8f, 0x54, 0xed, 0x0b, 0x43, 0x61, 0x2b, 0x4b, 0x6b, 0x8c, 0x3b, 0xa5, 0xb5, - 0xab, 0x13, 0xe2, 0xf1, 0x8c, 0xff, 0x7f, 0x7c, 0xff, 0xfd, 0x55, 0xd3, 0xae, 0x23, 0xfc, 0x16, - 0x0a, 0x83, 0x06, 0xe0, 0x95, 0x11, 0x5a, 0xe7, 0x9d, 0x2b, 0xad, 0x5e, 0x0e, 0x4c, 0x8a, 0x2d, - 0xa8, 0x62, 0x73, 0x70, 0x4d, 0x21, 0xef, 0xf5, 0x6c, 0xd7, 0x6e, 0x53, 0xbf, 0xfa, 0x45, 0x03, - 0xb5, 0x57, 0x89, 0x15, 0x59, 0x5b, 0x99, 0x6d, 0xc5, 0x98, 0x7f, 0x65, 0xb6, 0x15, 0xe3, 0x16, - 0x7e, 0xc0, 0x8a, 0x8f, 0x08, 0x16, 0x32, 0x9f, 0x24, 0xbc, 0x36, 0x6a, 0xad, 0x47, 0xbd, 0x81, - 0xa5, 0xf5, 0x7f, 0x60, 0x9c, 0x6f, 0xa4, 0x7e, 0xfb, 0xe0, 0x44, 0xcf, 0x1d, 0x9d, 0xe8, 0xb9, - 0x77, 0xa1, 0x8e, 0x0e, 0x42, 0x1d, 0x1d, 0x86, 0x3a, 0xfa, 0x15, 0xea, 0xe8, 0xd3, 0xa9, 0x9e, - 0x3b, 0x3c, 0xd5, 0x73, 0x47, 0xa7, 0x7a, 0xae, 0x99, 0x57, 0xaf, 0xf1, 0xfd, 0x3f, 0x01, 0x00, - 0x00, 0xff, 0xff, 0xd2, 0x82, 0x20, 0x1b, 0x73, 0x06, 0x00, 0x00, -} - -type authenticatedWrapperCAServer struct { - local CAServer - authorize func(context.Context, []string) error -} - -func NewAuthenticatedWrapperCAServer(local CAServer, authorize func(context.Context, []string) error) CAServer { - return &authenticatedWrapperCAServer{ - local: local, - authorize: authorize, + return ms } + return mi.MessageOf(x) } -func (p *authenticatedWrapperCAServer) GetRootCACertificate(ctx context.Context, r *GetRootCACertificateRequest) (*GetRootCACertificateResponse, error) { - - return p.local.GetRootCACertificate(ctx, r) -} - -func (p *authenticatedWrapperCAServer) GetUnlockKey(ctx context.Context, r *GetUnlockKeyRequest) (*GetUnlockKeyResponse, error) { - - if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { - return nil, err - } - return p.local.GetUnlockKey(ctx, r) -} - -type authenticatedWrapperNodeCAServer struct { - local NodeCAServer - authorize func(context.Context, []string) error -} - -func NewAuthenticatedWrapperNodeCAServer(local NodeCAServer, authorize func(context.Context, []string) error) NodeCAServer { - return &authenticatedWrapperNodeCAServer{ - local: local, - authorize: authorize, - } -} - -func (p *authenticatedWrapperNodeCAServer) IssueNodeCertificate(ctx context.Context, r *IssueNodeCertificateRequest) (*IssueNodeCertificateResponse, error) { - - return p.local.IssueNodeCertificate(ctx, r) -} - -func (p *authenticatedWrapperNodeCAServer) NodeCertificateStatus(ctx context.Context, r *NodeCertificateStatusRequest) (*NodeCertificateStatusResponse, error) { - - return p.local.NodeCertificateStatus(ctx, r) -} - -func (m *NodeCertificateStatusRequest) Copy() *NodeCertificateStatusRequest { - if m == nil { - return nil - } - o := &NodeCertificateStatusRequest{} - o.CopyFrom(m) - return o -} - -func (m *NodeCertificateStatusRequest) CopyFrom(src interface{}) { - - o := src.(*NodeCertificateStatusRequest) - *m = *o -} - -func (m *NodeCertificateStatusResponse) Copy() *NodeCertificateStatusResponse { - if m == nil { - return nil - } - o := &NodeCertificateStatusResponse{} - o.CopyFrom(m) - return o -} - -func (m *NodeCertificateStatusResponse) CopyFrom(src interface{}) { - - o := src.(*NodeCertificateStatusResponse) - *m = *o - if o.Status != nil { - m.Status = &IssuanceStatus{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Status, o.Status) - } - if o.Certificate != nil { - m.Certificate = &Certificate{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Certificate, o.Certificate) - } -} - -func (m *IssueNodeCertificateRequest) Copy() *IssueNodeCertificateRequest { - if m == nil { - return nil - } - o := &IssueNodeCertificateRequest{} - o.CopyFrom(m) - return o -} - -func (m *IssueNodeCertificateRequest) CopyFrom(src interface{}) { - - o := src.(*IssueNodeCertificateRequest) - *m = *o - if o.CSR != nil { - m.CSR = make([]byte, len(o.CSR)) - copy(m.CSR, o.CSR) - } -} - -func (m *IssueNodeCertificateResponse) Copy() *IssueNodeCertificateResponse { - if m == nil { - return nil - } - o := &IssueNodeCertificateResponse{} - o.CopyFrom(m) - return o -} - -func (m *IssueNodeCertificateResponse) CopyFrom(src interface{}) { - - o := src.(*IssueNodeCertificateResponse) - *m = *o -} - -func (m *GetRootCACertificateRequest) Copy() *GetRootCACertificateRequest { - if m == nil { - return nil - } - o := &GetRootCACertificateRequest{} - o.CopyFrom(m) - return o -} - -func (m *GetRootCACertificateRequest) CopyFrom(src interface{}) {} -func (m *GetRootCACertificateResponse) Copy() *GetRootCACertificateResponse { - if m == nil { - return nil - } - o := &GetRootCACertificateResponse{} - o.CopyFrom(m) - return o -} - -func (m *GetRootCACertificateResponse) CopyFrom(src interface{}) { - - o := src.(*GetRootCACertificateResponse) - *m = *o - if o.Certificate != nil { - m.Certificate = make([]byte, len(o.Certificate)) - copy(m.Certificate, o.Certificate) - } -} - -func (m *GetUnlockKeyRequest) Copy() *GetUnlockKeyRequest { - if m == nil { - return nil - } - o := &GetUnlockKeyRequest{} - o.CopyFrom(m) - return o -} - -func (m *GetUnlockKeyRequest) CopyFrom(src interface{}) {} -func (m *GetUnlockKeyResponse) Copy() *GetUnlockKeyResponse { - if m == nil { - return nil - } - o := &GetUnlockKeyResponse{} - o.CopyFrom(m) - return o -} - -func (m *GetUnlockKeyResponse) CopyFrom(src interface{}) { - - o := src.(*GetUnlockKeyResponse) - *m = *o - if o.UnlockKey != nil { - m.UnlockKey = make([]byte, len(o.UnlockKey)) - copy(m.UnlockKey, o.UnlockKey) - } - github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Version, &o.Version) -} - -// Reference imports to suppress errors if they are not otherwise used. -var _ context.Context -var _ grpc.ClientConn - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 - -// CAClient is the client API for CA service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. -type CAClient interface { - GetRootCACertificate(ctx context.Context, in *GetRootCACertificateRequest, opts ...grpc.CallOption) (*GetRootCACertificateResponse, error) - // GetUnlockKey returns the current unlock key for the cluster for the role of the client - // asking. - GetUnlockKey(ctx context.Context, in *GetUnlockKeyRequest, opts ...grpc.CallOption) (*GetUnlockKeyResponse, error) -} - -type cAClient struct { - cc *grpc.ClientConn -} - -func NewCAClient(cc *grpc.ClientConn) CAClient { - return &cAClient{cc} +// Deprecated: Use NodeCertificateStatusResponse.ProtoReflect.Descriptor instead. +func (*NodeCertificateStatusResponse) Descriptor() ([]byte, []int) { + return file_api_ca_proto_rawDescGZIP(), []int{1} } -func (c *cAClient) GetRootCACertificate(ctx context.Context, in *GetRootCACertificateRequest, opts ...grpc.CallOption) (*GetRootCACertificateResponse, error) { - out := new(GetRootCACertificateResponse) - err := c.cc.Invoke(ctx, "/docker.swarmkit.v1.CA/GetRootCACertificate", in, out, opts...) - if err != nil { - return nil, err +func (x *NodeCertificateStatusResponse) GetStatus() *IssuanceStatus { + if x != nil { + return x.Status } - return out, nil + return nil } -func (c *cAClient) GetUnlockKey(ctx context.Context, in *GetUnlockKeyRequest, opts ...grpc.CallOption) (*GetUnlockKeyResponse, error) { - out := new(GetUnlockKeyResponse) - err := c.cc.Invoke(ctx, "/docker.swarmkit.v1.CA/GetUnlockKey", in, out, opts...) - if err != nil { - return nil, err +func (x *NodeCertificateStatusResponse) GetCertificate() *Certificate { + if x != nil { + return x.Certificate } - return out, nil -} - -// CAServer is the server API for CA service. -type CAServer interface { - GetRootCACertificate(context.Context, *GetRootCACertificateRequest) (*GetRootCACertificateResponse, error) - // GetUnlockKey returns the current unlock key for the cluster for the role of the client - // asking. - GetUnlockKey(context.Context, *GetUnlockKeyRequest) (*GetUnlockKeyResponse, error) + return nil } -// UnimplementedCAServer can be embedded to have forward compatible implementations. -type UnimplementedCAServer struct { +type IssueNodeCertificateRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // DEPRECATED: Role is now selected based on which secret is matched. + // + // Deprecated: Marked as deprecated in api/ca.proto. + Role NodeRole `protobuf:"varint,1,opt,name=role,proto3,enum=docker.swarmkit.v1.NodeRole" json:"role,omitempty"` + // CSR is the certificate signing request. + CSR []byte `protobuf:"bytes,2,opt,name=csr,proto3" json:"csr,omitempty"` + // Token represents a user-provided string that is necessary for new + // nodes to join the cluster + Token string `protobuf:"bytes,3,opt,name=token,proto3" json:"token,omitempty"` + // Availability allows a user to control the current scheduling status of a node + Availability NodeSpec_Availability `protobuf:"varint,4,opt,name=availability,proto3,enum=docker.swarmkit.v1.NodeSpec_Availability" json:"availability,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (*UnimplementedCAServer) GetRootCACertificate(ctx context.Context, req *GetRootCACertificateRequest) (*GetRootCACertificateResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetRootCACertificate not implemented") -} -func (*UnimplementedCAServer) GetUnlockKey(ctx context.Context, req *GetUnlockKeyRequest) (*GetUnlockKeyResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetUnlockKey not implemented") +func (x *IssueNodeCertificateRequest) Reset() { + *x = IssueNodeCertificateRequest{} + mi := &file_api_ca_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func RegisterCAServer(s *grpc.Server, srv CAServer) { - s.RegisterService(&_CA_serviceDesc, srv) +func (x *IssueNodeCertificateRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func _CA_GetRootCACertificate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetRootCACertificateRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(CAServer).GetRootCACertificate(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/docker.swarmkit.v1.CA/GetRootCACertificate", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(CAServer).GetRootCACertificate(ctx, req.(*GetRootCACertificateRequest)) - } - return interceptor(ctx, in, info, handler) -} +func (*IssueNodeCertificateRequest) ProtoMessage() {} -func _CA_GetUnlockKey_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetUnlockKeyRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(CAServer).GetUnlockKey(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/docker.swarmkit.v1.CA/GetUnlockKey", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(CAServer).GetUnlockKey(ctx, req.(*GetUnlockKeyRequest)) +func (x *IssueNodeCertificateRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_ca_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return interceptor(ctx, in, info, handler) -} - -var _CA_serviceDesc = grpc.ServiceDesc{ - ServiceName: "docker.swarmkit.v1.CA", - HandlerType: (*CAServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "GetRootCACertificate", - Handler: _CA_GetRootCACertificate_Handler, - }, - { - MethodName: "GetUnlockKey", - Handler: _CA_GetUnlockKey_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "github.com/docker/swarmkit/api/ca.proto", -} - -// NodeCAClient is the client API for NodeCA service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. -type NodeCAClient interface { - IssueNodeCertificate(ctx context.Context, in *IssueNodeCertificateRequest, opts ...grpc.CallOption) (*IssueNodeCertificateResponse, error) - NodeCertificateStatus(ctx context.Context, in *NodeCertificateStatusRequest, opts ...grpc.CallOption) (*NodeCertificateStatusResponse, error) -} - -type nodeCAClient struct { - cc *grpc.ClientConn + return mi.MessageOf(x) } -func NewNodeCAClient(cc *grpc.ClientConn) NodeCAClient { - return &nodeCAClient{cc} -} - -func (c *nodeCAClient) IssueNodeCertificate(ctx context.Context, in *IssueNodeCertificateRequest, opts ...grpc.CallOption) (*IssueNodeCertificateResponse, error) { - out := new(IssueNodeCertificateResponse) - err := c.cc.Invoke(ctx, "/docker.swarmkit.v1.NodeCA/IssueNodeCertificate", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil +// Deprecated: Use IssueNodeCertificateRequest.ProtoReflect.Descriptor instead. +func (*IssueNodeCertificateRequest) Descriptor() ([]byte, []int) { + return file_api_ca_proto_rawDescGZIP(), []int{2} } -func (c *nodeCAClient) NodeCertificateStatus(ctx context.Context, in *NodeCertificateStatusRequest, opts ...grpc.CallOption) (*NodeCertificateStatusResponse, error) { - out := new(NodeCertificateStatusResponse) - err := c.cc.Invoke(ctx, "/docker.swarmkit.v1.NodeCA/NodeCertificateStatus", in, out, opts...) - if err != nil { - return nil, err +// Deprecated: Marked as deprecated in api/ca.proto. +func (x *IssueNodeCertificateRequest) GetRole() NodeRole { + if x != nil { + return x.Role } - return out, nil -} - -// NodeCAServer is the server API for NodeCA service. -type NodeCAServer interface { - IssueNodeCertificate(context.Context, *IssueNodeCertificateRequest) (*IssueNodeCertificateResponse, error) - NodeCertificateStatus(context.Context, *NodeCertificateStatusRequest) (*NodeCertificateStatusResponse, error) -} - -// UnimplementedNodeCAServer can be embedded to have forward compatible implementations. -type UnimplementedNodeCAServer struct { -} - -func (*UnimplementedNodeCAServer) IssueNodeCertificate(ctx context.Context, req *IssueNodeCertificateRequest) (*IssueNodeCertificateResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method IssueNodeCertificate not implemented") -} -func (*UnimplementedNodeCAServer) NodeCertificateStatus(ctx context.Context, req *NodeCertificateStatusRequest) (*NodeCertificateStatusResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method NodeCertificateStatus not implemented") + return NodeRoleWorker } -func RegisterNodeCAServer(s *grpc.Server, srv NodeCAServer) { - s.RegisterService(&_NodeCA_serviceDesc, srv) -} - -func _NodeCA_IssueNodeCertificate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(IssueNodeCertificateRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(NodeCAServer).IssueNodeCertificate(ctx, in) +func (x *IssueNodeCertificateRequest) GetCSR() []byte { + if x != nil { + return x.CSR } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/docker.swarmkit.v1.NodeCA/IssueNodeCertificate", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(NodeCAServer).IssueNodeCertificate(ctx, req.(*IssueNodeCertificateRequest)) - } - return interceptor(ctx, in, info, handler) + return nil } -func _NodeCA_NodeCertificateStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(NodeCertificateStatusRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(NodeCAServer).NodeCertificateStatus(ctx, in) +func (x *IssueNodeCertificateRequest) GetToken() string { + if x != nil { + return x.Token } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/docker.swarmkit.v1.NodeCA/NodeCertificateStatus", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(NodeCAServer).NodeCertificateStatus(ctx, req.(*NodeCertificateStatusRequest)) - } - return interceptor(ctx, in, info, handler) + return "" } -var _NodeCA_serviceDesc = grpc.ServiceDesc{ - ServiceName: "docker.swarmkit.v1.NodeCA", - HandlerType: (*NodeCAServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "IssueNodeCertificate", - Handler: _NodeCA_IssueNodeCertificate_Handler, - }, - { - MethodName: "NodeCertificateStatus", - Handler: _NodeCA_NodeCertificateStatus_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "github.com/docker/swarmkit/api/ca.proto", -} - -func (m *NodeCertificateStatusRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err +func (x *IssueNodeCertificateRequest) GetAvailability() NodeSpec_Availability { + if x != nil { + return x.Availability } - return dAtA[:n], nil + return NodeAvailabilityActive } -func (m *NodeCertificateStatusRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) +type IssueNodeCertificateResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + NodeID string `protobuf:"bytes,1,opt,name=node_id,json=nodeId,proto3" json:"node_id,omitempty"` + NodeMembership NodeSpec_Membership `protobuf:"varint,2,opt,name=node_membership,json=nodeMembership,proto3,enum=docker.swarmkit.v1.NodeSpec_Membership" json:"node_membership,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *NodeCertificateStatusRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.NodeID) > 0 { - i -= len(m.NodeID) - copy(dAtA[i:], m.NodeID) - i = encodeVarintCa(dAtA, i, uint64(len(m.NodeID))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil +func (x *IssueNodeCertificateResponse) Reset() { + *x = IssueNodeCertificateResponse{} + mi := &file_api_ca_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *NodeCertificateStatusResponse) 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 (x *IssueNodeCertificateResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *NodeCertificateStatusResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} +func (*IssueNodeCertificateResponse) ProtoMessage() {} -func (m *NodeCertificateStatusResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Certificate != nil { - { - size, err := m.Certificate.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintCa(dAtA, i, uint64(size)) +func (x *IssueNodeCertificateResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_ca_proto_msgTypes[3] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - i-- - dAtA[i] = 0x12 - } - if m.Status != nil { - { - size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintCa(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *IssueNodeCertificateRequest) 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 *IssueNodeCertificateRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *IssueNodeCertificateRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Availability != 0 { - i = encodeVarintCa(dAtA, i, uint64(m.Availability)) - i-- - dAtA[i] = 0x20 - } - if len(m.Token) > 0 { - i -= len(m.Token) - copy(dAtA[i:], m.Token) - i = encodeVarintCa(dAtA, i, uint64(len(m.Token))) - i-- - dAtA[i] = 0x1a - } - if len(m.CSR) > 0 { - i -= len(m.CSR) - copy(dAtA[i:], m.CSR) - i = encodeVarintCa(dAtA, i, uint64(len(m.CSR))) - i-- - dAtA[i] = 0x12 - } - if m.Role != 0 { - i = encodeVarintCa(dAtA, i, uint64(m.Role)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *IssueNodeCertificateResponse) 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 *IssueNodeCertificateResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *IssueNodeCertificateResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.NodeMembership != 0 { - i = encodeVarintCa(dAtA, i, uint64(m.NodeMembership)) - i-- - dAtA[i] = 0x10 - } - if len(m.NodeID) > 0 { - i -= len(m.NodeID) - copy(dAtA[i:], m.NodeID) - i = encodeVarintCa(dAtA, i, uint64(len(m.NodeID))) - i-- - dAtA[i] = 0xa + return ms } - return len(dAtA) - i, nil -} - -func (m *GetRootCACertificateRequest) 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 *GetRootCACertificateRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *GetRootCACertificateRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil + return mi.MessageOf(x) } -func (m *GetRootCACertificateResponse) 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 *GetRootCACertificateResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *GetRootCACertificateResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Certificate) > 0 { - i -= len(m.Certificate) - copy(dAtA[i:], m.Certificate) - i = encodeVarintCa(dAtA, i, uint64(len(m.Certificate))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil +// Deprecated: Use IssueNodeCertificateResponse.ProtoReflect.Descriptor instead. +func (*IssueNodeCertificateResponse) Descriptor() ([]byte, []int) { + return file_api_ca_proto_rawDescGZIP(), []int{3} } -func (m *GetUnlockKeyRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err +func (x *IssueNodeCertificateResponse) GetNodeID() string { + if x != nil { + return x.NodeID } - return dAtA[:n], nil + return "" } -func (m *GetUnlockKeyRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *GetUnlockKeyRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil -} - -func (m *GetUnlockKeyResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err +func (x *IssueNodeCertificateResponse) GetNodeMembership() NodeSpec_Membership { + if x != nil { + return x.NodeMembership } - return dAtA[:n], nil + return NodeMembershipPending } -func (m *GetUnlockKeyResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *GetUnlockKeyResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size, err := m.Version.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintCa(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - if len(m.UnlockKey) > 0 { - i -= len(m.UnlockKey) - copy(dAtA[i:], m.UnlockKey) - i = encodeVarintCa(dAtA, i, uint64(len(m.UnlockKey))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil +type GetRootCACertificateRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func encodeVarintCa(dAtA []byte, offset int, v uint64) int { - offset -= sovCa(v) - base := offset - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return base +func (x *GetRootCACertificateRequest) Reset() { + *x = GetRootCACertificateRequest{} + mi := &file_api_ca_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -type raftProxyCAServer struct { - local CAServer - connSelector raftselector.ConnProvider - localCtxMods, remoteCtxMods []func(context.Context) (context.Context, error) +func (x *GetRootCACertificateRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func NewRaftProxyCAServer(local CAServer, connSelector raftselector.ConnProvider, localCtxMod, remoteCtxMod func(context.Context) (context.Context, error)) CAServer { - redirectChecker := func(ctx context.Context) (context.Context, error) { - p, ok := peer.FromContext(ctx) - if !ok { - return ctx, status.Errorf(codes.InvalidArgument, "remote addr is not found in context") - } - addr := p.Addr.String() - md, ok := metadata.FromIncomingContext(ctx) - if ok && len(md["redirect"]) != 0 { - return ctx, status.Errorf(codes.ResourceExhausted, "more than one redirect to leader from: %s", md["redirect"]) - } - if !ok { - md = metadata.New(map[string]string{}) - } - md["redirect"] = append(md["redirect"], addr) - return metadata.NewOutgoingContext(ctx, md), nil - } - remoteMods := []func(context.Context) (context.Context, error){redirectChecker} - remoteMods = append(remoteMods, remoteCtxMod) - - var localMods []func(context.Context) (context.Context, error) - if localCtxMod != nil { - localMods = []func(context.Context) (context.Context, error){localCtxMod} - } +func (*GetRootCACertificateRequest) ProtoMessage() {} - return &raftProxyCAServer{ - local: local, - connSelector: connSelector, - localCtxMods: localMods, - remoteCtxMods: remoteMods, - } -} -func (p *raftProxyCAServer) runCtxMods(ctx context.Context, ctxMods []func(context.Context) (context.Context, error)) (context.Context, error) { - var err error - for _, mod := range ctxMods { - ctx, err = mod(ctx) - if err != nil { - return ctx, err +func (x *GetRootCACertificateRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_ca_proto_msgTypes[4] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } + return ms } - return ctx, nil + return mi.MessageOf(x) } -func (p *raftProxyCAServer) pollNewLeaderConn(ctx context.Context) (*grpc.ClientConn, error) { - ticker := rafttime.NewTicker(500 * rafttime.Millisecond) - defer ticker.Stop() - for { - select { - case <-ticker.C: - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - return nil, err - } - - client := NewHealthClient(conn) - - resp, err := client.Check(ctx, &HealthCheckRequest{Service: "Raft"}) - if err != nil || resp.Status != HealthCheckResponse_SERVING { - continue - } - return conn, nil - case <-ctx.Done(): - return nil, ctx.Err() - } - } -} - -func (p *raftProxyCAServer) GetRootCACertificate(ctx context.Context, r *GetRootCACertificateRequest) (*GetRootCACertificateResponse, error) { - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return nil, err - } - return p.local.GetRootCACertificate(ctx, r) - } - return nil, err - } - modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return nil, err - } - - resp, err := NewCAClient(conn).GetRootCACertificate(modCtx, r) - if err != nil { - if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { - return resp, err - } - conn, err := p.pollNewLeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - return p.local.GetRootCACertificate(ctx, r) - } - return nil, err - } - return NewCAClient(conn).GetRootCACertificate(modCtx, r) - } - return resp, err +// Deprecated: Use GetRootCACertificateRequest.ProtoReflect.Descriptor instead. +func (*GetRootCACertificateRequest) Descriptor() ([]byte, []int) { + return file_api_ca_proto_rawDescGZIP(), []int{4} } -func (p *raftProxyCAServer) GetUnlockKey(ctx context.Context, r *GetUnlockKeyRequest) (*GetUnlockKeyResponse, error) { - - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return nil, err - } - return p.local.GetUnlockKey(ctx, r) - } - return nil, err - } - modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return nil, err - } - - resp, err := NewCAClient(conn).GetUnlockKey(modCtx, r) - if err != nil { - if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { - return resp, err - } - conn, err := p.pollNewLeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - return p.local.GetUnlockKey(ctx, r) - } - return nil, err - } - return NewCAClient(conn).GetUnlockKey(modCtx, r) - } - return resp, err +type GetRootCACertificateResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Certificate []byte `protobuf:"bytes,1,opt,name=certificate,proto3" json:"certificate,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -type raftProxyNodeCAServer struct { - local NodeCAServer - connSelector raftselector.ConnProvider - localCtxMods, remoteCtxMods []func(context.Context) (context.Context, error) +func (x *GetRootCACertificateResponse) Reset() { + *x = GetRootCACertificateResponse{} + mi := &file_api_ca_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func NewRaftProxyNodeCAServer(local NodeCAServer, connSelector raftselector.ConnProvider, localCtxMod, remoteCtxMod func(context.Context) (context.Context, error)) NodeCAServer { - redirectChecker := func(ctx context.Context) (context.Context, error) { - p, ok := peer.FromContext(ctx) - if !ok { - return ctx, status.Errorf(codes.InvalidArgument, "remote addr is not found in context") - } - addr := p.Addr.String() - md, ok := metadata.FromIncomingContext(ctx) - if ok && len(md["redirect"]) != 0 { - return ctx, status.Errorf(codes.ResourceExhausted, "more than one redirect to leader from: %s", md["redirect"]) - } - if !ok { - md = metadata.New(map[string]string{}) - } - md["redirect"] = append(md["redirect"], addr) - return metadata.NewOutgoingContext(ctx, md), nil - } - remoteMods := []func(context.Context) (context.Context, error){redirectChecker} - remoteMods = append(remoteMods, remoteCtxMod) - - var localMods []func(context.Context) (context.Context, error) - if localCtxMod != nil { - localMods = []func(context.Context) (context.Context, error){localCtxMod} - } - - return &raftProxyNodeCAServer{ - local: local, - connSelector: connSelector, - localCtxMods: localMods, - remoteCtxMods: remoteMods, - } -} -func (p *raftProxyNodeCAServer) runCtxMods(ctx context.Context, ctxMods []func(context.Context) (context.Context, error)) (context.Context, error) { - var err error - for _, mod := range ctxMods { - ctx, err = mod(ctx) - if err != nil { - return ctx, err - } - } - return ctx, nil +func (x *GetRootCACertificateResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (p *raftProxyNodeCAServer) pollNewLeaderConn(ctx context.Context) (*grpc.ClientConn, error) { - ticker := rafttime.NewTicker(500 * rafttime.Millisecond) - defer ticker.Stop() - for { - select { - case <-ticker.C: - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - return nil, err - } - - client := NewHealthClient(conn) - - resp, err := client.Check(ctx, &HealthCheckRequest{Service: "Raft"}) - if err != nil || resp.Status != HealthCheckResponse_SERVING { - continue - } - return conn, nil - case <-ctx.Done(): - return nil, ctx.Err() - } - } -} - -func (p *raftProxyNodeCAServer) IssueNodeCertificate(ctx context.Context, r *IssueNodeCertificateRequest) (*IssueNodeCertificateResponse, error) { - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return nil, err - } - return p.local.IssueNodeCertificate(ctx, r) - } - return nil, err - } - modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return nil, err - } +func (*GetRootCACertificateResponse) ProtoMessage() {} - resp, err := NewNodeCAClient(conn).IssueNodeCertificate(modCtx, r) - if err != nil { - if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { - return resp, err - } - conn, err := p.pollNewLeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - return p.local.IssueNodeCertificate(ctx, r) - } - return nil, err +func (x *GetRootCACertificateResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_ca_proto_msgTypes[5] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return NewNodeCAClient(conn).IssueNodeCertificate(modCtx, r) + return ms } - return resp, err + return mi.MessageOf(x) } -func (p *raftProxyNodeCAServer) NodeCertificateStatus(ctx context.Context, r *NodeCertificateStatusRequest) (*NodeCertificateStatusResponse, error) { - - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return nil, err - } - return p.local.NodeCertificateStatus(ctx, r) - } - return nil, err - } - modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return nil, err - } - - resp, err := NewNodeCAClient(conn).NodeCertificateStatus(modCtx, r) - if err != nil { - if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { - return resp, err - } - conn, err := p.pollNewLeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - return p.local.NodeCertificateStatus(ctx, r) - } - return nil, err - } - return NewNodeCAClient(conn).NodeCertificateStatus(modCtx, r) - } - return resp, err +// Deprecated: Use GetRootCACertificateResponse.ProtoReflect.Descriptor instead. +func (*GetRootCACertificateResponse) Descriptor() ([]byte, []int) { + return file_api_ca_proto_rawDescGZIP(), []int{5} } -func (m *NodeCertificateStatusRequest) Size() (n int) { - if m == nil { - return 0 +func (x *GetRootCACertificateResponse) GetCertificate() []byte { + if x != nil { + return x.Certificate } - var l int - _ = l - l = len(m.NodeID) - if l > 0 { - n += 1 + l + sovCa(uint64(l)) - } - return n + return nil } -func (m *NodeCertificateStatusResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Status != nil { - l = m.Status.Size() - n += 1 + l + sovCa(uint64(l)) - } - if m.Certificate != nil { - l = m.Certificate.Size() - n += 1 + l + sovCa(uint64(l)) - } - return n +type GetUnlockKeyRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *IssueNodeCertificateRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Role != 0 { - n += 1 + sovCa(uint64(m.Role)) - } - l = len(m.CSR) - if l > 0 { - n += 1 + l + sovCa(uint64(l)) - } - l = len(m.Token) - if l > 0 { - n += 1 + l + sovCa(uint64(l)) - } - if m.Availability != 0 { - n += 1 + sovCa(uint64(m.Availability)) - } - return n +func (x *GetUnlockKeyRequest) Reset() { + *x = GetUnlockKeyRequest{} + mi := &file_api_ca_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *IssueNodeCertificateResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.NodeID) - if l > 0 { - n += 1 + l + sovCa(uint64(l)) - } - if m.NodeMembership != 0 { - n += 1 + sovCa(uint64(m.NodeMembership)) - } - return n +func (x *GetUnlockKeyRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *GetRootCACertificateRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - return n -} +func (*GetUnlockKeyRequest) ProtoMessage() {} -func (m *GetRootCACertificateResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Certificate) - if l > 0 { - n += 1 + l + sovCa(uint64(l)) +func (x *GetUnlockKeyRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_ca_proto_msgTypes[6] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return n + return mi.MessageOf(x) } -func (m *GetUnlockKeyRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - return n +// Deprecated: Use GetUnlockKeyRequest.ProtoReflect.Descriptor instead. +func (*GetUnlockKeyRequest) Descriptor() ([]byte, []int) { + return file_api_ca_proto_rawDescGZIP(), []int{6} } -func (m *GetUnlockKeyResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.UnlockKey) - if l > 0 { - n += 1 + l + sovCa(uint64(l)) - } - l = m.Version.Size() - n += 1 + l + sovCa(uint64(l)) - return n +type GetUnlockKeyResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + UnlockKey []byte `protobuf:"bytes,1,opt,name=unlock_key,json=unlockKey,proto3" json:"unlock_key,omitempty"` + Version *Version `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func sovCa(x uint64) (n int) { - return (math_bits.Len64(x|1) + 6) / 7 -} -func sozCa(x uint64) (n int) { - return sovCa(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (this *NodeCertificateStatusRequest) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&NodeCertificateStatusRequest{`, - `NodeID:` + fmt.Sprintf("%v", this.NodeID) + `,`, - `}`, - }, "") - return s -} -func (this *NodeCertificateStatusResponse) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&NodeCertificateStatusResponse{`, - `Status:` + strings.Replace(fmt.Sprintf("%v", this.Status), "IssuanceStatus", "IssuanceStatus", 1) + `,`, - `Certificate:` + strings.Replace(fmt.Sprintf("%v", this.Certificate), "Certificate", "Certificate", 1) + `,`, - `}`, - }, "") - return s -} -func (this *IssueNodeCertificateRequest) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&IssueNodeCertificateRequest{`, - `Role:` + fmt.Sprintf("%v", this.Role) + `,`, - `CSR:` + fmt.Sprintf("%v", this.CSR) + `,`, - `Token:` + fmt.Sprintf("%v", this.Token) + `,`, - `Availability:` + fmt.Sprintf("%v", this.Availability) + `,`, - `}`, - }, "") - return s -} -func (this *IssueNodeCertificateResponse) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&IssueNodeCertificateResponse{`, - `NodeID:` + fmt.Sprintf("%v", this.NodeID) + `,`, - `NodeMembership:` + fmt.Sprintf("%v", this.NodeMembership) + `,`, - `}`, - }, "") - return s -} -func (this *GetRootCACertificateRequest) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&GetRootCACertificateRequest{`, - `}`, - }, "") - return s -} -func (this *GetRootCACertificateResponse) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&GetRootCACertificateResponse{`, - `Certificate:` + fmt.Sprintf("%v", this.Certificate) + `,`, - `}`, - }, "") - return s +func (x *GetUnlockKeyResponse) Reset() { + *x = GetUnlockKeyResponse{} + mi := &file_api_ca_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (this *GetUnlockKeyRequest) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&GetUnlockKeyRequest{`, - `}`, - }, "") - return s -} -func (this *GetUnlockKeyResponse) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&GetUnlockKeyResponse{`, - `UnlockKey:` + fmt.Sprintf("%v", this.UnlockKey) + `,`, - `Version:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Version), "Version", "Version", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s -} -func valueToStringCa(v interface{}) string { - rv := reflect.ValueOf(v) - if rv.IsNil() { - return "nil" - } - pv := reflect.Indirect(rv).Interface() - return fmt.Sprintf("*%v", pv) -} -func (m *NodeCertificateStatusRequest) 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 ErrIntOverflowCa - } - 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: NodeCertificateStatusRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: NodeCertificateStatusRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NodeID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCa - } - 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 ErrInvalidLengthCa - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthCa - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.NodeID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipCa(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthCa - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil +func (x *GetUnlockKeyResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *NodeCertificateStatusResponse) 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 ErrIntOverflowCa - } - 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: NodeCertificateStatusResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: NodeCertificateStatusResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCa - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCa - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCa - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Status == nil { - m.Status = &IssuanceStatus{} - } - if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Certificate", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCa - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCa - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCa - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Certificate == nil { - m.Certificate = &Certificate{} - } - if err := m.Certificate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipCa(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthCa - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *IssueNodeCertificateRequest) 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 ErrIntOverflowCa - } - 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: IssueNodeCertificateRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: IssueNodeCertificateRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Role", wireType) - } - m.Role = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCa - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Role |= NodeRole(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CSR", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCa - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthCa - } - postIndex := iNdEx + byteLen - if postIndex < 0 { - return ErrInvalidLengthCa - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.CSR = append(m.CSR[:0], dAtA[iNdEx:postIndex]...) - if m.CSR == nil { - m.CSR = []byte{} - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Token", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCa - } - 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 ErrInvalidLengthCa - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthCa - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Token = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Availability", wireType) - } - m.Availability = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCa - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Availability |= NodeSpec_Availability(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipCa(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthCa - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } +func (*GetUnlockKeyResponse) ProtoMessage() {} - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *IssueNodeCertificateResponse) 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 ErrIntOverflowCa - } - 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: IssueNodeCertificateResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: IssueNodeCertificateResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NodeID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCa - } - 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 ErrInvalidLengthCa - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthCa - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.NodeID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field NodeMembership", wireType) - } - m.NodeMembership = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCa - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.NodeMembership |= NodeSpec_Membership(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipCa(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthCa - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy +func (x *GetUnlockKeyResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_ca_proto_msgTypes[7] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } + return ms } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil + return mi.MessageOf(x) } -func (m *GetRootCACertificateRequest) 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 ErrIntOverflowCa - } - 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: GetRootCACertificateRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GetRootCACertificateRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipCa(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthCa - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil +// Deprecated: Use GetUnlockKeyResponse.ProtoReflect.Descriptor instead. +func (*GetUnlockKeyResponse) Descriptor() ([]byte, []int) { + return file_api_ca_proto_rawDescGZIP(), []int{7} } -func (m *GetRootCACertificateResponse) 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 ErrIntOverflowCa - } - 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: GetRootCACertificateResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GetRootCACertificateResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Certificate", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCa - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthCa - } - postIndex := iNdEx + byteLen - if postIndex < 0 { - return ErrInvalidLengthCa - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Certificate = append(m.Certificate[:0], dAtA[iNdEx:postIndex]...) - if m.Certificate == nil { - m.Certificate = []byte{} - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipCa(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthCa - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - if iNdEx > l { - return io.ErrUnexpectedEOF +func (x *GetUnlockKeyResponse) GetUnlockKey() []byte { + if x != nil { + return x.UnlockKey } return nil } -func (m *GetUnlockKeyRequest) 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 ErrIntOverflowCa - } - 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: GetUnlockKeyRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GetUnlockKeyRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipCa(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthCa - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - if iNdEx > l { - return io.ErrUnexpectedEOF +func (x *GetUnlockKeyResponse) GetVersion() *Version { + if x != nil { + return x.Version } return nil } -func (m *GetUnlockKeyResponse) 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 ErrIntOverflowCa - } - 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: GetUnlockKeyResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GetUnlockKeyResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field UnlockKey", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCa - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthCa - } - postIndex := iNdEx + byteLen - if postIndex < 0 { - return ErrInvalidLengthCa - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.UnlockKey = append(m.UnlockKey[:0], dAtA[iNdEx:postIndex]...) - if m.UnlockKey == nil { - m.UnlockKey = []byte{} - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCa - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCa - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCa - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Version.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipCa(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthCa - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipCa(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - depth := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowCa - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowCa - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - case 1: - iNdEx += 8 - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowCa - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLengthCa - } - iNdEx += length - case 3: - depth++ - case 4: - if depth == 0 { - return 0, ErrUnexpectedEndOfGroupCa - } - depth-- - case 5: - iNdEx += 4 - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - if iNdEx < 0 { - return 0, ErrInvalidLengthCa - } - if depth == 0 { - return iNdEx, nil - } - } - return 0, io.ErrUnexpectedEOF -} +var File_api_ca_proto protoreflect.FileDescriptor + +const file_api_ca_proto_rawDesc = "" + + "\n" + + "\fapi/ca.proto\x12\x12docker.swarmkit.v1\x1a\x0fapi/types.proto\x1a\x0fapi/specs.proto\x1a\x1cprotobuf/plugin/plugin.proto\"7\n" + + "\x1cNodeCertificateStatusRequest\x12\x17\n" + + "\anode_id\x18\x01 \x01(\tR\x06nodeId\"\x9e\x01\n" + + "\x1dNodeCertificateStatusResponse\x12:\n" + + "\x06status\x18\x01 \x01(\v2\".docker.swarmkit.v1.IssuanceStatusR\x06status\x12A\n" + + "\vcertificate\x18\x02 \x01(\v2\x1f.docker.swarmkit.v1.CertificateR\vcertificate\"\xd3\x01\n" + + "\x1bIssueNodeCertificateRequest\x124\n" + + "\x04role\x18\x01 \x01(\x0e2\x1c.docker.swarmkit.v1.NodeRoleB\x02\x18\x01R\x04role\x12\x19\n" + + "\x03csr\x18\x02 \x01(\fB\a\x92\x97\"\x03CSRR\x03csr\x12\x14\n" + + "\x05token\x18\x03 \x01(\tR\x05token\x12M\n" + + "\favailability\x18\x04 \x01(\x0e2).docker.swarmkit.v1.NodeSpec.AvailabilityR\favailability\"\x89\x01\n" + + "\x1cIssueNodeCertificateResponse\x12\x17\n" + + "\anode_id\x18\x01 \x01(\tR\x06nodeId\x12P\n" + + "\x0fnode_membership\x18\x02 \x01(\x0e2'.docker.swarmkit.v1.NodeSpec.MembershipR\x0enodeMembership\"\x1d\n" + + "\x1bGetRootCACertificateRequest\"@\n" + + "\x1cGetRootCACertificateResponse\x12 \n" + + "\vcertificate\x18\x01 \x01(\fR\vcertificate\"\x15\n" + + "\x13GetUnlockKeyRequest\"l\n" + + "\x14GetUnlockKeyResponse\x12\x1d\n" + + "\n" + + "unlock_key\x18\x01 \x01(\fR\tunlockKey\x125\n" + + "\aversion\x18\x02 \x01(\v2\x1b.docker.swarmkit.v1.VersionR\aversion2\x84\x02\n" + + "\x02CA\x12\x83\x01\n" + + "\x14GetRootCACertificate\x12/.docker.swarmkit.v1.GetRootCACertificateRequest\x1a0.docker.swarmkit.v1.GetRootCACertificateResponse\"\bʮ\xee\x98\x02\x02\x10\x01\x12x\n" + + "\fGetUnlockKey\x12'.docker.swarmkit.v1.GetUnlockKeyRequest\x1a(.docker.swarmkit.v1.GetUnlockKeyResponse\"\x15ʮ\xee\x98\x02\x0f\n" + + "\rswarm-manager2\x97\x02\n" + + "\x06NodeCA\x12\x83\x01\n" + + "\x14IssueNodeCertificate\x12/.docker.swarmkit.v1.IssueNodeCertificateRequest\x1a0.docker.swarmkit.v1.IssueNodeCertificateResponse\"\bʮ\xee\x98\x02\x02\x10\x01\x12\x86\x01\n" + + "\x15NodeCertificateStatus\x120.docker.swarmkit.v1.NodeCertificateStatusRequest\x1a1.docker.swarmkit.v1.NodeCertificateStatusResponse\"\bʮ\xee\x98\x02\x02\x10\x01B!Z\x1fgithub.com/moby/swarmkit/v2/apib\x06proto3" var ( - ErrInvalidLengthCa = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowCa = fmt.Errorf("proto: integer overflow") - ErrUnexpectedEndOfGroupCa = fmt.Errorf("proto: unexpected end of group") + file_api_ca_proto_rawDescOnce sync.Once + file_api_ca_proto_rawDescData []byte ) + +func file_api_ca_proto_rawDescGZIP() []byte { + file_api_ca_proto_rawDescOnce.Do(func() { + file_api_ca_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_api_ca_proto_rawDesc), len(file_api_ca_proto_rawDesc))) + }) + return file_api_ca_proto_rawDescData +} + +var file_api_ca_proto_msgTypes = make([]protoimpl.MessageInfo, 8) +var file_api_ca_proto_goTypes = []any{ + (*NodeCertificateStatusRequest)(nil), // 0: docker.swarmkit.v1.NodeCertificateStatusRequest + (*NodeCertificateStatusResponse)(nil), // 1: docker.swarmkit.v1.NodeCertificateStatusResponse + (*IssueNodeCertificateRequest)(nil), // 2: docker.swarmkit.v1.IssueNodeCertificateRequest + (*IssueNodeCertificateResponse)(nil), // 3: docker.swarmkit.v1.IssueNodeCertificateResponse + (*GetRootCACertificateRequest)(nil), // 4: docker.swarmkit.v1.GetRootCACertificateRequest + (*GetRootCACertificateResponse)(nil), // 5: docker.swarmkit.v1.GetRootCACertificateResponse + (*GetUnlockKeyRequest)(nil), // 6: docker.swarmkit.v1.GetUnlockKeyRequest + (*GetUnlockKeyResponse)(nil), // 7: docker.swarmkit.v1.GetUnlockKeyResponse + (*IssuanceStatus)(nil), // 8: docker.swarmkit.v1.IssuanceStatus + (*Certificate)(nil), // 9: docker.swarmkit.v1.Certificate + (NodeRole)(0), // 10: docker.swarmkit.v1.NodeRole + (NodeSpec_Availability)(0), // 11: docker.swarmkit.v1.NodeSpec.Availability + (NodeSpec_Membership)(0), // 12: docker.swarmkit.v1.NodeSpec.Membership + (*Version)(nil), // 13: docker.swarmkit.v1.Version +} +var file_api_ca_proto_depIdxs = []int32{ + 8, // 0: docker.swarmkit.v1.NodeCertificateStatusResponse.status:type_name -> docker.swarmkit.v1.IssuanceStatus + 9, // 1: docker.swarmkit.v1.NodeCertificateStatusResponse.certificate:type_name -> docker.swarmkit.v1.Certificate + 10, // 2: docker.swarmkit.v1.IssueNodeCertificateRequest.role:type_name -> docker.swarmkit.v1.NodeRole + 11, // 3: docker.swarmkit.v1.IssueNodeCertificateRequest.availability:type_name -> docker.swarmkit.v1.NodeSpec.Availability + 12, // 4: docker.swarmkit.v1.IssueNodeCertificateResponse.node_membership:type_name -> docker.swarmkit.v1.NodeSpec.Membership + 13, // 5: docker.swarmkit.v1.GetUnlockKeyResponse.version:type_name -> docker.swarmkit.v1.Version + 4, // 6: docker.swarmkit.v1.CA.GetRootCACertificate:input_type -> docker.swarmkit.v1.GetRootCACertificateRequest + 6, // 7: docker.swarmkit.v1.CA.GetUnlockKey:input_type -> docker.swarmkit.v1.GetUnlockKeyRequest + 2, // 8: docker.swarmkit.v1.NodeCA.IssueNodeCertificate:input_type -> docker.swarmkit.v1.IssueNodeCertificateRequest + 0, // 9: docker.swarmkit.v1.NodeCA.NodeCertificateStatus:input_type -> docker.swarmkit.v1.NodeCertificateStatusRequest + 5, // 10: docker.swarmkit.v1.CA.GetRootCACertificate:output_type -> docker.swarmkit.v1.GetRootCACertificateResponse + 7, // 11: docker.swarmkit.v1.CA.GetUnlockKey:output_type -> docker.swarmkit.v1.GetUnlockKeyResponse + 3, // 12: docker.swarmkit.v1.NodeCA.IssueNodeCertificate:output_type -> docker.swarmkit.v1.IssueNodeCertificateResponse + 1, // 13: docker.swarmkit.v1.NodeCA.NodeCertificateStatus:output_type -> docker.swarmkit.v1.NodeCertificateStatusResponse + 10, // [10:14] is the sub-list for method output_type + 6, // [6:10] is the sub-list for method input_type + 6, // [6:6] is the sub-list for extension type_name + 6, // [6:6] is the sub-list for extension extendee + 0, // [0:6] is the sub-list for field type_name +} + +func init() { file_api_ca_proto_init() } +func file_api_ca_proto_init() { + if File_api_ca_proto != nil { + return + } + file_api_types_proto_init() + file_api_specs_proto_init() + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_api_ca_proto_rawDesc), len(file_api_ca_proto_rawDesc)), + NumEnums: 0, + NumMessages: 8, + NumExtensions: 0, + NumServices: 2, + }, + GoTypes: file_api_ca_proto_goTypes, + DependencyIndexes: file_api_ca_proto_depIdxs, + MessageInfos: file_api_ca_proto_msgTypes, + }.Build() + File_api_ca_proto = out.File + file_api_ca_proto_goTypes = nil + file_api_ca_proto_depIdxs = nil +} diff --git a/api/ca.pb.raftproxy.go b/api/ca.pb.raftproxy.go new file mode 100644 index 0000000000..dd66e743fb --- /dev/null +++ b/api/ca.pb.raftproxy.go @@ -0,0 +1,299 @@ +// Code generated by protoc-gen-goswarm. DO NOT EDIT. + +package api + +import ( + context "context" + raftselector "github.com/moby/swarmkit/v2/manager/raftselector" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + metadata "google.golang.org/grpc/metadata" + peer "google.golang.org/grpc/peer" + status "google.golang.org/grpc/status" + strings "strings" + time "time" +) + +type raftProxyCAServer struct { + local CAServer + connSelector raftselector.ConnProvider + localCtxMods, remoteCtxMods []func(context.Context) (context.Context, error) +} + +func NewRaftProxyCAServer(local CAServer, connSelector raftselector.ConnProvider, localCtxMod, remoteCtxMod func(context.Context) (context.Context, error)) CAServer { + redirectChecker := func(ctx context.Context) (context.Context, error) { + p, ok := peer.FromContext(ctx) + if !ok { + return ctx, status.Errorf(codes.InvalidArgument, "remote addr is not found in context") + } + addr := p.Addr.String() + md, ok := metadata.FromIncomingContext(ctx) + if ok && len(md["redirect"]) != 0 { + return ctx, status.Errorf(codes.ResourceExhausted, "more than one redirect to leader from: %s", md["redirect"]) + } + if !ok { + md = metadata.New(map[string]string{}) + } + md["redirect"] = append(md["redirect"], addr) + return metadata.NewOutgoingContext(ctx, md), nil + } + remoteMods := []func(context.Context) (context.Context, error){redirectChecker} + remoteMods = append(remoteMods, remoteCtxMod) + + var localMods []func(context.Context) (context.Context, error) + if localCtxMod != nil { + localMods = []func(context.Context) (context.Context, error){localCtxMod} + } + + return &raftProxyCAServer{ + local: local, + connSelector: connSelector, + localCtxMods: localMods, + remoteCtxMods: remoteMods, + } +} +func (p *raftProxyCAServer) runCtxMods(ctx context.Context, ctxMods []func(context.Context) (context.Context, error)) (context.Context, error) { + var err error + for _, mod := range ctxMods { + ctx, err = mod(ctx) + if err != nil { + return ctx, err + } + } + return ctx, nil +} +func (p *raftProxyCAServer) pollNewLeaderConn(ctx context.Context) (*grpc.ClientConn, error) { + ticker := time.NewTicker(500 * time.Millisecond) + defer ticker.Stop() + for { + select { + case <-ticker.C: + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + return nil, err + } + + client := NewHealthClient(conn) + + resp, err := client.Check(ctx, &HealthCheckRequest{Service: "Raft"}) + if err != nil || resp.Status != HealthCheckResponse_SERVING { + continue + } + return conn, nil + case <-ctx.Done(): + return nil, ctx.Err() + } + } +} + +func (p *raftProxyCAServer) GetRootCACertificate(ctx context.Context, r *GetRootCACertificateRequest) (*GetRootCACertificateResponse, error) { + + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return nil, err + } + return p.local.GetRootCACertificate(ctx, r) + } + return nil, err + } + modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return nil, err + } + + resp, err := NewCAClient(conn).GetRootCACertificate(modCtx, r) + if err != nil { + if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { + return resp, err + } + conn, err := p.pollNewLeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + return p.local.GetRootCACertificate(ctx, r) + } + return nil, err + } + return NewCAClient(conn).GetRootCACertificate(modCtx, r) + } + return resp, err +} + +func (p *raftProxyCAServer) GetUnlockKey(ctx context.Context, r *GetUnlockKeyRequest) (*GetUnlockKeyResponse, error) { + + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return nil, err + } + return p.local.GetUnlockKey(ctx, r) + } + return nil, err + } + modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return nil, err + } + + resp, err := NewCAClient(conn).GetUnlockKey(modCtx, r) + if err != nil { + if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { + return resp, err + } + conn, err := p.pollNewLeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + return p.local.GetUnlockKey(ctx, r) + } + return nil, err + } + return NewCAClient(conn).GetUnlockKey(modCtx, r) + } + return resp, err +} + +type raftProxyNodeCAServer struct { + local NodeCAServer + connSelector raftselector.ConnProvider + localCtxMods, remoteCtxMods []func(context.Context) (context.Context, error) +} + +func NewRaftProxyNodeCAServer(local NodeCAServer, connSelector raftselector.ConnProvider, localCtxMod, remoteCtxMod func(context.Context) (context.Context, error)) NodeCAServer { + redirectChecker := func(ctx context.Context) (context.Context, error) { + p, ok := peer.FromContext(ctx) + if !ok { + return ctx, status.Errorf(codes.InvalidArgument, "remote addr is not found in context") + } + addr := p.Addr.String() + md, ok := metadata.FromIncomingContext(ctx) + if ok && len(md["redirect"]) != 0 { + return ctx, status.Errorf(codes.ResourceExhausted, "more than one redirect to leader from: %s", md["redirect"]) + } + if !ok { + md = metadata.New(map[string]string{}) + } + md["redirect"] = append(md["redirect"], addr) + return metadata.NewOutgoingContext(ctx, md), nil + } + remoteMods := []func(context.Context) (context.Context, error){redirectChecker} + remoteMods = append(remoteMods, remoteCtxMod) + + var localMods []func(context.Context) (context.Context, error) + if localCtxMod != nil { + localMods = []func(context.Context) (context.Context, error){localCtxMod} + } + + return &raftProxyNodeCAServer{ + local: local, + connSelector: connSelector, + localCtxMods: localMods, + remoteCtxMods: remoteMods, + } +} +func (p *raftProxyNodeCAServer) runCtxMods(ctx context.Context, ctxMods []func(context.Context) (context.Context, error)) (context.Context, error) { + var err error + for _, mod := range ctxMods { + ctx, err = mod(ctx) + if err != nil { + return ctx, err + } + } + return ctx, nil +} +func (p *raftProxyNodeCAServer) pollNewLeaderConn(ctx context.Context) (*grpc.ClientConn, error) { + ticker := time.NewTicker(500 * time.Millisecond) + defer ticker.Stop() + for { + select { + case <-ticker.C: + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + return nil, err + } + + client := NewHealthClient(conn) + + resp, err := client.Check(ctx, &HealthCheckRequest{Service: "Raft"}) + if err != nil || resp.Status != HealthCheckResponse_SERVING { + continue + } + return conn, nil + case <-ctx.Done(): + return nil, ctx.Err() + } + } +} + +func (p *raftProxyNodeCAServer) IssueNodeCertificate(ctx context.Context, r *IssueNodeCertificateRequest) (*IssueNodeCertificateResponse, error) { + + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return nil, err + } + return p.local.IssueNodeCertificate(ctx, r) + } + return nil, err + } + modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return nil, err + } + + resp, err := NewNodeCAClient(conn).IssueNodeCertificate(modCtx, r) + if err != nil { + if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { + return resp, err + } + conn, err := p.pollNewLeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + return p.local.IssueNodeCertificate(ctx, r) + } + return nil, err + } + return NewNodeCAClient(conn).IssueNodeCertificate(modCtx, r) + } + return resp, err +} + +func (p *raftProxyNodeCAServer) NodeCertificateStatus(ctx context.Context, r *NodeCertificateStatusRequest) (*NodeCertificateStatusResponse, error) { + + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return nil, err + } + return p.local.NodeCertificateStatus(ctx, r) + } + return nil, err + } + modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return nil, err + } + + resp, err := NewNodeCAClient(conn).NodeCertificateStatus(modCtx, r) + if err != nil { + if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { + return resp, err + } + conn, err := p.pollNewLeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + return p.local.NodeCertificateStatus(ctx, r) + } + return nil, err + } + return NewNodeCAClient(conn).NodeCertificateStatus(modCtx, r) + } + return resp, err +} diff --git a/api/ca.proto b/api/ca.proto index e26c8f35a9..a3a0892181 100644 --- a/api/ca.proto +++ b/api/ca.proto @@ -2,10 +2,11 @@ syntax = "proto3"; package docker.swarmkit.v1; -import "github.com/docker/swarmkit/api/types.proto"; -import "github.com/docker/swarmkit/api/specs.proto"; -import "gogoproto/gogo.proto"; -import "github.com/docker/swarmkit/protobuf/plugin/plugin.proto"; +option go_package = "github.com/moby/swarmkit/v2/api"; + +import "api/types.proto"; +import "api/specs.proto"; +import "protobuf/plugin/plugin.proto"; // CA defines the RPC methods for requesting certificates from a CA. @@ -43,7 +44,7 @@ message IssueNodeCertificateRequest { NodeRole role = 1 [deprecated=true]; // CSR is the certificate signing request. - bytes csr = 2 [(gogoproto.customname) = "CSR"]; + bytes csr = 2 [(docker.protobuf.plugin.go_name) = "CSR"]; // Token represents a user-provided string that is necessary for new // nodes to join the cluster @@ -68,5 +69,5 @@ message GetUnlockKeyRequest {} message GetUnlockKeyResponse { bytes unlock_key = 1; - Version version = 2 [(gogoproto.nullable) = false]; + Version version = 2; } diff --git a/api/ca_grpc.pb.go b/api/ca_grpc.pb.go new file mode 100644 index 0000000000..9088138801 --- /dev/null +++ b/api/ca_grpc.pb.go @@ -0,0 +1,299 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.6.2 +// - protoc v3.21.12 +// source: api/ca.proto + +package api + +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.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 + +const ( + CA_GetRootCACertificate_FullMethodName = "/docker.swarmkit.v1.CA/GetRootCACertificate" + CA_GetUnlockKey_FullMethodName = "/docker.swarmkit.v1.CA/GetUnlockKey" +) + +// CAClient is the client API for CA 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 CAClient interface { + GetRootCACertificate(ctx context.Context, in *GetRootCACertificateRequest, opts ...grpc.CallOption) (*GetRootCACertificateResponse, error) + // GetUnlockKey returns the current unlock key for the cluster for the role of the client + // asking. + GetUnlockKey(ctx context.Context, in *GetUnlockKeyRequest, opts ...grpc.CallOption) (*GetUnlockKeyResponse, error) +} + +type cAClient struct { + cc grpc.ClientConnInterface +} + +func NewCAClient(cc grpc.ClientConnInterface) CAClient { + return &cAClient{cc} +} + +func (c *cAClient) GetRootCACertificate(ctx context.Context, in *GetRootCACertificateRequest, opts ...grpc.CallOption) (*GetRootCACertificateResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(GetRootCACertificateResponse) + err := c.cc.Invoke(ctx, CA_GetRootCACertificate_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *cAClient) GetUnlockKey(ctx context.Context, in *GetUnlockKeyRequest, opts ...grpc.CallOption) (*GetUnlockKeyResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(GetUnlockKeyResponse) + err := c.cc.Invoke(ctx, CA_GetUnlockKey_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +// CAServer is the server API for CA service. +// All implementations should embed UnimplementedCAServer +// for forward compatibility. +type CAServer interface { + GetRootCACertificate(context.Context, *GetRootCACertificateRequest) (*GetRootCACertificateResponse, error) + // GetUnlockKey returns the current unlock key for the cluster for the role of the client + // asking. + GetUnlockKey(context.Context, *GetUnlockKeyRequest) (*GetUnlockKeyResponse, error) +} + +// UnimplementedCAServer should be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedCAServer struct{} + +func (UnimplementedCAServer) GetRootCACertificate(context.Context, *GetRootCACertificateRequest) (*GetRootCACertificateResponse, error) { + return nil, status.Error(codes.Unimplemented, "method GetRootCACertificate not implemented") +} +func (UnimplementedCAServer) GetUnlockKey(context.Context, *GetUnlockKeyRequest) (*GetUnlockKeyResponse, error) { + return nil, status.Error(codes.Unimplemented, "method GetUnlockKey not implemented") +} +func (UnimplementedCAServer) testEmbeddedByValue() {} + +// UnsafeCAServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to CAServer will +// result in compilation errors. +type UnsafeCAServer interface { + mustEmbedUnimplementedCAServer() +} + +func RegisterCAServer(s grpc.ServiceRegistrar, srv CAServer) { + // If the following call panics, it indicates UnimplementedCAServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } + s.RegisterService(&CA_ServiceDesc, srv) +} + +func _CA_GetRootCACertificate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetRootCACertificateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CAServer).GetRootCACertificate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: CA_GetRootCACertificate_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CAServer).GetRootCACertificate(ctx, req.(*GetRootCACertificateRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _CA_GetUnlockKey_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetUnlockKeyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CAServer).GetUnlockKey(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: CA_GetUnlockKey_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CAServer).GetUnlockKey(ctx, req.(*GetUnlockKeyRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// CA_ServiceDesc is the grpc.ServiceDesc for CA service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var CA_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "docker.swarmkit.v1.CA", + HandlerType: (*CAServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "GetRootCACertificate", + Handler: _CA_GetRootCACertificate_Handler, + }, + { + MethodName: "GetUnlockKey", + Handler: _CA_GetUnlockKey_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "api/ca.proto", +} + +const ( + NodeCA_IssueNodeCertificate_FullMethodName = "/docker.swarmkit.v1.NodeCA/IssueNodeCertificate" + NodeCA_NodeCertificateStatus_FullMethodName = "/docker.swarmkit.v1.NodeCA/NodeCertificateStatus" +) + +// NodeCAClient is the client API for NodeCA 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 NodeCAClient interface { + IssueNodeCertificate(ctx context.Context, in *IssueNodeCertificateRequest, opts ...grpc.CallOption) (*IssueNodeCertificateResponse, error) + NodeCertificateStatus(ctx context.Context, in *NodeCertificateStatusRequest, opts ...grpc.CallOption) (*NodeCertificateStatusResponse, error) +} + +type nodeCAClient struct { + cc grpc.ClientConnInterface +} + +func NewNodeCAClient(cc grpc.ClientConnInterface) NodeCAClient { + return &nodeCAClient{cc} +} + +func (c *nodeCAClient) IssueNodeCertificate(ctx context.Context, in *IssueNodeCertificateRequest, opts ...grpc.CallOption) (*IssueNodeCertificateResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(IssueNodeCertificateResponse) + err := c.cc.Invoke(ctx, NodeCA_IssueNodeCertificate_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *nodeCAClient) NodeCertificateStatus(ctx context.Context, in *NodeCertificateStatusRequest, opts ...grpc.CallOption) (*NodeCertificateStatusResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(NodeCertificateStatusResponse) + err := c.cc.Invoke(ctx, NodeCA_NodeCertificateStatus_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +// NodeCAServer is the server API for NodeCA service. +// All implementations should embed UnimplementedNodeCAServer +// for forward compatibility. +type NodeCAServer interface { + IssueNodeCertificate(context.Context, *IssueNodeCertificateRequest) (*IssueNodeCertificateResponse, error) + NodeCertificateStatus(context.Context, *NodeCertificateStatusRequest) (*NodeCertificateStatusResponse, error) +} + +// UnimplementedNodeCAServer should be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedNodeCAServer struct{} + +func (UnimplementedNodeCAServer) IssueNodeCertificate(context.Context, *IssueNodeCertificateRequest) (*IssueNodeCertificateResponse, error) { + return nil, status.Error(codes.Unimplemented, "method IssueNodeCertificate not implemented") +} +func (UnimplementedNodeCAServer) NodeCertificateStatus(context.Context, *NodeCertificateStatusRequest) (*NodeCertificateStatusResponse, error) { + return nil, status.Error(codes.Unimplemented, "method NodeCertificateStatus not implemented") +} +func (UnimplementedNodeCAServer) testEmbeddedByValue() {} + +// UnsafeNodeCAServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to NodeCAServer will +// result in compilation errors. +type UnsafeNodeCAServer interface { + mustEmbedUnimplementedNodeCAServer() +} + +func RegisterNodeCAServer(s grpc.ServiceRegistrar, srv NodeCAServer) { + // If the following call panics, it indicates UnimplementedNodeCAServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } + s.RegisterService(&NodeCA_ServiceDesc, srv) +} + +func _NodeCA_IssueNodeCertificate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(IssueNodeCertificateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(NodeCAServer).IssueNodeCertificate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: NodeCA_IssueNodeCertificate_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(NodeCAServer).IssueNodeCertificate(ctx, req.(*IssueNodeCertificateRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _NodeCA_NodeCertificateStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(NodeCertificateStatusRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(NodeCAServer).NodeCertificateStatus(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: NodeCA_NodeCertificateStatus_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(NodeCAServer).NodeCertificateStatus(ctx, req.(*NodeCertificateStatusRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// NodeCA_ServiceDesc is the grpc.ServiceDesc for NodeCA service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var NodeCA_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "docker.swarmkit.v1.NodeCA", + HandlerType: (*NodeCAServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "IssueNodeCertificate", + Handler: _NodeCA_IssueNodeCertificate_Handler, + }, + { + MethodName: "NodeCertificateStatus", + Handler: _NodeCA_NodeCertificateStatus_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "api/ca.proto", +} diff --git a/api/control.pb.authwrapper.go b/api/control.pb.authwrapper.go new file mode 100644 index 0000000000..8e2f78132e --- /dev/null +++ b/api/control.pb.authwrapper.go @@ -0,0 +1,363 @@ +// Code generated by protoc-gen-goswarm. DO NOT EDIT. + +package api + +import ( + context "context" +) + +type authenticatedWrapperControlServer struct { + local ControlServer + authorize func(context.Context, []string) error +} + +func NewAuthenticatedWrapperControlServer(local ControlServer, authorize func(context.Context, []string) error) ControlServer { + return &authenticatedWrapperControlServer{ + local: local, + authorize: authorize, + } +} + +func (p *authenticatedWrapperControlServer) GetNode(ctx context.Context, r *GetNodeRequest) (*GetNodeResponse, error) { + + if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { + return nil, err + } + return p.local.GetNode(ctx, r) +} + +func (p *authenticatedWrapperControlServer) ListNodes(ctx context.Context, r *ListNodesRequest) (*ListNodesResponse, error) { + + if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { + return nil, err + } + return p.local.ListNodes(ctx, r) +} + +func (p *authenticatedWrapperControlServer) UpdateNode(ctx context.Context, r *UpdateNodeRequest) (*UpdateNodeResponse, error) { + + if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { + return nil, err + } + return p.local.UpdateNode(ctx, r) +} + +func (p *authenticatedWrapperControlServer) RemoveNode(ctx context.Context, r *RemoveNodeRequest) (*RemoveNodeResponse, error) { + + if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { + return nil, err + } + return p.local.RemoveNode(ctx, r) +} + +func (p *authenticatedWrapperControlServer) GetTask(ctx context.Context, r *GetTaskRequest) (*GetTaskResponse, error) { + + if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { + return nil, err + } + return p.local.GetTask(ctx, r) +} + +func (p *authenticatedWrapperControlServer) ListTasks(ctx context.Context, r *ListTasksRequest) (*ListTasksResponse, error) { + + if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { + return nil, err + } + return p.local.ListTasks(ctx, r) +} + +func (p *authenticatedWrapperControlServer) RemoveTask(ctx context.Context, r *RemoveTaskRequest) (*RemoveTaskResponse, error) { + + if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { + return nil, err + } + return p.local.RemoveTask(ctx, r) +} + +func (p *authenticatedWrapperControlServer) GetService(ctx context.Context, r *GetServiceRequest) (*GetServiceResponse, error) { + + if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { + return nil, err + } + return p.local.GetService(ctx, r) +} + +func (p *authenticatedWrapperControlServer) ListServices(ctx context.Context, r *ListServicesRequest) (*ListServicesResponse, error) { + + if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { + return nil, err + } + return p.local.ListServices(ctx, r) +} + +func (p *authenticatedWrapperControlServer) CreateService(ctx context.Context, r *CreateServiceRequest) (*CreateServiceResponse, error) { + + if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { + return nil, err + } + return p.local.CreateService(ctx, r) +} + +func (p *authenticatedWrapperControlServer) UpdateService(ctx context.Context, r *UpdateServiceRequest) (*UpdateServiceResponse, error) { + + if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { + return nil, err + } + return p.local.UpdateService(ctx, r) +} + +func (p *authenticatedWrapperControlServer) RemoveService(ctx context.Context, r *RemoveServiceRequest) (*RemoveServiceResponse, error) { + + if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { + return nil, err + } + return p.local.RemoveService(ctx, r) +} + +func (p *authenticatedWrapperControlServer) ListServiceStatuses(ctx context.Context, r *ListServiceStatusesRequest) (*ListServiceStatusesResponse, error) { + + if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { + return nil, err + } + return p.local.ListServiceStatuses(ctx, r) +} + +func (p *authenticatedWrapperControlServer) GetNetwork(ctx context.Context, r *GetNetworkRequest) (*GetNetworkResponse, error) { + + if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { + return nil, err + } + return p.local.GetNetwork(ctx, r) +} + +func (p *authenticatedWrapperControlServer) ListNetworks(ctx context.Context, r *ListNetworksRequest) (*ListNetworksResponse, error) { + + if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { + return nil, err + } + return p.local.ListNetworks(ctx, r) +} + +func (p *authenticatedWrapperControlServer) CreateNetwork(ctx context.Context, r *CreateNetworkRequest) (*CreateNetworkResponse, error) { + + if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { + return nil, err + } + return p.local.CreateNetwork(ctx, r) +} + +func (p *authenticatedWrapperControlServer) RemoveNetwork(ctx context.Context, r *RemoveNetworkRequest) (*RemoveNetworkResponse, error) { + + if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { + return nil, err + } + return p.local.RemoveNetwork(ctx, r) +} + +func (p *authenticatedWrapperControlServer) GetCluster(ctx context.Context, r *GetClusterRequest) (*GetClusterResponse, error) { + + if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { + return nil, err + } + return p.local.GetCluster(ctx, r) +} + +func (p *authenticatedWrapperControlServer) ListClusters(ctx context.Context, r *ListClustersRequest) (*ListClustersResponse, error) { + + if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { + return nil, err + } + return p.local.ListClusters(ctx, r) +} + +func (p *authenticatedWrapperControlServer) UpdateCluster(ctx context.Context, r *UpdateClusterRequest) (*UpdateClusterResponse, error) { + + if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { + return nil, err + } + return p.local.UpdateCluster(ctx, r) +} + +func (p *authenticatedWrapperControlServer) GetSecret(ctx context.Context, r *GetSecretRequest) (*GetSecretResponse, error) { + + if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { + return nil, err + } + return p.local.GetSecret(ctx, r) +} + +func (p *authenticatedWrapperControlServer) UpdateSecret(ctx context.Context, r *UpdateSecretRequest) (*UpdateSecretResponse, error) { + + if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { + return nil, err + } + return p.local.UpdateSecret(ctx, r) +} + +func (p *authenticatedWrapperControlServer) ListSecrets(ctx context.Context, r *ListSecretsRequest) (*ListSecretsResponse, error) { + + if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { + return nil, err + } + return p.local.ListSecrets(ctx, r) +} + +func (p *authenticatedWrapperControlServer) CreateSecret(ctx context.Context, r *CreateSecretRequest) (*CreateSecretResponse, error) { + + if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { + return nil, err + } + return p.local.CreateSecret(ctx, r) +} + +func (p *authenticatedWrapperControlServer) RemoveSecret(ctx context.Context, r *RemoveSecretRequest) (*RemoveSecretResponse, error) { + + if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { + return nil, err + } + return p.local.RemoveSecret(ctx, r) +} + +func (p *authenticatedWrapperControlServer) GetConfig(ctx context.Context, r *GetConfigRequest) (*GetConfigResponse, error) { + + if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { + return nil, err + } + return p.local.GetConfig(ctx, r) +} + +func (p *authenticatedWrapperControlServer) UpdateConfig(ctx context.Context, r *UpdateConfigRequest) (*UpdateConfigResponse, error) { + + if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { + return nil, err + } + return p.local.UpdateConfig(ctx, r) +} + +func (p *authenticatedWrapperControlServer) ListConfigs(ctx context.Context, r *ListConfigsRequest) (*ListConfigsResponse, error) { + + if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { + return nil, err + } + return p.local.ListConfigs(ctx, r) +} + +func (p *authenticatedWrapperControlServer) CreateConfig(ctx context.Context, r *CreateConfigRequest) (*CreateConfigResponse, error) { + + if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { + return nil, err + } + return p.local.CreateConfig(ctx, r) +} + +func (p *authenticatedWrapperControlServer) RemoveConfig(ctx context.Context, r *RemoveConfigRequest) (*RemoveConfigResponse, error) { + + if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { + return nil, err + } + return p.local.RemoveConfig(ctx, r) +} + +func (p *authenticatedWrapperControlServer) GetExtension(ctx context.Context, r *GetExtensionRequest) (*GetExtensionResponse, error) { + + if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { + return nil, err + } + return p.local.GetExtension(ctx, r) +} + +func (p *authenticatedWrapperControlServer) CreateExtension(ctx context.Context, r *CreateExtensionRequest) (*CreateExtensionResponse, error) { + + if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { + return nil, err + } + return p.local.CreateExtension(ctx, r) +} + +func (p *authenticatedWrapperControlServer) RemoveExtension(ctx context.Context, r *RemoveExtensionRequest) (*RemoveExtensionResponse, error) { + + if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { + return nil, err + } + return p.local.RemoveExtension(ctx, r) +} + +func (p *authenticatedWrapperControlServer) GetResource(ctx context.Context, r *GetResourceRequest) (*GetResourceResponse, error) { + + if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { + return nil, err + } + return p.local.GetResource(ctx, r) +} + +func (p *authenticatedWrapperControlServer) UpdateResource(ctx context.Context, r *UpdateResourceRequest) (*UpdateResourceResponse, error) { + + if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { + return nil, err + } + return p.local.UpdateResource(ctx, r) +} + +func (p *authenticatedWrapperControlServer) ListResources(ctx context.Context, r *ListResourcesRequest) (*ListResourcesResponse, error) { + + if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { + return nil, err + } + return p.local.ListResources(ctx, r) +} + +func (p *authenticatedWrapperControlServer) CreateResource(ctx context.Context, r *CreateResourceRequest) (*CreateResourceResponse, error) { + + if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { + return nil, err + } + return p.local.CreateResource(ctx, r) +} + +func (p *authenticatedWrapperControlServer) RemoveResource(ctx context.Context, r *RemoveResourceRequest) (*RemoveResourceResponse, error) { + + if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { + return nil, err + } + return p.local.RemoveResource(ctx, r) +} + +func (p *authenticatedWrapperControlServer) CreateVolume(ctx context.Context, r *CreateVolumeRequest) (*CreateVolumeResponse, error) { + + if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { + return nil, err + } + return p.local.CreateVolume(ctx, r) +} + +func (p *authenticatedWrapperControlServer) GetVolume(ctx context.Context, r *GetVolumeRequest) (*GetVolumeResponse, error) { + + if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { + return nil, err + } + return p.local.GetVolume(ctx, r) +} + +func (p *authenticatedWrapperControlServer) UpdateVolume(ctx context.Context, r *UpdateVolumeRequest) (*UpdateVolumeResponse, error) { + + if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { + return nil, err + } + return p.local.UpdateVolume(ctx, r) +} + +func (p *authenticatedWrapperControlServer) ListVolumes(ctx context.Context, r *ListVolumesRequest) (*ListVolumesResponse, error) { + + if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { + return nil, err + } + return p.local.ListVolumes(ctx, r) +} + +func (p *authenticatedWrapperControlServer) RemoveVolume(ctx context.Context, r *RemoveVolumeRequest) (*RemoveVolumeResponse, error) { + + if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { + return nil, err + } + return p.local.RemoveVolume(ctx, r) +} diff --git a/api/control.pb.deepcopy.go b/api/control.pb.deepcopy.go new file mode 100644 index 0000000000..d2357fac94 --- /dev/null +++ b/api/control.pb.deepcopy.go @@ -0,0 +1,2012 @@ +// Code generated by protoc-gen-goswarm. DO NOT EDIT. + +package api + +import ( + deepcopy "github.com/moby/swarmkit/v2/api/deepcopy" + anypb "google.golang.org/protobuf/types/known/anypb" +) + +func (m *GetNodeRequest) Copy() *GetNodeRequest { + if m == nil { + return nil + } + o := &GetNodeRequest{} + o.CopyFrom(m) + return o +} + +func (m *GetNodeRequest) CopyFrom(src interface{}) { + + o := src.(*GetNodeRequest) + m.NodeID = o.NodeID +} + +func (m *GetNodeResponse) Copy() *GetNodeResponse { + if m == nil { + return nil + } + o := &GetNodeResponse{} + o.CopyFrom(m) + return o +} + +func (m *GetNodeResponse) CopyFrom(src interface{}) { + + o := src.(*GetNodeResponse) + if o.Node != nil { + m.Node = &Node{} + deepcopy.Copy(m.Node, o.Node) + } + +} + +func (m *ListNodesRequest) Copy() *ListNodesRequest { + if m == nil { + return nil + } + o := &ListNodesRequest{} + o.CopyFrom(m) + return o +} + +func (m *ListNodesRequest) CopyFrom(src interface{}) { + + o := src.(*ListNodesRequest) + if o.Filters != nil { + m.Filters = &ListNodesRequest_Filters{} + deepcopy.Copy(m.Filters, o.Filters) + } + +} + +func (m *ListNodesRequest_Filters) Copy() *ListNodesRequest_Filters { + if m == nil { + return nil + } + o := &ListNodesRequest_Filters{} + o.CopyFrom(m) + return o +} + +func (m *ListNodesRequest_Filters) CopyFrom(src interface{}) { + + o := src.(*ListNodesRequest_Filters) + if o.Names != nil { + m.Names = make([]string, len(o.Names)) + copy(m.Names, o.Names) + } + + if o.IDPrefixes != nil { + m.IDPrefixes = make([]string, len(o.IDPrefixes)) + copy(m.IDPrefixes, o.IDPrefixes) + } + + if o.Labels != nil { + m.Labels = make(map[string]string, len(o.Labels)) + for k, v := range o.Labels { + m.Labels[k] = v + } + } + + if o.NodeLabels != nil { + m.NodeLabels = make(map[string]string, len(o.NodeLabels)) + for k, v := range o.NodeLabels { + m.NodeLabels[k] = v + } + } + + if o.Memberships != nil { + m.Memberships = make([]NodeSpec_Membership, len(o.Memberships)) + copy(m.Memberships, o.Memberships) + } + + if o.Roles != nil { + m.Roles = make([]NodeRole, len(o.Roles)) + copy(m.Roles, o.Roles) + } + + if o.NamePrefixes != nil { + m.NamePrefixes = make([]string, len(o.NamePrefixes)) + copy(m.NamePrefixes, o.NamePrefixes) + } + +} + +func (m *ListNodesResponse) Copy() *ListNodesResponse { + if m == nil { + return nil + } + o := &ListNodesResponse{} + o.CopyFrom(m) + return o +} + +func (m *ListNodesResponse) CopyFrom(src interface{}) { + + o := src.(*ListNodesResponse) + if o.Nodes != nil { + m.Nodes = make([]*Node, len(o.Nodes)) + for i := range m.Nodes { + m.Nodes[i] = &Node{} + deepcopy.Copy(m.Nodes[i], o.Nodes[i]) + } + } + +} + +func (m *UpdateNodeRequest) Copy() *UpdateNodeRequest { + if m == nil { + return nil + } + o := &UpdateNodeRequest{} + o.CopyFrom(m) + return o +} + +func (m *UpdateNodeRequest) CopyFrom(src interface{}) { + + o := src.(*UpdateNodeRequest) + m.NodeID = o.NodeID + if o.NodeVersion != nil { + m.NodeVersion = &Version{} + deepcopy.Copy(m.NodeVersion, o.NodeVersion) + } + + if o.Spec != nil { + m.Spec = &NodeSpec{} + deepcopy.Copy(m.Spec, o.Spec) + } + +} + +func (m *UpdateNodeResponse) Copy() *UpdateNodeResponse { + if m == nil { + return nil + } + o := &UpdateNodeResponse{} + o.CopyFrom(m) + return o +} + +func (m *UpdateNodeResponse) CopyFrom(src interface{}) { + + o := src.(*UpdateNodeResponse) + if o.Node != nil { + m.Node = &Node{} + deepcopy.Copy(m.Node, o.Node) + } + +} + +func (m *RemoveNodeRequest) Copy() *RemoveNodeRequest { + if m == nil { + return nil + } + o := &RemoveNodeRequest{} + o.CopyFrom(m) + return o +} + +func (m *RemoveNodeRequest) CopyFrom(src interface{}) { + + o := src.(*RemoveNodeRequest) + m.NodeID = o.NodeID + m.Force = o.Force +} + +func (m *RemoveNodeResponse) Copy() *RemoveNodeResponse { + if m == nil { + return nil + } + o := &RemoveNodeResponse{} + o.CopyFrom(m) + return o +} + +func (m *RemoveNodeResponse) CopyFrom(src interface{}) {} + +func (m *GetTaskRequest) Copy() *GetTaskRequest { + if m == nil { + return nil + } + o := &GetTaskRequest{} + o.CopyFrom(m) + return o +} + +func (m *GetTaskRequest) CopyFrom(src interface{}) { + + o := src.(*GetTaskRequest) + m.TaskID = o.TaskID +} + +func (m *GetTaskResponse) Copy() *GetTaskResponse { + if m == nil { + return nil + } + o := &GetTaskResponse{} + o.CopyFrom(m) + return o +} + +func (m *GetTaskResponse) CopyFrom(src interface{}) { + + o := src.(*GetTaskResponse) + if o.Task != nil { + m.Task = &Task{} + deepcopy.Copy(m.Task, o.Task) + } + +} + +func (m *RemoveTaskRequest) Copy() *RemoveTaskRequest { + if m == nil { + return nil + } + o := &RemoveTaskRequest{} + o.CopyFrom(m) + return o +} + +func (m *RemoveTaskRequest) CopyFrom(src interface{}) { + + o := src.(*RemoveTaskRequest) + m.TaskID = o.TaskID +} + +func (m *RemoveTaskResponse) Copy() *RemoveTaskResponse { + if m == nil { + return nil + } + o := &RemoveTaskResponse{} + o.CopyFrom(m) + return o +} + +func (m *RemoveTaskResponse) CopyFrom(src interface{}) {} + +func (m *ListTasksRequest) Copy() *ListTasksRequest { + if m == nil { + return nil + } + o := &ListTasksRequest{} + o.CopyFrom(m) + return o +} + +func (m *ListTasksRequest) CopyFrom(src interface{}) { + + o := src.(*ListTasksRequest) + if o.Filters != nil { + m.Filters = &ListTasksRequest_Filters{} + deepcopy.Copy(m.Filters, o.Filters) + } + +} + +func (m *ListTasksRequest_Filters) Copy() *ListTasksRequest_Filters { + if m == nil { + return nil + } + o := &ListTasksRequest_Filters{} + o.CopyFrom(m) + return o +} + +func (m *ListTasksRequest_Filters) CopyFrom(src interface{}) { + + o := src.(*ListTasksRequest_Filters) + if o.Names != nil { + m.Names = make([]string, len(o.Names)) + copy(m.Names, o.Names) + } + + if o.IDPrefixes != nil { + m.IDPrefixes = make([]string, len(o.IDPrefixes)) + copy(m.IDPrefixes, o.IDPrefixes) + } + + if o.Labels != nil { + m.Labels = make(map[string]string, len(o.Labels)) + for k, v := range o.Labels { + m.Labels[k] = v + } + } + + if o.ServiceIDs != nil { + m.ServiceIDs = make([]string, len(o.ServiceIDs)) + copy(m.ServiceIDs, o.ServiceIDs) + } + + if o.NodeIDs != nil { + m.NodeIDs = make([]string, len(o.NodeIDs)) + copy(m.NodeIDs, o.NodeIDs) + } + + if o.DesiredStates != nil { + m.DesiredStates = make([]TaskState, len(o.DesiredStates)) + copy(m.DesiredStates, o.DesiredStates) + } + + if o.NamePrefixes != nil { + m.NamePrefixes = make([]string, len(o.NamePrefixes)) + copy(m.NamePrefixes, o.NamePrefixes) + } + + if o.Runtimes != nil { + m.Runtimes = make([]string, len(o.Runtimes)) + copy(m.Runtimes, o.Runtimes) + } + + m.UpToDate = o.UpToDate +} + +func (m *ListTasksResponse) Copy() *ListTasksResponse { + if m == nil { + return nil + } + o := &ListTasksResponse{} + o.CopyFrom(m) + return o +} + +func (m *ListTasksResponse) CopyFrom(src interface{}) { + + o := src.(*ListTasksResponse) + if o.Tasks != nil { + m.Tasks = make([]*Task, len(o.Tasks)) + for i := range m.Tasks { + m.Tasks[i] = &Task{} + deepcopy.Copy(m.Tasks[i], o.Tasks[i]) + } + } + +} + +func (m *CreateServiceRequest) Copy() *CreateServiceRequest { + if m == nil { + return nil + } + o := &CreateServiceRequest{} + o.CopyFrom(m) + return o +} + +func (m *CreateServiceRequest) CopyFrom(src interface{}) { + + o := src.(*CreateServiceRequest) + if o.Spec != nil { + m.Spec = &ServiceSpec{} + deepcopy.Copy(m.Spec, o.Spec) + } + +} + +func (m *CreateServiceResponse) Copy() *CreateServiceResponse { + if m == nil { + return nil + } + o := &CreateServiceResponse{} + o.CopyFrom(m) + return o +} + +func (m *CreateServiceResponse) CopyFrom(src interface{}) { + + o := src.(*CreateServiceResponse) + if o.Service != nil { + m.Service = &Service{} + deepcopy.Copy(m.Service, o.Service) + } + +} + +func (m *GetServiceRequest) Copy() *GetServiceRequest { + if m == nil { + return nil + } + o := &GetServiceRequest{} + o.CopyFrom(m) + return o +} + +func (m *GetServiceRequest) CopyFrom(src interface{}) { + + o := src.(*GetServiceRequest) + m.ServiceID = o.ServiceID + m.InsertDefaults = o.InsertDefaults +} + +func (m *GetServiceResponse) Copy() *GetServiceResponse { + if m == nil { + return nil + } + o := &GetServiceResponse{} + o.CopyFrom(m) + return o +} + +func (m *GetServiceResponse) CopyFrom(src interface{}) { + + o := src.(*GetServiceResponse) + if o.Service != nil { + m.Service = &Service{} + deepcopy.Copy(m.Service, o.Service) + } + +} + +func (m *UpdateServiceRequest) Copy() *UpdateServiceRequest { + if m == nil { + return nil + } + o := &UpdateServiceRequest{} + o.CopyFrom(m) + return o +} + +func (m *UpdateServiceRequest) CopyFrom(src interface{}) { + + o := src.(*UpdateServiceRequest) + m.ServiceID = o.ServiceID + if o.ServiceVersion != nil { + m.ServiceVersion = &Version{} + deepcopy.Copy(m.ServiceVersion, o.ServiceVersion) + } + + if o.Spec != nil { + m.Spec = &ServiceSpec{} + deepcopy.Copy(m.Spec, o.Spec) + } + + m.Rollback = o.Rollback +} + +func (m *UpdateServiceResponse) Copy() *UpdateServiceResponse { + if m == nil { + return nil + } + o := &UpdateServiceResponse{} + o.CopyFrom(m) + return o +} + +func (m *UpdateServiceResponse) CopyFrom(src interface{}) { + + o := src.(*UpdateServiceResponse) + if o.Service != nil { + m.Service = &Service{} + deepcopy.Copy(m.Service, o.Service) + } + +} + +func (m *RemoveServiceRequest) Copy() *RemoveServiceRequest { + if m == nil { + return nil + } + o := &RemoveServiceRequest{} + o.CopyFrom(m) + return o +} + +func (m *RemoveServiceRequest) CopyFrom(src interface{}) { + + o := src.(*RemoveServiceRequest) + m.ServiceID = o.ServiceID +} + +func (m *RemoveServiceResponse) Copy() *RemoveServiceResponse { + if m == nil { + return nil + } + o := &RemoveServiceResponse{} + o.CopyFrom(m) + return o +} + +func (m *RemoveServiceResponse) CopyFrom(src interface{}) {} + +func (m *ListServicesRequest) Copy() *ListServicesRequest { + if m == nil { + return nil + } + o := &ListServicesRequest{} + o.CopyFrom(m) + return o +} + +func (m *ListServicesRequest) CopyFrom(src interface{}) { + + o := src.(*ListServicesRequest) + if o.Filters != nil { + m.Filters = &ListServicesRequest_Filters{} + deepcopy.Copy(m.Filters, o.Filters) + } + +} + +func (m *ListServicesRequest_Filters) Copy() *ListServicesRequest_Filters { + if m == nil { + return nil + } + o := &ListServicesRequest_Filters{} + o.CopyFrom(m) + return o +} + +func (m *ListServicesRequest_Filters) CopyFrom(src interface{}) { + + o := src.(*ListServicesRequest_Filters) + if o.Names != nil { + m.Names = make([]string, len(o.Names)) + copy(m.Names, o.Names) + } + + if o.IDPrefixes != nil { + m.IDPrefixes = make([]string, len(o.IDPrefixes)) + copy(m.IDPrefixes, o.IDPrefixes) + } + + if o.Labels != nil { + m.Labels = make(map[string]string, len(o.Labels)) + for k, v := range o.Labels { + m.Labels[k] = v + } + } + + if o.NamePrefixes != nil { + m.NamePrefixes = make([]string, len(o.NamePrefixes)) + copy(m.NamePrefixes, o.NamePrefixes) + } + + if o.Runtimes != nil { + m.Runtimes = make([]string, len(o.Runtimes)) + copy(m.Runtimes, o.Runtimes) + } + +} + +func (m *ListServicesResponse) Copy() *ListServicesResponse { + if m == nil { + return nil + } + o := &ListServicesResponse{} + o.CopyFrom(m) + return o +} + +func (m *ListServicesResponse) CopyFrom(src interface{}) { + + o := src.(*ListServicesResponse) + if o.Services != nil { + m.Services = make([]*Service, len(o.Services)) + for i := range m.Services { + m.Services[i] = &Service{} + deepcopy.Copy(m.Services[i], o.Services[i]) + } + } + +} + +func (m *ListServiceStatusesRequest) Copy() *ListServiceStatusesRequest { + if m == nil { + return nil + } + o := &ListServiceStatusesRequest{} + o.CopyFrom(m) + return o +} + +func (m *ListServiceStatusesRequest) CopyFrom(src interface{}) { + + o := src.(*ListServiceStatusesRequest) + if o.Services != nil { + m.Services = make([]string, len(o.Services)) + copy(m.Services, o.Services) + } + +} + +func (m *ListServiceStatusesResponse) Copy() *ListServiceStatusesResponse { + if m == nil { + return nil + } + o := &ListServiceStatusesResponse{} + o.CopyFrom(m) + return o +} + +func (m *ListServiceStatusesResponse) CopyFrom(src interface{}) { + + o := src.(*ListServiceStatusesResponse) + if o.Statuses != nil { + m.Statuses = make([]*ListServiceStatusesResponse_ServiceStatus, len(o.Statuses)) + for i := range m.Statuses { + m.Statuses[i] = &ListServiceStatusesResponse_ServiceStatus{} + deepcopy.Copy(m.Statuses[i], o.Statuses[i]) + } + } + +} + +func (m *ListServiceStatusesResponse_ServiceStatus) Copy() *ListServiceStatusesResponse_ServiceStatus { + if m == nil { + return nil + } + o := &ListServiceStatusesResponse_ServiceStatus{} + o.CopyFrom(m) + return o +} + +func (m *ListServiceStatusesResponse_ServiceStatus) CopyFrom(src interface{}) { + + o := src.(*ListServiceStatusesResponse_ServiceStatus) + m.ServiceID = o.ServiceID + m.DesiredTasks = o.DesiredTasks + m.RunningTasks = o.RunningTasks + m.CompletedTasks = o.CompletedTasks +} + +func (m *CreateNetworkRequest) Copy() *CreateNetworkRequest { + if m == nil { + return nil + } + o := &CreateNetworkRequest{} + o.CopyFrom(m) + return o +} + +func (m *CreateNetworkRequest) CopyFrom(src interface{}) { + + o := src.(*CreateNetworkRequest) + if o.Spec != nil { + m.Spec = &NetworkSpec{} + deepcopy.Copy(m.Spec, o.Spec) + } + +} + +func (m *CreateNetworkResponse) Copy() *CreateNetworkResponse { + if m == nil { + return nil + } + o := &CreateNetworkResponse{} + o.CopyFrom(m) + return o +} + +func (m *CreateNetworkResponse) CopyFrom(src interface{}) { + + o := src.(*CreateNetworkResponse) + if o.Network != nil { + m.Network = &Network{} + deepcopy.Copy(m.Network, o.Network) + } + +} + +func (m *GetNetworkRequest) Copy() *GetNetworkRequest { + if m == nil { + return nil + } + o := &GetNetworkRequest{} + o.CopyFrom(m) + return o +} + +func (m *GetNetworkRequest) CopyFrom(src interface{}) { + + o := src.(*GetNetworkRequest) + m.Name = o.Name + m.NetworkID = o.NetworkID + if o.Appdata != nil { + m.Appdata = &anypb.Any{} + deepcopy.Copy(m.Appdata, o.Appdata) + } + +} + +func (m *GetNetworkResponse) Copy() *GetNetworkResponse { + if m == nil { + return nil + } + o := &GetNetworkResponse{} + o.CopyFrom(m) + return o +} + +func (m *GetNetworkResponse) CopyFrom(src interface{}) { + + o := src.(*GetNetworkResponse) + if o.Network != nil { + m.Network = &Network{} + deepcopy.Copy(m.Network, o.Network) + } + +} + +func (m *RemoveNetworkRequest) Copy() *RemoveNetworkRequest { + if m == nil { + return nil + } + o := &RemoveNetworkRequest{} + o.CopyFrom(m) + return o +} + +func (m *RemoveNetworkRequest) CopyFrom(src interface{}) { + + o := src.(*RemoveNetworkRequest) + m.Name = o.Name + m.NetworkID = o.NetworkID +} + +func (m *RemoveNetworkResponse) Copy() *RemoveNetworkResponse { + if m == nil { + return nil + } + o := &RemoveNetworkResponse{} + o.CopyFrom(m) + return o +} + +func (m *RemoveNetworkResponse) CopyFrom(src interface{}) {} + +func (m *ListNetworksRequest) Copy() *ListNetworksRequest { + if m == nil { + return nil + } + o := &ListNetworksRequest{} + o.CopyFrom(m) + return o +} + +func (m *ListNetworksRequest) CopyFrom(src interface{}) { + + o := src.(*ListNetworksRequest) + if o.Filters != nil { + m.Filters = &ListNetworksRequest_Filters{} + deepcopy.Copy(m.Filters, o.Filters) + } + + if o.Appdata != nil { + m.Appdata = &anypb.Any{} + deepcopy.Copy(m.Appdata, o.Appdata) + } + +} + +func (m *ListNetworksRequest_Filters) Copy() *ListNetworksRequest_Filters { + if m == nil { + return nil + } + o := &ListNetworksRequest_Filters{} + o.CopyFrom(m) + return o +} + +func (m *ListNetworksRequest_Filters) CopyFrom(src interface{}) { + + o := src.(*ListNetworksRequest_Filters) + if o.Names != nil { + m.Names = make([]string, len(o.Names)) + copy(m.Names, o.Names) + } + + if o.IDPrefixes != nil { + m.IDPrefixes = make([]string, len(o.IDPrefixes)) + copy(m.IDPrefixes, o.IDPrefixes) + } + + if o.Labels != nil { + m.Labels = make(map[string]string, len(o.Labels)) + for k, v := range o.Labels { + m.Labels[k] = v + } + } + + if o.NamePrefixes != nil { + m.NamePrefixes = make([]string, len(o.NamePrefixes)) + copy(m.NamePrefixes, o.NamePrefixes) + } + +} + +func (m *ListNetworksResponse) Copy() *ListNetworksResponse { + if m == nil { + return nil + } + o := &ListNetworksResponse{} + o.CopyFrom(m) + return o +} + +func (m *ListNetworksResponse) CopyFrom(src interface{}) { + + o := src.(*ListNetworksResponse) + if o.Networks != nil { + m.Networks = make([]*Network, len(o.Networks)) + for i := range m.Networks { + m.Networks[i] = &Network{} + deepcopy.Copy(m.Networks[i], o.Networks[i]) + } + } + +} + +func (m *GetClusterRequest) Copy() *GetClusterRequest { + if m == nil { + return nil + } + o := &GetClusterRequest{} + o.CopyFrom(m) + return o +} + +func (m *GetClusterRequest) CopyFrom(src interface{}) { + + o := src.(*GetClusterRequest) + m.ClusterID = o.ClusterID +} + +func (m *GetClusterResponse) Copy() *GetClusterResponse { + if m == nil { + return nil + } + o := &GetClusterResponse{} + o.CopyFrom(m) + return o +} + +func (m *GetClusterResponse) CopyFrom(src interface{}) { + + o := src.(*GetClusterResponse) + if o.Cluster != nil { + m.Cluster = &Cluster{} + deepcopy.Copy(m.Cluster, o.Cluster) + } + +} + +func (m *ListClustersRequest) Copy() *ListClustersRequest { + if m == nil { + return nil + } + o := &ListClustersRequest{} + o.CopyFrom(m) + return o +} + +func (m *ListClustersRequest) CopyFrom(src interface{}) { + + o := src.(*ListClustersRequest) + if o.Filters != nil { + m.Filters = &ListClustersRequest_Filters{} + deepcopy.Copy(m.Filters, o.Filters) + } + +} + +func (m *ListClustersRequest_Filters) Copy() *ListClustersRequest_Filters { + if m == nil { + return nil + } + o := &ListClustersRequest_Filters{} + o.CopyFrom(m) + return o +} + +func (m *ListClustersRequest_Filters) CopyFrom(src interface{}) { + + o := src.(*ListClustersRequest_Filters) + if o.Names != nil { + m.Names = make([]string, len(o.Names)) + copy(m.Names, o.Names) + } + + if o.IDPrefixes != nil { + m.IDPrefixes = make([]string, len(o.IDPrefixes)) + copy(m.IDPrefixes, o.IDPrefixes) + } + + if o.Labels != nil { + m.Labels = make(map[string]string, len(o.Labels)) + for k, v := range o.Labels { + m.Labels[k] = v + } + } + + if o.NamePrefixes != nil { + m.NamePrefixes = make([]string, len(o.NamePrefixes)) + copy(m.NamePrefixes, o.NamePrefixes) + } + +} + +func (m *ListClustersResponse) Copy() *ListClustersResponse { + if m == nil { + return nil + } + o := &ListClustersResponse{} + o.CopyFrom(m) + return o +} + +func (m *ListClustersResponse) CopyFrom(src interface{}) { + + o := src.(*ListClustersResponse) + if o.Clusters != nil { + m.Clusters = make([]*Cluster, len(o.Clusters)) + for i := range m.Clusters { + m.Clusters[i] = &Cluster{} + deepcopy.Copy(m.Clusters[i], o.Clusters[i]) + } + } + +} + +func (m *KeyRotation) Copy() *KeyRotation { + if m == nil { + return nil + } + o := &KeyRotation{} + o.CopyFrom(m) + return o +} + +func (m *KeyRotation) CopyFrom(src interface{}) { + + o := src.(*KeyRotation) + m.WorkerJoinToken = o.WorkerJoinToken + m.ManagerJoinToken = o.ManagerJoinToken + m.ManagerUnlockKey = o.ManagerUnlockKey +} + +func (m *UpdateClusterRequest) Copy() *UpdateClusterRequest { + if m == nil { + return nil + } + o := &UpdateClusterRequest{} + o.CopyFrom(m) + return o +} + +func (m *UpdateClusterRequest) CopyFrom(src interface{}) { + + o := src.(*UpdateClusterRequest) + m.ClusterID = o.ClusterID + if o.ClusterVersion != nil { + m.ClusterVersion = &Version{} + deepcopy.Copy(m.ClusterVersion, o.ClusterVersion) + } + + if o.Spec != nil { + m.Spec = &ClusterSpec{} + deepcopy.Copy(m.Spec, o.Spec) + } + + if o.Rotation != nil { + m.Rotation = &KeyRotation{} + deepcopy.Copy(m.Rotation, o.Rotation) + } + +} + +func (m *UpdateClusterResponse) Copy() *UpdateClusterResponse { + if m == nil { + return nil + } + o := &UpdateClusterResponse{} + o.CopyFrom(m) + return o +} + +func (m *UpdateClusterResponse) CopyFrom(src interface{}) { + + o := src.(*UpdateClusterResponse) + if o.Cluster != nil { + m.Cluster = &Cluster{} + deepcopy.Copy(m.Cluster, o.Cluster) + } + +} + +func (m *GetSecretRequest) Copy() *GetSecretRequest { + if m == nil { + return nil + } + o := &GetSecretRequest{} + o.CopyFrom(m) + return o +} + +func (m *GetSecretRequest) CopyFrom(src interface{}) { + + o := src.(*GetSecretRequest) + m.SecretID = o.SecretID +} + +func (m *GetSecretResponse) Copy() *GetSecretResponse { + if m == nil { + return nil + } + o := &GetSecretResponse{} + o.CopyFrom(m) + return o +} + +func (m *GetSecretResponse) CopyFrom(src interface{}) { + + o := src.(*GetSecretResponse) + if o.Secret != nil { + m.Secret = &Secret{} + deepcopy.Copy(m.Secret, o.Secret) + } + +} + +func (m *UpdateSecretRequest) Copy() *UpdateSecretRequest { + if m == nil { + return nil + } + o := &UpdateSecretRequest{} + o.CopyFrom(m) + return o +} + +func (m *UpdateSecretRequest) CopyFrom(src interface{}) { + + o := src.(*UpdateSecretRequest) + m.SecretID = o.SecretID + if o.SecretVersion != nil { + m.SecretVersion = &Version{} + deepcopy.Copy(m.SecretVersion, o.SecretVersion) + } + + if o.Spec != nil { + m.Spec = &SecretSpec{} + deepcopy.Copy(m.Spec, o.Spec) + } + +} + +func (m *UpdateSecretResponse) Copy() *UpdateSecretResponse { + if m == nil { + return nil + } + o := &UpdateSecretResponse{} + o.CopyFrom(m) + return o +} + +func (m *UpdateSecretResponse) CopyFrom(src interface{}) { + + o := src.(*UpdateSecretResponse) + if o.Secret != nil { + m.Secret = &Secret{} + deepcopy.Copy(m.Secret, o.Secret) + } + +} + +func (m *ListSecretsRequest) Copy() *ListSecretsRequest { + if m == nil { + return nil + } + o := &ListSecretsRequest{} + o.CopyFrom(m) + return o +} + +func (m *ListSecretsRequest) CopyFrom(src interface{}) { + + o := src.(*ListSecretsRequest) + if o.Filters != nil { + m.Filters = &ListSecretsRequest_Filters{} + deepcopy.Copy(m.Filters, o.Filters) + } + +} + +func (m *ListSecretsRequest_Filters) Copy() *ListSecretsRequest_Filters { + if m == nil { + return nil + } + o := &ListSecretsRequest_Filters{} + o.CopyFrom(m) + return o +} + +func (m *ListSecretsRequest_Filters) CopyFrom(src interface{}) { + + o := src.(*ListSecretsRequest_Filters) + if o.Names != nil { + m.Names = make([]string, len(o.Names)) + copy(m.Names, o.Names) + } + + if o.IDPrefixes != nil { + m.IDPrefixes = make([]string, len(o.IDPrefixes)) + copy(m.IDPrefixes, o.IDPrefixes) + } + + if o.Labels != nil { + m.Labels = make(map[string]string, len(o.Labels)) + for k, v := range o.Labels { + m.Labels[k] = v + } + } + + if o.NamePrefixes != nil { + m.NamePrefixes = make([]string, len(o.NamePrefixes)) + copy(m.NamePrefixes, o.NamePrefixes) + } + +} + +func (m *ListSecretsResponse) Copy() *ListSecretsResponse { + if m == nil { + return nil + } + o := &ListSecretsResponse{} + o.CopyFrom(m) + return o +} + +func (m *ListSecretsResponse) CopyFrom(src interface{}) { + + o := src.(*ListSecretsResponse) + if o.Secrets != nil { + m.Secrets = make([]*Secret, len(o.Secrets)) + for i := range m.Secrets { + m.Secrets[i] = &Secret{} + deepcopy.Copy(m.Secrets[i], o.Secrets[i]) + } + } + +} + +func (m *CreateSecretRequest) Copy() *CreateSecretRequest { + if m == nil { + return nil + } + o := &CreateSecretRequest{} + o.CopyFrom(m) + return o +} + +func (m *CreateSecretRequest) CopyFrom(src interface{}) { + + o := src.(*CreateSecretRequest) + if o.Spec != nil { + m.Spec = &SecretSpec{} + deepcopy.Copy(m.Spec, o.Spec) + } + +} + +func (m *CreateSecretResponse) Copy() *CreateSecretResponse { + if m == nil { + return nil + } + o := &CreateSecretResponse{} + o.CopyFrom(m) + return o +} + +func (m *CreateSecretResponse) CopyFrom(src interface{}) { + + o := src.(*CreateSecretResponse) + if o.Secret != nil { + m.Secret = &Secret{} + deepcopy.Copy(m.Secret, o.Secret) + } + +} + +func (m *RemoveSecretRequest) Copy() *RemoveSecretRequest { + if m == nil { + return nil + } + o := &RemoveSecretRequest{} + o.CopyFrom(m) + return o +} + +func (m *RemoveSecretRequest) CopyFrom(src interface{}) { + + o := src.(*RemoveSecretRequest) + m.SecretID = o.SecretID +} + +func (m *RemoveSecretResponse) Copy() *RemoveSecretResponse { + if m == nil { + return nil + } + o := &RemoveSecretResponse{} + o.CopyFrom(m) + return o +} + +func (m *RemoveSecretResponse) CopyFrom(src interface{}) {} + +func (m *GetConfigRequest) Copy() *GetConfigRequest { + if m == nil { + return nil + } + o := &GetConfigRequest{} + o.CopyFrom(m) + return o +} + +func (m *GetConfigRequest) CopyFrom(src interface{}) { + + o := src.(*GetConfigRequest) + m.ConfigID = o.ConfigID +} + +func (m *GetConfigResponse) Copy() *GetConfigResponse { + if m == nil { + return nil + } + o := &GetConfigResponse{} + o.CopyFrom(m) + return o +} + +func (m *GetConfigResponse) CopyFrom(src interface{}) { + + o := src.(*GetConfigResponse) + if o.Config != nil { + m.Config = &Config{} + deepcopy.Copy(m.Config, o.Config) + } + +} + +func (m *UpdateConfigRequest) Copy() *UpdateConfigRequest { + if m == nil { + return nil + } + o := &UpdateConfigRequest{} + o.CopyFrom(m) + return o +} + +func (m *UpdateConfigRequest) CopyFrom(src interface{}) { + + o := src.(*UpdateConfigRequest) + m.ConfigID = o.ConfigID + if o.ConfigVersion != nil { + m.ConfigVersion = &Version{} + deepcopy.Copy(m.ConfigVersion, o.ConfigVersion) + } + + if o.Spec != nil { + m.Spec = &ConfigSpec{} + deepcopy.Copy(m.Spec, o.Spec) + } + +} + +func (m *UpdateConfigResponse) Copy() *UpdateConfigResponse { + if m == nil { + return nil + } + o := &UpdateConfigResponse{} + o.CopyFrom(m) + return o +} + +func (m *UpdateConfigResponse) CopyFrom(src interface{}) { + + o := src.(*UpdateConfigResponse) + if o.Config != nil { + m.Config = &Config{} + deepcopy.Copy(m.Config, o.Config) + } + +} + +func (m *ListConfigsRequest) Copy() *ListConfigsRequest { + if m == nil { + return nil + } + o := &ListConfigsRequest{} + o.CopyFrom(m) + return o +} + +func (m *ListConfigsRequest) CopyFrom(src interface{}) { + + o := src.(*ListConfigsRequest) + if o.Filters != nil { + m.Filters = &ListConfigsRequest_Filters{} + deepcopy.Copy(m.Filters, o.Filters) + } + +} + +func (m *ListConfigsRequest_Filters) Copy() *ListConfigsRequest_Filters { + if m == nil { + return nil + } + o := &ListConfigsRequest_Filters{} + o.CopyFrom(m) + return o +} + +func (m *ListConfigsRequest_Filters) CopyFrom(src interface{}) { + + o := src.(*ListConfigsRequest_Filters) + if o.Names != nil { + m.Names = make([]string, len(o.Names)) + copy(m.Names, o.Names) + } + + if o.IDPrefixes != nil { + m.IDPrefixes = make([]string, len(o.IDPrefixes)) + copy(m.IDPrefixes, o.IDPrefixes) + } + + if o.Labels != nil { + m.Labels = make(map[string]string, len(o.Labels)) + for k, v := range o.Labels { + m.Labels[k] = v + } + } + + if o.NamePrefixes != nil { + m.NamePrefixes = make([]string, len(o.NamePrefixes)) + copy(m.NamePrefixes, o.NamePrefixes) + } + +} + +func (m *ListConfigsResponse) Copy() *ListConfigsResponse { + if m == nil { + return nil + } + o := &ListConfigsResponse{} + o.CopyFrom(m) + return o +} + +func (m *ListConfigsResponse) CopyFrom(src interface{}) { + + o := src.(*ListConfigsResponse) + if o.Configs != nil { + m.Configs = make([]*Config, len(o.Configs)) + for i := range m.Configs { + m.Configs[i] = &Config{} + deepcopy.Copy(m.Configs[i], o.Configs[i]) + } + } + +} + +func (m *CreateConfigRequest) Copy() *CreateConfigRequest { + if m == nil { + return nil + } + o := &CreateConfigRequest{} + o.CopyFrom(m) + return o +} + +func (m *CreateConfigRequest) CopyFrom(src interface{}) { + + o := src.(*CreateConfigRequest) + if o.Spec != nil { + m.Spec = &ConfigSpec{} + deepcopy.Copy(m.Spec, o.Spec) + } + +} + +func (m *CreateConfigResponse) Copy() *CreateConfigResponse { + if m == nil { + return nil + } + o := &CreateConfigResponse{} + o.CopyFrom(m) + return o +} + +func (m *CreateConfigResponse) CopyFrom(src interface{}) { + + o := src.(*CreateConfigResponse) + if o.Config != nil { + m.Config = &Config{} + deepcopy.Copy(m.Config, o.Config) + } + +} + +func (m *RemoveConfigRequest) Copy() *RemoveConfigRequest { + if m == nil { + return nil + } + o := &RemoveConfigRequest{} + o.CopyFrom(m) + return o +} + +func (m *RemoveConfigRequest) CopyFrom(src interface{}) { + + o := src.(*RemoveConfigRequest) + m.ConfigID = o.ConfigID +} + +func (m *RemoveConfigResponse) Copy() *RemoveConfigResponse { + if m == nil { + return nil + } + o := &RemoveConfigResponse{} + o.CopyFrom(m) + return o +} + +func (m *RemoveConfigResponse) CopyFrom(src interface{}) {} + +func (m *CreateExtensionRequest) Copy() *CreateExtensionRequest { + if m == nil { + return nil + } + o := &CreateExtensionRequest{} + o.CopyFrom(m) + return o +} + +func (m *CreateExtensionRequest) CopyFrom(src interface{}) { + + o := src.(*CreateExtensionRequest) + if o.Annotations != nil { + m.Annotations = &Annotations{} + deepcopy.Copy(m.Annotations, o.Annotations) + } + + m.Description = o.Description +} + +func (m *CreateExtensionResponse) Copy() *CreateExtensionResponse { + if m == nil { + return nil + } + o := &CreateExtensionResponse{} + o.CopyFrom(m) + return o +} + +func (m *CreateExtensionResponse) CopyFrom(src interface{}) { + + o := src.(*CreateExtensionResponse) + if o.Extension != nil { + m.Extension = &Extension{} + deepcopy.Copy(m.Extension, o.Extension) + } + +} + +func (m *RemoveExtensionRequest) Copy() *RemoveExtensionRequest { + if m == nil { + return nil + } + o := &RemoveExtensionRequest{} + o.CopyFrom(m) + return o +} + +func (m *RemoveExtensionRequest) CopyFrom(src interface{}) { + + o := src.(*RemoveExtensionRequest) + m.ExtensionID = o.ExtensionID +} + +func (m *RemoveExtensionResponse) Copy() *RemoveExtensionResponse { + if m == nil { + return nil + } + o := &RemoveExtensionResponse{} + o.CopyFrom(m) + return o +} + +func (m *RemoveExtensionResponse) CopyFrom(src interface{}) {} + +func (m *GetExtensionRequest) Copy() *GetExtensionRequest { + if m == nil { + return nil + } + o := &GetExtensionRequest{} + o.CopyFrom(m) + return o +} + +func (m *GetExtensionRequest) CopyFrom(src interface{}) { + + o := src.(*GetExtensionRequest) + m.ExtensionID = o.ExtensionID +} + +func (m *GetExtensionResponse) Copy() *GetExtensionResponse { + if m == nil { + return nil + } + o := &GetExtensionResponse{} + o.CopyFrom(m) + return o +} + +func (m *GetExtensionResponse) CopyFrom(src interface{}) { + + o := src.(*GetExtensionResponse) + if o.Extension != nil { + m.Extension = &Extension{} + deepcopy.Copy(m.Extension, o.Extension) + } + +} + +func (m *CreateResourceRequest) Copy() *CreateResourceRequest { + if m == nil { + return nil + } + o := &CreateResourceRequest{} + o.CopyFrom(m) + return o +} + +func (m *CreateResourceRequest) CopyFrom(src interface{}) { + + o := src.(*CreateResourceRequest) + if o.Annotations != nil { + m.Annotations = &Annotations{} + deepcopy.Copy(m.Annotations, o.Annotations) + } + + m.Kind = o.Kind + if o.Payload != nil { + m.Payload = &anypb.Any{} + deepcopy.Copy(m.Payload, o.Payload) + } + +} + +func (m *CreateResourceResponse) Copy() *CreateResourceResponse { + if m == nil { + return nil + } + o := &CreateResourceResponse{} + o.CopyFrom(m) + return o +} + +func (m *CreateResourceResponse) CopyFrom(src interface{}) { + + o := src.(*CreateResourceResponse) + if o.Resource != nil { + m.Resource = &Resource{} + deepcopy.Copy(m.Resource, o.Resource) + } + +} + +func (m *RemoveResourceRequest) Copy() *RemoveResourceRequest { + if m == nil { + return nil + } + o := &RemoveResourceRequest{} + o.CopyFrom(m) + return o +} + +func (m *RemoveResourceRequest) CopyFrom(src interface{}) { + + o := src.(*RemoveResourceRequest) + m.ResourceID = o.ResourceID +} + +func (m *RemoveResourceResponse) Copy() *RemoveResourceResponse { + if m == nil { + return nil + } + o := &RemoveResourceResponse{} + o.CopyFrom(m) + return o +} + +func (m *RemoveResourceResponse) CopyFrom(src interface{}) {} + +func (m *UpdateResourceRequest) Copy() *UpdateResourceRequest { + if m == nil { + return nil + } + o := &UpdateResourceRequest{} + o.CopyFrom(m) + return o +} + +func (m *UpdateResourceRequest) CopyFrom(src interface{}) { + + o := src.(*UpdateResourceRequest) + m.ResourceID = o.ResourceID + if o.ResourceVersion != nil { + m.ResourceVersion = &Version{} + deepcopy.Copy(m.ResourceVersion, o.ResourceVersion) + } + + if o.Annotations != nil { + m.Annotations = &Annotations{} + deepcopy.Copy(m.Annotations, o.Annotations) + } + + if o.Payload != nil { + m.Payload = &anypb.Any{} + deepcopy.Copy(m.Payload, o.Payload) + } + +} + +func (m *UpdateResourceResponse) Copy() *UpdateResourceResponse { + if m == nil { + return nil + } + o := &UpdateResourceResponse{} + o.CopyFrom(m) + return o +} + +func (m *UpdateResourceResponse) CopyFrom(src interface{}) { + + o := src.(*UpdateResourceResponse) + if o.Resource != nil { + m.Resource = &Resource{} + deepcopy.Copy(m.Resource, o.Resource) + } + +} + +func (m *GetResourceRequest) Copy() *GetResourceRequest { + if m == nil { + return nil + } + o := &GetResourceRequest{} + o.CopyFrom(m) + return o +} + +func (m *GetResourceRequest) CopyFrom(src interface{}) { + + o := src.(*GetResourceRequest) + m.ResourceID = o.ResourceID +} + +func (m *GetResourceResponse) Copy() *GetResourceResponse { + if m == nil { + return nil + } + o := &GetResourceResponse{} + o.CopyFrom(m) + return o +} + +func (m *GetResourceResponse) CopyFrom(src interface{}) { + + o := src.(*GetResourceResponse) + if o.Resource != nil { + m.Resource = &Resource{} + deepcopy.Copy(m.Resource, o.Resource) + } + +} + +func (m *ListResourcesRequest) Copy() *ListResourcesRequest { + if m == nil { + return nil + } + o := &ListResourcesRequest{} + o.CopyFrom(m) + return o +} + +func (m *ListResourcesRequest) CopyFrom(src interface{}) { + + o := src.(*ListResourcesRequest) + if o.Filters != nil { + m.Filters = &ListResourcesRequest_Filters{} + deepcopy.Copy(m.Filters, o.Filters) + } + +} + +func (m *ListResourcesRequest_Filters) Copy() *ListResourcesRequest_Filters { + if m == nil { + return nil + } + o := &ListResourcesRequest_Filters{} + o.CopyFrom(m) + return o +} + +func (m *ListResourcesRequest_Filters) CopyFrom(src interface{}) { + + o := src.(*ListResourcesRequest_Filters) + if o.Names != nil { + m.Names = make([]string, len(o.Names)) + copy(m.Names, o.Names) + } + + if o.IDPrefixes != nil { + m.IDPrefixes = make([]string, len(o.IDPrefixes)) + copy(m.IDPrefixes, o.IDPrefixes) + } + + if o.Labels != nil { + m.Labels = make(map[string]string, len(o.Labels)) + for k, v := range o.Labels { + m.Labels[k] = v + } + } + + if o.NamePrefixes != nil { + m.NamePrefixes = make([]string, len(o.NamePrefixes)) + copy(m.NamePrefixes, o.NamePrefixes) + } + + m.Kind = o.Kind +} + +func (m *ListResourcesResponse) Copy() *ListResourcesResponse { + if m == nil { + return nil + } + o := &ListResourcesResponse{} + o.CopyFrom(m) + return o +} + +func (m *ListResourcesResponse) CopyFrom(src interface{}) { + + o := src.(*ListResourcesResponse) + if o.Resources != nil { + m.Resources = make([]*Resource, len(o.Resources)) + for i := range m.Resources { + m.Resources[i] = &Resource{} + deepcopy.Copy(m.Resources[i], o.Resources[i]) + } + } + +} + +func (m *CreateVolumeRequest) Copy() *CreateVolumeRequest { + if m == nil { + return nil + } + o := &CreateVolumeRequest{} + o.CopyFrom(m) + return o +} + +func (m *CreateVolumeRequest) CopyFrom(src interface{}) { + + o := src.(*CreateVolumeRequest) + if o.Spec != nil { + m.Spec = &VolumeSpec{} + deepcopy.Copy(m.Spec, o.Spec) + } + +} + +func (m *CreateVolumeResponse) Copy() *CreateVolumeResponse { + if m == nil { + return nil + } + o := &CreateVolumeResponse{} + o.CopyFrom(m) + return o +} + +func (m *CreateVolumeResponse) CopyFrom(src interface{}) { + + o := src.(*CreateVolumeResponse) + if o.Volume != nil { + m.Volume = &Volume{} + deepcopy.Copy(m.Volume, o.Volume) + } + +} + +func (m *GetVolumeRequest) Copy() *GetVolumeRequest { + if m == nil { + return nil + } + o := &GetVolumeRequest{} + o.CopyFrom(m) + return o +} + +func (m *GetVolumeRequest) CopyFrom(src interface{}) { + + o := src.(*GetVolumeRequest) + m.VolumeID = o.VolumeID +} + +func (m *GetVolumeResponse) Copy() *GetVolumeResponse { + if m == nil { + return nil + } + o := &GetVolumeResponse{} + o.CopyFrom(m) + return o +} + +func (m *GetVolumeResponse) CopyFrom(src interface{}) { + + o := src.(*GetVolumeResponse) + if o.Volume != nil { + m.Volume = &Volume{} + deepcopy.Copy(m.Volume, o.Volume) + } + +} + +func (m *UpdateVolumeRequest) Copy() *UpdateVolumeRequest { + if m == nil { + return nil + } + o := &UpdateVolumeRequest{} + o.CopyFrom(m) + return o +} + +func (m *UpdateVolumeRequest) CopyFrom(src interface{}) { + + o := src.(*UpdateVolumeRequest) + m.VolumeID = o.VolumeID + if o.VolumeVersion != nil { + m.VolumeVersion = &Version{} + deepcopy.Copy(m.VolumeVersion, o.VolumeVersion) + } + + if o.Spec != nil { + m.Spec = &VolumeSpec{} + deepcopy.Copy(m.Spec, o.Spec) + } + +} + +func (m *UpdateVolumeResponse) Copy() *UpdateVolumeResponse { + if m == nil { + return nil + } + o := &UpdateVolumeResponse{} + o.CopyFrom(m) + return o +} + +func (m *UpdateVolumeResponse) CopyFrom(src interface{}) { + + o := src.(*UpdateVolumeResponse) + if o.Volume != nil { + m.Volume = &Volume{} + deepcopy.Copy(m.Volume, o.Volume) + } + +} + +func (m *ListVolumesRequest) Copy() *ListVolumesRequest { + if m == nil { + return nil + } + o := &ListVolumesRequest{} + o.CopyFrom(m) + return o +} + +func (m *ListVolumesRequest) CopyFrom(src interface{}) { + + o := src.(*ListVolumesRequest) + if o.Filters != nil { + m.Filters = &ListVolumesRequest_Filters{} + deepcopy.Copy(m.Filters, o.Filters) + } + +} + +func (m *ListVolumesRequest_Filters) Copy() *ListVolumesRequest_Filters { + if m == nil { + return nil + } + o := &ListVolumesRequest_Filters{} + o.CopyFrom(m) + return o +} + +func (m *ListVolumesRequest_Filters) CopyFrom(src interface{}) { + + o := src.(*ListVolumesRequest_Filters) + if o.Names != nil { + m.Names = make([]string, len(o.Names)) + copy(m.Names, o.Names) + } + + if o.IDPrefixes != nil { + m.IDPrefixes = make([]string, len(o.IDPrefixes)) + copy(m.IDPrefixes, o.IDPrefixes) + } + + if o.Labels != nil { + m.Labels = make(map[string]string, len(o.Labels)) + for k, v := range o.Labels { + m.Labels[k] = v + } + } + + if o.NamePrefixes != nil { + m.NamePrefixes = make([]string, len(o.NamePrefixes)) + copy(m.NamePrefixes, o.NamePrefixes) + } + + if o.Groups != nil { + m.Groups = make([]string, len(o.Groups)) + copy(m.Groups, o.Groups) + } + + if o.Drivers != nil { + m.Drivers = make([]string, len(o.Drivers)) + copy(m.Drivers, o.Drivers) + } + +} + +func (m *ListVolumesResponse) Copy() *ListVolumesResponse { + if m == nil { + return nil + } + o := &ListVolumesResponse{} + o.CopyFrom(m) + return o +} + +func (m *ListVolumesResponse) CopyFrom(src interface{}) { + + o := src.(*ListVolumesResponse) + if o.Volumes != nil { + m.Volumes = make([]*Volume, len(o.Volumes)) + for i := range m.Volumes { + m.Volumes[i] = &Volume{} + deepcopy.Copy(m.Volumes[i], o.Volumes[i]) + } + } + +} + +func (m *RemoveVolumeRequest) Copy() *RemoveVolumeRequest { + if m == nil { + return nil + } + o := &RemoveVolumeRequest{} + o.CopyFrom(m) + return o +} + +func (m *RemoveVolumeRequest) CopyFrom(src interface{}) { + + o := src.(*RemoveVolumeRequest) + m.VolumeID = o.VolumeID + m.Force = o.Force +} + +func (m *RemoveVolumeResponse) Copy() *RemoveVolumeResponse { + if m == nil { + return nil + } + o := &RemoveVolumeResponse{} + o.CopyFrom(m) + return o +} + +func (m *RemoveVolumeResponse) CopyFrom(src interface{}) {} diff --git a/api/control.pb.go b/api/control.pb.go index 384e82f0f4..d4aaecee48 100644 --- a/api/control.pb.go +++ b/api/control.pb.go @@ -1,41 +1,27 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: github.com/docker/swarmkit/api/control.proto +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.11 +// protoc v3.21.12 +// source: api/control.proto package api import ( - context "context" - fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" - github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" - types "github.com/gogo/protobuf/types" - github_com_moby_swarmkit_v2_api_deepcopy "github.com/moby/swarmkit/v2/api/deepcopy" - raftselector "github.com/moby/swarmkit/v2/manager/raftselector" _ "github.com/moby/swarmkit/v2/protobuf/plugin" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - metadata "google.golang.org/grpc/metadata" - peer "google.golang.org/grpc/peer" - status "google.golang.org/grpc/status" - io "io" - math "math" - math_bits "math/bits" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + anypb "google.golang.org/protobuf/types/known/anypb" reflect "reflect" - strings "strings" - rafttime "time" + sync "sync" + unsafe "unsafe" ) -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package +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 UpdateServiceRequest_Rollback int32 @@ -48,1728 +34,1856 @@ const ( UpdateServiceRequest_PREVIOUS UpdateServiceRequest_Rollback = 1 ) -var UpdateServiceRequest_Rollback_name = map[int32]string{ - 0: "NONE", - 1: "PREVIOUS", -} +// Enum value maps for UpdateServiceRequest_Rollback. +var ( + UpdateServiceRequest_Rollback_name = map[int32]string{ + 0: "NONE", + 1: "PREVIOUS", + } + UpdateServiceRequest_Rollback_value = map[string]int32{ + "NONE": 0, + "PREVIOUS": 1, + } +) -var UpdateServiceRequest_Rollback_value = map[string]int32{ - "NONE": 0, - "PREVIOUS": 1, +func (x UpdateServiceRequest_Rollback) Enum() *UpdateServiceRequest_Rollback { + p := new(UpdateServiceRequest_Rollback) + *p = x + return p } func (x UpdateServiceRequest_Rollback) String() string { - return proto.EnumName(UpdateServiceRequest_Rollback_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } +func (UpdateServiceRequest_Rollback) Descriptor() protoreflect.EnumDescriptor { + return file_api_control_proto_enumTypes[0].Descriptor() +} + +func (UpdateServiceRequest_Rollback) Type() protoreflect.EnumType { + return &file_api_control_proto_enumTypes[0] +} + +func (x UpdateServiceRequest_Rollback) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use UpdateServiceRequest_Rollback.Descriptor instead. func (UpdateServiceRequest_Rollback) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{18, 0} + return file_api_control_proto_rawDescGZIP(), []int{18, 0} } type GetNodeRequest struct { - NodeID string `protobuf:"bytes,1,opt,name=node_id,json=nodeId,proto3" json:"node_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + NodeID string `protobuf:"bytes,1,opt,name=node_id,json=nodeId,proto3" json:"node_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GetNodeRequest) Reset() { + *x = GetNodeRequest{} + mi := &file_api_control_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetNodeRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *GetNodeRequest) Reset() { *m = GetNodeRequest{} } func (*GetNodeRequest) ProtoMessage() {} -func (*GetNodeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{0} -} -func (m *GetNodeRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *GetNodeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_GetNodeRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *GetNodeRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *GetNodeRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetNodeRequest.Merge(m, src) + +// Deprecated: Use GetNodeRequest.ProtoReflect.Descriptor instead. +func (*GetNodeRequest) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{0} } -func (m *GetNodeRequest) XXX_Size() int { - return m.Size() + +func (x *GetNodeRequest) GetNodeID() string { + if x != nil { + return x.NodeID + } + return "" } -func (m *GetNodeRequest) XXX_DiscardUnknown() { - xxx_messageInfo_GetNodeRequest.DiscardUnknown(m) + +type GetNodeResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Node *Node `protobuf:"bytes,1,opt,name=node,proto3" json:"node,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -var xxx_messageInfo_GetNodeRequest proto.InternalMessageInfo +func (x *GetNodeResponse) Reset() { + *x = GetNodeResponse{} + mi := &file_api_control_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} -type GetNodeResponse struct { - Node *Node `protobuf:"bytes,1,opt,name=node,proto3" json:"node,omitempty"` +func (x *GetNodeResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *GetNodeResponse) Reset() { *m = GetNodeResponse{} } func (*GetNodeResponse) ProtoMessage() {} -func (*GetNodeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{1} -} -func (m *GetNodeResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *GetNodeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_GetNodeResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *GetNodeResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *GetNodeResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetNodeResponse.Merge(m, src) + +// Deprecated: Use GetNodeResponse.ProtoReflect.Descriptor instead. +func (*GetNodeResponse) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{1} } -func (m *GetNodeResponse) XXX_Size() int { - return m.Size() + +func (x *GetNodeResponse) GetNode() *Node { + if x != nil { + return x.Node + } + return nil } -func (m *GetNodeResponse) XXX_DiscardUnknown() { - xxx_messageInfo_GetNodeResponse.DiscardUnknown(m) + +type ListNodesRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Filters *ListNodesRequest_Filters `protobuf:"bytes,1,opt,name=filters,proto3" json:"filters,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -var xxx_messageInfo_GetNodeResponse proto.InternalMessageInfo +func (x *ListNodesRequest) Reset() { + *x = ListNodesRequest{} + mi := &file_api_control_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} -type ListNodesRequest struct { - Filters *ListNodesRequest_Filters `protobuf:"bytes,1,opt,name=filters,proto3" json:"filters,omitempty"` +func (x *ListNodesRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ListNodesRequest) Reset() { *m = ListNodesRequest{} } func (*ListNodesRequest) ProtoMessage() {} -func (*ListNodesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{2} -} -func (m *ListNodesRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ListNodesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ListNodesRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *ListNodesRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } -} -func (m *ListNodesRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_ListNodesRequest.Merge(m, src) -} -func (m *ListNodesRequest) XXX_Size() int { - return m.Size() -} -func (m *ListNodesRequest) XXX_DiscardUnknown() { - xxx_messageInfo_ListNodesRequest.DiscardUnknown(m) + return mi.MessageOf(x) } -var xxx_messageInfo_ListNodesRequest proto.InternalMessageInfo - -type ListNodesRequest_Filters struct { - Names []string `protobuf:"bytes,1,rep,name=names,proto3" json:"names,omitempty"` - IDPrefixes []string `protobuf:"bytes,2,rep,name=id_prefixes,json=idPrefixes,proto3" json:"id_prefixes,omitempty"` - // Labels refers to engine labels, which are labels set by the user on the - // node and reported back to the managers - 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"` - // NodeLabels are labels set on the node object on the managers. - NodeLabels map[string]string `protobuf:"bytes,7,rep,name=node_labels,json=nodeLabels,proto3" json:"node_labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - Memberships []NodeSpec_Membership `protobuf:"varint,4,rep,name=memberships,proto3,enum=docker.swarmkit.v1.NodeSpec_Membership" json:"memberships,omitempty"` - Roles []NodeRole `protobuf:"varint,5,rep,name=roles,proto3,enum=docker.swarmkit.v1.NodeRole" json:"roles,omitempty"` - // NamePrefixes matches all objects with the given prefixes - NamePrefixes []string `protobuf:"bytes,6,rep,name=name_prefixes,json=namePrefixes,proto3" json:"name_prefixes,omitempty"` +// Deprecated: Use ListNodesRequest.ProtoReflect.Descriptor instead. +func (*ListNodesRequest) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{2} } -func (m *ListNodesRequest_Filters) Reset() { *m = ListNodesRequest_Filters{} } -func (*ListNodesRequest_Filters) ProtoMessage() {} -func (*ListNodesRequest_Filters) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{2, 0} -} -func (m *ListNodesRequest_Filters) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ListNodesRequest_Filters) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ListNodesRequest_Filters.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 (x *ListNodesRequest) GetFilters() *ListNodesRequest_Filters { + if x != nil { + return x.Filters } + return nil } -func (m *ListNodesRequest_Filters) XXX_Merge(src proto.Message) { - xxx_messageInfo_ListNodesRequest_Filters.Merge(m, src) -} -func (m *ListNodesRequest_Filters) XXX_Size() int { - return m.Size() -} -func (m *ListNodesRequest_Filters) XXX_DiscardUnknown() { - xxx_messageInfo_ListNodesRequest_Filters.DiscardUnknown(m) + +type ListNodesResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Nodes []*Node `protobuf:"bytes,1,rep,name=nodes,proto3" json:"nodes,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -var xxx_messageInfo_ListNodesRequest_Filters proto.InternalMessageInfo +func (x *ListNodesResponse) Reset() { + *x = ListNodesResponse{} + mi := &file_api_control_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} -type ListNodesResponse struct { - Nodes []*Node `protobuf:"bytes,1,rep,name=nodes,proto3" json:"nodes,omitempty"` +func (x *ListNodesResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ListNodesResponse) Reset() { *m = ListNodesResponse{} } func (*ListNodesResponse) ProtoMessage() {} -func (*ListNodesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{3} -} -func (m *ListNodesResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ListNodesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ListNodesResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *ListNodesResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[3] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *ListNodesResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_ListNodesResponse.Merge(m, src) -} -func (m *ListNodesResponse) XXX_Size() int { - return m.Size() -} -func (m *ListNodesResponse) XXX_DiscardUnknown() { - xxx_messageInfo_ListNodesResponse.DiscardUnknown(m) + +// Deprecated: Use ListNodesResponse.ProtoReflect.Descriptor instead. +func (*ListNodesResponse) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{3} } -var xxx_messageInfo_ListNodesResponse proto.InternalMessageInfo +func (x *ListNodesResponse) GetNodes() []*Node { + if x != nil { + return x.Nodes + } + return nil +} // UpdateNodeRequest requests an update to the specified node. This may be used // to request a new availability for a node, such as PAUSE. Invalid updates // will be denied and cause an error. type UpdateNodeRequest struct { - NodeID string `protobuf:"bytes,1,opt,name=node_id,json=nodeId,proto3" json:"node_id,omitempty"` - NodeVersion *Version `protobuf:"bytes,2,opt,name=node_version,json=nodeVersion,proto3" json:"node_version,omitempty"` - Spec *NodeSpec `protobuf:"bytes,3,opt,name=spec,proto3" json:"spec,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + NodeID string `protobuf:"bytes,1,opt,name=node_id,json=nodeId,proto3" json:"node_id,omitempty"` + NodeVersion *Version `protobuf:"bytes,2,opt,name=node_version,json=nodeVersion,proto3" json:"node_version,omitempty"` + Spec *NodeSpec `protobuf:"bytes,3,opt,name=spec,proto3" json:"spec,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *UpdateNodeRequest) Reset() { + *x = UpdateNodeRequest{} + mi := &file_api_control_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *UpdateNodeRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *UpdateNodeRequest) Reset() { *m = UpdateNodeRequest{} } func (*UpdateNodeRequest) ProtoMessage() {} -func (*UpdateNodeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{4} -} -func (m *UpdateNodeRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *UpdateNodeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_UpdateNodeRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *UpdateNodeRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[4] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *UpdateNodeRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_UpdateNodeRequest.Merge(m, src) + +// Deprecated: Use UpdateNodeRequest.ProtoReflect.Descriptor instead. +func (*UpdateNodeRequest) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{4} } -func (m *UpdateNodeRequest) XXX_Size() int { - return m.Size() + +func (x *UpdateNodeRequest) GetNodeID() string { + if x != nil { + return x.NodeID + } + return "" } -func (m *UpdateNodeRequest) XXX_DiscardUnknown() { - xxx_messageInfo_UpdateNodeRequest.DiscardUnknown(m) + +func (x *UpdateNodeRequest) GetNodeVersion() *Version { + if x != nil { + return x.NodeVersion + } + return nil } -var xxx_messageInfo_UpdateNodeRequest proto.InternalMessageInfo +func (x *UpdateNodeRequest) GetSpec() *NodeSpec { + if x != nil { + return x.Spec + } + return nil +} type UpdateNodeResponse struct { - Node *Node `protobuf:"bytes,1,opt,name=node,proto3" json:"node,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Node *Node `protobuf:"bytes,1,opt,name=node,proto3" json:"node,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *UpdateNodeResponse) Reset() { + *x = UpdateNodeResponse{} + mi := &file_api_control_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *UpdateNodeResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *UpdateNodeResponse) Reset() { *m = UpdateNodeResponse{} } func (*UpdateNodeResponse) ProtoMessage() {} -func (*UpdateNodeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{5} -} -func (m *UpdateNodeResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *UpdateNodeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_UpdateNodeResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *UpdateNodeResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[5] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *UpdateNodeResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_UpdateNodeResponse.Merge(m, src) -} -func (m *UpdateNodeResponse) XXX_Size() int { - return m.Size() -} -func (m *UpdateNodeResponse) XXX_DiscardUnknown() { - xxx_messageInfo_UpdateNodeResponse.DiscardUnknown(m) + +// Deprecated: Use UpdateNodeResponse.ProtoReflect.Descriptor instead. +func (*UpdateNodeResponse) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{5} } -var xxx_messageInfo_UpdateNodeResponse proto.InternalMessageInfo +func (x *UpdateNodeResponse) GetNode() *Node { + if x != nil { + return x.Node + } + return nil +} // RemoveNodeRequest requests to delete the specified node from store. type RemoveNodeRequest struct { - NodeID string `protobuf:"bytes,1,opt,name=node_id,json=nodeId,proto3" json:"node_id,omitempty"` - Force bool `protobuf:"varint,2,opt,name=force,proto3" json:"force,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + NodeID string `protobuf:"bytes,1,opt,name=node_id,json=nodeId,proto3" json:"node_id,omitempty"` + Force bool `protobuf:"varint,2,opt,name=force,proto3" json:"force,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RemoveNodeRequest) Reset() { + *x = RemoveNodeRequest{} + mi := &file_api_control_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RemoveNodeRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *RemoveNodeRequest) Reset() { *m = RemoveNodeRequest{} } func (*RemoveNodeRequest) ProtoMessage() {} -func (*RemoveNodeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{6} -} -func (m *RemoveNodeRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *RemoveNodeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_RemoveNodeRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *RemoveNodeRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[6] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *RemoveNodeRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_RemoveNodeRequest.Merge(m, src) -} -func (m *RemoveNodeRequest) XXX_Size() int { - return m.Size() + +// Deprecated: Use RemoveNodeRequest.ProtoReflect.Descriptor instead. +func (*RemoveNodeRequest) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{6} } -func (m *RemoveNodeRequest) XXX_DiscardUnknown() { - xxx_messageInfo_RemoveNodeRequest.DiscardUnknown(m) + +func (x *RemoveNodeRequest) GetNodeID() string { + if x != nil { + return x.NodeID + } + return "" } -var xxx_messageInfo_RemoveNodeRequest proto.InternalMessageInfo +func (x *RemoveNodeRequest) GetForce() bool { + if x != nil { + return x.Force + } + return false +} type RemoveNodeResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RemoveNodeResponse) Reset() { + *x = RemoveNodeResponse{} + mi := &file_api_control_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RemoveNodeResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *RemoveNodeResponse) Reset() { *m = RemoveNodeResponse{} } func (*RemoveNodeResponse) ProtoMessage() {} -func (*RemoveNodeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{7} -} -func (m *RemoveNodeResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *RemoveNodeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_RemoveNodeResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *RemoveNodeResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[7] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *RemoveNodeResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_RemoveNodeResponse.Merge(m, src) -} -func (m *RemoveNodeResponse) XXX_Size() int { - return m.Size() + +// Deprecated: Use RemoveNodeResponse.ProtoReflect.Descriptor instead. +func (*RemoveNodeResponse) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{7} } -func (m *RemoveNodeResponse) XXX_DiscardUnknown() { - xxx_messageInfo_RemoveNodeResponse.DiscardUnknown(m) + +type GetTaskRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + TaskID string `protobuf:"bytes,1,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -var xxx_messageInfo_RemoveNodeResponse proto.InternalMessageInfo +func (x *GetTaskRequest) Reset() { + *x = GetTaskRequest{} + mi := &file_api_control_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} -type GetTaskRequest struct { - TaskID string `protobuf:"bytes,1,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"` +func (x *GetTaskRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *GetTaskRequest) Reset() { *m = GetTaskRequest{} } func (*GetTaskRequest) ProtoMessage() {} -func (*GetTaskRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{8} -} -func (m *GetTaskRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *GetTaskRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_GetTaskRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *GetTaskRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[8] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *GetTaskRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetTaskRequest.Merge(m, src) + +// Deprecated: Use GetTaskRequest.ProtoReflect.Descriptor instead. +func (*GetTaskRequest) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{8} } -func (m *GetTaskRequest) XXX_Size() int { - return m.Size() + +func (x *GetTaskRequest) GetTaskID() string { + if x != nil { + return x.TaskID + } + return "" } -func (m *GetTaskRequest) XXX_DiscardUnknown() { - xxx_messageInfo_GetTaskRequest.DiscardUnknown(m) + +type GetTaskResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Task *Task `protobuf:"bytes,1,opt,name=task,proto3" json:"task,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -var xxx_messageInfo_GetTaskRequest proto.InternalMessageInfo +func (x *GetTaskResponse) Reset() { + *x = GetTaskResponse{} + mi := &file_api_control_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} -type GetTaskResponse struct { - Task *Task `protobuf:"bytes,1,opt,name=task,proto3" json:"task,omitempty"` +func (x *GetTaskResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *GetTaskResponse) Reset() { *m = GetTaskResponse{} } func (*GetTaskResponse) ProtoMessage() {} -func (*GetTaskResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{9} -} -func (m *GetTaskResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *GetTaskResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_GetTaskResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *GetTaskResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[9] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *GetTaskResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetTaskResponse.Merge(m, src) + +// Deprecated: Use GetTaskResponse.ProtoReflect.Descriptor instead. +func (*GetTaskResponse) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{9} } -func (m *GetTaskResponse) XXX_Size() int { - return m.Size() + +func (x *GetTaskResponse) GetTask() *Task { + if x != nil { + return x.Task + } + return nil } -func (m *GetTaskResponse) XXX_DiscardUnknown() { - xxx_messageInfo_GetTaskResponse.DiscardUnknown(m) + +type RemoveTaskRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + TaskID string `protobuf:"bytes,1,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -var xxx_messageInfo_GetTaskResponse proto.InternalMessageInfo +func (x *RemoveTaskRequest) Reset() { + *x = RemoveTaskRequest{} + mi := &file_api_control_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} -type RemoveTaskRequest struct { - TaskID string `protobuf:"bytes,1,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"` +func (x *RemoveTaskRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *RemoveTaskRequest) Reset() { *m = RemoveTaskRequest{} } func (*RemoveTaskRequest) ProtoMessage() {} -func (*RemoveTaskRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{10} -} -func (m *RemoveTaskRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *RemoveTaskRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_RemoveTaskRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *RemoveTaskRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[10] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *RemoveTaskRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_RemoveTaskRequest.Merge(m, src) + +// Deprecated: Use RemoveTaskRequest.ProtoReflect.Descriptor instead. +func (*RemoveTaskRequest) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{10} } -func (m *RemoveTaskRequest) XXX_Size() int { - return m.Size() + +func (x *RemoveTaskRequest) GetTaskID() string { + if x != nil { + return x.TaskID + } + return "" } -func (m *RemoveTaskRequest) XXX_DiscardUnknown() { - xxx_messageInfo_RemoveTaskRequest.DiscardUnknown(m) + +type RemoveTaskResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -var xxx_messageInfo_RemoveTaskRequest proto.InternalMessageInfo +func (x *RemoveTaskResponse) Reset() { + *x = RemoveTaskResponse{} + mi := &file_api_control_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} -type RemoveTaskResponse struct { +func (x *RemoveTaskResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *RemoveTaskResponse) Reset() { *m = RemoveTaskResponse{} } func (*RemoveTaskResponse) ProtoMessage() {} -func (*RemoveTaskResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{11} -} -func (m *RemoveTaskResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *RemoveTaskResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_RemoveTaskResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *RemoveTaskResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[11] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *RemoveTaskResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_RemoveTaskResponse.Merge(m, src) -} -func (m *RemoveTaskResponse) XXX_Size() int { - return m.Size() + +// Deprecated: Use RemoveTaskResponse.ProtoReflect.Descriptor instead. +func (*RemoveTaskResponse) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{11} } -func (m *RemoveTaskResponse) XXX_DiscardUnknown() { - xxx_messageInfo_RemoveTaskResponse.DiscardUnknown(m) + +type ListTasksRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Filters *ListTasksRequest_Filters `protobuf:"bytes,1,opt,name=filters,proto3" json:"filters,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -var xxx_messageInfo_RemoveTaskResponse proto.InternalMessageInfo +func (x *ListTasksRequest) Reset() { + *x = ListTasksRequest{} + mi := &file_api_control_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} -type ListTasksRequest struct { - Filters *ListTasksRequest_Filters `protobuf:"bytes,1,opt,name=filters,proto3" json:"filters,omitempty"` +func (x *ListTasksRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ListTasksRequest) Reset() { *m = ListTasksRequest{} } func (*ListTasksRequest) ProtoMessage() {} -func (*ListTasksRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{12} -} -func (m *ListTasksRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ListTasksRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ListTasksRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *ListTasksRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[12] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } -} -func (m *ListTasksRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_ListTasksRequest.Merge(m, src) -} -func (m *ListTasksRequest) XXX_Size() int { - return m.Size() -} -func (m *ListTasksRequest) XXX_DiscardUnknown() { - xxx_messageInfo_ListTasksRequest.DiscardUnknown(m) + return mi.MessageOf(x) } -var xxx_messageInfo_ListTasksRequest proto.InternalMessageInfo - -type ListTasksRequest_Filters struct { - Names []string `protobuf:"bytes,1,rep,name=names,proto3" json:"names,omitempty"` - IDPrefixes []string `protobuf:"bytes,2,rep,name=id_prefixes,json=idPrefixes,proto3" json:"id_prefixes,omitempty"` - 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"` - ServiceIDs []string `protobuf:"bytes,4,rep,name=service_ids,json=serviceIds,proto3" json:"service_ids,omitempty"` - NodeIDs []string `protobuf:"bytes,5,rep,name=node_ids,json=nodeIds,proto3" json:"node_ids,omitempty"` - DesiredStates []TaskState `protobuf:"varint,6,rep,name=desired_states,json=desiredStates,proto3,enum=docker.swarmkit.v1.TaskState" json:"desired_states,omitempty"` - // NamePrefixes matches all objects with the given prefixes - NamePrefixes []string `protobuf:"bytes,7,rep,name=name_prefixes,json=namePrefixes,proto3" json:"name_prefixes,omitempty"` - Runtimes []string `protobuf:"bytes,9,rep,name=runtimes,proto3" json:"runtimes,omitempty"` - // UpToDate matches tasks that are consistent with the current - // service definition. - // Note: this is intended for internal status reporting rather - // than being exposed to users. It may be removed in the future. - UpToDate bool `protobuf:"varint,8,opt,name=up_to_date,json=upToDate,proto3" json:"up_to_date,omitempty"` +// Deprecated: Use ListTasksRequest.ProtoReflect.Descriptor instead. +func (*ListTasksRequest) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{12} } -func (m *ListTasksRequest_Filters) Reset() { *m = ListTasksRequest_Filters{} } -func (*ListTasksRequest_Filters) ProtoMessage() {} -func (*ListTasksRequest_Filters) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{12, 0} -} -func (m *ListTasksRequest_Filters) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ListTasksRequest_Filters) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ListTasksRequest_Filters.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 (x *ListTasksRequest) GetFilters() *ListTasksRequest_Filters { + if x != nil { + return x.Filters } + return nil } -func (m *ListTasksRequest_Filters) XXX_Merge(src proto.Message) { - xxx_messageInfo_ListTasksRequest_Filters.Merge(m, src) -} -func (m *ListTasksRequest_Filters) XXX_Size() int { - return m.Size() -} -func (m *ListTasksRequest_Filters) XXX_DiscardUnknown() { - xxx_messageInfo_ListTasksRequest_Filters.DiscardUnknown(m) + +type ListTasksResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Tasks []*Task `protobuf:"bytes,1,rep,name=tasks,proto3" json:"tasks,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -var xxx_messageInfo_ListTasksRequest_Filters proto.InternalMessageInfo +func (x *ListTasksResponse) Reset() { + *x = ListTasksResponse{} + mi := &file_api_control_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} -type ListTasksResponse struct { - Tasks []*Task `protobuf:"bytes,1,rep,name=tasks,proto3" json:"tasks,omitempty"` +func (x *ListTasksResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ListTasksResponse) Reset() { *m = ListTasksResponse{} } func (*ListTasksResponse) ProtoMessage() {} -func (*ListTasksResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{13} -} -func (m *ListTasksResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ListTasksResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ListTasksResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *ListTasksResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[13] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *ListTasksResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_ListTasksResponse.Merge(m, src) + +// Deprecated: Use ListTasksResponse.ProtoReflect.Descriptor instead. +func (*ListTasksResponse) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{13} } -func (m *ListTasksResponse) XXX_Size() int { - return m.Size() + +func (x *ListTasksResponse) GetTasks() []*Task { + if x != nil { + return x.Tasks + } + return nil } -func (m *ListTasksResponse) XXX_DiscardUnknown() { - xxx_messageInfo_ListTasksResponse.DiscardUnknown(m) + +type CreateServiceRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Spec *ServiceSpec `protobuf:"bytes,1,opt,name=spec,proto3" json:"spec,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -var xxx_messageInfo_ListTasksResponse proto.InternalMessageInfo +func (x *CreateServiceRequest) Reset() { + *x = CreateServiceRequest{} + mi := &file_api_control_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} -type CreateServiceRequest struct { - Spec *ServiceSpec `protobuf:"bytes,1,opt,name=spec,proto3" json:"spec,omitempty"` +func (x *CreateServiceRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *CreateServiceRequest) Reset() { *m = CreateServiceRequest{} } func (*CreateServiceRequest) ProtoMessage() {} -func (*CreateServiceRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{14} -} -func (m *CreateServiceRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *CreateServiceRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_CreateServiceRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *CreateServiceRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[14] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *CreateServiceRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_CreateServiceRequest.Merge(m, src) + +// Deprecated: Use CreateServiceRequest.ProtoReflect.Descriptor instead. +func (*CreateServiceRequest) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{14} } -func (m *CreateServiceRequest) XXX_Size() int { - return m.Size() + +func (x *CreateServiceRequest) GetSpec() *ServiceSpec { + if x != nil { + return x.Spec + } + return nil } -func (m *CreateServiceRequest) XXX_DiscardUnknown() { - xxx_messageInfo_CreateServiceRequest.DiscardUnknown(m) + +type CreateServiceResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Service *Service `protobuf:"bytes,1,opt,name=service,proto3" json:"service,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -var xxx_messageInfo_CreateServiceRequest proto.InternalMessageInfo +func (x *CreateServiceResponse) Reset() { + *x = CreateServiceResponse{} + mi := &file_api_control_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} -type CreateServiceResponse struct { - Service *Service `protobuf:"bytes,1,opt,name=service,proto3" json:"service,omitempty"` +func (x *CreateServiceResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *CreateServiceResponse) Reset() { *m = CreateServiceResponse{} } func (*CreateServiceResponse) ProtoMessage() {} -func (*CreateServiceResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{15} -} -func (m *CreateServiceResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *CreateServiceResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_CreateServiceResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *CreateServiceResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[15] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *CreateServiceResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_CreateServiceResponse.Merge(m, src) + +// Deprecated: Use CreateServiceResponse.ProtoReflect.Descriptor instead. +func (*CreateServiceResponse) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{15} } -func (m *CreateServiceResponse) XXX_Size() int { - return m.Size() + +func (x *CreateServiceResponse) GetService() *Service { + if x != nil { + return x.Service + } + return nil } -func (m *CreateServiceResponse) XXX_DiscardUnknown() { - xxx_messageInfo_CreateServiceResponse.DiscardUnknown(m) + +type GetServiceRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + ServiceID string `protobuf:"bytes,1,opt,name=service_id,json=serviceId,proto3" json:"service_id,omitempty"` + InsertDefaults bool `protobuf:"varint,2,opt,name=insert_defaults,json=insertDefaults,proto3" json:"insert_defaults,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -var xxx_messageInfo_CreateServiceResponse proto.InternalMessageInfo +func (x *GetServiceRequest) Reset() { + *x = GetServiceRequest{} + mi := &file_api_control_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} -type GetServiceRequest struct { - ServiceID string `protobuf:"bytes,1,opt,name=service_id,json=serviceId,proto3" json:"service_id,omitempty"` - InsertDefaults bool `protobuf:"varint,2,opt,name=insert_defaults,json=insertDefaults,proto3" json:"insert_defaults,omitempty"` +func (x *GetServiceRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *GetServiceRequest) Reset() { *m = GetServiceRequest{} } func (*GetServiceRequest) ProtoMessage() {} -func (*GetServiceRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{16} -} -func (m *GetServiceRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *GetServiceRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_GetServiceRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *GetServiceRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[16] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *GetServiceRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetServiceRequest.Merge(m, src) -} -func (m *GetServiceRequest) XXX_Size() int { - return m.Size() + +// Deprecated: Use GetServiceRequest.ProtoReflect.Descriptor instead. +func (*GetServiceRequest) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{16} } -func (m *GetServiceRequest) XXX_DiscardUnknown() { - xxx_messageInfo_GetServiceRequest.DiscardUnknown(m) + +func (x *GetServiceRequest) GetServiceID() string { + if x != nil { + return x.ServiceID + } + return "" } -var xxx_messageInfo_GetServiceRequest proto.InternalMessageInfo +func (x *GetServiceRequest) GetInsertDefaults() bool { + if x != nil { + return x.InsertDefaults + } + return false +} type GetServiceResponse struct { - Service *Service `protobuf:"bytes,1,opt,name=service,proto3" json:"service,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Service *Service `protobuf:"bytes,1,opt,name=service,proto3" json:"service,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GetServiceResponse) Reset() { + *x = GetServiceResponse{} + mi := &file_api_control_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetServiceResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *GetServiceResponse) Reset() { *m = GetServiceResponse{} } func (*GetServiceResponse) ProtoMessage() {} -func (*GetServiceResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{17} -} -func (m *GetServiceResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *GetServiceResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_GetServiceResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *GetServiceResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[17] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *GetServiceResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetServiceResponse.Merge(m, src) -} -func (m *GetServiceResponse) XXX_Size() int { - return m.Size() -} -func (m *GetServiceResponse) XXX_DiscardUnknown() { - xxx_messageInfo_GetServiceResponse.DiscardUnknown(m) + +// Deprecated: Use GetServiceResponse.ProtoReflect.Descriptor instead. +func (*GetServiceResponse) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{17} } -var xxx_messageInfo_GetServiceResponse proto.InternalMessageInfo +func (x *GetServiceResponse) GetService() *Service { + if x != nil { + return x.Service + } + return nil +} type UpdateServiceRequest struct { - ServiceID string `protobuf:"bytes,1,opt,name=service_id,json=serviceId,proto3" json:"service_id,omitempty"` - ServiceVersion *Version `protobuf:"bytes,2,opt,name=service_version,json=serviceVersion,proto3" json:"service_version,omitempty"` - Spec *ServiceSpec `protobuf:"bytes,3,opt,name=spec,proto3" json:"spec,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + ServiceID string `protobuf:"bytes,1,opt,name=service_id,json=serviceId,proto3" json:"service_id,omitempty"` + ServiceVersion *Version `protobuf:"bytes,2,opt,name=service_version,json=serviceVersion,proto3" json:"service_version,omitempty"` + Spec *ServiceSpec `protobuf:"bytes,3,opt,name=spec,proto3" json:"spec,omitempty"` // Rollback may be set to PREVIOUS to request a rollback (the service's // spec will be set to the value of its previous_spec field). In this // case, the spec field of this request is ignored. - Rollback UpdateServiceRequest_Rollback `protobuf:"varint,4,opt,name=rollback,proto3,enum=docker.swarmkit.v1.UpdateServiceRequest_Rollback" json:"rollback,omitempty"` + Rollback UpdateServiceRequest_Rollback `protobuf:"varint,4,opt,name=rollback,proto3,enum=docker.swarmkit.v1.UpdateServiceRequest_Rollback" json:"rollback,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *UpdateServiceRequest) Reset() { + *x = UpdateServiceRequest{} + mi := &file_api_control_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *UpdateServiceRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *UpdateServiceRequest) Reset() { *m = UpdateServiceRequest{} } func (*UpdateServiceRequest) ProtoMessage() {} -func (*UpdateServiceRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{18} -} -func (m *UpdateServiceRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *UpdateServiceRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_UpdateServiceRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *UpdateServiceRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[18] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } -} -func (m *UpdateServiceRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_UpdateServiceRequest.Merge(m, src) -} -func (m *UpdateServiceRequest) XXX_Size() int { - return m.Size() -} -func (m *UpdateServiceRequest) XXX_DiscardUnknown() { - xxx_messageInfo_UpdateServiceRequest.DiscardUnknown(m) + return mi.MessageOf(x) } -var xxx_messageInfo_UpdateServiceRequest proto.InternalMessageInfo +// Deprecated: Use UpdateServiceRequest.ProtoReflect.Descriptor instead. +func (*UpdateServiceRequest) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{18} +} -type UpdateServiceResponse struct { - Service *Service `protobuf:"bytes,1,opt,name=service,proto3" json:"service,omitempty"` +func (x *UpdateServiceRequest) GetServiceID() string { + if x != nil { + return x.ServiceID + } + return "" } -func (m *UpdateServiceResponse) Reset() { *m = UpdateServiceResponse{} } -func (*UpdateServiceResponse) ProtoMessage() {} -func (*UpdateServiceResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{19} -} -func (m *UpdateServiceResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *UpdateServiceResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_UpdateServiceResponse.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 (x *UpdateServiceRequest) GetServiceVersion() *Version { + if x != nil { + return x.ServiceVersion } + return nil } -func (m *UpdateServiceResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_UpdateServiceResponse.Merge(m, src) + +func (x *UpdateServiceRequest) GetSpec() *ServiceSpec { + if x != nil { + return x.Spec + } + return nil } -func (m *UpdateServiceResponse) XXX_Size() int { - return m.Size() + +func (x *UpdateServiceRequest) GetRollback() UpdateServiceRequest_Rollback { + if x != nil { + return x.Rollback + } + return UpdateServiceRequest_NONE } -func (m *UpdateServiceResponse) XXX_DiscardUnknown() { - xxx_messageInfo_UpdateServiceResponse.DiscardUnknown(m) + +type UpdateServiceResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Service *Service `protobuf:"bytes,1,opt,name=service,proto3" json:"service,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -var xxx_messageInfo_UpdateServiceResponse proto.InternalMessageInfo +func (x *UpdateServiceResponse) Reset() { + *x = UpdateServiceResponse{} + mi := &file_api_control_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} -type RemoveServiceRequest struct { - ServiceID string `protobuf:"bytes,1,opt,name=service_id,json=serviceId,proto3" json:"service_id,omitempty"` +func (x *UpdateServiceResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *RemoveServiceRequest) Reset() { *m = RemoveServiceRequest{} } -func (*RemoveServiceRequest) ProtoMessage() {} -func (*RemoveServiceRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{20} -} -func (m *RemoveServiceRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *RemoveServiceRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_RemoveServiceRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err +func (*UpdateServiceResponse) ProtoMessage() {} + +func (x *UpdateServiceResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[19] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *RemoveServiceRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_RemoveServiceRequest.Merge(m, src) + +// Deprecated: Use UpdateServiceResponse.ProtoReflect.Descriptor instead. +func (*UpdateServiceResponse) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{19} } -func (m *RemoveServiceRequest) XXX_Size() int { - return m.Size() + +func (x *UpdateServiceResponse) GetService() *Service { + if x != nil { + return x.Service + } + return nil } -func (m *RemoveServiceRequest) XXX_DiscardUnknown() { - xxx_messageInfo_RemoveServiceRequest.DiscardUnknown(m) + +type RemoveServiceRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + ServiceID string `protobuf:"bytes,1,opt,name=service_id,json=serviceId,proto3" json:"service_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -var xxx_messageInfo_RemoveServiceRequest proto.InternalMessageInfo +func (x *RemoveServiceRequest) Reset() { + *x = RemoveServiceRequest{} + mi := &file_api_control_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} -type RemoveServiceResponse struct { +func (x *RemoveServiceRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *RemoveServiceResponse) Reset() { *m = RemoveServiceResponse{} } -func (*RemoveServiceResponse) ProtoMessage() {} -func (*RemoveServiceResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{21} -} -func (m *RemoveServiceResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *RemoveServiceResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_RemoveServiceResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err +func (*RemoveServiceRequest) ProtoMessage() {} + +func (x *RemoveServiceRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[20] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *RemoveServiceResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_RemoveServiceResponse.Merge(m, src) + +// Deprecated: Use RemoveServiceRequest.ProtoReflect.Descriptor instead. +func (*RemoveServiceRequest) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{20} } -func (m *RemoveServiceResponse) XXX_Size() int { - return m.Size() + +func (x *RemoveServiceRequest) GetServiceID() string { + if x != nil { + return x.ServiceID + } + return "" } -func (m *RemoveServiceResponse) XXX_DiscardUnknown() { - xxx_messageInfo_RemoveServiceResponse.DiscardUnknown(m) + +type RemoveServiceResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -var xxx_messageInfo_RemoveServiceResponse proto.InternalMessageInfo +func (x *RemoveServiceResponse) Reset() { + *x = RemoveServiceResponse{} + mi := &file_api_control_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} -type ListServicesRequest struct { - Filters *ListServicesRequest_Filters `protobuf:"bytes,1,opt,name=filters,proto3" json:"filters,omitempty"` +func (x *RemoveServiceResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ListServicesRequest) Reset() { *m = ListServicesRequest{} } -func (*ListServicesRequest) ProtoMessage() {} -func (*ListServicesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{22} -} -func (m *ListServicesRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ListServicesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ListServicesRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err +func (*RemoveServiceResponse) ProtoMessage() {} + +func (x *RemoveServiceResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[21] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *ListServicesRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_ListServicesRequest.Merge(m, src) -} -func (m *ListServicesRequest) XXX_Size() int { - return m.Size() + +// Deprecated: Use RemoveServiceResponse.ProtoReflect.Descriptor instead. +func (*RemoveServiceResponse) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{21} } -func (m *ListServicesRequest) XXX_DiscardUnknown() { - xxx_messageInfo_ListServicesRequest.DiscardUnknown(m) + +type ListServicesRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Filters *ListServicesRequest_Filters `protobuf:"bytes,1,opt,name=filters,proto3" json:"filters,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -var xxx_messageInfo_ListServicesRequest proto.InternalMessageInfo +func (x *ListServicesRequest) Reset() { + *x = ListServicesRequest{} + mi := &file_api_control_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} -type ListServicesRequest_Filters struct { - Names []string `protobuf:"bytes,1,rep,name=names,proto3" json:"names,omitempty"` - IDPrefixes []string `protobuf:"bytes,2,rep,name=id_prefixes,json=idPrefixes,proto3" json:"id_prefixes,omitempty"` - 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"` - // NamePrefixes matches all objects with the given prefixes - NamePrefixes []string `protobuf:"bytes,4,rep,name=name_prefixes,json=namePrefixes,proto3" json:"name_prefixes,omitempty"` - Runtimes []string `protobuf:"bytes,5,rep,name=runtimes,proto3" json:"runtimes,omitempty"` +func (x *ListServicesRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ListServicesRequest_Filters) Reset() { *m = ListServicesRequest_Filters{} } -func (*ListServicesRequest_Filters) ProtoMessage() {} -func (*ListServicesRequest_Filters) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{22, 0} -} -func (m *ListServicesRequest_Filters) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ListServicesRequest_Filters) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ListServicesRequest_Filters.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err +func (*ListServicesRequest) ProtoMessage() {} + +func (x *ListServicesRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[22] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *ListServicesRequest_Filters) XXX_Merge(src proto.Message) { - xxx_messageInfo_ListServicesRequest_Filters.Merge(m, src) + +// Deprecated: Use ListServicesRequest.ProtoReflect.Descriptor instead. +func (*ListServicesRequest) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{22} } -func (m *ListServicesRequest_Filters) XXX_Size() int { - return m.Size() + +func (x *ListServicesRequest) GetFilters() *ListServicesRequest_Filters { + if x != nil { + return x.Filters + } + return nil } -func (m *ListServicesRequest_Filters) XXX_DiscardUnknown() { - xxx_messageInfo_ListServicesRequest_Filters.DiscardUnknown(m) + +type ListServicesResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Services []*Service `protobuf:"bytes,1,rep,name=services,proto3" json:"services,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -var xxx_messageInfo_ListServicesRequest_Filters proto.InternalMessageInfo +func (x *ListServicesResponse) Reset() { + *x = ListServicesResponse{} + mi := &file_api_control_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} -type ListServicesResponse struct { - Services []*Service `protobuf:"bytes,1,rep,name=services,proto3" json:"services,omitempty"` +func (x *ListServicesResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ListServicesResponse) Reset() { *m = ListServicesResponse{} } func (*ListServicesResponse) ProtoMessage() {} -func (*ListServicesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{23} -} -func (m *ListServicesResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ListServicesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ListServicesResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *ListServicesResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[23] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *ListServicesResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_ListServicesResponse.Merge(m, src) -} -func (m *ListServicesResponse) XXX_Size() int { - return m.Size() -} -func (m *ListServicesResponse) XXX_DiscardUnknown() { - xxx_messageInfo_ListServicesResponse.DiscardUnknown(m) + +// Deprecated: Use ListServicesResponse.ProtoReflect.Descriptor instead. +func (*ListServicesResponse) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{23} } -var xxx_messageInfo_ListServicesResponse proto.InternalMessageInfo +func (x *ListServicesResponse) GetServices() []*Service { + if x != nil { + return x.Services + } + return nil +} // ListServiceStatusesRequest is a request to get the aggregate status of a // service by computing the number of running vs desired tasks. It includes // only a service ID. type ListServiceStatusesRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` // Services is a list of service IDs to get statuses for. - Services []string `protobuf:"bytes,1,rep,name=services,proto3" json:"services,omitempty"` + Services []string `protobuf:"bytes,1,rep,name=services,proto3" json:"services,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ListServiceStatusesRequest) Reset() { + *x = ListServiceStatusesRequest{} + mi := &file_api_control_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ListServiceStatusesRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ListServiceStatusesRequest) Reset() { *m = ListServiceStatusesRequest{} } func (*ListServiceStatusesRequest) ProtoMessage() {} -func (*ListServiceStatusesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{24} -} -func (m *ListServiceStatusesRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ListServiceStatusesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ListServiceStatusesRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *ListServiceStatusesRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[24] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *ListServiceStatusesRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_ListServiceStatusesRequest.Merge(m, src) -} -func (m *ListServiceStatusesRequest) XXX_Size() int { - return m.Size() -} -func (m *ListServiceStatusesRequest) XXX_DiscardUnknown() { - xxx_messageInfo_ListServiceStatusesRequest.DiscardUnknown(m) + +// Deprecated: Use ListServiceStatusesRequest.ProtoReflect.Descriptor instead. +func (*ListServiceStatusesRequest) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{24} } -var xxx_messageInfo_ListServiceStatusesRequest proto.InternalMessageInfo +func (x *ListServiceStatusesRequest) GetServices() []string { + if x != nil { + return x.Services + } + return nil +} // ListServiceStatusesResponse is a response containing the aggregate status of // a service, formed by computing the number of running vs desired tasks. The // values returned are only valid for the point in time at which the request is // made. type ListServiceStatusesResponse struct { - Statuses []*ListServiceStatusesResponse_ServiceStatus `protobuf:"bytes,1,rep,name=statuses,proto3" json:"statuses,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Statuses []*ListServiceStatusesResponse_ServiceStatus `protobuf:"bytes,1,rep,name=statuses,proto3" json:"statuses,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *ListServiceStatusesResponse) Reset() { *m = ListServiceStatusesResponse{} } -func (*ListServiceStatusesResponse) ProtoMessage() {} -func (*ListServiceStatusesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{25} -} -func (m *ListServiceStatusesResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ListServiceStatusesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ListServiceStatusesResponse.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 *ListServiceStatusesResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_ListServiceStatusesResponse.Merge(m, src) -} -func (m *ListServiceStatusesResponse) XXX_Size() int { - return m.Size() +func (x *ListServiceStatusesResponse) Reset() { + *x = ListServiceStatusesResponse{} + mi := &file_api_control_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *ListServiceStatusesResponse) XXX_DiscardUnknown() { - xxx_messageInfo_ListServiceStatusesResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_ListServiceStatusesResponse proto.InternalMessageInfo -type ListServiceStatusesResponse_ServiceStatus struct { - // ServiceID is the ID of the service this status describes - ServiceID string `protobuf:"bytes,1,opt,name=service_id,json=serviceId,proto3" json:"service_id,omitempty"` - // DesiredTasks is the number of tasks desired to be running according to the - // service definition at request time. It is a uint64 because that is what - // the replicas field on the service spec is - DesiredTasks uint64 `protobuf:"varint,2,opt,name=desired_tasks,json=desiredTasks,proto3" json:"desired_tasks,omitempty"` - // RunningTasks is the number of tasks currently in the Running state at - // request time. This may be larger than desired tasks if, for example, a - // service has been scaled down. - RunningTasks uint64 `protobuf:"varint,3,opt,name=running_tasks,json=runningTasks,proto3" json:"running_tasks,omitempty"` - // CompletedTasks is the number of tasks in state Completed, if this - // service is in mode ReplicatedJob or GlobalJob. This must be - // cross-referenced with the service type, because the default value of 0 - // may mean that a service is not in a Job mode, or it may mean the Job has - // yet to complete any Tasks. - CompletedTasks uint64 `protobuf:"varint,4,opt,name=completed_tasks,json=completedTasks,proto3" json:"completed_tasks,omitempty"` +func (x *ListServiceStatusesResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ListServiceStatusesResponse_ServiceStatus) Reset() { - *m = ListServiceStatusesResponse_ServiceStatus{} -} -func (*ListServiceStatusesResponse_ServiceStatus) ProtoMessage() {} -func (*ListServiceStatusesResponse_ServiceStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{25, 0} -} -func (m *ListServiceStatusesResponse_ServiceStatus) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ListServiceStatusesResponse_ServiceStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ListServiceStatusesResponse_ServiceStatus.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err +func (*ListServiceStatusesResponse) ProtoMessage() {} + +func (x *ListServiceStatusesResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[25] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *ListServiceStatusesResponse_ServiceStatus) XXX_Merge(src proto.Message) { - xxx_messageInfo_ListServiceStatusesResponse_ServiceStatus.Merge(m, src) + +// Deprecated: Use ListServiceStatusesResponse.ProtoReflect.Descriptor instead. +func (*ListServiceStatusesResponse) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{25} } -func (m *ListServiceStatusesResponse_ServiceStatus) XXX_Size() int { - return m.Size() + +func (x *ListServiceStatusesResponse) GetStatuses() []*ListServiceStatusesResponse_ServiceStatus { + if x != nil { + return x.Statuses + } + return nil } -func (m *ListServiceStatusesResponse_ServiceStatus) XXX_DiscardUnknown() { - xxx_messageInfo_ListServiceStatusesResponse_ServiceStatus.DiscardUnknown(m) + +type CreateNetworkRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Spec *NetworkSpec `protobuf:"bytes,1,opt,name=spec,proto3" json:"spec,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -var xxx_messageInfo_ListServiceStatusesResponse_ServiceStatus proto.InternalMessageInfo +func (x *CreateNetworkRequest) Reset() { + *x = CreateNetworkRequest{} + mi := &file_api_control_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} -type CreateNetworkRequest struct { - Spec *NetworkSpec `protobuf:"bytes,1,opt,name=spec,proto3" json:"spec,omitempty"` +func (x *CreateNetworkRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *CreateNetworkRequest) Reset() { *m = CreateNetworkRequest{} } func (*CreateNetworkRequest) ProtoMessage() {} -func (*CreateNetworkRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{26} -} -func (m *CreateNetworkRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *CreateNetworkRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_CreateNetworkRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *CreateNetworkRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[26] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *CreateNetworkRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_CreateNetworkRequest.Merge(m, src) + +// Deprecated: Use CreateNetworkRequest.ProtoReflect.Descriptor instead. +func (*CreateNetworkRequest) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{26} } -func (m *CreateNetworkRequest) XXX_Size() int { - return m.Size() + +func (x *CreateNetworkRequest) GetSpec() *NetworkSpec { + if x != nil { + return x.Spec + } + return nil } -func (m *CreateNetworkRequest) XXX_DiscardUnknown() { - xxx_messageInfo_CreateNetworkRequest.DiscardUnknown(m) + +type CreateNetworkResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Network *Network `protobuf:"bytes,1,opt,name=network,proto3" json:"network,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -var xxx_messageInfo_CreateNetworkRequest proto.InternalMessageInfo +func (x *CreateNetworkResponse) Reset() { + *x = CreateNetworkResponse{} + mi := &file_api_control_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} -type CreateNetworkResponse struct { - Network *Network `protobuf:"bytes,1,opt,name=network,proto3" json:"network,omitempty"` +func (x *CreateNetworkResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *CreateNetworkResponse) Reset() { *m = CreateNetworkResponse{} } func (*CreateNetworkResponse) ProtoMessage() {} -func (*CreateNetworkResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{27} -} -func (m *CreateNetworkResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *CreateNetworkResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_CreateNetworkResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *CreateNetworkResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[27] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *CreateNetworkResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_CreateNetworkResponse.Merge(m, src) -} -func (m *CreateNetworkResponse) XXX_Size() int { - return m.Size() -} -func (m *CreateNetworkResponse) XXX_DiscardUnknown() { - xxx_messageInfo_CreateNetworkResponse.DiscardUnknown(m) + +// Deprecated: Use CreateNetworkResponse.ProtoReflect.Descriptor instead. +func (*CreateNetworkResponse) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{27} } -var xxx_messageInfo_CreateNetworkResponse proto.InternalMessageInfo +func (x *CreateNetworkResponse) GetNetwork() *Network { + if x != nil { + return x.Network + } + return nil +} type GetNetworkRequest struct { - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - NetworkID string `protobuf:"bytes,2,opt,name=network_id,json=networkId,proto3" json:"network_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + NetworkID string `protobuf:"bytes,2,opt,name=network_id,json=networkId,proto3" json:"network_id,omitempty"` // Application-specific message for the NetworkAllocator's OnGetNetwork callback. - Appdata *types.Any `protobuf:"bytes,3,opt,name=appdata,proto3" json:"appdata,omitempty"` + Appdata *anypb.Any `protobuf:"bytes,3,opt,name=appdata,proto3" json:"appdata,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GetNetworkRequest) Reset() { + *x = GetNetworkRequest{} + mi := &file_api_control_proto_msgTypes[28] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetNetworkRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *GetNetworkRequest) Reset() { *m = GetNetworkRequest{} } func (*GetNetworkRequest) ProtoMessage() {} -func (*GetNetworkRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{28} -} -func (m *GetNetworkRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *GetNetworkRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_GetNetworkRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *GetNetworkRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[28] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *GetNetworkRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetNetworkRequest.Merge(m, src) + +// Deprecated: Use GetNetworkRequest.ProtoReflect.Descriptor instead. +func (*GetNetworkRequest) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{28} } -func (m *GetNetworkRequest) XXX_Size() int { - return m.Size() + +func (x *GetNetworkRequest) GetName() string { + if x != nil { + return x.Name + } + return "" } -func (m *GetNetworkRequest) XXX_DiscardUnknown() { - xxx_messageInfo_GetNetworkRequest.DiscardUnknown(m) + +func (x *GetNetworkRequest) GetNetworkID() string { + if x != nil { + return x.NetworkID + } + return "" } -var xxx_messageInfo_GetNetworkRequest proto.InternalMessageInfo +func (x *GetNetworkRequest) GetAppdata() *anypb.Any { + if x != nil { + return x.Appdata + } + return nil +} type GetNetworkResponse struct { - Network *Network `protobuf:"bytes,1,opt,name=network,proto3" json:"network,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Network *Network `protobuf:"bytes,1,opt,name=network,proto3" json:"network,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GetNetworkResponse) Reset() { + *x = GetNetworkResponse{} + mi := &file_api_control_proto_msgTypes[29] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetNetworkResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *GetNetworkResponse) Reset() { *m = GetNetworkResponse{} } func (*GetNetworkResponse) ProtoMessage() {} -func (*GetNetworkResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{29} -} -func (m *GetNetworkResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *GetNetworkResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_GetNetworkResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *GetNetworkResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[29] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *GetNetworkResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetNetworkResponse.Merge(m, src) + +// Deprecated: Use GetNetworkResponse.ProtoReflect.Descriptor instead. +func (*GetNetworkResponse) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{29} } -func (m *GetNetworkResponse) XXX_Size() int { - return m.Size() + +func (x *GetNetworkResponse) GetNetwork() *Network { + if x != nil { + return x.Network + } + return nil } -func (m *GetNetworkResponse) XXX_DiscardUnknown() { - xxx_messageInfo_GetNetworkResponse.DiscardUnknown(m) + +type RemoveNetworkRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + NetworkID string `protobuf:"bytes,2,opt,name=network_id,json=networkId,proto3" json:"network_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -var xxx_messageInfo_GetNetworkResponse proto.InternalMessageInfo +func (x *RemoveNetworkRequest) Reset() { + *x = RemoveNetworkRequest{} + mi := &file_api_control_proto_msgTypes[30] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} -type RemoveNetworkRequest struct { - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - NetworkID string `protobuf:"bytes,2,opt,name=network_id,json=networkId,proto3" json:"network_id,omitempty"` +func (x *RemoveNetworkRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *RemoveNetworkRequest) Reset() { *m = RemoveNetworkRequest{} } func (*RemoveNetworkRequest) ProtoMessage() {} -func (*RemoveNetworkRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{30} -} -func (m *RemoveNetworkRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *RemoveNetworkRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_RemoveNetworkRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *RemoveNetworkRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[30] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *RemoveNetworkRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_RemoveNetworkRequest.Merge(m, src) -} -func (m *RemoveNetworkRequest) XXX_Size() int { - return m.Size() + +// Deprecated: Use RemoveNetworkRequest.ProtoReflect.Descriptor instead. +func (*RemoveNetworkRequest) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{30} } -func (m *RemoveNetworkRequest) XXX_DiscardUnknown() { - xxx_messageInfo_RemoveNetworkRequest.DiscardUnknown(m) + +func (x *RemoveNetworkRequest) GetName() string { + if x != nil { + return x.Name + } + return "" } -var xxx_messageInfo_RemoveNetworkRequest proto.InternalMessageInfo +func (x *RemoveNetworkRequest) GetNetworkID() string { + if x != nil { + return x.NetworkID + } + return "" +} type RemoveNetworkResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RemoveNetworkResponse) Reset() { + *x = RemoveNetworkResponse{} + mi := &file_api_control_proto_msgTypes[31] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RemoveNetworkResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *RemoveNetworkResponse) Reset() { *m = RemoveNetworkResponse{} } func (*RemoveNetworkResponse) ProtoMessage() {} -func (*RemoveNetworkResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{31} -} -func (m *RemoveNetworkResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *RemoveNetworkResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_RemoveNetworkResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *RemoveNetworkResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[31] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } -} -func (m *RemoveNetworkResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_RemoveNetworkResponse.Merge(m, src) -} -func (m *RemoveNetworkResponse) XXX_Size() int { - return m.Size() -} -func (m *RemoveNetworkResponse) XXX_DiscardUnknown() { - xxx_messageInfo_RemoveNetworkResponse.DiscardUnknown(m) + return mi.MessageOf(x) } -var xxx_messageInfo_RemoveNetworkResponse proto.InternalMessageInfo +// Deprecated: Use RemoveNetworkResponse.ProtoReflect.Descriptor instead. +func (*RemoveNetworkResponse) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{31} +} type ListNetworksRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` Filters *ListNetworksRequest_Filters `protobuf:"bytes,1,opt,name=filters,proto3" json:"filters,omitempty"` // Application-specific message for the NetworkAllocator's OnGetNetwork callback. - Appdata *types.Any `protobuf:"bytes,2,opt,name=appdata,proto3" json:"appdata,omitempty"` + Appdata *anypb.Any `protobuf:"bytes,2,opt,name=appdata,proto3" json:"appdata,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ListNetworksRequest) Reset() { + *x = ListNetworksRequest{} + mi := &file_api_control_proto_msgTypes[32] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ListNetworksRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ListNetworksRequest) Reset() { *m = ListNetworksRequest{} } func (*ListNetworksRequest) ProtoMessage() {} -func (*ListNetworksRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{32} -} -func (m *ListNetworksRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ListNetworksRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ListNetworksRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *ListNetworksRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[32] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } -} -func (m *ListNetworksRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_ListNetworksRequest.Merge(m, src) -} -func (m *ListNetworksRequest) XXX_Size() int { - return m.Size() -} -func (m *ListNetworksRequest) XXX_DiscardUnknown() { - xxx_messageInfo_ListNetworksRequest.DiscardUnknown(m) + return mi.MessageOf(x) } -var xxx_messageInfo_ListNetworksRequest proto.InternalMessageInfo - -type ListNetworksRequest_Filters struct { - Names []string `protobuf:"bytes,1,rep,name=names,proto3" json:"names,omitempty"` - IDPrefixes []string `protobuf:"bytes,2,rep,name=id_prefixes,json=idPrefixes,proto3" json:"id_prefixes,omitempty"` - 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"` - // NamePrefixes matches all objects with the given prefixes - NamePrefixes []string `protobuf:"bytes,4,rep,name=name_prefixes,json=namePrefixes,proto3" json:"name_prefixes,omitempty"` +// Deprecated: Use ListNetworksRequest.ProtoReflect.Descriptor instead. +func (*ListNetworksRequest) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{32} } -func (m *ListNetworksRequest_Filters) Reset() { *m = ListNetworksRequest_Filters{} } -func (*ListNetworksRequest_Filters) ProtoMessage() {} -func (*ListNetworksRequest_Filters) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{32, 0} -} -func (m *ListNetworksRequest_Filters) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ListNetworksRequest_Filters) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ListNetworksRequest_Filters.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 (x *ListNetworksRequest) GetFilters() *ListNetworksRequest_Filters { + if x != nil { + return x.Filters } + return nil } -func (m *ListNetworksRequest_Filters) XXX_Merge(src proto.Message) { - xxx_messageInfo_ListNetworksRequest_Filters.Merge(m, src) -} -func (m *ListNetworksRequest_Filters) XXX_Size() int { - return m.Size() + +func (x *ListNetworksRequest) GetAppdata() *anypb.Any { + if x != nil { + return x.Appdata + } + return nil } -func (m *ListNetworksRequest_Filters) XXX_DiscardUnknown() { - xxx_messageInfo_ListNetworksRequest_Filters.DiscardUnknown(m) + +type ListNetworksResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Networks []*Network `protobuf:"bytes,1,rep,name=networks,proto3" json:"networks,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -var xxx_messageInfo_ListNetworksRequest_Filters proto.InternalMessageInfo +func (x *ListNetworksResponse) Reset() { + *x = ListNetworksResponse{} + mi := &file_api_control_proto_msgTypes[33] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} -type ListNetworksResponse struct { - Networks []*Network `protobuf:"bytes,1,rep,name=networks,proto3" json:"networks,omitempty"` +func (x *ListNetworksResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ListNetworksResponse) Reset() { *m = ListNetworksResponse{} } func (*ListNetworksResponse) ProtoMessage() {} -func (*ListNetworksResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{33} -} -func (m *ListNetworksResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ListNetworksResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ListNetworksResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *ListNetworksResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[33] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *ListNetworksResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_ListNetworksResponse.Merge(m, src) + +// Deprecated: Use ListNetworksResponse.ProtoReflect.Descriptor instead. +func (*ListNetworksResponse) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{33} } -func (m *ListNetworksResponse) XXX_Size() int { - return m.Size() + +func (x *ListNetworksResponse) GetNetworks() []*Network { + if x != nil { + return x.Networks + } + return nil } -func (m *ListNetworksResponse) XXX_DiscardUnknown() { - xxx_messageInfo_ListNetworksResponse.DiscardUnknown(m) + +type GetClusterRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + ClusterID string `protobuf:"bytes,1,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -var xxx_messageInfo_ListNetworksResponse proto.InternalMessageInfo +func (x *GetClusterRequest) Reset() { + *x = GetClusterRequest{} + mi := &file_api_control_proto_msgTypes[34] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} -type GetClusterRequest struct { - ClusterID string `protobuf:"bytes,1,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"` +func (x *GetClusterRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *GetClusterRequest) Reset() { *m = GetClusterRequest{} } func (*GetClusterRequest) ProtoMessage() {} -func (*GetClusterRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{34} -} -func (m *GetClusterRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *GetClusterRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_GetClusterRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *GetClusterRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[34] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *GetClusterRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetClusterRequest.Merge(m, src) + +// Deprecated: Use GetClusterRequest.ProtoReflect.Descriptor instead. +func (*GetClusterRequest) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{34} } -func (m *GetClusterRequest) XXX_Size() int { - return m.Size() + +func (x *GetClusterRequest) GetClusterID() string { + if x != nil { + return x.ClusterID + } + return "" } -func (m *GetClusterRequest) XXX_DiscardUnknown() { - xxx_messageInfo_GetClusterRequest.DiscardUnknown(m) + +type GetClusterResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Cluster *Cluster `protobuf:"bytes,1,opt,name=cluster,proto3" json:"cluster,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -var xxx_messageInfo_GetClusterRequest proto.InternalMessageInfo +func (x *GetClusterResponse) Reset() { + *x = GetClusterResponse{} + mi := &file_api_control_proto_msgTypes[35] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} -type GetClusterResponse struct { - Cluster *Cluster `protobuf:"bytes,1,opt,name=cluster,proto3" json:"cluster,omitempty"` +func (x *GetClusterResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *GetClusterResponse) Reset() { *m = GetClusterResponse{} } func (*GetClusterResponse) ProtoMessage() {} -func (*GetClusterResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{35} -} -func (m *GetClusterResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *GetClusterResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_GetClusterResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *GetClusterResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[35] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *GetClusterResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetClusterResponse.Merge(m, src) -} -func (m *GetClusterResponse) XXX_Size() int { - return m.Size() -} -func (m *GetClusterResponse) XXX_DiscardUnknown() { - xxx_messageInfo_GetClusterResponse.DiscardUnknown(m) + +// Deprecated: Use GetClusterResponse.ProtoReflect.Descriptor instead. +func (*GetClusterResponse) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{35} } -var xxx_messageInfo_GetClusterResponse proto.InternalMessageInfo +func (x *GetClusterResponse) GetCluster() *Cluster { + if x != nil { + return x.Cluster + } + return nil +} type ListClustersRequest struct { - Filters *ListClustersRequest_Filters `protobuf:"bytes,1,opt,name=filters,proto3" json:"filters,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Filters *ListClustersRequest_Filters `protobuf:"bytes,1,opt,name=filters,proto3" json:"filters,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *ListClustersRequest) Reset() { *m = ListClustersRequest{} } -func (*ListClustersRequest) ProtoMessage() {} -func (*ListClustersRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{36} -} -func (m *ListClustersRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ListClustersRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ListClustersRequest.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 *ListClustersRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_ListClustersRequest.Merge(m, src) -} -func (m *ListClustersRequest) XXX_Size() int { - return m.Size() -} -func (m *ListClustersRequest) XXX_DiscardUnknown() { - xxx_messageInfo_ListClustersRequest.DiscardUnknown(m) +func (x *ListClustersRequest) Reset() { + *x = ListClustersRequest{} + mi := &file_api_control_proto_msgTypes[36] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -var xxx_messageInfo_ListClustersRequest proto.InternalMessageInfo - -type ListClustersRequest_Filters struct { - Names []string `protobuf:"bytes,1,rep,name=names,proto3" json:"names,omitempty"` - IDPrefixes []string `protobuf:"bytes,2,rep,name=id_prefixes,json=idPrefixes,proto3" json:"id_prefixes,omitempty"` - 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"` - // NamePrefixes matches all objects with the given prefixes - NamePrefixes []string `protobuf:"bytes,4,rep,name=name_prefixes,json=namePrefixes,proto3" json:"name_prefixes,omitempty"` +func (x *ListClustersRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ListClustersRequest_Filters) Reset() { *m = ListClustersRequest_Filters{} } -func (*ListClustersRequest_Filters) ProtoMessage() {} -func (*ListClustersRequest_Filters) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{36, 0} -} -func (m *ListClustersRequest_Filters) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ListClustersRequest_Filters) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ListClustersRequest_Filters.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err +func (*ListClustersRequest) ProtoMessage() {} + +func (x *ListClustersRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[36] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *ListClustersRequest_Filters) XXX_Merge(src proto.Message) { - xxx_messageInfo_ListClustersRequest_Filters.Merge(m, src) + +// Deprecated: Use ListClustersRequest.ProtoReflect.Descriptor instead. +func (*ListClustersRequest) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{36} } -func (m *ListClustersRequest_Filters) XXX_Size() int { - return m.Size() + +func (x *ListClustersRequest) GetFilters() *ListClustersRequest_Filters { + if x != nil { + return x.Filters + } + return nil } -func (m *ListClustersRequest_Filters) XXX_DiscardUnknown() { - xxx_messageInfo_ListClustersRequest_Filters.DiscardUnknown(m) + +type ListClustersResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Clusters []*Cluster `protobuf:"bytes,1,rep,name=clusters,proto3" json:"clusters,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -var xxx_messageInfo_ListClustersRequest_Filters proto.InternalMessageInfo +func (x *ListClustersResponse) Reset() { + *x = ListClustersResponse{} + mi := &file_api_control_proto_msgTypes[37] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} -type ListClustersResponse struct { - Clusters []*Cluster `protobuf:"bytes,1,rep,name=clusters,proto3" json:"clusters,omitempty"` +func (x *ListClustersResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ListClustersResponse) Reset() { *m = ListClustersResponse{} } func (*ListClustersResponse) ProtoMessage() {} -func (*ListClustersResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{37} -} -func (m *ListClustersResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ListClustersResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ListClustersResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *ListClustersResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[37] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *ListClustersResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_ListClustersResponse.Merge(m, src) -} -func (m *ListClustersResponse) XXX_Size() int { - return m.Size() -} -func (m *ListClustersResponse) XXX_DiscardUnknown() { - xxx_messageInfo_ListClustersResponse.DiscardUnknown(m) + +// Deprecated: Use ListClustersResponse.ProtoReflect.Descriptor instead. +func (*ListClustersResponse) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{37} } -var xxx_messageInfo_ListClustersResponse proto.InternalMessageInfo +func (x *ListClustersResponse) GetClusters() []*Cluster { + if x != nil { + return x.Clusters + } + return nil +} // KeyRotation tells UpdateCluster what items to rotate type KeyRotation struct { + state protoimpl.MessageState `protogen:"open.v1"` // WorkerJoinToken tells UpdateCluster to rotate the worker secret token. WorkerJoinToken bool `protobuf:"varint,1,opt,name=worker_join_token,json=workerJoinToken,proto3" json:"worker_join_token,omitempty"` // ManagerJoinToken tells UpdateCluster to rotate the manager secret token. ManagerJoinToken bool `protobuf:"varint,2,opt,name=manager_join_token,json=managerJoinToken,proto3" json:"manager_join_token,omitempty"` // ManagerUnlockKey tells UpdateCluster to rotate the manager unlock key ManagerUnlockKey bool `protobuf:"varint,3,opt,name=manager_unlock_key,json=managerUnlockKey,proto3" json:"manager_unlock_key,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *KeyRotation) Reset() { + *x = KeyRotation{} + mi := &file_api_control_proto_msgTypes[38] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *KeyRotation) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *KeyRotation) Reset() { *m = KeyRotation{} } func (*KeyRotation) ProtoMessage() {} -func (*KeyRotation) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{38} -} -func (m *KeyRotation) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *KeyRotation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_KeyRotation.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *KeyRotation) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[38] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *KeyRotation) XXX_Merge(src proto.Message) { - xxx_messageInfo_KeyRotation.Merge(m, src) + +// Deprecated: Use KeyRotation.ProtoReflect.Descriptor instead. +func (*KeyRotation) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{38} } -func (m *KeyRotation) XXX_Size() int { - return m.Size() + +func (x *KeyRotation) GetWorkerJoinToken() bool { + if x != nil { + return x.WorkerJoinToken + } + return false } -func (m *KeyRotation) XXX_DiscardUnknown() { - xxx_messageInfo_KeyRotation.DiscardUnknown(m) + +func (x *KeyRotation) GetManagerJoinToken() bool { + if x != nil { + return x.ManagerJoinToken + } + return false } -var xxx_messageInfo_KeyRotation proto.InternalMessageInfo +func (x *KeyRotation) GetManagerUnlockKey() bool { + if x != nil { + return x.ManagerUnlockKey + } + return false +} type UpdateClusterRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` // ClusterID is the cluster ID to update. ClusterID string `protobuf:"bytes,1,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"` // ClusterVersion is the version of the cluster being updated. @@ -1777,25925 +1891,3836 @@ type UpdateClusterRequest struct { // Spec is the new spec to apply to the cluster. Spec *ClusterSpec `protobuf:"bytes,3,opt,name=spec,proto3" json:"spec,omitempty"` // Rotation contains flags for join token and unlock key rotation - Rotation KeyRotation `protobuf:"bytes,4,opt,name=rotation,proto3" json:"rotation"` + Rotation *KeyRotation `protobuf:"bytes,4,opt,name=rotation,proto3" json:"rotation,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *UpdateClusterRequest) Reset() { + *x = UpdateClusterRequest{} + mi := &file_api_control_proto_msgTypes[39] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *UpdateClusterRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *UpdateClusterRequest) Reset() { *m = UpdateClusterRequest{} } func (*UpdateClusterRequest) ProtoMessage() {} -func (*UpdateClusterRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{39} -} -func (m *UpdateClusterRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *UpdateClusterRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_UpdateClusterRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *UpdateClusterRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[39] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) +} + +// Deprecated: Use UpdateClusterRequest.ProtoReflect.Descriptor instead. +func (*UpdateClusterRequest) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{39} } -func (m *UpdateClusterRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_UpdateClusterRequest.Merge(m, src) + +func (x *UpdateClusterRequest) GetClusterID() string { + if x != nil { + return x.ClusterID + } + return "" } -func (m *UpdateClusterRequest) XXX_Size() int { - return m.Size() + +func (x *UpdateClusterRequest) GetClusterVersion() *Version { + if x != nil { + return x.ClusterVersion + } + return nil } -func (m *UpdateClusterRequest) XXX_DiscardUnknown() { - xxx_messageInfo_UpdateClusterRequest.DiscardUnknown(m) + +func (x *UpdateClusterRequest) GetSpec() *ClusterSpec { + if x != nil { + return x.Spec + } + return nil } -var xxx_messageInfo_UpdateClusterRequest proto.InternalMessageInfo +func (x *UpdateClusterRequest) GetRotation() *KeyRotation { + if x != nil { + return x.Rotation + } + return nil +} type UpdateClusterResponse struct { - Cluster *Cluster `protobuf:"bytes,1,opt,name=cluster,proto3" json:"cluster,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Cluster *Cluster `protobuf:"bytes,1,opt,name=cluster,proto3" json:"cluster,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *UpdateClusterResponse) Reset() { + *x = UpdateClusterResponse{} + mi := &file_api_control_proto_msgTypes[40] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *UpdateClusterResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *UpdateClusterResponse) Reset() { *m = UpdateClusterResponse{} } func (*UpdateClusterResponse) ProtoMessage() {} -func (*UpdateClusterResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{40} -} -func (m *UpdateClusterResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *UpdateClusterResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_UpdateClusterResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *UpdateClusterResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[40] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *UpdateClusterResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_UpdateClusterResponse.Merge(m, src) -} -func (m *UpdateClusterResponse) XXX_Size() int { - return m.Size() -} -func (m *UpdateClusterResponse) XXX_DiscardUnknown() { - xxx_messageInfo_UpdateClusterResponse.DiscardUnknown(m) + +// Deprecated: Use UpdateClusterResponse.ProtoReflect.Descriptor instead. +func (*UpdateClusterResponse) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{40} } -var xxx_messageInfo_UpdateClusterResponse proto.InternalMessageInfo +func (x *UpdateClusterResponse) GetCluster() *Cluster { + if x != nil { + return x.Cluster + } + return nil +} // GetSecretRequest is the request to get a `Secret` object given a secret id. type GetSecretRequest struct { - SecretID string `protobuf:"bytes,1,opt,name=secret_id,json=secretId,proto3" json:"secret_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + SecretID string `protobuf:"bytes,1,opt,name=secret_id,json=secretId,proto3" json:"secret_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GetSecretRequest) Reset() { + *x = GetSecretRequest{} + mi := &file_api_control_proto_msgTypes[41] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetSecretRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *GetSecretRequest) Reset() { *m = GetSecretRequest{} } func (*GetSecretRequest) ProtoMessage() {} -func (*GetSecretRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{41} -} -func (m *GetSecretRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *GetSecretRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_GetSecretRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *GetSecretRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[41] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *GetSecretRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetSecretRequest.Merge(m, src) -} -func (m *GetSecretRequest) XXX_Size() int { - return m.Size() -} -func (m *GetSecretRequest) XXX_DiscardUnknown() { - xxx_messageInfo_GetSecretRequest.DiscardUnknown(m) + +// Deprecated: Use GetSecretRequest.ProtoReflect.Descriptor instead. +func (*GetSecretRequest) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{41} } -var xxx_messageInfo_GetSecretRequest proto.InternalMessageInfo +func (x *GetSecretRequest) GetSecretID() string { + if x != nil { + return x.SecretID + } + return "" +} // GetSecretResponse contains the Secret corresponding to the id in // `GetSecretRequest`, but the `Secret.Spec.Data` field in each `Secret` // object should be nil instead of actually containing the secret bytes. type GetSecretResponse struct { - Secret *Secret `protobuf:"bytes,1,opt,name=secret,proto3" json:"secret,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Secret *Secret `protobuf:"bytes,1,opt,name=secret,proto3" json:"secret,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GetSecretResponse) Reset() { + *x = GetSecretResponse{} + mi := &file_api_control_proto_msgTypes[42] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetSecretResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *GetSecretResponse) Reset() { *m = GetSecretResponse{} } func (*GetSecretResponse) ProtoMessage() {} -func (*GetSecretResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{42} -} -func (m *GetSecretResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *GetSecretResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_GetSecretResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *GetSecretResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[42] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *GetSecretResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetSecretResponse.Merge(m, src) -} -func (m *GetSecretResponse) XXX_Size() int { - return m.Size() -} -func (m *GetSecretResponse) XXX_DiscardUnknown() { - xxx_messageInfo_GetSecretResponse.DiscardUnknown(m) + +// Deprecated: Use GetSecretResponse.ProtoReflect.Descriptor instead. +func (*GetSecretResponse) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{42} } -var xxx_messageInfo_GetSecretResponse proto.InternalMessageInfo +func (x *GetSecretResponse) GetSecret() *Secret { + if x != nil { + return x.Secret + } + return nil +} type UpdateSecretRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` // SecretID is the secret ID to update. SecretID string `protobuf:"bytes,1,opt,name=secret_id,json=secretId,proto3" json:"secret_id,omitempty"` // SecretVersion is the version of the secret being updated. SecretVersion *Version `protobuf:"bytes,2,opt,name=secret_version,json=secretVersion,proto3" json:"secret_version,omitempty"` // Spec is the new spec to apply to the Secret // Only some fields are allowed to be updated. - Spec *SecretSpec `protobuf:"bytes,3,opt,name=spec,proto3" json:"spec,omitempty"` + Spec *SecretSpec `protobuf:"bytes,3,opt,name=spec,proto3" json:"spec,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *UpdateSecretRequest) Reset() { + *x = UpdateSecretRequest{} + mi := &file_api_control_proto_msgTypes[43] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *UpdateSecretRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *UpdateSecretRequest) Reset() { *m = UpdateSecretRequest{} } func (*UpdateSecretRequest) ProtoMessage() {} -func (*UpdateSecretRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{43} -} -func (m *UpdateSecretRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *UpdateSecretRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_UpdateSecretRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *UpdateSecretRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[43] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *UpdateSecretRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_UpdateSecretRequest.Merge(m, src) + +// Deprecated: Use UpdateSecretRequest.ProtoReflect.Descriptor instead. +func (*UpdateSecretRequest) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{43} } -func (m *UpdateSecretRequest) XXX_Size() int { - return m.Size() + +func (x *UpdateSecretRequest) GetSecretID() string { + if x != nil { + return x.SecretID + } + return "" } -func (m *UpdateSecretRequest) XXX_DiscardUnknown() { - xxx_messageInfo_UpdateSecretRequest.DiscardUnknown(m) + +func (x *UpdateSecretRequest) GetSecretVersion() *Version { + if x != nil { + return x.SecretVersion + } + return nil } -var xxx_messageInfo_UpdateSecretRequest proto.InternalMessageInfo +func (x *UpdateSecretRequest) GetSpec() *SecretSpec { + if x != nil { + return x.Spec + } + return nil +} type UpdateSecretResponse struct { - Secret *Secret `protobuf:"bytes,1,opt,name=secret,proto3" json:"secret,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Secret *Secret `protobuf:"bytes,1,opt,name=secret,proto3" json:"secret,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *UpdateSecretResponse) Reset() { + *x = UpdateSecretResponse{} + mi := &file_api_control_proto_msgTypes[44] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *UpdateSecretResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *UpdateSecretResponse) Reset() { *m = UpdateSecretResponse{} } func (*UpdateSecretResponse) ProtoMessage() {} -func (*UpdateSecretResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{44} -} -func (m *UpdateSecretResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *UpdateSecretResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_UpdateSecretResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *UpdateSecretResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[44] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *UpdateSecretResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_UpdateSecretResponse.Merge(m, src) -} -func (m *UpdateSecretResponse) XXX_Size() int { - return m.Size() -} -func (m *UpdateSecretResponse) XXX_DiscardUnknown() { - xxx_messageInfo_UpdateSecretResponse.DiscardUnknown(m) + +// Deprecated: Use UpdateSecretResponse.ProtoReflect.Descriptor instead. +func (*UpdateSecretResponse) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{44} } -var xxx_messageInfo_UpdateSecretResponse proto.InternalMessageInfo +func (x *UpdateSecretResponse) GetSecret() *Secret { + if x != nil { + return x.Secret + } + return nil +} // ListSecretRequest is the request to list all non-internal secrets in the secret store, // or all secrets filtered by (name or name prefix or id prefix) and labels. type ListSecretsRequest struct { - Filters *ListSecretsRequest_Filters `protobuf:"bytes,1,opt,name=filters,proto3" json:"filters,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Filters *ListSecretsRequest_Filters `protobuf:"bytes,1,opt,name=filters,proto3" json:"filters,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *ListSecretsRequest) Reset() { *m = ListSecretsRequest{} } -func (*ListSecretsRequest) ProtoMessage() {} -func (*ListSecretsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{45} -} -func (m *ListSecretsRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ListSecretsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ListSecretsRequest.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 *ListSecretsRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_ListSecretsRequest.Merge(m, src) -} -func (m *ListSecretsRequest) XXX_Size() int { - return m.Size() -} -func (m *ListSecretsRequest) XXX_DiscardUnknown() { - xxx_messageInfo_ListSecretsRequest.DiscardUnknown(m) +func (x *ListSecretsRequest) Reset() { + *x = ListSecretsRequest{} + mi := &file_api_control_proto_msgTypes[45] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -var xxx_messageInfo_ListSecretsRequest proto.InternalMessageInfo - -type ListSecretsRequest_Filters struct { - Names []string `protobuf:"bytes,1,rep,name=names,proto3" json:"names,omitempty"` - IDPrefixes []string `protobuf:"bytes,2,rep,name=id_prefixes,json=idPrefixes,proto3" json:"id_prefixes,omitempty"` - 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"` - NamePrefixes []string `protobuf:"bytes,4,rep,name=name_prefixes,json=namePrefixes,proto3" json:"name_prefixes,omitempty"` +func (x *ListSecretsRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ListSecretsRequest_Filters) Reset() { *m = ListSecretsRequest_Filters{} } -func (*ListSecretsRequest_Filters) ProtoMessage() {} -func (*ListSecretsRequest_Filters) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{45, 0} -} -func (m *ListSecretsRequest_Filters) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ListSecretsRequest_Filters) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ListSecretsRequest_Filters.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err +func (*ListSecretsRequest) ProtoMessage() {} + +func (x *ListSecretsRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[45] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *ListSecretsRequest_Filters) XXX_Merge(src proto.Message) { - xxx_messageInfo_ListSecretsRequest_Filters.Merge(m, src) -} -func (m *ListSecretsRequest_Filters) XXX_Size() int { - return m.Size() -} -func (m *ListSecretsRequest_Filters) XXX_DiscardUnknown() { - xxx_messageInfo_ListSecretsRequest_Filters.DiscardUnknown(m) + +// Deprecated: Use ListSecretsRequest.ProtoReflect.Descriptor instead. +func (*ListSecretsRequest) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{45} } -var xxx_messageInfo_ListSecretsRequest_Filters proto.InternalMessageInfo +func (x *ListSecretsRequest) GetFilters() *ListSecretsRequest_Filters { + if x != nil { + return x.Filters + } + return nil +} // ListSecretResponse contains a list of all the secrets that match the name or // name prefix filters provided in `ListSecretRequest`. The `Secret.Spec.Data` // field in each `Secret` object should be nil instead of actually containing // the secret bytes. type ListSecretsResponse struct { - Secrets []*Secret `protobuf:"bytes,1,rep,name=secrets,proto3" json:"secrets,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Secrets []*Secret `protobuf:"bytes,1,rep,name=secrets,proto3" json:"secrets,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ListSecretsResponse) Reset() { + *x = ListSecretsResponse{} + mi := &file_api_control_proto_msgTypes[46] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ListSecretsResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ListSecretsResponse) Reset() { *m = ListSecretsResponse{} } func (*ListSecretsResponse) ProtoMessage() {} -func (*ListSecretsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{46} -} -func (m *ListSecretsResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ListSecretsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ListSecretsResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *ListSecretsResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[46] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *ListSecretsResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_ListSecretsResponse.Merge(m, src) -} -func (m *ListSecretsResponse) XXX_Size() int { - return m.Size() -} -func (m *ListSecretsResponse) XXX_DiscardUnknown() { - xxx_messageInfo_ListSecretsResponse.DiscardUnknown(m) + +// Deprecated: Use ListSecretsResponse.ProtoReflect.Descriptor instead. +func (*ListSecretsResponse) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{46} } -var xxx_messageInfo_ListSecretsResponse proto.InternalMessageInfo +func (x *ListSecretsResponse) GetSecrets() []*Secret { + if x != nil { + return x.Secrets + } + return nil +} // CreateSecretRequest specifies a new secret (it will not update an existing // secret) to create. type CreateSecretRequest struct { - Spec *SecretSpec `protobuf:"bytes,1,opt,name=spec,proto3" json:"spec,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Spec *SecretSpec `protobuf:"bytes,1,opt,name=spec,proto3" json:"spec,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *CreateSecretRequest) Reset() { + *x = CreateSecretRequest{} + mi := &file_api_control_proto_msgTypes[47] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CreateSecretRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *CreateSecretRequest) Reset() { *m = CreateSecretRequest{} } func (*CreateSecretRequest) ProtoMessage() {} -func (*CreateSecretRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{47} -} -func (m *CreateSecretRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *CreateSecretRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_CreateSecretRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *CreateSecretRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[47] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *CreateSecretRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_CreateSecretRequest.Merge(m, src) -} -func (m *CreateSecretRequest) XXX_Size() int { - return m.Size() -} -func (m *CreateSecretRequest) XXX_DiscardUnknown() { - xxx_messageInfo_CreateSecretRequest.DiscardUnknown(m) + +// Deprecated: Use CreateSecretRequest.ProtoReflect.Descriptor instead. +func (*CreateSecretRequest) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{47} } -var xxx_messageInfo_CreateSecretRequest proto.InternalMessageInfo +func (x *CreateSecretRequest) GetSpec() *SecretSpec { + if x != nil { + return x.Spec + } + return nil +} // CreateSecretResponse contains the newly created `Secret` corresponding to the // name in `CreateSecretRequest`. The `Secret.Spec.Data` field should be nil instead // of actually containing the secret bytes. type CreateSecretResponse struct { - Secret *Secret `protobuf:"bytes,1,opt,name=secret,proto3" json:"secret,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Secret *Secret `protobuf:"bytes,1,opt,name=secret,proto3" json:"secret,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *CreateSecretResponse) Reset() { + *x = CreateSecretResponse{} + mi := &file_api_control_proto_msgTypes[48] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CreateSecretResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *CreateSecretResponse) Reset() { *m = CreateSecretResponse{} } func (*CreateSecretResponse) ProtoMessage() {} -func (*CreateSecretResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{48} -} -func (m *CreateSecretResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *CreateSecretResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_CreateSecretResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *CreateSecretResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[48] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *CreateSecretResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_CreateSecretResponse.Merge(m, src) -} -func (m *CreateSecretResponse) XXX_Size() int { - return m.Size() -} -func (m *CreateSecretResponse) XXX_DiscardUnknown() { - xxx_messageInfo_CreateSecretResponse.DiscardUnknown(m) + +// Deprecated: Use CreateSecretResponse.ProtoReflect.Descriptor instead. +func (*CreateSecretResponse) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{48} } -var xxx_messageInfo_CreateSecretResponse proto.InternalMessageInfo +func (x *CreateSecretResponse) GetSecret() *Secret { + if x != nil { + return x.Secret + } + return nil +} // RemoveSecretRequest contains the ID of the secret that should be removed. This // removes all versions of the secret. type RemoveSecretRequest struct { - SecretID string `protobuf:"bytes,1,opt,name=secret_id,json=secretId,proto3" json:"secret_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + SecretID string `protobuf:"bytes,1,opt,name=secret_id,json=secretId,proto3" json:"secret_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RemoveSecretRequest) Reset() { + *x = RemoveSecretRequest{} + mi := &file_api_control_proto_msgTypes[49] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RemoveSecretRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *RemoveSecretRequest) Reset() { *m = RemoveSecretRequest{} } func (*RemoveSecretRequest) ProtoMessage() {} -func (*RemoveSecretRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{49} -} -func (m *RemoveSecretRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *RemoveSecretRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_RemoveSecretRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *RemoveSecretRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[49] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *RemoveSecretRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_RemoveSecretRequest.Merge(m, src) -} -func (m *RemoveSecretRequest) XXX_Size() int { - return m.Size() -} -func (m *RemoveSecretRequest) XXX_DiscardUnknown() { - xxx_messageInfo_RemoveSecretRequest.DiscardUnknown(m) + +// Deprecated: Use RemoveSecretRequest.ProtoReflect.Descriptor instead. +func (*RemoveSecretRequest) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{49} } -var xxx_messageInfo_RemoveSecretRequest proto.InternalMessageInfo +func (x *RemoveSecretRequest) GetSecretID() string { + if x != nil { + return x.SecretID + } + return "" +} // RemoveSecretResponse is an empty object indicating the successful removal of // a secret. type RemoveSecretResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RemoveSecretResponse) Reset() { + *x = RemoveSecretResponse{} + mi := &file_api_control_proto_msgTypes[50] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RemoveSecretResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *RemoveSecretResponse) Reset() { *m = RemoveSecretResponse{} } func (*RemoveSecretResponse) ProtoMessage() {} -func (*RemoveSecretResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{50} -} -func (m *RemoveSecretResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *RemoveSecretResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_RemoveSecretResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *RemoveSecretResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[50] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } -} -func (m *RemoveSecretResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_RemoveSecretResponse.Merge(m, src) -} -func (m *RemoveSecretResponse) XXX_Size() int { - return m.Size() -} -func (m *RemoveSecretResponse) XXX_DiscardUnknown() { - xxx_messageInfo_RemoveSecretResponse.DiscardUnknown(m) + return mi.MessageOf(x) } -var xxx_messageInfo_RemoveSecretResponse proto.InternalMessageInfo +// Deprecated: Use RemoveSecretResponse.ProtoReflect.Descriptor instead. +func (*RemoveSecretResponse) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{50} +} // GetConfigRequest is the request to get a `Config` object given a config id. type GetConfigRequest struct { - ConfigID string `protobuf:"bytes,1,opt,name=config_id,json=configId,proto3" json:"config_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + ConfigID string `protobuf:"bytes,1,opt,name=config_id,json=configId,proto3" json:"config_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GetConfigRequest) Reset() { + *x = GetConfigRequest{} + mi := &file_api_control_proto_msgTypes[51] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetConfigRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *GetConfigRequest) Reset() { *m = GetConfigRequest{} } func (*GetConfigRequest) ProtoMessage() {} -func (*GetConfigRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{51} -} -func (m *GetConfigRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *GetConfigRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_GetConfigRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *GetConfigRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[51] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *GetConfigRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetConfigRequest.Merge(m, src) -} -func (m *GetConfigRequest) XXX_Size() int { - return m.Size() -} -func (m *GetConfigRequest) XXX_DiscardUnknown() { - xxx_messageInfo_GetConfigRequest.DiscardUnknown(m) + +// Deprecated: Use GetConfigRequest.ProtoReflect.Descriptor instead. +func (*GetConfigRequest) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{51} } -var xxx_messageInfo_GetConfigRequest proto.InternalMessageInfo +func (x *GetConfigRequest) GetConfigID() string { + if x != nil { + return x.ConfigID + } + return "" +} // GetConfigResponse contains the Config corresponding to the id in // `GetConfigRequest`. type GetConfigResponse struct { - Config *Config `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Config *Config `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GetConfigResponse) Reset() { + *x = GetConfigResponse{} + mi := &file_api_control_proto_msgTypes[52] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetConfigResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *GetConfigResponse) Reset() { *m = GetConfigResponse{} } func (*GetConfigResponse) ProtoMessage() {} -func (*GetConfigResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{52} -} -func (m *GetConfigResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *GetConfigResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_GetConfigResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *GetConfigResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[52] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *GetConfigResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetConfigResponse.Merge(m, src) -} -func (m *GetConfigResponse) XXX_Size() int { - return m.Size() -} -func (m *GetConfigResponse) XXX_DiscardUnknown() { - xxx_messageInfo_GetConfigResponse.DiscardUnknown(m) + +// Deprecated: Use GetConfigResponse.ProtoReflect.Descriptor instead. +func (*GetConfigResponse) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{52} } -var xxx_messageInfo_GetConfigResponse proto.InternalMessageInfo +func (x *GetConfigResponse) GetConfig() *Config { + if x != nil { + return x.Config + } + return nil +} type UpdateConfigRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` // ConfigID is the config ID to update. ConfigID string `protobuf:"bytes,1,opt,name=config_id,json=configId,proto3" json:"config_id,omitempty"` // ConfigVersion is the version of the config being updated. ConfigVersion *Version `protobuf:"bytes,2,opt,name=config_version,json=configVersion,proto3" json:"config_version,omitempty"` // Spec is the new spec to apply to the Config // Only some fields are allowed to be updated. - Spec *ConfigSpec `protobuf:"bytes,3,opt,name=spec,proto3" json:"spec,omitempty"` + Spec *ConfigSpec `protobuf:"bytes,3,opt,name=spec,proto3" json:"spec,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *UpdateConfigRequest) Reset() { + *x = UpdateConfigRequest{} + mi := &file_api_control_proto_msgTypes[53] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *UpdateConfigRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *UpdateConfigRequest) Reset() { *m = UpdateConfigRequest{} } func (*UpdateConfigRequest) ProtoMessage() {} -func (*UpdateConfigRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{53} -} -func (m *UpdateConfigRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *UpdateConfigRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_UpdateConfigRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *UpdateConfigRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[53] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } -} -func (m *UpdateConfigRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_UpdateConfigRequest.Merge(m, src) -} -func (m *UpdateConfigRequest) XXX_Size() int { - return m.Size() -} -func (m *UpdateConfigRequest) XXX_DiscardUnknown() { - xxx_messageInfo_UpdateConfigRequest.DiscardUnknown(m) + return mi.MessageOf(x) } -var xxx_messageInfo_UpdateConfigRequest proto.InternalMessageInfo +// Deprecated: Use UpdateConfigRequest.ProtoReflect.Descriptor instead. +func (*UpdateConfigRequest) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{53} +} -type UpdateConfigResponse struct { - Config *Config `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` +func (x *UpdateConfigRequest) GetConfigID() string { + if x != nil { + return x.ConfigID + } + return "" } -func (m *UpdateConfigResponse) Reset() { *m = UpdateConfigResponse{} } -func (*UpdateConfigResponse) ProtoMessage() {} -func (*UpdateConfigResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{54} -} -func (m *UpdateConfigResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *UpdateConfigResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_UpdateConfigResponse.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 (x *UpdateConfigRequest) GetConfigVersion() *Version { + if x != nil { + return x.ConfigVersion } + return nil } -func (m *UpdateConfigResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_UpdateConfigResponse.Merge(m, src) -} -func (m *UpdateConfigResponse) XXX_Size() int { - return m.Size() + +func (x *UpdateConfigRequest) GetSpec() *ConfigSpec { + if x != nil { + return x.Spec + } + return nil } -func (m *UpdateConfigResponse) XXX_DiscardUnknown() { - xxx_messageInfo_UpdateConfigResponse.DiscardUnknown(m) + +type UpdateConfigResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Config *Config `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -var xxx_messageInfo_UpdateConfigResponse proto.InternalMessageInfo +func (x *UpdateConfigResponse) Reset() { + *x = UpdateConfigResponse{} + mi := &file_api_control_proto_msgTypes[54] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} -// ListConfigRequest is the request to list all configs in the config store, -// or all configs filtered by (name or name prefix or id prefix) and labels. -type ListConfigsRequest struct { - Filters *ListConfigsRequest_Filters `protobuf:"bytes,1,opt,name=filters,proto3" json:"filters,omitempty"` +func (x *UpdateConfigResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ListConfigsRequest) Reset() { *m = ListConfigsRequest{} } -func (*ListConfigsRequest) ProtoMessage() {} -func (*ListConfigsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{55} -} -func (m *ListConfigsRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ListConfigsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ListConfigsRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err +func (*UpdateConfigResponse) ProtoMessage() {} + +func (x *UpdateConfigResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[54] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *ListConfigsRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_ListConfigsRequest.Merge(m, src) + +// Deprecated: Use UpdateConfigResponse.ProtoReflect.Descriptor instead. +func (*UpdateConfigResponse) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{54} } -func (m *ListConfigsRequest) XXX_Size() int { - return m.Size() + +func (x *UpdateConfigResponse) GetConfig() *Config { + if x != nil { + return x.Config + } + return nil } -func (m *ListConfigsRequest) XXX_DiscardUnknown() { - xxx_messageInfo_ListConfigsRequest.DiscardUnknown(m) + +// ListConfigRequest is the request to list all configs in the config store, +// or all configs filtered by (name or name prefix or id prefix) and labels. +type ListConfigsRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Filters *ListConfigsRequest_Filters `protobuf:"bytes,1,opt,name=filters,proto3" json:"filters,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -var xxx_messageInfo_ListConfigsRequest proto.InternalMessageInfo +func (x *ListConfigsRequest) Reset() { + *x = ListConfigsRequest{} + mi := &file_api_control_proto_msgTypes[55] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} -type ListConfigsRequest_Filters struct { - Names []string `protobuf:"bytes,1,rep,name=names,proto3" json:"names,omitempty"` - IDPrefixes []string `protobuf:"bytes,2,rep,name=id_prefixes,json=idPrefixes,proto3" json:"id_prefixes,omitempty"` - 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"` - NamePrefixes []string `protobuf:"bytes,4,rep,name=name_prefixes,json=namePrefixes,proto3" json:"name_prefixes,omitempty"` +func (x *ListConfigsRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ListConfigsRequest_Filters) Reset() { *m = ListConfigsRequest_Filters{} } -func (*ListConfigsRequest_Filters) ProtoMessage() {} -func (*ListConfigsRequest_Filters) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{55, 0} -} -func (m *ListConfigsRequest_Filters) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ListConfigsRequest_Filters) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ListConfigsRequest_Filters.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err +func (*ListConfigsRequest) ProtoMessage() {} + +func (x *ListConfigsRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[55] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *ListConfigsRequest_Filters) XXX_Merge(src proto.Message) { - xxx_messageInfo_ListConfigsRequest_Filters.Merge(m, src) -} -func (m *ListConfigsRequest_Filters) XXX_Size() int { - return m.Size() -} -func (m *ListConfigsRequest_Filters) XXX_DiscardUnknown() { - xxx_messageInfo_ListConfigsRequest_Filters.DiscardUnknown(m) + +// Deprecated: Use ListConfigsRequest.ProtoReflect.Descriptor instead. +func (*ListConfigsRequest) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{55} } -var xxx_messageInfo_ListConfigsRequest_Filters proto.InternalMessageInfo +func (x *ListConfigsRequest) GetFilters() *ListConfigsRequest_Filters { + if x != nil { + return x.Filters + } + return nil +} // ListConfigResponse contains a list of all the configs that match the name or // name prefix filters provided in `ListConfigRequest`. type ListConfigsResponse struct { - Configs []*Config `protobuf:"bytes,1,rep,name=configs,proto3" json:"configs,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Configs []*Config `protobuf:"bytes,1,rep,name=configs,proto3" json:"configs,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ListConfigsResponse) Reset() { + *x = ListConfigsResponse{} + mi := &file_api_control_proto_msgTypes[56] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ListConfigsResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ListConfigsResponse) Reset() { *m = ListConfigsResponse{} } func (*ListConfigsResponse) ProtoMessage() {} -func (*ListConfigsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{56} -} -func (m *ListConfigsResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ListConfigsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ListConfigsResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *ListConfigsResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[56] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *ListConfigsResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_ListConfigsResponse.Merge(m, src) -} -func (m *ListConfigsResponse) XXX_Size() int { - return m.Size() -} -func (m *ListConfigsResponse) XXX_DiscardUnknown() { - xxx_messageInfo_ListConfigsResponse.DiscardUnknown(m) + +// Deprecated: Use ListConfigsResponse.ProtoReflect.Descriptor instead. +func (*ListConfigsResponse) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{56} } -var xxx_messageInfo_ListConfigsResponse proto.InternalMessageInfo +func (x *ListConfigsResponse) GetConfigs() []*Config { + if x != nil { + return x.Configs + } + return nil +} // CreateConfigRequest specifies a new config (it will not update an existing // config) to create. type CreateConfigRequest struct { - Spec *ConfigSpec `protobuf:"bytes,1,opt,name=spec,proto3" json:"spec,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Spec *ConfigSpec `protobuf:"bytes,1,opt,name=spec,proto3" json:"spec,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *CreateConfigRequest) Reset() { + *x = CreateConfigRequest{} + mi := &file_api_control_proto_msgTypes[57] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CreateConfigRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *CreateConfigRequest) Reset() { *m = CreateConfigRequest{} } func (*CreateConfigRequest) ProtoMessage() {} -func (*CreateConfigRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{57} -} -func (m *CreateConfigRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *CreateConfigRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_CreateConfigRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *CreateConfigRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[57] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *CreateConfigRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_CreateConfigRequest.Merge(m, src) -} -func (m *CreateConfigRequest) XXX_Size() int { - return m.Size() -} -func (m *CreateConfigRequest) XXX_DiscardUnknown() { - xxx_messageInfo_CreateConfigRequest.DiscardUnknown(m) + +// Deprecated: Use CreateConfigRequest.ProtoReflect.Descriptor instead. +func (*CreateConfigRequest) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{57} } -var xxx_messageInfo_CreateConfigRequest proto.InternalMessageInfo +func (x *CreateConfigRequest) GetSpec() *ConfigSpec { + if x != nil { + return x.Spec + } + return nil +} // CreateConfigResponse contains the newly created `Config` corresponding to the // name in `CreateConfigRequest`. type CreateConfigResponse struct { - Config *Config `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Config *Config `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *CreateConfigResponse) Reset() { + *x = CreateConfigResponse{} + mi := &file_api_control_proto_msgTypes[58] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CreateConfigResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *CreateConfigResponse) Reset() { *m = CreateConfigResponse{} } func (*CreateConfigResponse) ProtoMessage() {} -func (*CreateConfigResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{58} -} -func (m *CreateConfigResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *CreateConfigResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_CreateConfigResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *CreateConfigResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[58] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *CreateConfigResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_CreateConfigResponse.Merge(m, src) -} -func (m *CreateConfigResponse) XXX_Size() int { - return m.Size() -} -func (m *CreateConfigResponse) XXX_DiscardUnknown() { - xxx_messageInfo_CreateConfigResponse.DiscardUnknown(m) + +// Deprecated: Use CreateConfigResponse.ProtoReflect.Descriptor instead. +func (*CreateConfigResponse) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{58} } -var xxx_messageInfo_CreateConfigResponse proto.InternalMessageInfo +func (x *CreateConfigResponse) GetConfig() *Config { + if x != nil { + return x.Config + } + return nil +} // RemoveConfigRequest contains the ID of the config that should be removed. This // removes all versions of the config. type RemoveConfigRequest struct { - ConfigID string `protobuf:"bytes,1,opt,name=config_id,json=configId,proto3" json:"config_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + ConfigID string `protobuf:"bytes,1,opt,name=config_id,json=configId,proto3" json:"config_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RemoveConfigRequest) Reset() { + *x = RemoveConfigRequest{} + mi := &file_api_control_proto_msgTypes[59] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RemoveConfigRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *RemoveConfigRequest) Reset() { *m = RemoveConfigRequest{} } func (*RemoveConfigRequest) ProtoMessage() {} -func (*RemoveConfigRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{59} -} -func (m *RemoveConfigRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *RemoveConfigRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_RemoveConfigRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *RemoveConfigRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[59] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *RemoveConfigRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_RemoveConfigRequest.Merge(m, src) -} -func (m *RemoveConfigRequest) XXX_Size() int { - return m.Size() -} -func (m *RemoveConfigRequest) XXX_DiscardUnknown() { - xxx_messageInfo_RemoveConfigRequest.DiscardUnknown(m) + +// Deprecated: Use RemoveConfigRequest.ProtoReflect.Descriptor instead. +func (*RemoveConfigRequest) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{59} } -var xxx_messageInfo_RemoveConfigRequest proto.InternalMessageInfo +func (x *RemoveConfigRequest) GetConfigID() string { + if x != nil { + return x.ConfigID + } + return "" +} // RemoveConfigResponse is an empty object indicating the successful removal of // a config. type RemoveConfigResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RemoveConfigResponse) Reset() { + *x = RemoveConfigResponse{} + mi := &file_api_control_proto_msgTypes[60] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RemoveConfigResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *RemoveConfigResponse) Reset() { *m = RemoveConfigResponse{} } func (*RemoveConfigResponse) ProtoMessage() {} -func (*RemoveConfigResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{60} -} -func (m *RemoveConfigResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *RemoveConfigResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_RemoveConfigResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *RemoveConfigResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[60] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } -} -func (m *RemoveConfigResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_RemoveConfigResponse.Merge(m, src) -} -func (m *RemoveConfigResponse) XXX_Size() int { - return m.Size() -} -func (m *RemoveConfigResponse) XXX_DiscardUnknown() { - xxx_messageInfo_RemoveConfigResponse.DiscardUnknown(m) + return mi.MessageOf(x) } -var xxx_messageInfo_RemoveConfigResponse proto.InternalMessageInfo +// Deprecated: Use RemoveConfigResponse.ProtoReflect.Descriptor instead. +func (*RemoveConfigResponse) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{60} +} // CreateExtensionRequest creates a new extension as specified by the provided // parameters type CreateExtensionRequest struct { - Annotations *Annotations `protobuf:"bytes,1,opt,name=annotations,proto3" json:"annotations,omitempty"` - Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Annotations *Annotations `protobuf:"bytes,1,opt,name=annotations,proto3" json:"annotations,omitempty"` + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *CreateExtensionRequest) Reset() { + *x = CreateExtensionRequest{} + mi := &file_api_control_proto_msgTypes[61] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CreateExtensionRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *CreateExtensionRequest) Reset() { *m = CreateExtensionRequest{} } func (*CreateExtensionRequest) ProtoMessage() {} -func (*CreateExtensionRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{61} -} -func (m *CreateExtensionRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *CreateExtensionRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_CreateExtensionRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *CreateExtensionRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[61] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *CreateExtensionRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_CreateExtensionRequest.Merge(m, src) -} -func (m *CreateExtensionRequest) XXX_Size() int { - return m.Size() + +// Deprecated: Use CreateExtensionRequest.ProtoReflect.Descriptor instead. +func (*CreateExtensionRequest) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{61} } -func (m *CreateExtensionRequest) XXX_DiscardUnknown() { - xxx_messageInfo_CreateExtensionRequest.DiscardUnknown(m) + +func (x *CreateExtensionRequest) GetAnnotations() *Annotations { + if x != nil { + return x.Annotations + } + return nil } -var xxx_messageInfo_CreateExtensionRequest proto.InternalMessageInfo +func (x *CreateExtensionRequest) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} // CreateExtensionResponse contains the newly created `Extension` corresponding // to the parameters in the CreateExtensionRequest. type CreateExtensionResponse struct { - Extension *Extension `protobuf:"bytes,1,opt,name=extension,proto3" json:"extension,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Extension *Extension `protobuf:"bytes,1,opt,name=extension,proto3" json:"extension,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *CreateExtensionResponse) Reset() { + *x = CreateExtensionResponse{} + mi := &file_api_control_proto_msgTypes[62] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CreateExtensionResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *CreateExtensionResponse) Reset() { *m = CreateExtensionResponse{} } func (*CreateExtensionResponse) ProtoMessage() {} -func (*CreateExtensionResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{62} -} -func (m *CreateExtensionResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *CreateExtensionResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_CreateExtensionResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *CreateExtensionResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[62] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *CreateExtensionResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_CreateExtensionResponse.Merge(m, src) -} -func (m *CreateExtensionResponse) XXX_Size() int { - return m.Size() -} -func (m *CreateExtensionResponse) XXX_DiscardUnknown() { - xxx_messageInfo_CreateExtensionResponse.DiscardUnknown(m) + +// Deprecated: Use CreateExtensionResponse.ProtoReflect.Descriptor instead. +func (*CreateExtensionResponse) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{62} } -var xxx_messageInfo_CreateExtensionResponse proto.InternalMessageInfo +func (x *CreateExtensionResponse) GetExtension() *Extension { + if x != nil { + return x.Extension + } + return nil +} // RemoveExtensionRequest contains the ID of the extension that should be removed. This // removes all versions of the extension. type RemoveExtensionRequest struct { - ExtensionID string `protobuf:"bytes,1,opt,name=extension_id,json=extensionId,proto3" json:"extension_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + ExtensionID string `protobuf:"bytes,1,opt,name=extension_id,json=extensionId,proto3" json:"extension_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RemoveExtensionRequest) Reset() { + *x = RemoveExtensionRequest{} + mi := &file_api_control_proto_msgTypes[63] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RemoveExtensionRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *RemoveExtensionRequest) Reset() { *m = RemoveExtensionRequest{} } func (*RemoveExtensionRequest) ProtoMessage() {} -func (*RemoveExtensionRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{63} -} -func (m *RemoveExtensionRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *RemoveExtensionRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_RemoveExtensionRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *RemoveExtensionRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[63] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *RemoveExtensionRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_RemoveExtensionRequest.Merge(m, src) -} -func (m *RemoveExtensionRequest) XXX_Size() int { - return m.Size() -} -func (m *RemoveExtensionRequest) XXX_DiscardUnknown() { - xxx_messageInfo_RemoveExtensionRequest.DiscardUnknown(m) + +// Deprecated: Use RemoveExtensionRequest.ProtoReflect.Descriptor instead. +func (*RemoveExtensionRequest) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{63} } -var xxx_messageInfo_RemoveExtensionRequest proto.InternalMessageInfo +func (x *RemoveExtensionRequest) GetExtensionID() string { + if x != nil { + return x.ExtensionID + } + return "" +} // RemoveExtensionResponse is an empty object indicating the successful removal // of an extension. type RemoveExtensionResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RemoveExtensionResponse) Reset() { + *x = RemoveExtensionResponse{} + mi := &file_api_control_proto_msgTypes[64] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RemoveExtensionResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *RemoveExtensionResponse) Reset() { *m = RemoveExtensionResponse{} } func (*RemoveExtensionResponse) ProtoMessage() {} -func (*RemoveExtensionResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{64} -} -func (m *RemoveExtensionResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *RemoveExtensionResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_RemoveExtensionResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *RemoveExtensionResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[64] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } -} -func (m *RemoveExtensionResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_RemoveExtensionResponse.Merge(m, src) -} -func (m *RemoveExtensionResponse) XXX_Size() int { - return m.Size() -} -func (m *RemoveExtensionResponse) XXX_DiscardUnknown() { - xxx_messageInfo_RemoveExtensionResponse.DiscardUnknown(m) + return mi.MessageOf(x) } -var xxx_messageInfo_RemoveExtensionResponse proto.InternalMessageInfo +// Deprecated: Use RemoveExtensionResponse.ProtoReflect.Descriptor instead. +func (*RemoveExtensionResponse) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{64} +} // GetResourceRequest is the request to get a Extension object given a extension id. type GetExtensionRequest struct { - ExtensionID string `protobuf:"bytes,1,opt,name=extension_id,json=extensionId,proto3" json:"extension_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + ExtensionID string `protobuf:"bytes,1,opt,name=extension_id,json=extensionId,proto3" json:"extension_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GetExtensionRequest) Reset() { + *x = GetExtensionRequest{} + mi := &file_api_control_proto_msgTypes[65] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetExtensionRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *GetExtensionRequest) Reset() { *m = GetExtensionRequest{} } func (*GetExtensionRequest) ProtoMessage() {} -func (*GetExtensionRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{65} -} -func (m *GetExtensionRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *GetExtensionRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_GetExtensionRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *GetExtensionRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[65] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *GetExtensionRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetExtensionRequest.Merge(m, src) -} -func (m *GetExtensionRequest) XXX_Size() int { - return m.Size() -} -func (m *GetExtensionRequest) XXX_DiscardUnknown() { - xxx_messageInfo_GetExtensionRequest.DiscardUnknown(m) + +// Deprecated: Use GetExtensionRequest.ProtoReflect.Descriptor instead. +func (*GetExtensionRequest) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{65} } -var xxx_messageInfo_GetExtensionRequest proto.InternalMessageInfo +func (x *GetExtensionRequest) GetExtensionID() string { + if x != nil { + return x.ExtensionID + } + return "" +} // GetExtensionResponse contains the Extension corresponding to the id in // `GetExtensionRequest`. type GetExtensionResponse struct { - Extension *Extension `protobuf:"bytes,1,opt,name=extension,proto3" json:"extension,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Extension *Extension `protobuf:"bytes,1,opt,name=extension,proto3" json:"extension,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GetExtensionResponse) Reset() { + *x = GetExtensionResponse{} + mi := &file_api_control_proto_msgTypes[66] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetExtensionResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *GetExtensionResponse) Reset() { *m = GetExtensionResponse{} } func (*GetExtensionResponse) ProtoMessage() {} -func (*GetExtensionResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{66} -} -func (m *GetExtensionResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *GetExtensionResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_GetExtensionResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *GetExtensionResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[66] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *GetExtensionResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetExtensionResponse.Merge(m, src) -} -func (m *GetExtensionResponse) XXX_Size() int { - return m.Size() -} -func (m *GetExtensionResponse) XXX_DiscardUnknown() { - xxx_messageInfo_GetExtensionResponse.DiscardUnknown(m) + +// Deprecated: Use GetExtensionResponse.ProtoReflect.Descriptor instead. +func (*GetExtensionResponse) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{66} } -var xxx_messageInfo_GetExtensionResponse proto.InternalMessageInfo +func (x *GetExtensionResponse) GetExtension() *Extension { + if x != nil { + return x.Extension + } + return nil +} // CreateResourceRequest creates a new resource specified by the included // resource object. An existing resource will not be updated. type CreateResourceRequest struct { - Annotations *Annotations `protobuf:"bytes,1,opt,name=annotations,proto3" json:"annotations,omitempty"` - Kind string `protobuf:"bytes,2,opt,name=kind,proto3" json:"kind,omitempty"` - Payload *types.Any `protobuf:"bytes,3,opt,name=payload,proto3" json:"payload,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Annotations *Annotations `protobuf:"bytes,1,opt,name=annotations,proto3" json:"annotations,omitempty"` + Kind string `protobuf:"bytes,2,opt,name=kind,proto3" json:"kind,omitempty"` + Payload *anypb.Any `protobuf:"bytes,3,opt,name=payload,proto3" json:"payload,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *CreateResourceRequest) Reset() { + *x = CreateResourceRequest{} + mi := &file_api_control_proto_msgTypes[67] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CreateResourceRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *CreateResourceRequest) Reset() { *m = CreateResourceRequest{} } func (*CreateResourceRequest) ProtoMessage() {} -func (*CreateResourceRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{67} -} -func (m *CreateResourceRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *CreateResourceRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_CreateResourceRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *CreateResourceRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[67] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *CreateResourceRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_CreateResourceRequest.Merge(m, src) + +// Deprecated: Use CreateResourceRequest.ProtoReflect.Descriptor instead. +func (*CreateResourceRequest) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{67} } -func (m *CreateResourceRequest) XXX_Size() int { - return m.Size() + +func (x *CreateResourceRequest) GetAnnotations() *Annotations { + if x != nil { + return x.Annotations + } + return nil } -func (m *CreateResourceRequest) XXX_DiscardUnknown() { - xxx_messageInfo_CreateResourceRequest.DiscardUnknown(m) + +func (x *CreateResourceRequest) GetKind() string { + if x != nil { + return x.Kind + } + return "" } -var xxx_messageInfo_CreateResourceRequest proto.InternalMessageInfo +func (x *CreateResourceRequest) GetPayload() *anypb.Any { + if x != nil { + return x.Payload + } + return nil +} // CreateResourceResponse contains the newly created `Resource` corresponding // to the resource in the CreateResourceRequest. type CreateResourceResponse struct { - Resource *Resource `protobuf:"bytes,1,opt,name=resource,proto3" json:"resource,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Resource *Resource `protobuf:"bytes,1,opt,name=resource,proto3" json:"resource,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *CreateResourceResponse) Reset() { + *x = CreateResourceResponse{} + mi := &file_api_control_proto_msgTypes[68] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CreateResourceResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *CreateResourceResponse) Reset() { *m = CreateResourceResponse{} } func (*CreateResourceResponse) ProtoMessage() {} -func (*CreateResourceResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{68} -} -func (m *CreateResourceResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *CreateResourceResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_CreateResourceResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *CreateResourceResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[68] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *CreateResourceResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_CreateResourceResponse.Merge(m, src) -} -func (m *CreateResourceResponse) XXX_Size() int { - return m.Size() -} -func (m *CreateResourceResponse) XXX_DiscardUnknown() { - xxx_messageInfo_CreateResourceResponse.DiscardUnknown(m) + +// Deprecated: Use CreateResourceResponse.ProtoReflect.Descriptor instead. +func (*CreateResourceResponse) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{68} } -var xxx_messageInfo_CreateResourceResponse proto.InternalMessageInfo +func (x *CreateResourceResponse) GetResource() *Resource { + if x != nil { + return x.Resource + } + return nil +} // RemoveResourceRequest contains the ID of the resource that should be removed. This // removes all versions of the resource. type RemoveResourceRequest struct { - ResourceID string `protobuf:"bytes,1,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + ResourceID string `protobuf:"bytes,1,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RemoveResourceRequest) Reset() { + *x = RemoveResourceRequest{} + mi := &file_api_control_proto_msgTypes[69] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RemoveResourceRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *RemoveResourceRequest) Reset() { *m = RemoveResourceRequest{} } func (*RemoveResourceRequest) ProtoMessage() {} -func (*RemoveResourceRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{69} -} -func (m *RemoveResourceRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *RemoveResourceRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_RemoveResourceRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *RemoveResourceRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[69] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *RemoveResourceRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_RemoveResourceRequest.Merge(m, src) -} -func (m *RemoveResourceRequest) XXX_Size() int { - return m.Size() -} -func (m *RemoveResourceRequest) XXX_DiscardUnknown() { - xxx_messageInfo_RemoveResourceRequest.DiscardUnknown(m) + +// Deprecated: Use RemoveResourceRequest.ProtoReflect.Descriptor instead. +func (*RemoveResourceRequest) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{69} } -var xxx_messageInfo_RemoveResourceRequest proto.InternalMessageInfo +func (x *RemoveResourceRequest) GetResourceID() string { + if x != nil { + return x.ResourceID + } + return "" +} // RemoveResourceResponse is an empty object indicating the successful removal // of a resource. type RemoveResourceResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RemoveResourceResponse) Reset() { + *x = RemoveResourceResponse{} + mi := &file_api_control_proto_msgTypes[70] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RemoveResourceResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *RemoveResourceResponse) Reset() { *m = RemoveResourceResponse{} } func (*RemoveResourceResponse) ProtoMessage() {} -func (*RemoveResourceResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{70} -} -func (m *RemoveResourceResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *RemoveResourceResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_RemoveResourceResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *RemoveResourceResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[70] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } -} -func (m *RemoveResourceResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_RemoveResourceResponse.Merge(m, src) -} -func (m *RemoveResourceResponse) XXX_Size() int { - return m.Size() -} -func (m *RemoveResourceResponse) XXX_DiscardUnknown() { - xxx_messageInfo_RemoveResourceResponse.DiscardUnknown(m) + return mi.MessageOf(x) } -var xxx_messageInfo_RemoveResourceResponse proto.InternalMessageInfo +// Deprecated: Use RemoveResourceResponse.ProtoReflect.Descriptor instead. +func (*RemoveResourceResponse) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{70} +} // UpdateResourceRequest updates the resource specified by the given resource object. type UpdateResourceRequest struct { - ResourceID string `protobuf:"bytes,1,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"` - ResourceVersion *Version `protobuf:"bytes,2,opt,name=resource_version,json=resourceVersion,proto3" json:"resource_version,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + ResourceID string `protobuf:"bytes,1,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"` + ResourceVersion *Version `protobuf:"bytes,2,opt,name=resource_version,json=resourceVersion,proto3" json:"resource_version,omitempty"` // Annotations describes the annotations to update. If the Annotations should // be unchanged, then this field should be left empty. Note that the name of // a Resource cannot be changed, only its labels. Annotations *Annotations `protobuf:"bytes,3,opt,name=annotations,proto3" json:"annotations,omitempty"` // Payload describes the new payload of the resource. If the Payload should // be unchanged, then this field should be left empty. - Payload *types.Any `protobuf:"bytes,4,opt,name=payload,proto3" json:"payload,omitempty"` + Payload *anypb.Any `protobuf:"bytes,4,opt,name=payload,proto3" json:"payload,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *UpdateResourceRequest) Reset() { + *x = UpdateResourceRequest{} + mi := &file_api_control_proto_msgTypes[71] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *UpdateResourceRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *UpdateResourceRequest) Reset() { *m = UpdateResourceRequest{} } func (*UpdateResourceRequest) ProtoMessage() {} -func (*UpdateResourceRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{71} -} -func (m *UpdateResourceRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *UpdateResourceRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_UpdateResourceRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *UpdateResourceRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[71] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *UpdateResourceRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_UpdateResourceRequest.Merge(m, src) -} -func (m *UpdateResourceRequest) XXX_Size() int { - return m.Size() + +// Deprecated: Use UpdateResourceRequest.ProtoReflect.Descriptor instead. +func (*UpdateResourceRequest) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{71} } -func (m *UpdateResourceRequest) XXX_DiscardUnknown() { - xxx_messageInfo_UpdateResourceRequest.DiscardUnknown(m) + +func (x *UpdateResourceRequest) GetResourceID() string { + if x != nil { + return x.ResourceID + } + return "" } -var xxx_messageInfo_UpdateResourceRequest proto.InternalMessageInfo +func (x *UpdateResourceRequest) GetResourceVersion() *Version { + if x != nil { + return x.ResourceVersion + } + return nil +} -type UpdateResourceResponse struct { - Resource *Resource `protobuf:"bytes,1,opt,name=resource,proto3" json:"resource,omitempty"` +func (x *UpdateResourceRequest) GetAnnotations() *Annotations { + if x != nil { + return x.Annotations + } + return nil } -func (m *UpdateResourceResponse) Reset() { *m = UpdateResourceResponse{} } -func (*UpdateResourceResponse) ProtoMessage() {} -func (*UpdateResourceResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{72} -} -func (m *UpdateResourceResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *UpdateResourceResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_UpdateResourceResponse.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 (x *UpdateResourceRequest) GetPayload() *anypb.Any { + if x != nil { + return x.Payload } + return nil } -func (m *UpdateResourceResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_UpdateResourceResponse.Merge(m, src) + +type UpdateResourceResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Resource *Resource `protobuf:"bytes,1,opt,name=resource,proto3" json:"resource,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *UpdateResourceResponse) XXX_Size() int { - return m.Size() + +func (x *UpdateResourceResponse) Reset() { + *x = UpdateResourceResponse{} + mi := &file_api_control_proto_msgTypes[72] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *UpdateResourceResponse) XXX_DiscardUnknown() { - xxx_messageInfo_UpdateResourceResponse.DiscardUnknown(m) + +func (x *UpdateResourceResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -var xxx_messageInfo_UpdateResourceResponse proto.InternalMessageInfo +func (*UpdateResourceResponse) ProtoMessage() {} -// GetResourceRequest is the request to get a Resource object given a resource id. +func (x *UpdateResourceResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[72] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpdateResourceResponse.ProtoReflect.Descriptor instead. +func (*UpdateResourceResponse) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{72} +} + +func (x *UpdateResourceResponse) GetResource() *Resource { + if x != nil { + return x.Resource + } + return nil +} + +// GetResourceRequest is the request to get a Resource object given a resource id. type GetResourceRequest struct { - ResourceID string `protobuf:"bytes,1,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + ResourceID string `protobuf:"bytes,1,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GetResourceRequest) Reset() { + *x = GetResourceRequest{} + mi := &file_api_control_proto_msgTypes[73] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetResourceRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *GetResourceRequest) Reset() { *m = GetResourceRequest{} } func (*GetResourceRequest) ProtoMessage() {} -func (*GetResourceRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{73} -} -func (m *GetResourceRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *GetResourceRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_GetResourceRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *GetResourceRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[73] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *GetResourceRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetResourceRequest.Merge(m, src) -} -func (m *GetResourceRequest) XXX_Size() int { - return m.Size() -} -func (m *GetResourceRequest) XXX_DiscardUnknown() { - xxx_messageInfo_GetResourceRequest.DiscardUnknown(m) + +// Deprecated: Use GetResourceRequest.ProtoReflect.Descriptor instead. +func (*GetResourceRequest) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{73} } -var xxx_messageInfo_GetResourceRequest proto.InternalMessageInfo +func (x *GetResourceRequest) GetResourceID() string { + if x != nil { + return x.ResourceID + } + return "" +} // GetResourceResponse contains the Resource corresponding to the id in // `GetResourceRequest`. type GetResourceResponse struct { - Resource *Resource `protobuf:"bytes,1,opt,name=resource,proto3" json:"resource,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Resource *Resource `protobuf:"bytes,1,opt,name=resource,proto3" json:"resource,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GetResourceResponse) Reset() { + *x = GetResourceResponse{} + mi := &file_api_control_proto_msgTypes[74] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetResourceResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *GetResourceResponse) Reset() { *m = GetResourceResponse{} } func (*GetResourceResponse) ProtoMessage() {} -func (*GetResourceResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{74} -} -func (m *GetResourceResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *GetResourceResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_GetResourceResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *GetResourceResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[74] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *GetResourceResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetResourceResponse.Merge(m, src) -} -func (m *GetResourceResponse) XXX_Size() int { - return m.Size() -} -func (m *GetResourceResponse) XXX_DiscardUnknown() { - xxx_messageInfo_GetResourceResponse.DiscardUnknown(m) + +// Deprecated: Use GetResourceResponse.ProtoReflect.Descriptor instead. +func (*GetResourceResponse) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{74} } -var xxx_messageInfo_GetResourceResponse proto.InternalMessageInfo +func (x *GetResourceResponse) GetResource() *Resource { + if x != nil { + return x.Resource + } + return nil +} // ListResourcesRequest is the request to list all resources in the raft store, // or all resources filtered by (name or name prefix or id prefix), labels and extension. type ListResourcesRequest struct { - Filters *ListResourcesRequest_Filters `protobuf:"bytes,1,opt,name=filters,proto3" json:"filters,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Filters *ListResourcesRequest_Filters `protobuf:"bytes,1,opt,name=filters,proto3" json:"filters,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *ListResourcesRequest) Reset() { *m = ListResourcesRequest{} } -func (*ListResourcesRequest) ProtoMessage() {} -func (*ListResourcesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{75} -} -func (m *ListResourcesRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ListResourcesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ListResourcesRequest.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 *ListResourcesRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_ListResourcesRequest.Merge(m, src) -} -func (m *ListResourcesRequest) XXX_Size() int { - return m.Size() -} -func (m *ListResourcesRequest) XXX_DiscardUnknown() { - xxx_messageInfo_ListResourcesRequest.DiscardUnknown(m) +func (x *ListResourcesRequest) Reset() { + *x = ListResourcesRequest{} + mi := &file_api_control_proto_msgTypes[75] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -var xxx_messageInfo_ListResourcesRequest proto.InternalMessageInfo - -type ListResourcesRequest_Filters struct { - Names []string `protobuf:"bytes,1,rep,name=names,proto3" json:"names,omitempty"` - IDPrefixes []string `protobuf:"bytes,2,rep,name=id_prefixes,json=idPrefixes,proto3" json:"id_prefixes,omitempty"` - 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"` - NamePrefixes []string `protobuf:"bytes,4,rep,name=name_prefixes,json=namePrefixes,proto3" json:"name_prefixes,omitempty"` - Kind string `protobuf:"bytes,5,opt,name=kind,proto3" json:"kind,omitempty"` +func (x *ListResourcesRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ListResourcesRequest_Filters) Reset() { *m = ListResourcesRequest_Filters{} } -func (*ListResourcesRequest_Filters) ProtoMessage() {} -func (*ListResourcesRequest_Filters) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{75, 0} -} -func (m *ListResourcesRequest_Filters) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ListResourcesRequest_Filters) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ListResourcesRequest_Filters.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err +func (*ListResourcesRequest) ProtoMessage() {} + +func (x *ListResourcesRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[75] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *ListResourcesRequest_Filters) XXX_Merge(src proto.Message) { - xxx_messageInfo_ListResourcesRequest_Filters.Merge(m, src) -} -func (m *ListResourcesRequest_Filters) XXX_Size() int { - return m.Size() -} -func (m *ListResourcesRequest_Filters) XXX_DiscardUnknown() { - xxx_messageInfo_ListResourcesRequest_Filters.DiscardUnknown(m) + +// Deprecated: Use ListResourcesRequest.ProtoReflect.Descriptor instead. +func (*ListResourcesRequest) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{75} } -var xxx_messageInfo_ListResourcesRequest_Filters proto.InternalMessageInfo +func (x *ListResourcesRequest) GetFilters() *ListResourcesRequest_Filters { + if x != nil { + return x.Filters + } + return nil +} // ListResourcesResponse contains a list of all the resources that match the name or // name prefix filters provided in `ListResourcesRequest`. type ListResourcesResponse struct { - Resources []*Resource `protobuf:"bytes,1,rep,name=resources,proto3" json:"resources,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Resources []*Resource `protobuf:"bytes,1,rep,name=resources,proto3" json:"resources,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ListResourcesResponse) Reset() { + *x = ListResourcesResponse{} + mi := &file_api_control_proto_msgTypes[76] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ListResourcesResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ListResourcesResponse) Reset() { *m = ListResourcesResponse{} } func (*ListResourcesResponse) ProtoMessage() {} -func (*ListResourcesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{76} -} -func (m *ListResourcesResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ListResourcesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ListResourcesResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *ListResourcesResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[76] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *ListResourcesResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_ListResourcesResponse.Merge(m, src) + +// Deprecated: Use ListResourcesResponse.ProtoReflect.Descriptor instead. +func (*ListResourcesResponse) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{76} } -func (m *ListResourcesResponse) XXX_Size() int { - return m.Size() + +func (x *ListResourcesResponse) GetResources() []*Resource { + if x != nil { + return x.Resources + } + return nil } -func (m *ListResourcesResponse) XXX_DiscardUnknown() { - xxx_messageInfo_ListResourcesResponse.DiscardUnknown(m) + +type CreateVolumeRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Spec *VolumeSpec `protobuf:"bytes,1,opt,name=spec,proto3" json:"spec,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -var xxx_messageInfo_ListResourcesResponse proto.InternalMessageInfo +func (x *CreateVolumeRequest) Reset() { + *x = CreateVolumeRequest{} + mi := &file_api_control_proto_msgTypes[77] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} -type CreateVolumeRequest struct { - Spec *VolumeSpec `protobuf:"bytes,1,opt,name=spec,proto3" json:"spec,omitempty"` +func (x *CreateVolumeRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *CreateVolumeRequest) Reset() { *m = CreateVolumeRequest{} } func (*CreateVolumeRequest) ProtoMessage() {} -func (*CreateVolumeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{77} -} -func (m *CreateVolumeRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *CreateVolumeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_CreateVolumeRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *CreateVolumeRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[77] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *CreateVolumeRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_CreateVolumeRequest.Merge(m, src) + +// Deprecated: Use CreateVolumeRequest.ProtoReflect.Descriptor instead. +func (*CreateVolumeRequest) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{77} } -func (m *CreateVolumeRequest) XXX_Size() int { - return m.Size() + +func (x *CreateVolumeRequest) GetSpec() *VolumeSpec { + if x != nil { + return x.Spec + } + return nil } -func (m *CreateVolumeRequest) XXX_DiscardUnknown() { - xxx_messageInfo_CreateVolumeRequest.DiscardUnknown(m) + +type CreateVolumeResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Volume *Volume `protobuf:"bytes,1,opt,name=volume,proto3" json:"volume,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -var xxx_messageInfo_CreateVolumeRequest proto.InternalMessageInfo +func (x *CreateVolumeResponse) Reset() { + *x = CreateVolumeResponse{} + mi := &file_api_control_proto_msgTypes[78] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} -type CreateVolumeResponse struct { - Volume *Volume `protobuf:"bytes,1,opt,name=volume,proto3" json:"volume,omitempty"` +func (x *CreateVolumeResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *CreateVolumeResponse) Reset() { *m = CreateVolumeResponse{} } func (*CreateVolumeResponse) ProtoMessage() {} -func (*CreateVolumeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{78} -} -func (m *CreateVolumeResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *CreateVolumeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_CreateVolumeResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *CreateVolumeResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[78] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *CreateVolumeResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_CreateVolumeResponse.Merge(m, src) + +// Deprecated: Use CreateVolumeResponse.ProtoReflect.Descriptor instead. +func (*CreateVolumeResponse) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{78} } -func (m *CreateVolumeResponse) XXX_Size() int { - return m.Size() + +func (x *CreateVolumeResponse) GetVolume() *Volume { + if x != nil { + return x.Volume + } + return nil } -func (m *CreateVolumeResponse) XXX_DiscardUnknown() { - xxx_messageInfo_CreateVolumeResponse.DiscardUnknown(m) + +type GetVolumeRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + VolumeID string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -var xxx_messageInfo_CreateVolumeResponse proto.InternalMessageInfo +func (x *GetVolumeRequest) Reset() { + *x = GetVolumeRequest{} + mi := &file_api_control_proto_msgTypes[79] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} -type GetVolumeRequest struct { - VolumeID string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"` +func (x *GetVolumeRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *GetVolumeRequest) Reset() { *m = GetVolumeRequest{} } func (*GetVolumeRequest) ProtoMessage() {} -func (*GetVolumeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{79} -} -func (m *GetVolumeRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *GetVolumeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_GetVolumeRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *GetVolumeRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[79] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *GetVolumeRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetVolumeRequest.Merge(m, src) + +// Deprecated: Use GetVolumeRequest.ProtoReflect.Descriptor instead. +func (*GetVolumeRequest) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{79} } -func (m *GetVolumeRequest) XXX_Size() int { - return m.Size() + +func (x *GetVolumeRequest) GetVolumeID() string { + if x != nil { + return x.VolumeID + } + return "" } -func (m *GetVolumeRequest) XXX_DiscardUnknown() { - xxx_messageInfo_GetVolumeRequest.DiscardUnknown(m) + +type GetVolumeResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Volume *Volume `protobuf:"bytes,1,opt,name=volume,proto3" json:"volume,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -var xxx_messageInfo_GetVolumeRequest proto.InternalMessageInfo +func (x *GetVolumeResponse) Reset() { + *x = GetVolumeResponse{} + mi := &file_api_control_proto_msgTypes[80] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} -type GetVolumeResponse struct { - Volume *Volume `protobuf:"bytes,1,opt,name=volume,proto3" json:"volume,omitempty"` +func (x *GetVolumeResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *GetVolumeResponse) Reset() { *m = GetVolumeResponse{} } func (*GetVolumeResponse) ProtoMessage() {} -func (*GetVolumeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{80} -} -func (m *GetVolumeResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *GetVolumeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_GetVolumeResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *GetVolumeResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[80] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *GetVolumeResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetVolumeResponse.Merge(m, src) + +// Deprecated: Use GetVolumeResponse.ProtoReflect.Descriptor instead. +func (*GetVolumeResponse) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{80} } -func (m *GetVolumeResponse) XXX_Size() int { - return m.Size() + +func (x *GetVolumeResponse) GetVolume() *Volume { + if x != nil { + return x.Volume + } + return nil } -func (m *GetVolumeResponse) XXX_DiscardUnknown() { - xxx_messageInfo_GetVolumeResponse.DiscardUnknown(m) + +type UpdateVolumeRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + VolumeID string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"` + VolumeVersion *Version `protobuf:"bytes,2,opt,name=volume_version,json=volumeVersion,proto3" json:"volume_version,omitempty"` + Spec *VolumeSpec `protobuf:"bytes,3,opt,name=spec,proto3" json:"spec,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -var xxx_messageInfo_GetVolumeResponse proto.InternalMessageInfo +func (x *UpdateVolumeRequest) Reset() { + *x = UpdateVolumeRequest{} + mi := &file_api_control_proto_msgTypes[81] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} -type UpdateVolumeRequest struct { - VolumeID string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"` - VolumeVersion *Version `protobuf:"bytes,2,opt,name=volume_version,json=volumeVersion,proto3" json:"volume_version,omitempty"` - Spec *VolumeSpec `protobuf:"bytes,3,opt,name=spec,proto3" json:"spec,omitempty"` +func (x *UpdateVolumeRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *UpdateVolumeRequest) Reset() { *m = UpdateVolumeRequest{} } func (*UpdateVolumeRequest) ProtoMessage() {} -func (*UpdateVolumeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{81} -} -func (m *UpdateVolumeRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *UpdateVolumeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_UpdateVolumeRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *UpdateVolumeRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[81] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *UpdateVolumeRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_UpdateVolumeRequest.Merge(m, src) + +// Deprecated: Use UpdateVolumeRequest.ProtoReflect.Descriptor instead. +func (*UpdateVolumeRequest) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{81} } -func (m *UpdateVolumeRequest) XXX_Size() int { - return m.Size() + +func (x *UpdateVolumeRequest) GetVolumeID() string { + if x != nil { + return x.VolumeID + } + return "" } -func (m *UpdateVolumeRequest) XXX_DiscardUnknown() { - xxx_messageInfo_UpdateVolumeRequest.DiscardUnknown(m) + +func (x *UpdateVolumeRequest) GetVolumeVersion() *Version { + if x != nil { + return x.VolumeVersion + } + return nil } -var xxx_messageInfo_UpdateVolumeRequest proto.InternalMessageInfo +func (x *UpdateVolumeRequest) GetSpec() *VolumeSpec { + if x != nil { + return x.Spec + } + return nil +} type UpdateVolumeResponse struct { - Volume *Volume `protobuf:"bytes,1,opt,name=volume,proto3" json:"volume,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Volume *Volume `protobuf:"bytes,1,opt,name=volume,proto3" json:"volume,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *UpdateVolumeResponse) Reset() { + *x = UpdateVolumeResponse{} + mi := &file_api_control_proto_msgTypes[82] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *UpdateVolumeResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *UpdateVolumeResponse) Reset() { *m = UpdateVolumeResponse{} } func (*UpdateVolumeResponse) ProtoMessage() {} -func (*UpdateVolumeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{82} -} -func (m *UpdateVolumeResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *UpdateVolumeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_UpdateVolumeResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *UpdateVolumeResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[82] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *UpdateVolumeResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_UpdateVolumeResponse.Merge(m, src) + +// Deprecated: Use UpdateVolumeResponse.ProtoReflect.Descriptor instead. +func (*UpdateVolumeResponse) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{82} } -func (m *UpdateVolumeResponse) XXX_Size() int { - return m.Size() + +func (x *UpdateVolumeResponse) GetVolume() *Volume { + if x != nil { + return x.Volume + } + return nil } -func (m *UpdateVolumeResponse) XXX_DiscardUnknown() { - xxx_messageInfo_UpdateVolumeResponse.DiscardUnknown(m) + +type ListVolumesRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Filters *ListVolumesRequest_Filters `protobuf:"bytes,1,opt,name=filters,proto3" json:"filters,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -var xxx_messageInfo_UpdateVolumeResponse proto.InternalMessageInfo +func (x *ListVolumesRequest) Reset() { + *x = ListVolumesRequest{} + mi := &file_api_control_proto_msgTypes[83] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} -type ListVolumesRequest struct { - Filters *ListVolumesRequest_Filters `protobuf:"bytes,1,opt,name=filters,proto3" json:"filters,omitempty"` +func (x *ListVolumesRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ListVolumesRequest) Reset() { *m = ListVolumesRequest{} } func (*ListVolumesRequest) ProtoMessage() {} -func (*ListVolumesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{83} -} -func (m *ListVolumesRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ListVolumesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ListVolumesRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *ListVolumesRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[83] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *ListVolumesRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_ListVolumesRequest.Merge(m, src) -} -func (m *ListVolumesRequest) XXX_Size() int { - return m.Size() -} -func (m *ListVolumesRequest) XXX_DiscardUnknown() { - xxx_messageInfo_ListVolumesRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_ListVolumesRequest proto.InternalMessageInfo -type ListVolumesRequest_Filters struct { - Names []string `protobuf:"bytes,1,rep,name=names,proto3" json:"names,omitempty"` - IDPrefixes []string `protobuf:"bytes,2,rep,name=id_prefixes,json=idPrefixes,proto3" json:"id_prefixes,omitempty"` - 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"` - NamePrefixes []string `protobuf:"bytes,4,rep,name=name_prefixes,json=namePrefixes,proto3" json:"name_prefixes,omitempty"` - Groups []string `protobuf:"bytes,5,rep,name=groups,proto3" json:"groups,omitempty"` - Drivers []string `protobuf:"bytes,6,rep,name=drivers,proto3" json:"drivers,omitempty"` +// Deprecated: Use ListVolumesRequest.ProtoReflect.Descriptor instead. +func (*ListVolumesRequest) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{83} } -func (m *ListVolumesRequest_Filters) Reset() { *m = ListVolumesRequest_Filters{} } -func (*ListVolumesRequest_Filters) ProtoMessage() {} -func (*ListVolumesRequest_Filters) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{83, 0} -} -func (m *ListVolumesRequest_Filters) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ListVolumesRequest_Filters) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ListVolumesRequest_Filters.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 (x *ListVolumesRequest) GetFilters() *ListVolumesRequest_Filters { + if x != nil { + return x.Filters } + return nil } -func (m *ListVolumesRequest_Filters) XXX_Merge(src proto.Message) { - xxx_messageInfo_ListVolumesRequest_Filters.Merge(m, src) -} -func (m *ListVolumesRequest_Filters) XXX_Size() int { - return m.Size() -} -func (m *ListVolumesRequest_Filters) XXX_DiscardUnknown() { - xxx_messageInfo_ListVolumesRequest_Filters.DiscardUnknown(m) + +type ListVolumesResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Volumes []*Volume `protobuf:"bytes,1,rep,name=volumes,proto3" json:"volumes,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -var xxx_messageInfo_ListVolumesRequest_Filters proto.InternalMessageInfo +func (x *ListVolumesResponse) Reset() { + *x = ListVolumesResponse{} + mi := &file_api_control_proto_msgTypes[84] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} -type ListVolumesResponse struct { - Volumes []*Volume `protobuf:"bytes,1,rep,name=volumes,proto3" json:"volumes,omitempty"` +func (x *ListVolumesResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ListVolumesResponse) Reset() { *m = ListVolumesResponse{} } func (*ListVolumesResponse) ProtoMessage() {} -func (*ListVolumesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{84} -} -func (m *ListVolumesResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ListVolumesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ListVolumesResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *ListVolumesResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[84] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *ListVolumesResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_ListVolumesResponse.Merge(m, src) -} -func (m *ListVolumesResponse) XXX_Size() int { - return m.Size() -} -func (m *ListVolumesResponse) XXX_DiscardUnknown() { - xxx_messageInfo_ListVolumesResponse.DiscardUnknown(m) + +// Deprecated: Use ListVolumesResponse.ProtoReflect.Descriptor instead. +func (*ListVolumesResponse) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{84} } -var xxx_messageInfo_ListVolumesResponse proto.InternalMessageInfo +func (x *ListVolumesResponse) GetVolumes() []*Volume { + if x != nil { + return x.Volumes + } + return nil +} type RemoveVolumeRequest struct { - VolumeID string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + VolumeID string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"` // Force forces the volume to be deleted from swarmkit, regardless of // whether its current state would permit such an action. - Force bool `protobuf:"varint,2,opt,name=force,proto3" json:"force,omitempty"` + Force bool `protobuf:"varint,2,opt,name=force,proto3" json:"force,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *RemoveVolumeRequest) Reset() { *m = RemoveVolumeRequest{} } -func (*RemoveVolumeRequest) ProtoMessage() {} -func (*RemoveVolumeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{85} -} -func (m *RemoveVolumeRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *RemoveVolumeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_RemoveVolumeRequest.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 *RemoveVolumeRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_RemoveVolumeRequest.Merge(m, src) -} -func (m *RemoveVolumeRequest) XXX_Size() int { - return m.Size() -} -func (m *RemoveVolumeRequest) XXX_DiscardUnknown() { - xxx_messageInfo_RemoveVolumeRequest.DiscardUnknown(m) +func (x *RemoveVolumeRequest) Reset() { + *x = RemoveVolumeRequest{} + mi := &file_api_control_proto_msgTypes[85] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -var xxx_messageInfo_RemoveVolumeRequest proto.InternalMessageInfo - -type RemoveVolumeResponse struct { +func (x *RemoveVolumeRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *RemoveVolumeResponse) Reset() { *m = RemoveVolumeResponse{} } -func (*RemoveVolumeResponse) ProtoMessage() {} -func (*RemoveVolumeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_b37401dd08bf8930, []int{86} -} -func (m *RemoveVolumeResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *RemoveVolumeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_RemoveVolumeResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err +func (*RemoveVolumeRequest) ProtoMessage() {} + +func (x *RemoveVolumeRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[85] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil - } -} -func (m *RemoveVolumeResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_RemoveVolumeResponse.Merge(m, src) -} -func (m *RemoveVolumeResponse) XXX_Size() int { - return m.Size() -} -func (m *RemoveVolumeResponse) XXX_DiscardUnknown() { - xxx_messageInfo_RemoveVolumeResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_RemoveVolumeResponse proto.InternalMessageInfo - -func init() { - proto.RegisterEnum("docker.swarmkit.v1.UpdateServiceRequest_Rollback", UpdateServiceRequest_Rollback_name, UpdateServiceRequest_Rollback_value) - proto.RegisterType((*GetNodeRequest)(nil), "docker.swarmkit.v1.GetNodeRequest") - proto.RegisterType((*GetNodeResponse)(nil), "docker.swarmkit.v1.GetNodeResponse") - proto.RegisterType((*ListNodesRequest)(nil), "docker.swarmkit.v1.ListNodesRequest") - proto.RegisterType((*ListNodesRequest_Filters)(nil), "docker.swarmkit.v1.ListNodesRequest.Filters") - proto.RegisterMapType((map[string]string)(nil), "docker.swarmkit.v1.ListNodesRequest.Filters.LabelsEntry") - proto.RegisterMapType((map[string]string)(nil), "docker.swarmkit.v1.ListNodesRequest.Filters.NodeLabelsEntry") - proto.RegisterType((*ListNodesResponse)(nil), "docker.swarmkit.v1.ListNodesResponse") - proto.RegisterType((*UpdateNodeRequest)(nil), "docker.swarmkit.v1.UpdateNodeRequest") - proto.RegisterType((*UpdateNodeResponse)(nil), "docker.swarmkit.v1.UpdateNodeResponse") - proto.RegisterType((*RemoveNodeRequest)(nil), "docker.swarmkit.v1.RemoveNodeRequest") - proto.RegisterType((*RemoveNodeResponse)(nil), "docker.swarmkit.v1.RemoveNodeResponse") - proto.RegisterType((*GetTaskRequest)(nil), "docker.swarmkit.v1.GetTaskRequest") - proto.RegisterType((*GetTaskResponse)(nil), "docker.swarmkit.v1.GetTaskResponse") - proto.RegisterType((*RemoveTaskRequest)(nil), "docker.swarmkit.v1.RemoveTaskRequest") - proto.RegisterType((*RemoveTaskResponse)(nil), "docker.swarmkit.v1.RemoveTaskResponse") - proto.RegisterType((*ListTasksRequest)(nil), "docker.swarmkit.v1.ListTasksRequest") - proto.RegisterType((*ListTasksRequest_Filters)(nil), "docker.swarmkit.v1.ListTasksRequest.Filters") - proto.RegisterMapType((map[string]string)(nil), "docker.swarmkit.v1.ListTasksRequest.Filters.LabelsEntry") - proto.RegisterType((*ListTasksResponse)(nil), "docker.swarmkit.v1.ListTasksResponse") - proto.RegisterType((*CreateServiceRequest)(nil), "docker.swarmkit.v1.CreateServiceRequest") - proto.RegisterType((*CreateServiceResponse)(nil), "docker.swarmkit.v1.CreateServiceResponse") - proto.RegisterType((*GetServiceRequest)(nil), "docker.swarmkit.v1.GetServiceRequest") - proto.RegisterType((*GetServiceResponse)(nil), "docker.swarmkit.v1.GetServiceResponse") - proto.RegisterType((*UpdateServiceRequest)(nil), "docker.swarmkit.v1.UpdateServiceRequest") - proto.RegisterType((*UpdateServiceResponse)(nil), "docker.swarmkit.v1.UpdateServiceResponse") - proto.RegisterType((*RemoveServiceRequest)(nil), "docker.swarmkit.v1.RemoveServiceRequest") - proto.RegisterType((*RemoveServiceResponse)(nil), "docker.swarmkit.v1.RemoveServiceResponse") - proto.RegisterType((*ListServicesRequest)(nil), "docker.swarmkit.v1.ListServicesRequest") - proto.RegisterType((*ListServicesRequest_Filters)(nil), "docker.swarmkit.v1.ListServicesRequest.Filters") - proto.RegisterMapType((map[string]string)(nil), "docker.swarmkit.v1.ListServicesRequest.Filters.LabelsEntry") - proto.RegisterType((*ListServicesResponse)(nil), "docker.swarmkit.v1.ListServicesResponse") - proto.RegisterType((*ListServiceStatusesRequest)(nil), "docker.swarmkit.v1.ListServiceStatusesRequest") - proto.RegisterType((*ListServiceStatusesResponse)(nil), "docker.swarmkit.v1.ListServiceStatusesResponse") - proto.RegisterType((*ListServiceStatusesResponse_ServiceStatus)(nil), "docker.swarmkit.v1.ListServiceStatusesResponse.ServiceStatus") - proto.RegisterType((*CreateNetworkRequest)(nil), "docker.swarmkit.v1.CreateNetworkRequest") - proto.RegisterType((*CreateNetworkResponse)(nil), "docker.swarmkit.v1.CreateNetworkResponse") - proto.RegisterType((*GetNetworkRequest)(nil), "docker.swarmkit.v1.GetNetworkRequest") - proto.RegisterType((*GetNetworkResponse)(nil), "docker.swarmkit.v1.GetNetworkResponse") - proto.RegisterType((*RemoveNetworkRequest)(nil), "docker.swarmkit.v1.RemoveNetworkRequest") - proto.RegisterType((*RemoveNetworkResponse)(nil), "docker.swarmkit.v1.RemoveNetworkResponse") - proto.RegisterType((*ListNetworksRequest)(nil), "docker.swarmkit.v1.ListNetworksRequest") - proto.RegisterType((*ListNetworksRequest_Filters)(nil), "docker.swarmkit.v1.ListNetworksRequest.Filters") - proto.RegisterMapType((map[string]string)(nil), "docker.swarmkit.v1.ListNetworksRequest.Filters.LabelsEntry") - proto.RegisterType((*ListNetworksResponse)(nil), "docker.swarmkit.v1.ListNetworksResponse") - proto.RegisterType((*GetClusterRequest)(nil), "docker.swarmkit.v1.GetClusterRequest") - proto.RegisterType((*GetClusterResponse)(nil), "docker.swarmkit.v1.GetClusterResponse") - proto.RegisterType((*ListClustersRequest)(nil), "docker.swarmkit.v1.ListClustersRequest") - proto.RegisterType((*ListClustersRequest_Filters)(nil), "docker.swarmkit.v1.ListClustersRequest.Filters") - proto.RegisterMapType((map[string]string)(nil), "docker.swarmkit.v1.ListClustersRequest.Filters.LabelsEntry") - proto.RegisterType((*ListClustersResponse)(nil), "docker.swarmkit.v1.ListClustersResponse") - proto.RegisterType((*KeyRotation)(nil), "docker.swarmkit.v1.KeyRotation") - proto.RegisterType((*UpdateClusterRequest)(nil), "docker.swarmkit.v1.UpdateClusterRequest") - proto.RegisterType((*UpdateClusterResponse)(nil), "docker.swarmkit.v1.UpdateClusterResponse") - proto.RegisterType((*GetSecretRequest)(nil), "docker.swarmkit.v1.GetSecretRequest") - proto.RegisterType((*GetSecretResponse)(nil), "docker.swarmkit.v1.GetSecretResponse") - proto.RegisterType((*UpdateSecretRequest)(nil), "docker.swarmkit.v1.UpdateSecretRequest") - proto.RegisterType((*UpdateSecretResponse)(nil), "docker.swarmkit.v1.UpdateSecretResponse") - proto.RegisterType((*ListSecretsRequest)(nil), "docker.swarmkit.v1.ListSecretsRequest") - proto.RegisterType((*ListSecretsRequest_Filters)(nil), "docker.swarmkit.v1.ListSecretsRequest.Filters") - proto.RegisterMapType((map[string]string)(nil), "docker.swarmkit.v1.ListSecretsRequest.Filters.LabelsEntry") - proto.RegisterType((*ListSecretsResponse)(nil), "docker.swarmkit.v1.ListSecretsResponse") - proto.RegisterType((*CreateSecretRequest)(nil), "docker.swarmkit.v1.CreateSecretRequest") - proto.RegisterType((*CreateSecretResponse)(nil), "docker.swarmkit.v1.CreateSecretResponse") - proto.RegisterType((*RemoveSecretRequest)(nil), "docker.swarmkit.v1.RemoveSecretRequest") - proto.RegisterType((*RemoveSecretResponse)(nil), "docker.swarmkit.v1.RemoveSecretResponse") - proto.RegisterType((*GetConfigRequest)(nil), "docker.swarmkit.v1.GetConfigRequest") - proto.RegisterType((*GetConfigResponse)(nil), "docker.swarmkit.v1.GetConfigResponse") - proto.RegisterType((*UpdateConfigRequest)(nil), "docker.swarmkit.v1.UpdateConfigRequest") - proto.RegisterType((*UpdateConfigResponse)(nil), "docker.swarmkit.v1.UpdateConfigResponse") - proto.RegisterType((*ListConfigsRequest)(nil), "docker.swarmkit.v1.ListConfigsRequest") - proto.RegisterType((*ListConfigsRequest_Filters)(nil), "docker.swarmkit.v1.ListConfigsRequest.Filters") - proto.RegisterMapType((map[string]string)(nil), "docker.swarmkit.v1.ListConfigsRequest.Filters.LabelsEntry") - proto.RegisterType((*ListConfigsResponse)(nil), "docker.swarmkit.v1.ListConfigsResponse") - proto.RegisterType((*CreateConfigRequest)(nil), "docker.swarmkit.v1.CreateConfigRequest") - proto.RegisterType((*CreateConfigResponse)(nil), "docker.swarmkit.v1.CreateConfigResponse") - proto.RegisterType((*RemoveConfigRequest)(nil), "docker.swarmkit.v1.RemoveConfigRequest") - proto.RegisterType((*RemoveConfigResponse)(nil), "docker.swarmkit.v1.RemoveConfigResponse") - proto.RegisterType((*CreateExtensionRequest)(nil), "docker.swarmkit.v1.CreateExtensionRequest") - proto.RegisterType((*CreateExtensionResponse)(nil), "docker.swarmkit.v1.CreateExtensionResponse") - proto.RegisterType((*RemoveExtensionRequest)(nil), "docker.swarmkit.v1.RemoveExtensionRequest") - proto.RegisterType((*RemoveExtensionResponse)(nil), "docker.swarmkit.v1.RemoveExtensionResponse") - proto.RegisterType((*GetExtensionRequest)(nil), "docker.swarmkit.v1.GetExtensionRequest") - proto.RegisterType((*GetExtensionResponse)(nil), "docker.swarmkit.v1.GetExtensionResponse") - proto.RegisterType((*CreateResourceRequest)(nil), "docker.swarmkit.v1.CreateResourceRequest") - proto.RegisterType((*CreateResourceResponse)(nil), "docker.swarmkit.v1.CreateResourceResponse") - proto.RegisterType((*RemoveResourceRequest)(nil), "docker.swarmkit.v1.RemoveResourceRequest") - proto.RegisterType((*RemoveResourceResponse)(nil), "docker.swarmkit.v1.RemoveResourceResponse") - proto.RegisterType((*UpdateResourceRequest)(nil), "docker.swarmkit.v1.UpdateResourceRequest") - proto.RegisterType((*UpdateResourceResponse)(nil), "docker.swarmkit.v1.UpdateResourceResponse") - proto.RegisterType((*GetResourceRequest)(nil), "docker.swarmkit.v1.GetResourceRequest") - proto.RegisterType((*GetResourceResponse)(nil), "docker.swarmkit.v1.GetResourceResponse") - proto.RegisterType((*ListResourcesRequest)(nil), "docker.swarmkit.v1.ListResourcesRequest") - proto.RegisterType((*ListResourcesRequest_Filters)(nil), "docker.swarmkit.v1.ListResourcesRequest.Filters") - proto.RegisterMapType((map[string]string)(nil), "docker.swarmkit.v1.ListResourcesRequest.Filters.LabelsEntry") - proto.RegisterType((*ListResourcesResponse)(nil), "docker.swarmkit.v1.ListResourcesResponse") - proto.RegisterType((*CreateVolumeRequest)(nil), "docker.swarmkit.v1.CreateVolumeRequest") - proto.RegisterType((*CreateVolumeResponse)(nil), "docker.swarmkit.v1.CreateVolumeResponse") - proto.RegisterType((*GetVolumeRequest)(nil), "docker.swarmkit.v1.GetVolumeRequest") - proto.RegisterType((*GetVolumeResponse)(nil), "docker.swarmkit.v1.GetVolumeResponse") - proto.RegisterType((*UpdateVolumeRequest)(nil), "docker.swarmkit.v1.UpdateVolumeRequest") - proto.RegisterType((*UpdateVolumeResponse)(nil), "docker.swarmkit.v1.UpdateVolumeResponse") - proto.RegisterType((*ListVolumesRequest)(nil), "docker.swarmkit.v1.ListVolumesRequest") - proto.RegisterType((*ListVolumesRequest_Filters)(nil), "docker.swarmkit.v1.ListVolumesRequest.Filters") - proto.RegisterMapType((map[string]string)(nil), "docker.swarmkit.v1.ListVolumesRequest.Filters.LabelsEntry") - proto.RegisterType((*ListVolumesResponse)(nil), "docker.swarmkit.v1.ListVolumesResponse") - proto.RegisterType((*RemoveVolumeRequest)(nil), "docker.swarmkit.v1.RemoveVolumeRequest") - proto.RegisterType((*RemoveVolumeResponse)(nil), "docker.swarmkit.v1.RemoveVolumeResponse") -} - -func init() { - proto.RegisterFile("github.com/docker/swarmkit/api/control.proto", fileDescriptor_b37401dd08bf8930) -} - -var fileDescriptor_b37401dd08bf8930 = []byte{ - // 3029 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x5a, 0xcd, 0x6f, 0x24, 0x47, - 0x15, 0xf7, 0x8c, 0xc7, 0x9e, 0x99, 0x37, 0xfe, 0xda, 0x5a, 0xef, 0xc6, 0x99, 0x04, 0x7b, 0xd5, - 0x9b, 0xdd, 0xf5, 0x2e, 0xcb, 0x38, 0x71, 0x08, 0x59, 0xf2, 0x01, 0xac, 0xd7, 0x9b, 0xcd, 0x64, - 0x93, 0xdd, 0xa8, 0xbd, 0x59, 0xc1, 0x01, 0x59, 0xe3, 0x99, 0x5a, 0xa7, 0xe3, 0x71, 0xf7, 0xd0, - 0xdd, 0xb3, 0x89, 0x85, 0x40, 0x7c, 0x24, 0x47, 0x24, 0x2e, 0x88, 0x88, 0x03, 0x12, 0x27, 0x24, - 0x90, 0x10, 0xe2, 0x80, 0x38, 0xf0, 0x07, 0x44, 0x9c, 0x72, 0xcc, 0x05, 0x43, 0x1c, 0x21, 0x71, - 0xe2, 0x5f, 0x00, 0x55, 0xd5, 0xab, 0xfe, 0x9a, 0xea, 0xea, 0x9e, 0x0f, 0xc9, 0x9c, 0xec, 0xa9, - 0xfe, 0xbd, 0x8f, 0xaa, 0xf7, 0xfa, 0xf7, 0xaa, 0xeb, 0x15, 0x5c, 0xdf, 0xb7, 0xfc, 0x77, 0xfb, - 0x7b, 0x8d, 0xb6, 0x73, 0xb8, 0xd1, 0x71, 0xda, 0x07, 0xd4, 0xdd, 0xf0, 0xde, 0x6f, 0xb9, 0x87, - 0x07, 0x96, 0xbf, 0xd1, 0xea, 0x59, 0x1b, 0x6d, 0xc7, 0xf6, 0x5d, 0xa7, 0xdb, 0xe8, 0xb9, 0x8e, - 0xef, 0x10, 0x22, 0x20, 0x0d, 0x09, 0x69, 0x3c, 0x7e, 0xae, 0x7e, 0x2d, 0x43, 0x83, 0xd7, 0xa3, - 0x6d, 0x4f, 0xc8, 0xd7, 0xb3, 0xac, 0x39, 0x7b, 0xef, 0xd1, 0xb6, 0x2f, 0xd1, 0x59, 0x9a, 0xfd, - 0xa3, 0x1e, 0x95, 0xd8, 0xe5, 0x7d, 0x67, 0xdf, 0xe1, 0xff, 0x6e, 0xb0, 0xff, 0x70, 0xf4, 0xc9, - 0x7d, 0xc7, 0xd9, 0xef, 0xd2, 0x0d, 0xfe, 0x6b, 0xaf, 0xff, 0x68, 0xa3, 0x65, 0x1f, 0xe1, 0xa3, - 0x17, 0x35, 0xca, 0x03, 0x78, 0xaf, 0xdb, 0xdf, 0xb7, 0x6c, 0xfc, 0x23, 0x04, 0x8d, 0x17, 0x60, - 0xe1, 0x0e, 0xf5, 0xef, 0x39, 0x1d, 0x6a, 0xd2, 0xef, 0xf5, 0xa9, 0xe7, 0x93, 0x8b, 0x50, 0xb6, - 0x9d, 0x0e, 0xdd, 0xb5, 0x3a, 0x2b, 0x85, 0x0b, 0x85, 0xf5, 0xea, 0x16, 0x9c, 0x1c, 0xaf, 0xcd, - 0x32, 0x44, 0x73, 0xdb, 0x9c, 0x65, 0x8f, 0x9a, 0x1d, 0xe3, 0x9b, 0xb0, 0x18, 0x88, 0x79, 0x3d, - 0xc7, 0xf6, 0x28, 0xb9, 0x0e, 0x25, 0xf6, 0x90, 0x0b, 0xd5, 0x36, 0x57, 0x1a, 0x83, 0x8b, 0xdb, - 0xe0, 0x78, 0x8e, 0x32, 0x3e, 0x9c, 0x81, 0xa5, 0x37, 0x2d, 0x8f, 0xab, 0xf0, 0xa4, 0xe9, 0xd7, - 0xa0, 0xfc, 0xc8, 0xea, 0xfa, 0xd4, 0xf5, 0x50, 0xcb, 0x75, 0x95, 0x96, 0xa4, 0x58, 0xe3, 0x35, - 0x21, 0x63, 0x4a, 0xe1, 0xfa, 0x6f, 0x4b, 0x50, 0xc6, 0x41, 0xb2, 0x0c, 0x33, 0x76, 0xeb, 0x90, - 0x32, 0x8d, 0xd3, 0xeb, 0x55, 0x53, 0xfc, 0x20, 0x1b, 0x50, 0xb3, 0x3a, 0xbb, 0x3d, 0x97, 0x3e, - 0xb2, 0x3e, 0xa0, 0xde, 0x4a, 0x91, 0x3d, 0xdb, 0x5a, 0x38, 0x39, 0x5e, 0x83, 0xe6, 0xf6, 0xdb, - 0x38, 0x6a, 0x82, 0xd5, 0x91, 0xff, 0x93, 0xb7, 0x61, 0xb6, 0xdb, 0xda, 0xa3, 0x5d, 0x6f, 0x65, - 0xfa, 0xc2, 0xf4, 0x7a, 0x6d, 0xf3, 0xc6, 0x30, 0x9e, 0x35, 0xde, 0xe4, 0xa2, 0xb7, 0x6d, 0xdf, - 0x3d, 0x32, 0x51, 0x0f, 0xf9, 0x2e, 0xd4, 0xf8, 0x3a, 0xa3, 0xda, 0x32, 0x57, 0xfb, 0xca, 0x50, - 0x6a, 0xd9, 0x60, 0x54, 0x35, 0xd8, 0xc1, 0x00, 0x79, 0x0b, 0x6a, 0x87, 0xf4, 0x70, 0x8f, 0xba, - 0xde, 0xbb, 0x56, 0xcf, 0x5b, 0x29, 0x5d, 0x98, 0x5e, 0x5f, 0xd8, 0xbc, 0x92, 0x16, 0x95, 0x9d, - 0x1e, 0x6d, 0x37, 0xde, 0x0a, 0xf0, 0x5b, 0xc5, 0xa5, 0x29, 0x33, 0x2a, 0x4f, 0xbe, 0x06, 0x33, - 0xae, 0xd3, 0xa5, 0xde, 0xca, 0x0c, 0x57, 0xf4, 0x74, 0x6a, 0x78, 0x9d, 0x2e, 0xe5, 0xd2, 0x02, - 0x4e, 0x2e, 0xc2, 0x3c, 0x5b, 0xf1, 0x70, 0xa9, 0x67, 0x79, 0x18, 0xe6, 0xd8, 0xa0, 0x5c, 0xdc, - 0xfa, 0xd7, 0xa1, 0x16, 0x99, 0x06, 0x59, 0x82, 0xe9, 0x03, 0x7a, 0x24, 0xb2, 0xcf, 0x64, 0xff, - 0xb2, 0x20, 0x3e, 0x6e, 0x75, 0xfb, 0x74, 0xa5, 0xc8, 0xc7, 0xc4, 0x8f, 0x97, 0x8a, 0x37, 0x0a, - 0xf5, 0x57, 0x61, 0x31, 0xb1, 0x0a, 0xc3, 0x88, 0x1b, 0xb7, 0xe0, 0x4c, 0x64, 0x75, 0x31, 0x93, - 0x1b, 0x30, 0xc3, 0x16, 0x52, 0xa4, 0x8c, 0x2e, 0x95, 0x05, 0xcc, 0xf8, 0x5d, 0x01, 0xce, 0xbc, - 0xd3, 0xeb, 0xb4, 0x7c, 0x3a, 0xec, 0x7b, 0x44, 0xbe, 0x01, 0x73, 0x1c, 0xf4, 0x98, 0xba, 0x9e, - 0xe5, 0xd8, 0xdc, 0xc1, 0xda, 0xe6, 0x53, 0x2a, 0x8b, 0x0f, 0x05, 0xc4, 0xe4, 0x59, 0x83, 0x3f, - 0xc8, 0xb3, 0x50, 0x62, 0x8c, 0xb4, 0x32, 0xcd, 0xe5, 0x9e, 0xd6, 0x85, 0xd7, 0xe4, 0x48, 0x63, - 0x0b, 0x48, 0xd4, 0xd7, 0x91, 0x5e, 0xde, 0x7b, 0x70, 0xc6, 0xa4, 0x87, 0xce, 0xe3, 0xe1, 0xe7, - 0xbb, 0x0c, 0x33, 0x8f, 0x1c, 0xb7, 0x2d, 0x22, 0x51, 0x31, 0xc5, 0x0f, 0x63, 0x19, 0x48, 0x54, - 0x9f, 0xf0, 0x09, 0xa9, 0xe9, 0x41, 0xcb, 0x3b, 0x88, 0x98, 0xf0, 0x5b, 0xde, 0x41, 0xc2, 0x04, - 0x43, 0x30, 0x13, 0xec, 0x51, 0x40, 0x4d, 0x42, 0x2c, 0x9c, 0x1d, 0x7b, 0xa8, 0x9b, 0x1d, 0xc7, - 0x73, 0x94, 0x71, 0x43, 0xce, 0x6e, 0x68, 0xd3, 0xc1, 0x3c, 0xa2, 0xd6, 0x8d, 0xbf, 0x96, 0x04, - 0xd5, 0xb1, 0xc1, 0x11, 0xa8, 0x2e, 0x2a, 0x36, 0x48, 0x75, 0xff, 0x98, 0x3e, 0x3d, 0xaa, 0x53, - 0x79, 0xa6, 0xa4, 0xba, 0x0d, 0xa8, 0x79, 0xd4, 0x7d, 0x6c, 0xb5, 0x59, 0x76, 0x08, 0x2e, 0x42, - 0x17, 0x76, 0xc4, 0x70, 0x73, 0xdb, 0x33, 0x01, 0x21, 0xcd, 0x8e, 0x47, 0x2e, 0x43, 0x05, 0x73, - 0x49, 0x10, 0x4e, 0x75, 0xab, 0x76, 0x72, 0xbc, 0x56, 0x16, 0xc9, 0xe4, 0x99, 0x65, 0x91, 0x4d, - 0x1e, 0x79, 0x1d, 0x16, 0x3a, 0xd4, 0xb3, 0x5c, 0xda, 0xd9, 0xf5, 0xfc, 0x96, 0x8f, 0xf4, 0xb2, - 0xb0, 0xf9, 0xa5, 0xb4, 0x10, 0xef, 0x30, 0x14, 0xe7, 0xa7, 0x79, 0x14, 0xe4, 0x23, 0x0a, 0x9e, - 0x2a, 0x0f, 0xf2, 0x14, 0xa9, 0x43, 0xc5, 0xed, 0xdb, 0xbe, 0xc5, 0xd6, 0xb8, 0xca, 0x9f, 0x07, - 0xbf, 0xc9, 0xd3, 0x00, 0xfd, 0xde, 0xae, 0xef, 0xec, 0xb2, 0x77, 0x6b, 0xa5, 0xc2, 0xd3, 0xbb, - 0xd2, 0xef, 0x3d, 0x70, 0xb6, 0x5b, 0x3e, 0x1d, 0x83, 0xe1, 0x24, 0x45, 0xe1, 0x62, 0x87, 0x14, - 0xc5, 0x72, 0x4e, 0x4b, 0x51, 0x3c, 0x09, 0x05, 0xcc, 0xb8, 0x0b, 0xcb, 0xb7, 0x5c, 0xda, 0xf2, - 0x29, 0x2e, 0xb8, 0x4c, 0xc3, 0xe7, 0x91, 0x3f, 0x44, 0x0e, 0xae, 0xa9, 0xd4, 0xa0, 0x44, 0x84, - 0x42, 0xee, 0xc1, 0xb9, 0x84, 0x32, 0xf4, 0xea, 0x05, 0x28, 0x63, 0x10, 0x51, 0xe1, 0x53, 0x1a, - 0x85, 0xa6, 0xc4, 0x1a, 0xef, 0xc1, 0x99, 0x3b, 0xd4, 0x4f, 0x78, 0x76, 0x1d, 0x20, 0xcc, 0x19, - 0x7c, 0xe7, 0xe6, 0x4f, 0x8e, 0xd7, 0xaa, 0x41, 0xca, 0x98, 0xd5, 0x20, 0x63, 0xc8, 0x15, 0x58, - 0xb4, 0x6c, 0x8f, 0xba, 0xfe, 0x6e, 0x87, 0x3e, 0x6a, 0xf5, 0xbb, 0xbe, 0x87, 0x0c, 0xb3, 0x20, - 0x86, 0xb7, 0x71, 0xd4, 0xb8, 0x0b, 0x24, 0x6a, 0x6b, 0x3c, 0xc7, 0xff, 0x54, 0x84, 0x65, 0x41, - 0xa6, 0x63, 0x39, 0xbf, 0x0d, 0x8b, 0x12, 0x3d, 0x44, 0x1d, 0x58, 0x40, 0x19, 0x59, 0x0a, 0x9e, - 0x8f, 0x95, 0x82, 0x7c, 0xa1, 0x24, 0x6f, 0x41, 0xc5, 0x75, 0xba, 0xdd, 0xbd, 0x56, 0xfb, 0x60, - 0xa5, 0x74, 0xa1, 0xb0, 0xbe, 0xb0, 0xf9, 0x9c, 0x4a, 0x50, 0x35, 0xc9, 0x86, 0x89, 0x82, 0x66, - 0xa0, 0xc2, 0x30, 0xa0, 0x22, 0x47, 0x49, 0x05, 0x4a, 0xf7, 0xee, 0xdf, 0xbb, 0xbd, 0x34, 0x45, - 0xe6, 0xa0, 0xf2, 0xb6, 0x79, 0xfb, 0x61, 0xf3, 0xfe, 0x3b, 0x3b, 0x4b, 0x05, 0x96, 0x3d, 0x09, - 0x75, 0xe3, 0x05, 0x61, 0x1b, 0x96, 0x05, 0xe9, 0x8e, 0x13, 0x03, 0xe3, 0x09, 0x38, 0x97, 0xd0, - 0x82, 0xec, 0xfd, 0xe1, 0x34, 0x9c, 0x65, 0xef, 0x1f, 0x8e, 0x07, 0x04, 0xde, 0x4c, 0x12, 0xf8, - 0x46, 0x1a, 0x4d, 0x26, 0x24, 0x07, 0x39, 0xfc, 0x37, 0xc5, 0x89, 0x73, 0xf8, 0x4e, 0x82, 0xc3, - 0x5f, 0x1e, 0xd2, 0x39, 0x25, 0x8d, 0x0f, 0x70, 0x64, 0x29, 0x83, 0x23, 0x67, 0xe2, 0x1c, 0x39, - 0x0e, 0x0b, 0xde, 0x87, 0xe5, 0xb8, 0xbb, 0x98, 0x34, 0x2f, 0x42, 0x05, 0x83, 0x28, 0xb9, 0x50, - 0x9b, 0x35, 0x01, 0xd8, 0xb8, 0x01, 0xf5, 0x88, 0x42, 0x56, 0x05, 0xfa, 0x5e, 0x18, 0xdd, 0x7a, - 0x42, 0x6d, 0x35, 0x22, 0xf9, 0xfb, 0x22, 0x3c, 0xa5, 0x14, 0x45, 0x97, 0xbe, 0x03, 0x15, 0x0f, - 0xc7, 0xd0, 0xa5, 0x57, 0x33, 0x56, 0x3f, 0xa9, 0xa2, 0x11, 0x1b, 0x37, 0x03, 0x75, 0xf5, 0x3f, - 0x16, 0x60, 0x3e, 0xf6, 0x6c, 0x48, 0xa6, 0xb9, 0x08, 0xb2, 0xec, 0xed, 0x8a, 0xf2, 0xc1, 0xd6, - 0xb9, 0x64, 0xce, 0xe1, 0x20, 0xaf, 0x31, 0x0c, 0xe4, 0xf6, 0x6d, 0xdb, 0xb2, 0xf7, 0x11, 0x34, - 0x2d, 0x40, 0x38, 0x28, 0x40, 0x57, 0x60, 0xb1, 0xed, 0x1c, 0xf6, 0xba, 0xd4, 0x0f, 0x74, 0x95, - 0x38, 0x6c, 0x21, 0x18, 0x7e, 0x10, 0xaf, 0x3c, 0xf7, 0xa8, 0xff, 0xbe, 0xe3, 0x1e, 0x0c, 0x51, - 0x79, 0x50, 0x42, 0x55, 0x79, 0x02, 0x65, 0x21, 0x77, 0xd8, 0x62, 0x48, 0xc7, 0x1d, 0x52, 0x4a, - 0x62, 0x8d, 0x8f, 0x0a, 0xbc, 0xf4, 0x24, 0x5c, 0x23, 0x50, 0x62, 0x29, 0x8d, 0x89, 0xc9, 0xff, - 0x67, 0xeb, 0x8c, 0x42, 0x6c, 0x9d, 0x8b, 0xe1, 0x3a, 0xa3, 0x2c, 0x5b, 0x67, 0x04, 0x34, 0x3b, - 0xa4, 0x01, 0xe5, 0x56, 0x8f, 0x91, 0x5c, 0x0b, 0xe9, 0x78, 0xb9, 0x21, 0xbe, 0xdd, 0x1b, 0xf2, - 0x63, 0xbc, 0x71, 0xd3, 0x3e, 0x32, 0x25, 0x08, 0xab, 0xd2, 0x84, 0x26, 0xf5, 0x6d, 0x49, 0x88, - 0x93, 0x9e, 0x56, 0x48, 0x92, 0x09, 0x4f, 0x8d, 0x8f, 0x91, 0x24, 0x71, 0x7c, 0x04, 0x92, 0x4c, - 0x48, 0x0e, 0x90, 0x64, 0x74, 0x49, 0x8b, 0x39, 0x96, 0xb4, 0xfe, 0xd1, 0x29, 0x92, 0x6a, 0xca, - 0x64, 0x46, 0x26, 0xd5, 0x09, 0x10, 0x67, 0xe8, 0x52, 0x48, 0x9c, 0x18, 0x58, 0x2d, 0x71, 0xca, - 0x48, 0x07, 0x60, 0xe3, 0x26, 0x7f, 0x65, 0x6e, 0x75, 0xfb, 0x9e, 0x4f, 0xdd, 0x48, 0xb1, 0x6d, - 0x8b, 0x91, 0x04, 0x0d, 0x21, 0x8e, 0xe5, 0x11, 0x02, 0x9a, 0x1d, 0x4c, 0xf7, 0x40, 0x45, 0x98, - 0xee, 0x08, 0xd1, 0xa5, 0xbb, 0x94, 0x92, 0x58, 0xe3, 0xdf, 0x45, 0x91, 0x7b, 0xf8, 0x60, 0x84, - 0xdc, 0x4b, 0x48, 0x0e, 0x16, 0xe8, 0xd3, 0xcc, 0xa5, 0x14, 0xe7, 0x4e, 0x33, 0x97, 0x42, 0x97, - 0xc2, 0x5c, 0xc2, 0x68, 0x68, 0x73, 0x49, 0x86, 0x2e, 0x00, 0x1b, 0xbf, 0x28, 0x40, 0xed, 0x2e, - 0x3d, 0x32, 0x1d, 0xbf, 0xe5, 0xb3, 0x3d, 0xec, 0x35, 0x38, 0xc3, 0x92, 0x8c, 0xba, 0xbb, 0xef, - 0x39, 0x96, 0xbd, 0xeb, 0x3b, 0x07, 0xd4, 0xe6, 0xae, 0x55, 0xcc, 0x45, 0xf1, 0xe0, 0x0d, 0xc7, - 0xb2, 0x1f, 0xb0, 0x61, 0x72, 0x1d, 0xc8, 0x61, 0xcb, 0x6e, 0xed, 0xc7, 0xc1, 0x62, 0xd7, 0xbf, - 0x84, 0x4f, 0x94, 0xe8, 0xbe, 0xdd, 0x75, 0xda, 0x07, 0xbb, 0x6c, 0xd6, 0xd3, 0x31, 0xf4, 0x3b, - 0xfc, 0xc1, 0x5d, 0x7a, 0x64, 0xfc, 0x24, 0xd8, 0xd8, 0x8f, 0x93, 0xe7, 0x6c, 0x63, 0x2f, 0xd1, - 0xc3, 0x6c, 0xec, 0x51, 0x66, 0x88, 0x8d, 0x3d, 0x5a, 0x8f, 0x6c, 0xec, 0x6f, 0xb2, 0x8d, 0xbd, - 0x58, 0x55, 0x5e, 0x98, 0x53, 0x04, 0x23, 0x8b, 0xbf, 0x55, 0xfa, 0xe4, 0x78, 0x6d, 0xca, 0x0c, - 0xc4, 0xc2, 0x8d, 0xfa, 0x84, 0x5e, 0xd4, 0x57, 0x61, 0x89, 0x7f, 0x7a, 0xb5, 0x5d, 0xea, 0xcb, - 0xf5, 0xbc, 0x0a, 0x55, 0x8f, 0x0f, 0x84, 0xcb, 0x39, 0x77, 0x72, 0xbc, 0x56, 0x11, 0xa8, 0xe6, - 0x36, 0xdb, 0x76, 0xf1, 0xff, 0x3a, 0xc6, 0x1d, 0xfc, 0x4a, 0x14, 0xe2, 0xe8, 0xca, 0x26, 0xcc, - 0x0a, 0x00, 0x7a, 0x52, 0x57, 0x6f, 0xfe, 0xb8, 0x0c, 0x22, 0x8d, 0xbf, 0x14, 0xe0, 0xac, 0xfc, - 0x02, 0x19, 0xcd, 0x17, 0xb2, 0x05, 0x0b, 0x08, 0x1d, 0x22, 0xae, 0xf3, 0x42, 0x44, 0x86, 0x75, - 0x33, 0x16, 0xd6, 0xd5, 0x74, 0xc7, 0x23, 0xfb, 0x9f, 0x37, 0xc2, 0xef, 0xcd, 0xb1, 0x97, 0xe1, - 0x5f, 0x45, 0x20, 0x62, 0x0f, 0xca, 0x7e, 0x06, 0xb4, 0xf9, 0x7a, 0x92, 0x36, 0x1b, 0xe9, 0x9b, - 0xd7, 0xa8, 0xe0, 0x20, 0x6b, 0x7e, 0x38, 0x79, 0xd6, 0x34, 0x13, 0xac, 0xf9, 0xd2, 0x70, 0xbe, - 0x9d, 0x0a, 0x69, 0xde, 0x95, 0xdf, 0x8f, 0xe8, 0x11, 0x86, 0xec, 0xab, 0xec, 0x6b, 0x97, 0x0f, - 0x21, 0x65, 0xea, 0x62, 0x26, 0xa1, 0x46, 0x13, 0xce, 0xca, 0xa3, 0x97, 0x68, 0xea, 0x6e, 0xc6, - 0x36, 0xd3, 0xb9, 0x73, 0x29, 0xae, 0x6a, 0x8c, 0x5c, 0xfa, 0x16, 0x9c, 0x95, 0x5f, 0xcf, 0x23, - 0xbe, 0xdd, 0xe7, 0xc3, 0xaf, 0xf8, 0xa8, 0x37, 0x48, 0x1a, 0xb7, 0x1c, 0xfb, 0x91, 0xb5, 0x1f, - 0x51, 0xdb, 0xe6, 0x03, 0x09, 0xb5, 0x02, 0xc5, 0xd4, 0x8a, 0xc7, 0x01, 0x69, 0x48, 0xf1, 0x70, - 0x86, 0x02, 0xa0, 0x9b, 0x21, 0xca, 0x20, 0x32, 0x42, 0x1a, 0xa3, 0xfa, 0xc2, 0x48, 0x03, 0xa1, - 0xc3, 0x90, 0x86, 0x10, 0x19, 0x82, 0x34, 0x84, 0x65, 0x15, 0x69, 0x4c, 0x60, 0x19, 0x24, 0x69, - 0x88, 0xe1, 0x11, 0x48, 0x23, 0x2e, 0xf8, 0xff, 0x45, 0x1a, 0x6a, 0xdf, 0x4e, 0x93, 0x34, 0x02, - 0x8f, 0x42, 0xd2, 0x10, 0x81, 0xd0, 0x92, 0x06, 0xc6, 0x4c, 0x42, 0x43, 0xd2, 0x88, 0xa7, 0x6e, - 0x0e, 0xd2, 0x50, 0xe5, 0x52, 0x5c, 0xd5, 0x18, 0xb9, 0x14, 0x90, 0xc6, 0xc8, 0x6f, 0x77, 0x40, - 0x1a, 0x71, 0x6f, 0x8c, 0x1f, 0xc0, 0x79, 0xe1, 0xe5, 0xed, 0x0f, 0x7c, 0x6a, 0xf3, 0xf7, 0x08, - 0x95, 0xdf, 0x84, 0x5a, 0xcb, 0xb6, 0x71, 0x87, 0xe3, 0xe9, 0x0e, 0x1f, 0x6e, 0x86, 0x30, 0x33, - 0x2a, 0x43, 0x2e, 0x40, 0xad, 0x43, 0xbd, 0xb6, 0x6b, 0xf5, 0x7c, 0xf9, 0x0e, 0x57, 0xcd, 0xe8, - 0x90, 0xf1, 0x10, 0x9e, 0x18, 0x30, 0x8f, 0xeb, 0xf4, 0x32, 0x54, 0xa9, 0x1c, 0x44, 0xeb, 0xca, - 0x5e, 0x45, 0x28, 0x19, 0xe2, 0x8d, 0x37, 0xe1, 0xbc, 0x98, 0xee, 0xc0, 0xb4, 0x36, 0x61, 0x2e, - 0x80, 0x85, 0xcb, 0xb6, 0x78, 0x72, 0xbc, 0x56, 0x0b, 0xb0, 0xcd, 0x6d, 0xb3, 0x16, 0x80, 0x9a, - 0x1d, 0xe3, 0x49, 0x78, 0x62, 0x40, 0x1b, 0xae, 0x5f, 0x13, 0xce, 0xde, 0xa1, 0xfe, 0x44, 0xac, - 0xec, 0xc0, 0x72, 0x5c, 0xd5, 0x24, 0x16, 0xe2, 0xd7, 0x05, 0x79, 0x0e, 0x64, 0x52, 0xcf, 0xe9, - 0xbb, 0xe1, 0xa1, 0xef, 0x04, 0xe2, 0x4b, 0xa0, 0x74, 0x60, 0xd9, 0x78, 0x18, 0x62, 0xf2, 0xff, - 0x49, 0x03, 0xca, 0xbd, 0xd6, 0x51, 0xd7, 0x69, 0x75, 0xf4, 0xe7, 0x39, 0x08, 0x32, 0x4c, 0x99, - 0x80, 0xa1, 0x7f, 0x38, 0xef, 0x1b, 0x50, 0x71, 0x71, 0x0c, 0xbd, 0x53, 0x36, 0x6d, 0x03, 0xb9, - 0x00, 0x6d, 0xbc, 0x2e, 0x0f, 0x5f, 0x92, 0x73, 0xde, 0x80, 0x9a, 0x04, 0x85, 0x51, 0xe1, 0x84, - 0x28, 0x91, 0xcd, 0x6d, 0x13, 0x24, 0xa4, 0xd9, 0x31, 0x56, 0x64, 0x1e, 0x25, 0xbd, 0x33, 0x7e, - 0x5a, 0x94, 0x7b, 0xfe, 0x71, 0x8d, 0x90, 0xd7, 0x60, 0x29, 0x10, 0x18, 0xa2, 0xde, 0x2d, 0x4a, - 0x21, 0x59, 0xf1, 0x12, 0x11, 0x9d, 0x1e, 0x21, 0xa2, 0x91, 0xe8, 0x95, 0x72, 0x46, 0x2f, 0xb9, - 0x08, 0x63, 0x47, 0xef, 0x36, 0x3f, 0xf2, 0x18, 0x3b, 0x74, 0xf7, 0xf9, 0x9b, 0x39, 0x41, 0xbf, - 0xfe, 0x5b, 0x14, 0xdf, 0xf4, 0xf2, 0x51, 0x50, 0xd2, 0xdf, 0x48, 0x96, 0xf4, 0x67, 0xd3, 0xca, - 0x66, 0x52, 0x74, 0xb0, 0xa8, 0xff, 0x6a, 0xf2, 0x45, 0xfd, 0x41, 0xa2, 0xa8, 0xbf, 0x32, 0xac, - 0x77, 0xa3, 0x77, 0x38, 0x24, 0x41, 0xcc, 0x84, 0x04, 0x31, 0x4e, 0xa9, 0xdf, 0x81, 0x73, 0x09, - 0x3f, 0x31, 0xa8, 0x2f, 0x41, 0x55, 0x86, 0x49, 0x96, 0x7b, 0x7d, 0x54, 0x43, 0x78, 0x58, 0xf2, - 0x1f, 0x3a, 0xdd, 0xfe, 0x21, 0x1d, 0xa2, 0xe4, 0x0b, 0x01, 0x55, 0xc9, 0x97, 0xaa, 0xc2, 0x92, - 0xff, 0x98, 0x8f, 0xe8, 0x4a, 0x3e, 0xca, 0x20, 0x12, 0x77, 0xf3, 0x71, 0x9f, 0xae, 0x42, 0x55, - 0x3c, 0x4d, 0xd4, 0x7b, 0x81, 0x62, 0xf5, 0x5e, 0x3c, 0x0e, 0x76, 0xf3, 0x13, 0xf0, 0x23, 0xdc, - 0xcd, 0x8f, 0xea, 0x0b, 0xdb, 0xcd, 0x23, 0x74, 0x98, 0xdd, 0xbc, 0x10, 0x19, 0x62, 0x37, 0xaf, - 0x0a, 0x47, 0xdc, 0xf3, 0x31, 0x96, 0xe1, 0x97, 0xd3, 0x62, 0x37, 0x2f, 0x86, 0x47, 0xd8, 0xcd, - 0xc7, 0x05, 0x07, 0x5f, 0xfc, 0x3f, 0x9f, 0xe2, 0x6e, 0x5e, 0xed, 0xdb, 0xe8, 0xaf, 0xfd, 0x79, - 0x98, 0xdd, 0x77, 0x9d, 0x7e, 0x4f, 0xb6, 0x35, 0xf1, 0x17, 0x59, 0x81, 0x72, 0xc7, 0xb5, 0x58, - 0x12, 0xe0, 0xdd, 0x36, 0xf9, 0x73, 0x02, 0xfb, 0xff, 0x60, 0x0e, 0xe1, 0xfe, 0x5f, 0x84, 0x4e, - 0xbb, 0xff, 0xc7, 0x28, 0x4b, 0xa8, 0xf1, 0x50, 0x6e, 0xb4, 0x47, 0x4e, 0x76, 0xf5, 0xb5, 0xad, - 0x60, 0xfb, 0x1d, 0x4f, 0xc5, 0xcd, 0xbf, 0xaf, 0x43, 0xf9, 0x96, 0xb8, 0x69, 0x4b, 0x2c, 0x28, - 0xe3, 0x45, 0x51, 0x62, 0xa8, 0x7c, 0x8d, 0x5f, 0x3e, 0xad, 0x5f, 0xd4, 0x62, 0x70, 0x97, 0x72, - 0xee, 0x6f, 0x7f, 0xf8, 0xcf, 0xc7, 0xc5, 0x45, 0x98, 0xe7, 0xa0, 0xaf, 0xe0, 0xe9, 0x2d, 0x71, - 0xa0, 0x1a, 0xdc, 0xe5, 0x23, 0xcf, 0xe4, 0xb9, 0x48, 0x59, 0xbf, 0x94, 0x81, 0xd2, 0x1b, 0x74, - 0x01, 0xc2, 0xab, 0x74, 0xe4, 0x52, 0xfa, 0xc5, 0x89, 0xe8, 0x0c, 0x2f, 0x67, 0xc1, 0x32, 0x6d, - 0x86, 0x57, 0xe5, 0xd4, 0x36, 0x07, 0xae, 0xe6, 0xa9, 0x6d, 0x2a, 0x6e, 0xdc, 0xa5, 0xd8, 0x14, - 0x31, 0x7c, 0xd0, 0xf2, 0x0e, 0x52, 0x63, 0x18, 0xb9, 0x2a, 0x97, 0x1a, 0xc3, 0xd8, 0xa5, 0x38, - 0x7d, 0x0c, 0x45, 0x8f, 0xf9, 0x99, 0x3c, 0x17, 0xcf, 0xd2, 0x63, 0x18, 0xbb, 0x31, 0x95, 0xb9, - 0x9e, 0x7c, 0x7a, 0x9a, 0xf5, 0x8c, 0xce, 0xf0, 0x72, 0x16, 0x2c, 0xd3, 0x66, 0x78, 0x07, 0x49, - 0x6d, 0x73, 0xe0, 0x3e, 0x94, 0xda, 0xe6, 0xe0, 0x55, 0xa6, 0x34, 0x9b, 0x1f, 0xc0, 0x5c, 0xf4, - 0xfe, 0x04, 0xb9, 0x92, 0xf3, 0x42, 0x48, 0x7d, 0x3d, 0x1b, 0xa8, 0xb7, 0xfc, 0x7d, 0x98, 0x8f, - 0xdd, 0x16, 0x23, 0x4a, 0x8d, 0xaa, 0xdb, 0x69, 0xf5, 0xab, 0x39, 0x90, 0x99, 0xc6, 0x63, 0x97, - 0x8d, 0xd4, 0xc6, 0x55, 0xd7, 0x9b, 0xd4, 0xc6, 0x95, 0x37, 0x97, 0x34, 0xc6, 0x63, 0x77, 0x8a, - 0xd4, 0xc6, 0x55, 0x97, 0x97, 0xd4, 0xc6, 0xd5, 0x17, 0x94, 0x52, 0x8c, 0xff, 0xac, 0x10, 0xbb, - 0xb7, 0x24, 0xaf, 0x98, 0x90, 0x46, 0xee, 0xbb, 0x28, 0xc2, 0x93, 0x8d, 0x21, 0xef, 0xae, 0xe8, - 0x93, 0x1e, 0xdb, 0xc9, 0xa9, 0x49, 0x1f, 0xbf, 0xb2, 0x90, 0x9a, 0xf4, 0xc9, 0xfb, 0x07, 0xfa, - 0xa4, 0x97, 0xbd, 0xef, 0xf4, 0xa4, 0x4f, 0x34, 0xec, 0xd3, 0x93, 0x3e, 0xd9, 0x46, 0xcf, 0x4c, - 0x7a, 0x39, 0x61, 0x4d, 0xd2, 0x27, 0xe6, 0x7c, 0x35, 0x07, 0x32, 0x67, 0xde, 0x69, 0x8d, 0xab, - 0xee, 0x88, 0xe8, 0xf2, 0x2e, 0xa7, 0x71, 0x11, 0x67, 0x6c, 0xfe, 0xa5, 0xc6, 0x39, 0xde, 0x56, - 0x4d, 0x8d, 0x73, 0xa2, 0xf3, 0x98, 0x11, 0x67, 0xd9, 0x97, 0x4e, 0x8f, 0x73, 0xa2, 0x99, 0x9e, - 0x1e, 0xe7, 0x64, 0x8b, 0x3b, 0x93, 0x5f, 0xe4, 0x84, 0x35, 0xfc, 0x92, 0x98, 0xf3, 0xd5, 0x1c, - 0xc8, 0xcc, 0x62, 0x19, 0x74, 0x44, 0xd5, 0xc5, 0x32, 0xd9, 0x6f, 0xad, 0x5f, 0xca, 0x40, 0x65, - 0xae, 0x73, 0xb4, 0xfd, 0xa8, 0x5e, 0x67, 0x45, 0x6b, 0xb5, 0xbe, 0x9e, 0x0d, 0xd4, 0x5b, 0xee, - 0x43, 0x2d, 0xd2, 0x44, 0x23, 0x97, 0xf3, 0xf5, 0xfd, 0xea, 0x57, 0x32, 0x71, 0x99, 0x13, 0x8e, - 0xf6, 0xc8, 0xd4, 0x13, 0x56, 0x34, 0xe4, 0xea, 0xeb, 0xd9, 0xc0, 0x4c, 0xcb, 0xd1, 0x7e, 0x98, - 0xda, 0xb2, 0xa2, 0xe7, 0x56, 0x5f, 0xcf, 0x06, 0xe6, 0xc9, 0x2a, 0x71, 0xa2, 0x9e, 0x9a, 0x55, - 0xb1, 0x23, 0xfb, 0xd4, 0xac, 0x4a, 0x1c, 0xcb, 0x67, 0x65, 0x15, 0xda, 0xd4, 0x64, 0x55, 0xdc, - 0xec, 0x7a, 0x36, 0x30, 0x57, 0x56, 0x61, 0x97, 0x25, 0x3d, 0xab, 0xe2, 0x8d, 0xa1, 0xf4, 0xac, - 0x4a, 0xb4, 0x6b, 0x32, 0xb3, 0x4a, 0x37, 0x61, 0x45, 0xc7, 0x46, 0x97, 0x55, 0xb9, 0x97, 0x3a, - 0xda, 0x30, 0xd1, 0x65, 0x55, 0x0e, 0xcb, 0xca, 0xde, 0x4b, 0xba, 0xe5, 0x68, 0x1f, 0x40, 0x6d, - 0x59, 0xd1, 0x74, 0x50, 0x5b, 0x56, 0xb5, 0x14, 0xd2, 0x2c, 0xff, 0xb8, 0x00, 0x8b, 0x89, 0x76, - 0x0c, 0xb9, 0x96, 0xbe, 0x90, 0x03, 0x0e, 0x7c, 0x39, 0x17, 0x36, 0xdb, 0x87, 0x44, 0xb3, 0x45, - 0xed, 0x83, 0xba, 0xbf, 0xa3, 0xf6, 0x21, 0xad, 0x7b, 0x93, 0x9e, 0xec, 0x91, 0xa3, 0x63, 0x92, - 0x56, 0x72, 0x13, 0x47, 0xd4, 0xf5, 0x2b, 0x99, 0x38, 0xbd, 0xd9, 0x1f, 0xc2, 0x42, 0xfc, 0x30, - 0x9d, 0x68, 0x0a, 0x5f, 0xd2, 0xf8, 0xb5, 0x3c, 0xd0, 0xcc, 0x0a, 0x1d, 0x3b, 0x5e, 0x25, 0xeb, - 0x79, 0x4f, 0x8a, 0xd5, 0x15, 0x5a, 0x79, 0x56, 0xab, 0x99, 0x7c, 0xbc, 0x0f, 0x44, 0x34, 0xbb, - 0xbb, 0x5c, 0x93, 0x57, 0xb7, 0x95, 0x34, 0xf6, 0xe3, 0x9d, 0x1e, 0xa2, 0xd9, 0xe0, 0xe5, 0xb2, - 0x9f, 0xd2, 0x38, 0xca, 0x62, 0x3a, 0x71, 0x42, 0xa4, 0x63, 0xba, 0xd8, 0xd9, 0x94, 0x8e, 0xe9, - 0xe2, 0x87, 0x4d, 0xfa, 0x2a, 0x86, 0x66, 0xd3, 0xaa, 0x58, 0xdc, 0xe6, 0xa5, 0x0c, 0x54, 0xce, - 0x2a, 0xa6, 0x9b, 0xaa, 0xe2, 0xcc, 0x59, 0x57, 0xc5, 0xf2, 0x59, 0xc6, 0x2a, 0x86, 0x67, 0x85, - 0xe9, 0x55, 0x2c, 0x7e, 0x20, 0x9a, 0x5e, 0xc5, 0x12, 0x87, 0x8e, 0x99, 0xb5, 0x44, 0x37, 0x61, - 0xc5, 0xb9, 0xa3, 0xae, 0x96, 0xe4, 0x9a, 0xf0, 0xd6, 0x33, 0x9f, 0x7c, 0xbe, 0x3a, 0xf5, 0xd9, - 0xe7, 0xab, 0x53, 0x3f, 0x3a, 0x59, 0x2d, 0x7c, 0x72, 0xb2, 0x5a, 0xf8, 0xf4, 0x64, 0xb5, 0xf0, - 0xcf, 0x93, 0xd5, 0xc2, 0xcf, 0xbf, 0x58, 0x9d, 0xfa, 0xf4, 0x8b, 0xd5, 0xa9, 0xcf, 0xbe, 0x58, - 0x9d, 0xda, 0x9b, 0xe5, 0xcd, 0xbd, 0xe7, 0xff, 0x17, 0x00, 0x00, 0xff, 0xff, 0x79, 0x77, 0x4d, - 0x1d, 0x14, 0x40, 0x00, 0x00, + return ms + } + return mi.MessageOf(x) } -type authenticatedWrapperControlServer struct { - local ControlServer - authorize func(context.Context, []string) error +// Deprecated: Use RemoveVolumeRequest.ProtoReflect.Descriptor instead. +func (*RemoveVolumeRequest) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{85} } -func NewAuthenticatedWrapperControlServer(local ControlServer, authorize func(context.Context, []string) error) ControlServer { - return &authenticatedWrapperControlServer{ - local: local, - authorize: authorize, +func (x *RemoveVolumeRequest) GetVolumeID() string { + if x != nil { + return x.VolumeID } + return "" } -func (p *authenticatedWrapperControlServer) GetNode(ctx context.Context, r *GetNodeRequest) (*GetNodeResponse, error) { - - if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { - return nil, err +func (x *RemoveVolumeRequest) GetForce() bool { + if x != nil { + return x.Force } - return p.local.GetNode(ctx, r) + return false } -func (p *authenticatedWrapperControlServer) ListNodes(ctx context.Context, r *ListNodesRequest) (*ListNodesResponse, error) { - - if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { - return nil, err - } - return p.local.ListNodes(ctx, r) +type RemoveVolumeResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (p *authenticatedWrapperControlServer) UpdateNode(ctx context.Context, r *UpdateNodeRequest) (*UpdateNodeResponse, error) { - - if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { - return nil, err - } - return p.local.UpdateNode(ctx, r) +func (x *RemoveVolumeResponse) Reset() { + *x = RemoveVolumeResponse{} + mi := &file_api_control_proto_msgTypes[86] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (p *authenticatedWrapperControlServer) RemoveNode(ctx context.Context, r *RemoveNodeRequest) (*RemoveNodeResponse, error) { - - if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { - return nil, err - } - return p.local.RemoveNode(ctx, r) +func (x *RemoveVolumeResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (p *authenticatedWrapperControlServer) GetTask(ctx context.Context, r *GetTaskRequest) (*GetTaskResponse, error) { +func (*RemoveVolumeResponse) ProtoMessage() {} - if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { - return nil, err +func (x *RemoveVolumeResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[86] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return p.local.GetTask(ctx, r) + return mi.MessageOf(x) } -func (p *authenticatedWrapperControlServer) ListTasks(ctx context.Context, r *ListTasksRequest) (*ListTasksResponse, error) { +// Deprecated: Use RemoveVolumeResponse.ProtoReflect.Descriptor instead. +func (*RemoveVolumeResponse) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{86} +} - if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { - return nil, err - } - return p.local.ListTasks(ctx, r) +type ListNodesRequest_Filters struct { + state protoimpl.MessageState `protogen:"open.v1"` + Names []string `protobuf:"bytes,1,rep,name=names,proto3" json:"names,omitempty"` + IDPrefixes []string `protobuf:"bytes,2,rep,name=id_prefixes,json=idPrefixes,proto3" json:"id_prefixes,omitempty"` + // Labels refers to engine labels, which are labels set by the user on the + // node and reported back to the managers + Labels map[string]string `protobuf:"bytes,3,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // NodeLabels are labels set on the node object on the managers. + NodeLabels map[string]string `protobuf:"bytes,7,rep,name=node_labels,json=nodeLabels,proto3" json:"node_labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + Memberships []NodeSpec_Membership `protobuf:"varint,4,rep,name=memberships,proto3,enum=docker.swarmkit.v1.NodeSpec_Membership" json:"memberships,omitempty"` + Roles []NodeRole `protobuf:"varint,5,rep,name=roles,proto3,enum=docker.swarmkit.v1.NodeRole" json:"roles,omitempty"` + // NamePrefixes matches all objects with the given prefixes + NamePrefixes []string `protobuf:"bytes,6,rep,name=name_prefixes,json=namePrefixes,proto3" json:"name_prefixes,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (p *authenticatedWrapperControlServer) RemoveTask(ctx context.Context, r *RemoveTaskRequest) (*RemoveTaskResponse, error) { +func (x *ListNodesRequest_Filters) Reset() { + *x = ListNodesRequest_Filters{} + mi := &file_api_control_proto_msgTypes[87] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} - if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { - return nil, err - } - return p.local.RemoveTask(ctx, r) +func (x *ListNodesRequest_Filters) String() string { + return protoimpl.X.MessageStringOf(x) } -func (p *authenticatedWrapperControlServer) GetService(ctx context.Context, r *GetServiceRequest) (*GetServiceResponse, error) { +func (*ListNodesRequest_Filters) ProtoMessage() {} - if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { - return nil, err +func (x *ListNodesRequest_Filters) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[87] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return p.local.GetService(ctx, r) + return mi.MessageOf(x) } -func (p *authenticatedWrapperControlServer) ListServices(ctx context.Context, r *ListServicesRequest) (*ListServicesResponse, error) { +// Deprecated: Use ListNodesRequest_Filters.ProtoReflect.Descriptor instead. +func (*ListNodesRequest_Filters) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{2, 0} +} - if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { - return nil, err +func (x *ListNodesRequest_Filters) GetNames() []string { + if x != nil { + return x.Names } - return p.local.ListServices(ctx, r) + return nil } -func (p *authenticatedWrapperControlServer) CreateService(ctx context.Context, r *CreateServiceRequest) (*CreateServiceResponse, error) { - - if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { - return nil, err +func (x *ListNodesRequest_Filters) GetIDPrefixes() []string { + if x != nil { + return x.IDPrefixes } - return p.local.CreateService(ctx, r) + return nil } -func (p *authenticatedWrapperControlServer) UpdateService(ctx context.Context, r *UpdateServiceRequest) (*UpdateServiceResponse, error) { - - if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { - return nil, err +func (x *ListNodesRequest_Filters) GetLabels() map[string]string { + if x != nil { + return x.Labels } - return p.local.UpdateService(ctx, r) + return nil } -func (p *authenticatedWrapperControlServer) RemoveService(ctx context.Context, r *RemoveServiceRequest) (*RemoveServiceResponse, error) { - - if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { - return nil, err +func (x *ListNodesRequest_Filters) GetNodeLabels() map[string]string { + if x != nil { + return x.NodeLabels } - return p.local.RemoveService(ctx, r) + return nil } -func (p *authenticatedWrapperControlServer) ListServiceStatuses(ctx context.Context, r *ListServiceStatusesRequest) (*ListServiceStatusesResponse, error) { - - if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { - return nil, err +func (x *ListNodesRequest_Filters) GetMemberships() []NodeSpec_Membership { + if x != nil { + return x.Memberships } - return p.local.ListServiceStatuses(ctx, r) + return nil } -func (p *authenticatedWrapperControlServer) GetNetwork(ctx context.Context, r *GetNetworkRequest) (*GetNetworkResponse, error) { - - if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { - return nil, err +func (x *ListNodesRequest_Filters) GetRoles() []NodeRole { + if x != nil { + return x.Roles } - return p.local.GetNetwork(ctx, r) + return nil } -func (p *authenticatedWrapperControlServer) ListNetworks(ctx context.Context, r *ListNetworksRequest) (*ListNetworksResponse, error) { - - if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { - return nil, err +func (x *ListNodesRequest_Filters) GetNamePrefixes() []string { + if x != nil { + return x.NamePrefixes } - return p.local.ListNetworks(ctx, r) + return nil } -func (p *authenticatedWrapperControlServer) CreateNetwork(ctx context.Context, r *CreateNetworkRequest) (*CreateNetworkResponse, error) { - - if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { - return nil, err - } - return p.local.CreateNetwork(ctx, r) +type ListTasksRequest_Filters struct { + state protoimpl.MessageState `protogen:"open.v1"` + Names []string `protobuf:"bytes,1,rep,name=names,proto3" json:"names,omitempty"` + IDPrefixes []string `protobuf:"bytes,2,rep,name=id_prefixes,json=idPrefixes,proto3" json:"id_prefixes,omitempty"` + Labels map[string]string `protobuf:"bytes,3,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + ServiceIDs []string `protobuf:"bytes,4,rep,name=service_ids,json=serviceIds,proto3" json:"service_ids,omitempty"` + NodeIDs []string `protobuf:"bytes,5,rep,name=node_ids,json=nodeIds,proto3" json:"node_ids,omitempty"` + DesiredStates []TaskState `protobuf:"varint,6,rep,name=desired_states,json=desiredStates,proto3,enum=docker.swarmkit.v1.TaskState" json:"desired_states,omitempty"` + // NamePrefixes matches all objects with the given prefixes + NamePrefixes []string `protobuf:"bytes,7,rep,name=name_prefixes,json=namePrefixes,proto3" json:"name_prefixes,omitempty"` + Runtimes []string `protobuf:"bytes,9,rep,name=runtimes,proto3" json:"runtimes,omitempty"` + // UpToDate matches tasks that are consistent with the current + // service definition. + // Note: this is intended for internal status reporting rather + // than being exposed to users. It may be removed in the future. + UpToDate bool `protobuf:"varint,8,opt,name=up_to_date,json=upToDate,proto3" json:"up_to_date,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (p *authenticatedWrapperControlServer) RemoveNetwork(ctx context.Context, r *RemoveNetworkRequest) (*RemoveNetworkResponse, error) { +func (x *ListTasksRequest_Filters) Reset() { + *x = ListTasksRequest_Filters{} + mi := &file_api_control_proto_msgTypes[90] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} - if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { - return nil, err - } - return p.local.RemoveNetwork(ctx, r) +func (x *ListTasksRequest_Filters) String() string { + return protoimpl.X.MessageStringOf(x) } -func (p *authenticatedWrapperControlServer) GetCluster(ctx context.Context, r *GetClusterRequest) (*GetClusterResponse, error) { +func (*ListTasksRequest_Filters) ProtoMessage() {} - if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { - return nil, err +func (x *ListTasksRequest_Filters) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[90] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return p.local.GetCluster(ctx, r) + return mi.MessageOf(x) } -func (p *authenticatedWrapperControlServer) ListClusters(ctx context.Context, r *ListClustersRequest) (*ListClustersResponse, error) { +// Deprecated: Use ListTasksRequest_Filters.ProtoReflect.Descriptor instead. +func (*ListTasksRequest_Filters) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{12, 0} +} - if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { - return nil, err +func (x *ListTasksRequest_Filters) GetNames() []string { + if x != nil { + return x.Names } - return p.local.ListClusters(ctx, r) + return nil } -func (p *authenticatedWrapperControlServer) UpdateCluster(ctx context.Context, r *UpdateClusterRequest) (*UpdateClusterResponse, error) { - - if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { - return nil, err +func (x *ListTasksRequest_Filters) GetIDPrefixes() []string { + if x != nil { + return x.IDPrefixes } - return p.local.UpdateCluster(ctx, r) + return nil } -func (p *authenticatedWrapperControlServer) GetSecret(ctx context.Context, r *GetSecretRequest) (*GetSecretResponse, error) { - - if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { - return nil, err +func (x *ListTasksRequest_Filters) GetLabels() map[string]string { + if x != nil { + return x.Labels } - return p.local.GetSecret(ctx, r) + return nil } -func (p *authenticatedWrapperControlServer) UpdateSecret(ctx context.Context, r *UpdateSecretRequest) (*UpdateSecretResponse, error) { - - if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { - return nil, err +func (x *ListTasksRequest_Filters) GetServiceIDs() []string { + if x != nil { + return x.ServiceIDs } - return p.local.UpdateSecret(ctx, r) + return nil } -func (p *authenticatedWrapperControlServer) ListSecrets(ctx context.Context, r *ListSecretsRequest) (*ListSecretsResponse, error) { - - if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { - return nil, err +func (x *ListTasksRequest_Filters) GetNodeIDs() []string { + if x != nil { + return x.NodeIDs } - return p.local.ListSecrets(ctx, r) + return nil } -func (p *authenticatedWrapperControlServer) CreateSecret(ctx context.Context, r *CreateSecretRequest) (*CreateSecretResponse, error) { - - if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { - return nil, err +func (x *ListTasksRequest_Filters) GetDesiredStates() []TaskState { + if x != nil { + return x.DesiredStates } - return p.local.CreateSecret(ctx, r) + return nil } -func (p *authenticatedWrapperControlServer) RemoveSecret(ctx context.Context, r *RemoveSecretRequest) (*RemoveSecretResponse, error) { - - if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { - return nil, err +func (x *ListTasksRequest_Filters) GetNamePrefixes() []string { + if x != nil { + return x.NamePrefixes } - return p.local.RemoveSecret(ctx, r) + return nil } -func (p *authenticatedWrapperControlServer) GetConfig(ctx context.Context, r *GetConfigRequest) (*GetConfigResponse, error) { - - if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { - return nil, err +func (x *ListTasksRequest_Filters) GetRuntimes() []string { + if x != nil { + return x.Runtimes } - return p.local.GetConfig(ctx, r) + return nil } -func (p *authenticatedWrapperControlServer) UpdateConfig(ctx context.Context, r *UpdateConfigRequest) (*UpdateConfigResponse, error) { - - if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { - return nil, err +func (x *ListTasksRequest_Filters) GetUpToDate() bool { + if x != nil { + return x.UpToDate } - return p.local.UpdateConfig(ctx, r) + return false } -func (p *authenticatedWrapperControlServer) ListConfigs(ctx context.Context, r *ListConfigsRequest) (*ListConfigsResponse, error) { - - if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { - return nil, err - } - return p.local.ListConfigs(ctx, r) -} - -func (p *authenticatedWrapperControlServer) CreateConfig(ctx context.Context, r *CreateConfigRequest) (*CreateConfigResponse, error) { - - if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { - return nil, err - } - return p.local.CreateConfig(ctx, r) -} - -func (p *authenticatedWrapperControlServer) RemoveConfig(ctx context.Context, r *RemoveConfigRequest) (*RemoveConfigResponse, error) { - - if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { - return nil, err - } - return p.local.RemoveConfig(ctx, r) +type ListServicesRequest_Filters struct { + state protoimpl.MessageState `protogen:"open.v1"` + Names []string `protobuf:"bytes,1,rep,name=names,proto3" json:"names,omitempty"` + IDPrefixes []string `protobuf:"bytes,2,rep,name=id_prefixes,json=idPrefixes,proto3" json:"id_prefixes,omitempty"` + Labels map[string]string `protobuf:"bytes,3,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // NamePrefixes matches all objects with the given prefixes + NamePrefixes []string `protobuf:"bytes,4,rep,name=name_prefixes,json=namePrefixes,proto3" json:"name_prefixes,omitempty"` + Runtimes []string `protobuf:"bytes,5,rep,name=runtimes,proto3" json:"runtimes,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (p *authenticatedWrapperControlServer) GetExtension(ctx context.Context, r *GetExtensionRequest) (*GetExtensionResponse, error) { - - if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { - return nil, err - } - return p.local.GetExtension(ctx, r) +func (x *ListServicesRequest_Filters) Reset() { + *x = ListServicesRequest_Filters{} + mi := &file_api_control_proto_msgTypes[92] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (p *authenticatedWrapperControlServer) CreateExtension(ctx context.Context, r *CreateExtensionRequest) (*CreateExtensionResponse, error) { - - if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { - return nil, err - } - return p.local.CreateExtension(ctx, r) +func (x *ListServicesRequest_Filters) String() string { + return protoimpl.X.MessageStringOf(x) } -func (p *authenticatedWrapperControlServer) RemoveExtension(ctx context.Context, r *RemoveExtensionRequest) (*RemoveExtensionResponse, error) { +func (*ListServicesRequest_Filters) ProtoMessage() {} - if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { - return nil, err +func (x *ListServicesRequest_Filters) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[92] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return p.local.RemoveExtension(ctx, r) + return mi.MessageOf(x) } -func (p *authenticatedWrapperControlServer) GetResource(ctx context.Context, r *GetResourceRequest) (*GetResourceResponse, error) { - - if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { - return nil, err - } - return p.local.GetResource(ctx, r) +// Deprecated: Use ListServicesRequest_Filters.ProtoReflect.Descriptor instead. +func (*ListServicesRequest_Filters) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{22, 0} } -func (p *authenticatedWrapperControlServer) UpdateResource(ctx context.Context, r *UpdateResourceRequest) (*UpdateResourceResponse, error) { - - if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { - return nil, err +func (x *ListServicesRequest_Filters) GetNames() []string { + if x != nil { + return x.Names } - return p.local.UpdateResource(ctx, r) + return nil } -func (p *authenticatedWrapperControlServer) ListResources(ctx context.Context, r *ListResourcesRequest) (*ListResourcesResponse, error) { - - if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { - return nil, err +func (x *ListServicesRequest_Filters) GetIDPrefixes() []string { + if x != nil { + return x.IDPrefixes } - return p.local.ListResources(ctx, r) + return nil } -func (p *authenticatedWrapperControlServer) CreateResource(ctx context.Context, r *CreateResourceRequest) (*CreateResourceResponse, error) { - - if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { - return nil, err +func (x *ListServicesRequest_Filters) GetLabels() map[string]string { + if x != nil { + return x.Labels } - return p.local.CreateResource(ctx, r) + return nil } -func (p *authenticatedWrapperControlServer) RemoveResource(ctx context.Context, r *RemoveResourceRequest) (*RemoveResourceResponse, error) { - - if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { - return nil, err +func (x *ListServicesRequest_Filters) GetNamePrefixes() []string { + if x != nil { + return x.NamePrefixes } - return p.local.RemoveResource(ctx, r) + return nil } -func (p *authenticatedWrapperControlServer) CreateVolume(ctx context.Context, r *CreateVolumeRequest) (*CreateVolumeResponse, error) { - - if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { - return nil, err +func (x *ListServicesRequest_Filters) GetRuntimes() []string { + if x != nil { + return x.Runtimes } - return p.local.CreateVolume(ctx, r) + return nil } -func (p *authenticatedWrapperControlServer) GetVolume(ctx context.Context, r *GetVolumeRequest) (*GetVolumeResponse, error) { - - if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { - return nil, err - } - return p.local.GetVolume(ctx, r) +type ListServiceStatusesResponse_ServiceStatus struct { + state protoimpl.MessageState `protogen:"open.v1"` + // ServiceID is the ID of the service this status describes + ServiceID string `protobuf:"bytes,1,opt,name=service_id,json=serviceId,proto3" json:"service_id,omitempty"` + // DesiredTasks is the number of tasks desired to be running according to the + // service definition at request time. It is a uint64 because that is what + // the replicas field on the service spec is + DesiredTasks uint64 `protobuf:"varint,2,opt,name=desired_tasks,json=desiredTasks,proto3" json:"desired_tasks,omitempty"` + // RunningTasks is the number of tasks currently in the Running state at + // request time. This may be larger than desired tasks if, for example, a + // service has been scaled down. + RunningTasks uint64 `protobuf:"varint,3,opt,name=running_tasks,json=runningTasks,proto3" json:"running_tasks,omitempty"` + // CompletedTasks is the number of tasks in state Completed, if this + // service is in mode ReplicatedJob or GlobalJob. This must be + // cross-referenced with the service type, because the default value of 0 + // may mean that a service is not in a Job mode, or it may mean the Job has + // yet to complete any Tasks. + CompletedTasks uint64 `protobuf:"varint,4,opt,name=completed_tasks,json=completedTasks,proto3" json:"completed_tasks,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (p *authenticatedWrapperControlServer) UpdateVolume(ctx context.Context, r *UpdateVolumeRequest) (*UpdateVolumeResponse, error) { - - if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { - return nil, err - } - return p.local.UpdateVolume(ctx, r) +func (x *ListServiceStatusesResponse_ServiceStatus) Reset() { + *x = ListServiceStatusesResponse_ServiceStatus{} + mi := &file_api_control_proto_msgTypes[94] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (p *authenticatedWrapperControlServer) ListVolumes(ctx context.Context, r *ListVolumesRequest) (*ListVolumesResponse, error) { - - if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { - return nil, err - } - return p.local.ListVolumes(ctx, r) +func (x *ListServiceStatusesResponse_ServiceStatus) String() string { + return protoimpl.X.MessageStringOf(x) } -func (p *authenticatedWrapperControlServer) RemoveVolume(ctx context.Context, r *RemoveVolumeRequest) (*RemoveVolumeResponse, error) { - - if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { - return nil, err - } - return p.local.RemoveVolume(ctx, r) -} +func (*ListServiceStatusesResponse_ServiceStatus) ProtoMessage() {} -func (m *GetNodeRequest) Copy() *GetNodeRequest { - if m == nil { - return nil +func (x *ListServiceStatusesResponse_ServiceStatus) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[94] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - o := &GetNodeRequest{} - o.CopyFrom(m) - return o + return mi.MessageOf(x) } -func (m *GetNodeRequest) CopyFrom(src interface{}) { - - o := src.(*GetNodeRequest) - *m = *o +// Deprecated: Use ListServiceStatusesResponse_ServiceStatus.ProtoReflect.Descriptor instead. +func (*ListServiceStatusesResponse_ServiceStatus) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{25, 0} } -func (m *GetNodeResponse) Copy() *GetNodeResponse { - if m == nil { - return nil +func (x *ListServiceStatusesResponse_ServiceStatus) GetServiceID() string { + if x != nil { + return x.ServiceID } - o := &GetNodeResponse{} - o.CopyFrom(m) - return o + return "" } -func (m *GetNodeResponse) CopyFrom(src interface{}) { - - o := src.(*GetNodeResponse) - *m = *o - if o.Node != nil { - m.Node = &Node{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Node, o.Node) +func (x *ListServiceStatusesResponse_ServiceStatus) GetDesiredTasks() uint64 { + if x != nil { + return x.DesiredTasks } + return 0 } -func (m *ListNodesRequest) Copy() *ListNodesRequest { - if m == nil { - return nil +func (x *ListServiceStatusesResponse_ServiceStatus) GetRunningTasks() uint64 { + if x != nil { + return x.RunningTasks } - o := &ListNodesRequest{} - o.CopyFrom(m) - return o + return 0 } -func (m *ListNodesRequest) CopyFrom(src interface{}) { - - o := src.(*ListNodesRequest) - *m = *o - if o.Filters != nil { - m.Filters = &ListNodesRequest_Filters{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Filters, o.Filters) +func (x *ListServiceStatusesResponse_ServiceStatus) GetCompletedTasks() uint64 { + if x != nil { + return x.CompletedTasks } + return 0 } -func (m *ListNodesRequest_Filters) Copy() *ListNodesRequest_Filters { - if m == nil { - return nil - } - o := &ListNodesRequest_Filters{} - o.CopyFrom(m) - return o +type ListNetworksRequest_Filters struct { + state protoimpl.MessageState `protogen:"open.v1"` + Names []string `protobuf:"bytes,1,rep,name=names,proto3" json:"names,omitempty"` + IDPrefixes []string `protobuf:"bytes,2,rep,name=id_prefixes,json=idPrefixes,proto3" json:"id_prefixes,omitempty"` + Labels map[string]string `protobuf:"bytes,3,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // NamePrefixes matches all objects with the given prefixes + NamePrefixes []string `protobuf:"bytes,4,rep,name=name_prefixes,json=namePrefixes,proto3" json:"name_prefixes,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *ListNodesRequest_Filters) CopyFrom(src interface{}) { - - o := src.(*ListNodesRequest_Filters) - *m = *o - if o.Names != nil { - m.Names = make([]string, len(o.Names)) - copy(m.Names, o.Names) - } - - if o.IDPrefixes != nil { - m.IDPrefixes = make([]string, len(o.IDPrefixes)) - copy(m.IDPrefixes, o.IDPrefixes) - } - - if o.Labels != nil { - m.Labels = make(map[string]string, len(o.Labels)) - for k, v := range o.Labels { - m.Labels[k] = v - } - } - - if o.NodeLabels != nil { - m.NodeLabels = make(map[string]string, len(o.NodeLabels)) - for k, v := range o.NodeLabels { - m.NodeLabels[k] = v - } - } - - if o.Memberships != nil { - m.Memberships = make([]NodeSpec_Membership, len(o.Memberships)) - copy(m.Memberships, o.Memberships) - } - - if o.Roles != nil { - m.Roles = make([]NodeRole, len(o.Roles)) - copy(m.Roles, o.Roles) - } - - if o.NamePrefixes != nil { - m.NamePrefixes = make([]string, len(o.NamePrefixes)) - copy(m.NamePrefixes, o.NamePrefixes) - } - +func (x *ListNetworksRequest_Filters) Reset() { + *x = ListNetworksRequest_Filters{} + mi := &file_api_control_proto_msgTypes[95] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *ListNodesResponse) Copy() *ListNodesResponse { - if m == nil { - return nil - } - o := &ListNodesResponse{} - o.CopyFrom(m) - return o +func (x *ListNetworksRequest_Filters) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ListNodesResponse) CopyFrom(src interface{}) { +func (*ListNetworksRequest_Filters) ProtoMessage() {} - o := src.(*ListNodesResponse) - *m = *o - if o.Nodes != nil { - m.Nodes = make([]*Node, len(o.Nodes)) - for i := range m.Nodes { - m.Nodes[i] = &Node{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Nodes[i], o.Nodes[i]) +func (x *ListNetworksRequest_Filters) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[95] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } + return ms } - + return mi.MessageOf(x) } -func (m *UpdateNodeRequest) Copy() *UpdateNodeRequest { - if m == nil { - return nil - } - o := &UpdateNodeRequest{} - o.CopyFrom(m) - return o +// Deprecated: Use ListNetworksRequest_Filters.ProtoReflect.Descriptor instead. +func (*ListNetworksRequest_Filters) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{32, 0} } -func (m *UpdateNodeRequest) CopyFrom(src interface{}) { - - o := src.(*UpdateNodeRequest) - *m = *o - if o.NodeVersion != nil { - m.NodeVersion = &Version{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.NodeVersion, o.NodeVersion) - } - if o.Spec != nil { - m.Spec = &NodeSpec{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Spec, o.Spec) +func (x *ListNetworksRequest_Filters) GetNames() []string { + if x != nil { + return x.Names } + return nil } -func (m *UpdateNodeResponse) Copy() *UpdateNodeResponse { - if m == nil { - return nil +func (x *ListNetworksRequest_Filters) GetIDPrefixes() []string { + if x != nil { + return x.IDPrefixes } - o := &UpdateNodeResponse{} - o.CopyFrom(m) - return o + return nil } -func (m *UpdateNodeResponse) CopyFrom(src interface{}) { - - o := src.(*UpdateNodeResponse) - *m = *o - if o.Node != nil { - m.Node = &Node{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Node, o.Node) +func (x *ListNetworksRequest_Filters) GetLabels() map[string]string { + if x != nil { + return x.Labels } + return nil } -func (m *RemoveNodeRequest) Copy() *RemoveNodeRequest { - if m == nil { - return nil +func (x *ListNetworksRequest_Filters) GetNamePrefixes() []string { + if x != nil { + return x.NamePrefixes } - o := &RemoveNodeRequest{} - o.CopyFrom(m) - return o + return nil } -func (m *RemoveNodeRequest) CopyFrom(src interface{}) { - - o := src.(*RemoveNodeRequest) - *m = *o +type ListClustersRequest_Filters struct { + state protoimpl.MessageState `protogen:"open.v1"` + Names []string `protobuf:"bytes,1,rep,name=names,proto3" json:"names,omitempty"` + IDPrefixes []string `protobuf:"bytes,2,rep,name=id_prefixes,json=idPrefixes,proto3" json:"id_prefixes,omitempty"` + Labels map[string]string `protobuf:"bytes,3,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // NamePrefixes matches all objects with the given prefixes + NamePrefixes []string `protobuf:"bytes,4,rep,name=name_prefixes,json=namePrefixes,proto3" json:"name_prefixes,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *RemoveNodeResponse) Copy() *RemoveNodeResponse { - if m == nil { - return nil - } - o := &RemoveNodeResponse{} - o.CopyFrom(m) - return o +func (x *ListClustersRequest_Filters) Reset() { + *x = ListClustersRequest_Filters{} + mi := &file_api_control_proto_msgTypes[97] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *RemoveNodeResponse) CopyFrom(src interface{}) {} -func (m *GetTaskRequest) Copy() *GetTaskRequest { - if m == nil { - return nil - } - o := &GetTaskRequest{} - o.CopyFrom(m) - return o +func (x *ListClustersRequest_Filters) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *GetTaskRequest) CopyFrom(src interface{}) { - - o := src.(*GetTaskRequest) - *m = *o -} +func (*ListClustersRequest_Filters) ProtoMessage() {} -func (m *GetTaskResponse) Copy() *GetTaskResponse { - if m == nil { - return nil +func (x *ListClustersRequest_Filters) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[97] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - o := &GetTaskResponse{} - o.CopyFrom(m) - return o + return mi.MessageOf(x) } -func (m *GetTaskResponse) CopyFrom(src interface{}) { - - o := src.(*GetTaskResponse) - *m = *o - if o.Task != nil { - m.Task = &Task{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Task, o.Task) - } +// Deprecated: Use ListClustersRequest_Filters.ProtoReflect.Descriptor instead. +func (*ListClustersRequest_Filters) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{36, 0} } -func (m *RemoveTaskRequest) Copy() *RemoveTaskRequest { - if m == nil { - return nil +func (x *ListClustersRequest_Filters) GetNames() []string { + if x != nil { + return x.Names } - o := &RemoveTaskRequest{} - o.CopyFrom(m) - return o -} - -func (m *RemoveTaskRequest) CopyFrom(src interface{}) { - - o := src.(*RemoveTaskRequest) - *m = *o + return nil } -func (m *RemoveTaskResponse) Copy() *RemoveTaskResponse { - if m == nil { - return nil +func (x *ListClustersRequest_Filters) GetIDPrefixes() []string { + if x != nil { + return x.IDPrefixes } - o := &RemoveTaskResponse{} - o.CopyFrom(m) - return o + return nil } -func (m *RemoveTaskResponse) CopyFrom(src interface{}) {} -func (m *ListTasksRequest) Copy() *ListTasksRequest { - if m == nil { - return nil +func (x *ListClustersRequest_Filters) GetLabels() map[string]string { + if x != nil { + return x.Labels } - o := &ListTasksRequest{} - o.CopyFrom(m) - return o + return nil } -func (m *ListTasksRequest) CopyFrom(src interface{}) { - - o := src.(*ListTasksRequest) - *m = *o - if o.Filters != nil { - m.Filters = &ListTasksRequest_Filters{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Filters, o.Filters) +func (x *ListClustersRequest_Filters) GetNamePrefixes() []string { + if x != nil { + return x.NamePrefixes } + return nil } -func (m *ListTasksRequest_Filters) Copy() *ListTasksRequest_Filters { - if m == nil { - return nil - } - o := &ListTasksRequest_Filters{} - o.CopyFrom(m) - return o +type ListSecretsRequest_Filters struct { + state protoimpl.MessageState `protogen:"open.v1"` + Names []string `protobuf:"bytes,1,rep,name=names,proto3" json:"names,omitempty"` + IDPrefixes []string `protobuf:"bytes,2,rep,name=id_prefixes,json=idPrefixes,proto3" json:"id_prefixes,omitempty"` + Labels map[string]string `protobuf:"bytes,3,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + NamePrefixes []string `protobuf:"bytes,4,rep,name=name_prefixes,json=namePrefixes,proto3" json:"name_prefixes,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *ListTasksRequest_Filters) CopyFrom(src interface{}) { - - o := src.(*ListTasksRequest_Filters) - *m = *o - if o.Names != nil { - m.Names = make([]string, len(o.Names)) - copy(m.Names, o.Names) - } - - if o.IDPrefixes != nil { - m.IDPrefixes = make([]string, len(o.IDPrefixes)) - copy(m.IDPrefixes, o.IDPrefixes) - } - - if o.Labels != nil { - m.Labels = make(map[string]string, len(o.Labels)) - for k, v := range o.Labels { - m.Labels[k] = v - } - } - - if o.ServiceIDs != nil { - m.ServiceIDs = make([]string, len(o.ServiceIDs)) - copy(m.ServiceIDs, o.ServiceIDs) - } - - if o.NodeIDs != nil { - m.NodeIDs = make([]string, len(o.NodeIDs)) - copy(m.NodeIDs, o.NodeIDs) - } - - if o.DesiredStates != nil { - m.DesiredStates = make([]TaskState, len(o.DesiredStates)) - copy(m.DesiredStates, o.DesiredStates) - } - - if o.NamePrefixes != nil { - m.NamePrefixes = make([]string, len(o.NamePrefixes)) - copy(m.NamePrefixes, o.NamePrefixes) - } - - if o.Runtimes != nil { - m.Runtimes = make([]string, len(o.Runtimes)) - copy(m.Runtimes, o.Runtimes) - } - +func (x *ListSecretsRequest_Filters) Reset() { + *x = ListSecretsRequest_Filters{} + mi := &file_api_control_proto_msgTypes[99] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *ListTasksResponse) Copy() *ListTasksResponse { - if m == nil { - return nil - } - o := &ListTasksResponse{} - o.CopyFrom(m) - return o +func (x *ListSecretsRequest_Filters) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ListTasksResponse) CopyFrom(src interface{}) { +func (*ListSecretsRequest_Filters) ProtoMessage() {} - o := src.(*ListTasksResponse) - *m = *o - if o.Tasks != nil { - m.Tasks = make([]*Task, len(o.Tasks)) - for i := range m.Tasks { - m.Tasks[i] = &Task{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Tasks[i], o.Tasks[i]) +func (x *ListSecretsRequest_Filters) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[99] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } + return ms } - -} - -func (m *CreateServiceRequest) Copy() *CreateServiceRequest { - if m == nil { - return nil - } - o := &CreateServiceRequest{} - o.CopyFrom(m) - return o -} - -func (m *CreateServiceRequest) CopyFrom(src interface{}) { - - o := src.(*CreateServiceRequest) - *m = *o - if o.Spec != nil { - m.Spec = &ServiceSpec{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Spec, o.Spec) - } + return mi.MessageOf(x) } -func (m *CreateServiceResponse) Copy() *CreateServiceResponse { - if m == nil { - return nil - } - o := &CreateServiceResponse{} - o.CopyFrom(m) - return o -} - -func (m *CreateServiceResponse) CopyFrom(src interface{}) { - - o := src.(*CreateServiceResponse) - *m = *o - if o.Service != nil { - m.Service = &Service{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Service, o.Service) - } -} - -func (m *GetServiceRequest) Copy() *GetServiceRequest { - if m == nil { - return nil - } - o := &GetServiceRequest{} - o.CopyFrom(m) - return o -} - -func (m *GetServiceRequest) CopyFrom(src interface{}) { - - o := src.(*GetServiceRequest) - *m = *o -} - -func (m *GetServiceResponse) Copy() *GetServiceResponse { - if m == nil { - return nil - } - o := &GetServiceResponse{} - o.CopyFrom(m) - return o +// Deprecated: Use ListSecretsRequest_Filters.ProtoReflect.Descriptor instead. +func (*ListSecretsRequest_Filters) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{45, 0} } -func (m *GetServiceResponse) CopyFrom(src interface{}) { - - o := src.(*GetServiceResponse) - *m = *o - if o.Service != nil { - m.Service = &Service{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Service, o.Service) +func (x *ListSecretsRequest_Filters) GetNames() []string { + if x != nil { + return x.Names } + return nil } -func (m *UpdateServiceRequest) Copy() *UpdateServiceRequest { - if m == nil { - return nil +func (x *ListSecretsRequest_Filters) GetIDPrefixes() []string { + if x != nil { + return x.IDPrefixes } - o := &UpdateServiceRequest{} - o.CopyFrom(m) - return o + return nil } -func (m *UpdateServiceRequest) CopyFrom(src interface{}) { - - o := src.(*UpdateServiceRequest) - *m = *o - if o.ServiceVersion != nil { - m.ServiceVersion = &Version{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.ServiceVersion, o.ServiceVersion) - } - if o.Spec != nil { - m.Spec = &ServiceSpec{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Spec, o.Spec) +func (x *ListSecretsRequest_Filters) GetLabels() map[string]string { + if x != nil { + return x.Labels } + return nil } -func (m *UpdateServiceResponse) Copy() *UpdateServiceResponse { - if m == nil { - return nil +func (x *ListSecretsRequest_Filters) GetNamePrefixes() []string { + if x != nil { + return x.NamePrefixes } - o := &UpdateServiceResponse{} - o.CopyFrom(m) - return o + return nil } -func (m *UpdateServiceResponse) CopyFrom(src interface{}) { - - o := src.(*UpdateServiceResponse) - *m = *o - if o.Service != nil { - m.Service = &Service{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Service, o.Service) - } +type ListConfigsRequest_Filters struct { + state protoimpl.MessageState `protogen:"open.v1"` + Names []string `protobuf:"bytes,1,rep,name=names,proto3" json:"names,omitempty"` + IDPrefixes []string `protobuf:"bytes,2,rep,name=id_prefixes,json=idPrefixes,proto3" json:"id_prefixes,omitempty"` + Labels map[string]string `protobuf:"bytes,3,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + NamePrefixes []string `protobuf:"bytes,4,rep,name=name_prefixes,json=namePrefixes,proto3" json:"name_prefixes,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *RemoveServiceRequest) Copy() *RemoveServiceRequest { - if m == nil { - return nil - } - o := &RemoveServiceRequest{} - o.CopyFrom(m) - return o +func (x *ListConfigsRequest_Filters) Reset() { + *x = ListConfigsRequest_Filters{} + mi := &file_api_control_proto_msgTypes[101] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *RemoveServiceRequest) CopyFrom(src interface{}) { - - o := src.(*RemoveServiceRequest) - *m = *o +func (x *ListConfigsRequest_Filters) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *RemoveServiceResponse) Copy() *RemoveServiceResponse { - if m == nil { - return nil - } - o := &RemoveServiceResponse{} - o.CopyFrom(m) - return o -} +func (*ListConfigsRequest_Filters) ProtoMessage() {} -func (m *RemoveServiceResponse) CopyFrom(src interface{}) {} -func (m *ListServicesRequest) Copy() *ListServicesRequest { - if m == nil { - return nil +func (x *ListConfigsRequest_Filters) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[101] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - o := &ListServicesRequest{} - o.CopyFrom(m) - return o + return mi.MessageOf(x) } -func (m *ListServicesRequest) CopyFrom(src interface{}) { - - o := src.(*ListServicesRequest) - *m = *o - if o.Filters != nil { - m.Filters = &ListServicesRequest_Filters{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Filters, o.Filters) - } +// Deprecated: Use ListConfigsRequest_Filters.ProtoReflect.Descriptor instead. +func (*ListConfigsRequest_Filters) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{55, 0} } -func (m *ListServicesRequest_Filters) Copy() *ListServicesRequest_Filters { - if m == nil { - return nil +func (x *ListConfigsRequest_Filters) GetNames() []string { + if x != nil { + return x.Names } - o := &ListServicesRequest_Filters{} - o.CopyFrom(m) - return o + return nil } -func (m *ListServicesRequest_Filters) CopyFrom(src interface{}) { - - o := src.(*ListServicesRequest_Filters) - *m = *o - if o.Names != nil { - m.Names = make([]string, len(o.Names)) - copy(m.Names, o.Names) - } - - if o.IDPrefixes != nil { - m.IDPrefixes = make([]string, len(o.IDPrefixes)) - copy(m.IDPrefixes, o.IDPrefixes) - } - - if o.Labels != nil { - m.Labels = make(map[string]string, len(o.Labels)) - for k, v := range o.Labels { - m.Labels[k] = v - } - } - - if o.NamePrefixes != nil { - m.NamePrefixes = make([]string, len(o.NamePrefixes)) - copy(m.NamePrefixes, o.NamePrefixes) - } - - if o.Runtimes != nil { - m.Runtimes = make([]string, len(o.Runtimes)) - copy(m.Runtimes, o.Runtimes) +func (x *ListConfigsRequest_Filters) GetIDPrefixes() []string { + if x != nil { + return x.IDPrefixes } - + return nil } -func (m *ListServicesResponse) Copy() *ListServicesResponse { - if m == nil { - return nil +func (x *ListConfigsRequest_Filters) GetLabels() map[string]string { + if x != nil { + return x.Labels } - o := &ListServicesResponse{} - o.CopyFrom(m) - return o + return nil } -func (m *ListServicesResponse) CopyFrom(src interface{}) { - - o := src.(*ListServicesResponse) - *m = *o - if o.Services != nil { - m.Services = make([]*Service, len(o.Services)) - for i := range m.Services { - m.Services[i] = &Service{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Services[i], o.Services[i]) - } +func (x *ListConfigsRequest_Filters) GetNamePrefixes() []string { + if x != nil { + return x.NamePrefixes } - + return nil } -func (m *ListServiceStatusesRequest) Copy() *ListServiceStatusesRequest { - if m == nil { - return nil - } - o := &ListServiceStatusesRequest{} - o.CopyFrom(m) - return o +type ListResourcesRequest_Filters struct { + state protoimpl.MessageState `protogen:"open.v1"` + Names []string `protobuf:"bytes,1,rep,name=names,proto3" json:"names,omitempty"` + IDPrefixes []string `protobuf:"bytes,2,rep,name=id_prefixes,json=idPrefixes,proto3" json:"id_prefixes,omitempty"` + Labels map[string]string `protobuf:"bytes,3,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + NamePrefixes []string `protobuf:"bytes,4,rep,name=name_prefixes,json=namePrefixes,proto3" json:"name_prefixes,omitempty"` + Kind string `protobuf:"bytes,5,opt,name=kind,proto3" json:"kind,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *ListServiceStatusesRequest) CopyFrom(src interface{}) { - - o := src.(*ListServiceStatusesRequest) - *m = *o - if o.Services != nil { - m.Services = make([]string, len(o.Services)) - copy(m.Services, o.Services) - } - +func (x *ListResourcesRequest_Filters) Reset() { + *x = ListResourcesRequest_Filters{} + mi := &file_api_control_proto_msgTypes[103] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *ListServiceStatusesResponse) Copy() *ListServiceStatusesResponse { - if m == nil { - return nil - } - o := &ListServiceStatusesResponse{} - o.CopyFrom(m) - return o +func (x *ListResourcesRequest_Filters) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ListServiceStatusesResponse) CopyFrom(src interface{}) { +func (*ListResourcesRequest_Filters) ProtoMessage() {} - o := src.(*ListServiceStatusesResponse) - *m = *o - if o.Statuses != nil { - m.Statuses = make([]*ListServiceStatusesResponse_ServiceStatus, len(o.Statuses)) - for i := range m.Statuses { - m.Statuses[i] = &ListServiceStatusesResponse_ServiceStatus{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Statuses[i], o.Statuses[i]) +func (x *ListResourcesRequest_Filters) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[103] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } + return ms } - -} - -func (m *ListServiceStatusesResponse_ServiceStatus) Copy() *ListServiceStatusesResponse_ServiceStatus { - if m == nil { - return nil - } - o := &ListServiceStatusesResponse_ServiceStatus{} - o.CopyFrom(m) - return o -} - -func (m *ListServiceStatusesResponse_ServiceStatus) CopyFrom(src interface{}) { - - o := src.(*ListServiceStatusesResponse_ServiceStatus) - *m = *o + return mi.MessageOf(x) } -func (m *CreateNetworkRequest) Copy() *CreateNetworkRequest { - if m == nil { - return nil - } - o := &CreateNetworkRequest{} - o.CopyFrom(m) - return o +// Deprecated: Use ListResourcesRequest_Filters.ProtoReflect.Descriptor instead. +func (*ListResourcesRequest_Filters) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{75, 0} } -func (m *CreateNetworkRequest) CopyFrom(src interface{}) { - - o := src.(*CreateNetworkRequest) - *m = *o - if o.Spec != nil { - m.Spec = &NetworkSpec{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Spec, o.Spec) +func (x *ListResourcesRequest_Filters) GetNames() []string { + if x != nil { + return x.Names } + return nil } -func (m *CreateNetworkResponse) Copy() *CreateNetworkResponse { - if m == nil { - return nil +func (x *ListResourcesRequest_Filters) GetIDPrefixes() []string { + if x != nil { + return x.IDPrefixes } - o := &CreateNetworkResponse{} - o.CopyFrom(m) - return o + return nil } -func (m *CreateNetworkResponse) CopyFrom(src interface{}) { - - o := src.(*CreateNetworkResponse) - *m = *o - if o.Network != nil { - m.Network = &Network{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Network, o.Network) +func (x *ListResourcesRequest_Filters) GetLabels() map[string]string { + if x != nil { + return x.Labels } + return nil } -func (m *GetNetworkRequest) Copy() *GetNetworkRequest { - if m == nil { - return nil +func (x *ListResourcesRequest_Filters) GetNamePrefixes() []string { + if x != nil { + return x.NamePrefixes } - o := &GetNetworkRequest{} - o.CopyFrom(m) - return o + return nil } -func (m *GetNetworkRequest) CopyFrom(src interface{}) { - - o := src.(*GetNetworkRequest) - *m = *o - if o.Appdata != nil { - m.Appdata = &types.Any{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Appdata, o.Appdata) +func (x *ListResourcesRequest_Filters) GetKind() string { + if x != nil { + return x.Kind } + return "" } -func (m *GetNetworkResponse) Copy() *GetNetworkResponse { - if m == nil { - return nil - } - o := &GetNetworkResponse{} - o.CopyFrom(m) - return o +type ListVolumesRequest_Filters struct { + state protoimpl.MessageState `protogen:"open.v1"` + Names []string `protobuf:"bytes,1,rep,name=names,proto3" json:"names,omitempty"` + IDPrefixes []string `protobuf:"bytes,2,rep,name=id_prefixes,json=idPrefixes,proto3" json:"id_prefixes,omitempty"` + Labels map[string]string `protobuf:"bytes,3,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + NamePrefixes []string `protobuf:"bytes,4,rep,name=name_prefixes,json=namePrefixes,proto3" json:"name_prefixes,omitempty"` + Groups []string `protobuf:"bytes,5,rep,name=groups,proto3" json:"groups,omitempty"` + Drivers []string `protobuf:"bytes,6,rep,name=drivers,proto3" json:"drivers,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *GetNetworkResponse) CopyFrom(src interface{}) { - - o := src.(*GetNetworkResponse) - *m = *o - if o.Network != nil { - m.Network = &Network{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Network, o.Network) - } +func (x *ListVolumesRequest_Filters) Reset() { + *x = ListVolumesRequest_Filters{} + mi := &file_api_control_proto_msgTypes[105] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *RemoveNetworkRequest) Copy() *RemoveNetworkRequest { - if m == nil { - return nil - } - o := &RemoveNetworkRequest{} - o.CopyFrom(m) - return o +func (x *ListVolumesRequest_Filters) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *RemoveNetworkRequest) CopyFrom(src interface{}) { - - o := src.(*RemoveNetworkRequest) - *m = *o -} +func (*ListVolumesRequest_Filters) ProtoMessage() {} -func (m *RemoveNetworkResponse) Copy() *RemoveNetworkResponse { - if m == nil { - return nil +func (x *ListVolumesRequest_Filters) ProtoReflect() protoreflect.Message { + mi := &file_api_control_proto_msgTypes[105] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - o := &RemoveNetworkResponse{} - o.CopyFrom(m) - return o + return mi.MessageOf(x) } -func (m *RemoveNetworkResponse) CopyFrom(src interface{}) {} -func (m *ListNetworksRequest) Copy() *ListNetworksRequest { - if m == nil { - return nil - } - o := &ListNetworksRequest{} - o.CopyFrom(m) - return o +// Deprecated: Use ListVolumesRequest_Filters.ProtoReflect.Descriptor instead. +func (*ListVolumesRequest_Filters) Descriptor() ([]byte, []int) { + return file_api_control_proto_rawDescGZIP(), []int{83, 0} } -func (m *ListNetworksRequest) CopyFrom(src interface{}) { - - o := src.(*ListNetworksRequest) - *m = *o - if o.Filters != nil { - m.Filters = &ListNetworksRequest_Filters{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Filters, o.Filters) - } - if o.Appdata != nil { - m.Appdata = &types.Any{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Appdata, o.Appdata) +func (x *ListVolumesRequest_Filters) GetNames() []string { + if x != nil { + return x.Names } + return nil } -func (m *ListNetworksRequest_Filters) Copy() *ListNetworksRequest_Filters { - if m == nil { - return nil +func (x *ListVolumesRequest_Filters) GetIDPrefixes() []string { + if x != nil { + return x.IDPrefixes } - o := &ListNetworksRequest_Filters{} - o.CopyFrom(m) - return o + return nil } -func (m *ListNetworksRequest_Filters) CopyFrom(src interface{}) { - - o := src.(*ListNetworksRequest_Filters) - *m = *o - if o.Names != nil { - m.Names = make([]string, len(o.Names)) - copy(m.Names, o.Names) - } - - if o.IDPrefixes != nil { - m.IDPrefixes = make([]string, len(o.IDPrefixes)) - copy(m.IDPrefixes, o.IDPrefixes) - } - - if o.Labels != nil { - m.Labels = make(map[string]string, len(o.Labels)) - for k, v := range o.Labels { - m.Labels[k] = v - } - } - - if o.NamePrefixes != nil { - m.NamePrefixes = make([]string, len(o.NamePrefixes)) - copy(m.NamePrefixes, o.NamePrefixes) +func (x *ListVolumesRequest_Filters) GetLabels() map[string]string { + if x != nil { + return x.Labels } - + return nil } -func (m *ListNetworksResponse) Copy() *ListNetworksResponse { - if m == nil { - return nil +func (x *ListVolumesRequest_Filters) GetNamePrefixes() []string { + if x != nil { + return x.NamePrefixes } - o := &ListNetworksResponse{} - o.CopyFrom(m) - return o + return nil } -func (m *ListNetworksResponse) CopyFrom(src interface{}) { - - o := src.(*ListNetworksResponse) - *m = *o - if o.Networks != nil { - m.Networks = make([]*Network, len(o.Networks)) - for i := range m.Networks { - m.Networks[i] = &Network{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Networks[i], o.Networks[i]) - } +func (x *ListVolumesRequest_Filters) GetGroups() []string { + if x != nil { + return x.Groups } - + return nil } -func (m *GetClusterRequest) Copy() *GetClusterRequest { - if m == nil { - return nil +func (x *ListVolumesRequest_Filters) GetDrivers() []string { + if x != nil { + return x.Drivers } - o := &GetClusterRequest{} - o.CopyFrom(m) - return o + return nil } -func (m *GetClusterRequest) CopyFrom(src interface{}) { +var File_api_control_proto protoreflect.FileDescriptor + +const file_api_control_proto_rawDesc = "" + + "\n" + + "\x11api/control.proto\x12\x12docker.swarmkit.v1\x1a\x0fapi/specs.proto\x1a\x11api/objects.proto\x1a\x0fapi/types.proto\x1a\x19google/protobuf/any.proto\x1a\x1cprotobuf/plugin/plugin.proto\")\n" + + "\x0eGetNodeRequest\x12\x17\n" + + "\anode_id\x18\x01 \x01(\tR\x06nodeId\"?\n" + + "\x0fGetNodeResponse\x12,\n" + + "\x04node\x18\x01 \x01(\v2\x18.docker.swarmkit.v1.NodeR\x04node\"\xf4\x04\n" + + "\x10ListNodesRequest\x12F\n" + + "\afilters\x18\x01 \x01(\v2,.docker.swarmkit.v1.ListNodesRequest.FiltersR\afilters\x1a\x97\x04\n" + + "\aFilters\x12\x14\n" + + "\x05names\x18\x01 \x03(\tR\x05names\x12\x1f\n" + + "\vid_prefixes\x18\x02 \x03(\tR\n" + + "idPrefixes\x12P\n" + + "\x06labels\x18\x03 \x03(\v28.docker.swarmkit.v1.ListNodesRequest.Filters.LabelsEntryR\x06labels\x12]\n" + + "\vnode_labels\x18\a \x03(\v2<.docker.swarmkit.v1.ListNodesRequest.Filters.NodeLabelsEntryR\n" + + "nodeLabels\x12M\n" + + "\vmemberships\x18\x04 \x03(\x0e2'.docker.swarmkit.v1.NodeSpec.MembershipB\x02\x10\x00R\vmemberships\x126\n" + + "\x05roles\x18\x05 \x03(\x0e2\x1c.docker.swarmkit.v1.NodeRoleB\x02\x10\x00R\x05roles\x12#\n" + + "\rname_prefixes\x18\x06 \x03(\tR\fnamePrefixes\x1a9\n" + + "\vLabelsEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\x1a=\n" + + "\x0fNodeLabelsEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"C\n" + + "\x11ListNodesResponse\x12.\n" + + "\x05nodes\x18\x01 \x03(\v2\x18.docker.swarmkit.v1.NodeR\x05nodes\"\x9e\x01\n" + + "\x11UpdateNodeRequest\x12\x17\n" + + "\anode_id\x18\x01 \x01(\tR\x06nodeId\x12>\n" + + "\fnode_version\x18\x02 \x01(\v2\x1b.docker.swarmkit.v1.VersionR\vnodeVersion\x120\n" + + "\x04spec\x18\x03 \x01(\v2\x1c.docker.swarmkit.v1.NodeSpecR\x04spec\"B\n" + + "\x12UpdateNodeResponse\x12,\n" + + "\x04node\x18\x01 \x01(\v2\x18.docker.swarmkit.v1.NodeR\x04node\"B\n" + + "\x11RemoveNodeRequest\x12\x17\n" + + "\anode_id\x18\x01 \x01(\tR\x06nodeId\x12\x14\n" + + "\x05force\x18\x02 \x01(\bR\x05force\"\x14\n" + + "\x12RemoveNodeResponse\")\n" + + "\x0eGetTaskRequest\x12\x17\n" + + "\atask_id\x18\x01 \x01(\tR\x06taskId\"?\n" + + "\x0fGetTaskResponse\x12,\n" + + "\x04task\x18\x01 \x01(\v2\x18.docker.swarmkit.v1.TaskR\x04task\",\n" + + "\x11RemoveTaskRequest\x12\x17\n" + + "\atask_id\x18\x01 \x01(\tR\x06taskId\"\x14\n" + + "\x12RemoveTaskResponse\"\x8f\x04\n" + + "\x10ListTasksRequest\x12F\n" + + "\afilters\x18\x01 \x01(\v2,.docker.swarmkit.v1.ListTasksRequest.FiltersR\afilters\x1a\xb2\x03\n" + + "\aFilters\x12\x14\n" + + "\x05names\x18\x01 \x03(\tR\x05names\x12\x1f\n" + + "\vid_prefixes\x18\x02 \x03(\tR\n" + + "idPrefixes\x12P\n" + + "\x06labels\x18\x03 \x03(\v28.docker.swarmkit.v1.ListTasksRequest.Filters.LabelsEntryR\x06labels\x12\x1f\n" + + "\vservice_ids\x18\x04 \x03(\tR\n" + + "serviceIds\x12\x19\n" + + "\bnode_ids\x18\x05 \x03(\tR\anodeIds\x12H\n" + + "\x0edesired_states\x18\x06 \x03(\x0e2\x1d.docker.swarmkit.v1.TaskStateB\x02\x10\x00R\rdesiredStates\x12#\n" + + "\rname_prefixes\x18\a \x03(\tR\fnamePrefixes\x12\x1a\n" + + "\bruntimes\x18\t \x03(\tR\bruntimes\x12\x1c\n" + + "\n" + + "up_to_date\x18\b \x01(\bR\bupToDate\x1a9\n" + + "\vLabelsEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"C\n" + + "\x11ListTasksResponse\x12.\n" + + "\x05tasks\x18\x01 \x03(\v2\x18.docker.swarmkit.v1.TaskR\x05tasks\"K\n" + + "\x14CreateServiceRequest\x123\n" + + "\x04spec\x18\x01 \x01(\v2\x1f.docker.swarmkit.v1.ServiceSpecR\x04spec\"N\n" + + "\x15CreateServiceResponse\x125\n" + + "\aservice\x18\x01 \x01(\v2\x1b.docker.swarmkit.v1.ServiceR\aservice\"[\n" + + "\x11GetServiceRequest\x12\x1d\n" + + "\n" + + "service_id\x18\x01 \x01(\tR\tserviceId\x12'\n" + + "\x0finsert_defaults\x18\x02 \x01(\bR\x0einsertDefaults\"K\n" + + "\x12GetServiceResponse\x125\n" + + "\aservice\x18\x01 \x01(\v2\x1b.docker.swarmkit.v1.ServiceR\aservice\"\xa3\x02\n" + + "\x14UpdateServiceRequest\x12\x1d\n" + + "\n" + + "service_id\x18\x01 \x01(\tR\tserviceId\x12D\n" + + "\x0fservice_version\x18\x02 \x01(\v2\x1b.docker.swarmkit.v1.VersionR\x0eserviceVersion\x123\n" + + "\x04spec\x18\x03 \x01(\v2\x1f.docker.swarmkit.v1.ServiceSpecR\x04spec\x12M\n" + + "\brollback\x18\x04 \x01(\x0e21.docker.swarmkit.v1.UpdateServiceRequest.RollbackR\brollback\"\"\n" + + "\bRollback\x12\b\n" + + "\x04NONE\x10\x00\x12\f\n" + + "\bPREVIOUS\x10\x01\"N\n" + + "\x15UpdateServiceResponse\x125\n" + + "\aservice\x18\x01 \x01(\v2\x1b.docker.swarmkit.v1.ServiceR\aservice\"5\n" + + "\x14RemoveServiceRequest\x12\x1d\n" + + "\n" + + "service_id\x18\x01 \x01(\tR\tserviceId\"\x17\n" + + "\x15RemoveServiceResponse\"\xf4\x02\n" + + "\x13ListServicesRequest\x12I\n" + + "\afilters\x18\x01 \x01(\v2/.docker.swarmkit.v1.ListServicesRequest.FiltersR\afilters\x1a\x91\x02\n" + + "\aFilters\x12\x14\n" + + "\x05names\x18\x01 \x03(\tR\x05names\x12\x1f\n" + + "\vid_prefixes\x18\x02 \x03(\tR\n" + + "idPrefixes\x12S\n" + + "\x06labels\x18\x03 \x03(\v2;.docker.swarmkit.v1.ListServicesRequest.Filters.LabelsEntryR\x06labels\x12#\n" + + "\rname_prefixes\x18\x04 \x03(\tR\fnamePrefixes\x12\x1a\n" + + "\bruntimes\x18\x05 \x03(\tR\bruntimes\x1a9\n" + + "\vLabelsEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"O\n" + + "\x14ListServicesResponse\x127\n" + + "\bservices\x18\x01 \x03(\v2\x1b.docker.swarmkit.v1.ServiceR\bservices\"8\n" + + "\x1aListServiceStatusesRequest\x12\x1a\n" + + "\bservices\x18\x01 \x03(\tR\bservices\"\x9c\x02\n" + + "\x1bListServiceStatusesResponse\x12Y\n" + + "\bstatuses\x18\x01 \x03(\v2=.docker.swarmkit.v1.ListServiceStatusesResponse.ServiceStatusR\bstatuses\x1a\xa1\x01\n" + + "\rServiceStatus\x12\x1d\n" + + "\n" + + "service_id\x18\x01 \x01(\tR\tserviceId\x12#\n" + + "\rdesired_tasks\x18\x02 \x01(\x04R\fdesiredTasks\x12#\n" + + "\rrunning_tasks\x18\x03 \x01(\x04R\frunningTasks\x12'\n" + + "\x0fcompleted_tasks\x18\x04 \x01(\x04R\x0ecompletedTasks\"K\n" + + "\x14CreateNetworkRequest\x123\n" + + "\x04spec\x18\x01 \x01(\v2\x1f.docker.swarmkit.v1.NetworkSpecR\x04spec\"N\n" + + "\x15CreateNetworkResponse\x125\n" + + "\anetwork\x18\x01 \x01(\v2\x1b.docker.swarmkit.v1.NetworkR\anetwork\"v\n" + + "\x11GetNetworkRequest\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12\x1d\n" + + "\n" + + "network_id\x18\x02 \x01(\tR\tnetworkId\x12.\n" + + "\aappdata\x18\x03 \x01(\v2\x14.google.protobuf.AnyR\aappdata\"K\n" + + "\x12GetNetworkResponse\x125\n" + + "\anetwork\x18\x01 \x01(\v2\x1b.docker.swarmkit.v1.NetworkR\anetwork\"I\n" + + "\x14RemoveNetworkRequest\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12\x1d\n" + + "\n" + + "network_id\x18\x02 \x01(\tR\tnetworkId\"\x17\n" + + "\x15RemoveNetworkResponse\"\x88\x03\n" + + "\x13ListNetworksRequest\x12I\n" + + "\afilters\x18\x01 \x01(\v2/.docker.swarmkit.v1.ListNetworksRequest.FiltersR\afilters\x12.\n" + + "\aappdata\x18\x02 \x01(\v2\x14.google.protobuf.AnyR\aappdata\x1a\xf5\x01\n" + + "\aFilters\x12\x14\n" + + "\x05names\x18\x01 \x03(\tR\x05names\x12\x1f\n" + + "\vid_prefixes\x18\x02 \x03(\tR\n" + + "idPrefixes\x12S\n" + + "\x06labels\x18\x03 \x03(\v2;.docker.swarmkit.v1.ListNetworksRequest.Filters.LabelsEntryR\x06labels\x12#\n" + + "\rname_prefixes\x18\x04 \x03(\tR\fnamePrefixes\x1a9\n" + + "\vLabelsEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"O\n" + + "\x14ListNetworksResponse\x127\n" + + "\bnetworks\x18\x01 \x03(\v2\x1b.docker.swarmkit.v1.NetworkR\bnetworks\"2\n" + + "\x11GetClusterRequest\x12\x1d\n" + + "\n" + + "cluster_id\x18\x01 \x01(\tR\tclusterId\"K\n" + + "\x12GetClusterResponse\x125\n" + + "\acluster\x18\x01 \x01(\v2\x1b.docker.swarmkit.v1.ClusterR\acluster\"\xd8\x02\n" + + "\x13ListClustersRequest\x12I\n" + + "\afilters\x18\x01 \x01(\v2/.docker.swarmkit.v1.ListClustersRequest.FiltersR\afilters\x1a\xf5\x01\n" + + "\aFilters\x12\x14\n" + + "\x05names\x18\x01 \x03(\tR\x05names\x12\x1f\n" + + "\vid_prefixes\x18\x02 \x03(\tR\n" + + "idPrefixes\x12S\n" + + "\x06labels\x18\x03 \x03(\v2;.docker.swarmkit.v1.ListClustersRequest.Filters.LabelsEntryR\x06labels\x12#\n" + + "\rname_prefixes\x18\x04 \x03(\tR\fnamePrefixes\x1a9\n" + + "\vLabelsEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"O\n" + + "\x14ListClustersResponse\x127\n" + + "\bclusters\x18\x01 \x03(\v2\x1b.docker.swarmkit.v1.ClusterR\bclusters\"\x95\x01\n" + + "\vKeyRotation\x12*\n" + + "\x11worker_join_token\x18\x01 \x01(\bR\x0fworkerJoinToken\x12,\n" + + "\x12manager_join_token\x18\x02 \x01(\bR\x10managerJoinToken\x12,\n" + + "\x12manager_unlock_key\x18\x03 \x01(\bR\x10managerUnlockKey\"\xed\x01\n" + + "\x14UpdateClusterRequest\x12\x1d\n" + + "\n" + + "cluster_id\x18\x01 \x01(\tR\tclusterId\x12D\n" + + "\x0fcluster_version\x18\x02 \x01(\v2\x1b.docker.swarmkit.v1.VersionR\x0eclusterVersion\x123\n" + + "\x04spec\x18\x03 \x01(\v2\x1f.docker.swarmkit.v1.ClusterSpecR\x04spec\x12;\n" + + "\brotation\x18\x04 \x01(\v2\x1f.docker.swarmkit.v1.KeyRotationR\brotation\"N\n" + + "\x15UpdateClusterResponse\x125\n" + + "\acluster\x18\x01 \x01(\v2\x1b.docker.swarmkit.v1.ClusterR\acluster\"/\n" + + "\x10GetSecretRequest\x12\x1b\n" + + "\tsecret_id\x18\x01 \x01(\tR\bsecretId\"G\n" + + "\x11GetSecretResponse\x122\n" + + "\x06secret\x18\x01 \x01(\v2\x1a.docker.swarmkit.v1.SecretR\x06secret\"\xaa\x01\n" + + "\x13UpdateSecretRequest\x12\x1b\n" + + "\tsecret_id\x18\x01 \x01(\tR\bsecretId\x12B\n" + + "\x0esecret_version\x18\x02 \x01(\v2\x1b.docker.swarmkit.v1.VersionR\rsecretVersion\x122\n" + + "\x04spec\x18\x03 \x01(\v2\x1e.docker.swarmkit.v1.SecretSpecR\x04spec\"J\n" + + "\x14UpdateSecretResponse\x122\n" + + "\x06secret\x18\x01 \x01(\v2\x1a.docker.swarmkit.v1.SecretR\x06secret\"\xd5\x02\n" + + "\x12ListSecretsRequest\x12H\n" + + "\afilters\x18\x01 \x01(\v2..docker.swarmkit.v1.ListSecretsRequest.FiltersR\afilters\x1a\xf4\x01\n" + + "\aFilters\x12\x14\n" + + "\x05names\x18\x01 \x03(\tR\x05names\x12\x1f\n" + + "\vid_prefixes\x18\x02 \x03(\tR\n" + + "idPrefixes\x12R\n" + + "\x06labels\x18\x03 \x03(\v2:.docker.swarmkit.v1.ListSecretsRequest.Filters.LabelsEntryR\x06labels\x12#\n" + + "\rname_prefixes\x18\x04 \x03(\tR\fnamePrefixes\x1a9\n" + + "\vLabelsEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"K\n" + + "\x13ListSecretsResponse\x124\n" + + "\asecrets\x18\x01 \x03(\v2\x1a.docker.swarmkit.v1.SecretR\asecrets\"I\n" + + "\x13CreateSecretRequest\x122\n" + + "\x04spec\x18\x01 \x01(\v2\x1e.docker.swarmkit.v1.SecretSpecR\x04spec\"J\n" + + "\x14CreateSecretResponse\x122\n" + + "\x06secret\x18\x01 \x01(\v2\x1a.docker.swarmkit.v1.SecretR\x06secret\"2\n" + + "\x13RemoveSecretRequest\x12\x1b\n" + + "\tsecret_id\x18\x01 \x01(\tR\bsecretId\"\x16\n" + + "\x14RemoveSecretResponse\"/\n" + + "\x10GetConfigRequest\x12\x1b\n" + + "\tconfig_id\x18\x01 \x01(\tR\bconfigId\"G\n" + + "\x11GetConfigResponse\x122\n" + + "\x06config\x18\x01 \x01(\v2\x1a.docker.swarmkit.v1.ConfigR\x06config\"\xaa\x01\n" + + "\x13UpdateConfigRequest\x12\x1b\n" + + "\tconfig_id\x18\x01 \x01(\tR\bconfigId\x12B\n" + + "\x0econfig_version\x18\x02 \x01(\v2\x1b.docker.swarmkit.v1.VersionR\rconfigVersion\x122\n" + + "\x04spec\x18\x03 \x01(\v2\x1e.docker.swarmkit.v1.ConfigSpecR\x04spec\"J\n" + + "\x14UpdateConfigResponse\x122\n" + + "\x06config\x18\x01 \x01(\v2\x1a.docker.swarmkit.v1.ConfigR\x06config\"\xd5\x02\n" + + "\x12ListConfigsRequest\x12H\n" + + "\afilters\x18\x01 \x01(\v2..docker.swarmkit.v1.ListConfigsRequest.FiltersR\afilters\x1a\xf4\x01\n" + + "\aFilters\x12\x14\n" + + "\x05names\x18\x01 \x03(\tR\x05names\x12\x1f\n" + + "\vid_prefixes\x18\x02 \x03(\tR\n" + + "idPrefixes\x12R\n" + + "\x06labels\x18\x03 \x03(\v2:.docker.swarmkit.v1.ListConfigsRequest.Filters.LabelsEntryR\x06labels\x12#\n" + + "\rname_prefixes\x18\x04 \x03(\tR\fnamePrefixes\x1a9\n" + + "\vLabelsEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"K\n" + + "\x13ListConfigsResponse\x124\n" + + "\aconfigs\x18\x01 \x03(\v2\x1a.docker.swarmkit.v1.ConfigR\aconfigs\"I\n" + + "\x13CreateConfigRequest\x122\n" + + "\x04spec\x18\x01 \x01(\v2\x1e.docker.swarmkit.v1.ConfigSpecR\x04spec\"J\n" + + "\x14CreateConfigResponse\x122\n" + + "\x06config\x18\x01 \x01(\v2\x1a.docker.swarmkit.v1.ConfigR\x06config\"2\n" + + "\x13RemoveConfigRequest\x12\x1b\n" + + "\tconfig_id\x18\x01 \x01(\tR\bconfigId\"\x16\n" + + "\x14RemoveConfigResponse\"}\n" + + "\x16CreateExtensionRequest\x12A\n" + + "\vannotations\x18\x01 \x01(\v2\x1f.docker.swarmkit.v1.AnnotationsR\vannotations\x12 \n" + + "\vdescription\x18\x02 \x01(\tR\vdescription\"V\n" + + "\x17CreateExtensionResponse\x12;\n" + + "\textension\x18\x01 \x01(\v2\x1d.docker.swarmkit.v1.ExtensionR\textension\";\n" + + "\x16RemoveExtensionRequest\x12!\n" + + "\fextension_id\x18\x01 \x01(\tR\vextensionId\"\x19\n" + + "\x17RemoveExtensionResponse\"8\n" + + "\x13GetExtensionRequest\x12!\n" + + "\fextension_id\x18\x01 \x01(\tR\vextensionId\"S\n" + + "\x14GetExtensionResponse\x12;\n" + + "\textension\x18\x01 \x01(\v2\x1d.docker.swarmkit.v1.ExtensionR\textension\"\x9e\x01\n" + + "\x15CreateResourceRequest\x12A\n" + + "\vannotations\x18\x01 \x01(\v2\x1f.docker.swarmkit.v1.AnnotationsR\vannotations\x12\x12\n" + + "\x04kind\x18\x02 \x01(\tR\x04kind\x12.\n" + + "\apayload\x18\x03 \x01(\v2\x14.google.protobuf.AnyR\apayload\"R\n" + + "\x16CreateResourceResponse\x128\n" + + "\bresource\x18\x01 \x01(\v2\x1c.docker.swarmkit.v1.ResourceR\bresource\"8\n" + + "\x15RemoveResourceRequest\x12\x1f\n" + + "\vresource_id\x18\x01 \x01(\tR\n" + + "resourceId\"\x18\n" + + "\x16RemoveResourceResponse\"\xf3\x01\n" + + "\x15UpdateResourceRequest\x12\x1f\n" + + "\vresource_id\x18\x01 \x01(\tR\n" + + "resourceId\x12F\n" + + "\x10resource_version\x18\x02 \x01(\v2\x1b.docker.swarmkit.v1.VersionR\x0fresourceVersion\x12A\n" + + "\vannotations\x18\x03 \x01(\v2\x1f.docker.swarmkit.v1.AnnotationsR\vannotations\x12.\n" + + "\apayload\x18\x04 \x01(\v2\x14.google.protobuf.AnyR\apayload\"R\n" + + "\x16UpdateResourceResponse\x128\n" + + "\bresource\x18\x01 \x01(\v2\x1c.docker.swarmkit.v1.ResourceR\bresource\"5\n" + + "\x12GetResourceRequest\x12\x1f\n" + + "\vresource_id\x18\x01 \x01(\tR\n" + + "resourceId\"O\n" + + "\x13GetResourceResponse\x128\n" + + "\bresource\x18\x01 \x01(\v2\x1c.docker.swarmkit.v1.ResourceR\bresource\"\xef\x02\n" + + "\x14ListResourcesRequest\x12J\n" + + "\afilters\x18\x01 \x01(\v20.docker.swarmkit.v1.ListResourcesRequest.FiltersR\afilters\x1a\x8a\x02\n" + + "\aFilters\x12\x14\n" + + "\x05names\x18\x01 \x03(\tR\x05names\x12\x1f\n" + + "\vid_prefixes\x18\x02 \x03(\tR\n" + + "idPrefixes\x12T\n" + + "\x06labels\x18\x03 \x03(\v2<.docker.swarmkit.v1.ListResourcesRequest.Filters.LabelsEntryR\x06labels\x12#\n" + + "\rname_prefixes\x18\x04 \x03(\tR\fnamePrefixes\x12\x12\n" + + "\x04kind\x18\x05 \x01(\tR\x04kind\x1a9\n" + + "\vLabelsEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"S\n" + + "\x15ListResourcesResponse\x12:\n" + + "\tresources\x18\x01 \x03(\v2\x1c.docker.swarmkit.v1.ResourceR\tresources\"I\n" + + "\x13CreateVolumeRequest\x122\n" + + "\x04spec\x18\x01 \x01(\v2\x1e.docker.swarmkit.v1.VolumeSpecR\x04spec\"J\n" + + "\x14CreateVolumeResponse\x122\n" + + "\x06volume\x18\x01 \x01(\v2\x1a.docker.swarmkit.v1.VolumeR\x06volume\"/\n" + + "\x10GetVolumeRequest\x12\x1b\n" + + "\tvolume_id\x18\x01 \x01(\tR\bvolumeId\"G\n" + + "\x11GetVolumeResponse\x122\n" + + "\x06volume\x18\x01 \x01(\v2\x1a.docker.swarmkit.v1.VolumeR\x06volume\"\xaa\x01\n" + + "\x13UpdateVolumeRequest\x12\x1b\n" + + "\tvolume_id\x18\x01 \x01(\tR\bvolumeId\x12B\n" + + "\x0evolume_version\x18\x02 \x01(\v2\x1b.docker.swarmkit.v1.VersionR\rvolumeVersion\x122\n" + + "\x04spec\x18\x03 \x01(\v2\x1e.docker.swarmkit.v1.VolumeSpecR\x04spec\"J\n" + + "\x14UpdateVolumeResponse\x122\n" + + "\x06volume\x18\x01 \x01(\v2\x1a.docker.swarmkit.v1.VolumeR\x06volume\"\x87\x03\n" + + "\x12ListVolumesRequest\x12H\n" + + "\afilters\x18\x01 \x01(\v2..docker.swarmkit.v1.ListVolumesRequest.FiltersR\afilters\x1a\xa6\x02\n" + + "\aFilters\x12\x14\n" + + "\x05names\x18\x01 \x03(\tR\x05names\x12\x1f\n" + + "\vid_prefixes\x18\x02 \x03(\tR\n" + + "idPrefixes\x12R\n" + + "\x06labels\x18\x03 \x03(\v2:.docker.swarmkit.v1.ListVolumesRequest.Filters.LabelsEntryR\x06labels\x12#\n" + + "\rname_prefixes\x18\x04 \x03(\tR\fnamePrefixes\x12\x16\n" + + "\x06groups\x18\x05 \x03(\tR\x06groups\x12\x18\n" + + "\adrivers\x18\x06 \x03(\tR\adrivers\x1a9\n" + + "\vLabelsEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"K\n" + + "\x13ListVolumesResponse\x124\n" + + "\avolumes\x18\x01 \x03(\v2\x1a.docker.swarmkit.v1.VolumeR\avolumes\"H\n" + + "\x13RemoveVolumeRequest\x12\x1b\n" + + "\tvolume_id\x18\x01 \x01(\tR\bvolumeId\x12\x14\n" + + "\x05force\x18\x02 \x01(\bR\x05force\"\x16\n" + + "\x14RemoveVolumeResponse2\xdd(\n" + + "\aControl\x12i\n" + + "\aGetNode\x12\".docker.swarmkit.v1.GetNodeRequest\x1a#.docker.swarmkit.v1.GetNodeResponse\"\x15ʮ\xee\x98\x02\x0f\n" + + "\rswarm-manager\x12o\n" + + "\tListNodes\x12$.docker.swarmkit.v1.ListNodesRequest\x1a%.docker.swarmkit.v1.ListNodesResponse\"\x15ʮ\xee\x98\x02\x0f\n" + + "\rswarm-manager\x12r\n" + + "\n" + + "UpdateNode\x12%.docker.swarmkit.v1.UpdateNodeRequest\x1a&.docker.swarmkit.v1.UpdateNodeResponse\"\x15ʮ\xee\x98\x02\x0f\n" + + "\rswarm-manager\x12r\n" + + "\n" + + "RemoveNode\x12%.docker.swarmkit.v1.RemoveNodeRequest\x1a&.docker.swarmkit.v1.RemoveNodeResponse\"\x15ʮ\xee\x98\x02\x0f\n" + + "\rswarm-manager\x12i\n" + + "\aGetTask\x12\".docker.swarmkit.v1.GetTaskRequest\x1a#.docker.swarmkit.v1.GetTaskResponse\"\x15ʮ\xee\x98\x02\x0f\n" + + "\rswarm-manager\x12o\n" + + "\tListTasks\x12$.docker.swarmkit.v1.ListTasksRequest\x1a%.docker.swarmkit.v1.ListTasksResponse\"\x15ʮ\xee\x98\x02\x0f\n" + + "\rswarm-manager\x12r\n" + + "\n" + + "RemoveTask\x12%.docker.swarmkit.v1.RemoveTaskRequest\x1a&.docker.swarmkit.v1.RemoveTaskResponse\"\x15ʮ\xee\x98\x02\x0f\n" + + "\rswarm-manager\x12r\n" + + "\n" + + "GetService\x12%.docker.swarmkit.v1.GetServiceRequest\x1a&.docker.swarmkit.v1.GetServiceResponse\"\x15ʮ\xee\x98\x02\x0f\n" + + "\rswarm-manager\x12x\n" + + "\fListServices\x12'.docker.swarmkit.v1.ListServicesRequest\x1a(.docker.swarmkit.v1.ListServicesResponse\"\x15ʮ\xee\x98\x02\x0f\n" + + "\rswarm-manager\x12{\n" + + "\rCreateService\x12(.docker.swarmkit.v1.CreateServiceRequest\x1a).docker.swarmkit.v1.CreateServiceResponse\"\x15ʮ\xee\x98\x02\x0f\n" + + "\rswarm-manager\x12{\n" + + "\rUpdateService\x12(.docker.swarmkit.v1.UpdateServiceRequest\x1a).docker.swarmkit.v1.UpdateServiceResponse\"\x15ʮ\xee\x98\x02\x0f\n" + + "\rswarm-manager\x12{\n" + + "\rRemoveService\x12(.docker.swarmkit.v1.RemoveServiceRequest\x1a).docker.swarmkit.v1.RemoveServiceResponse\"\x15ʮ\xee\x98\x02\x0f\n" + + "\rswarm-manager\x12\x8d\x01\n" + + "\x13ListServiceStatuses\x12..docker.swarmkit.v1.ListServiceStatusesRequest\x1a/.docker.swarmkit.v1.ListServiceStatusesResponse\"\x15ʮ\xee\x98\x02\x0f\n" + + "\rswarm-manager\x12r\n" + + "\n" + + "GetNetwork\x12%.docker.swarmkit.v1.GetNetworkRequest\x1a&.docker.swarmkit.v1.GetNetworkResponse\"\x15ʮ\xee\x98\x02\x0f\n" + + "\rswarm-manager\x12x\n" + + "\fListNetworks\x12'.docker.swarmkit.v1.ListNetworksRequest\x1a(.docker.swarmkit.v1.ListNetworksResponse\"\x15ʮ\xee\x98\x02\x0f\n" + + "\rswarm-manager\x12{\n" + + "\rCreateNetwork\x12(.docker.swarmkit.v1.CreateNetworkRequest\x1a).docker.swarmkit.v1.CreateNetworkResponse\"\x15ʮ\xee\x98\x02\x0f\n" + + "\rswarm-manager\x12{\n" + + "\rRemoveNetwork\x12(.docker.swarmkit.v1.RemoveNetworkRequest\x1a).docker.swarmkit.v1.RemoveNetworkResponse\"\x15ʮ\xee\x98\x02\x0f\n" + + "\rswarm-manager\x12r\n" + + "\n" + + "GetCluster\x12%.docker.swarmkit.v1.GetClusterRequest\x1a&.docker.swarmkit.v1.GetClusterResponse\"\x15ʮ\xee\x98\x02\x0f\n" + + "\rswarm-manager\x12x\n" + + "\fListClusters\x12'.docker.swarmkit.v1.ListClustersRequest\x1a(.docker.swarmkit.v1.ListClustersResponse\"\x15ʮ\xee\x98\x02\x0f\n" + + "\rswarm-manager\x12{\n" + + "\rUpdateCluster\x12(.docker.swarmkit.v1.UpdateClusterRequest\x1a).docker.swarmkit.v1.UpdateClusterResponse\"\x15ʮ\xee\x98\x02\x0f\n" + + "\rswarm-manager\x12o\n" + + "\tGetSecret\x12$.docker.swarmkit.v1.GetSecretRequest\x1a%.docker.swarmkit.v1.GetSecretResponse\"\x15ʮ\xee\x98\x02\x0f\n" + + "\rswarm-manager\x12x\n" + + "\fUpdateSecret\x12'.docker.swarmkit.v1.UpdateSecretRequest\x1a(.docker.swarmkit.v1.UpdateSecretResponse\"\x15ʮ\xee\x98\x02\x0f\n" + + "\rswarm-manager\x12u\n" + + "\vListSecrets\x12&.docker.swarmkit.v1.ListSecretsRequest\x1a'.docker.swarmkit.v1.ListSecretsResponse\"\x15ʮ\xee\x98\x02\x0f\n" + + "\rswarm-manager\x12x\n" + + "\fCreateSecret\x12'.docker.swarmkit.v1.CreateSecretRequest\x1a(.docker.swarmkit.v1.CreateSecretResponse\"\x15ʮ\xee\x98\x02\x0f\n" + + "\rswarm-manager\x12x\n" + + "\fRemoveSecret\x12'.docker.swarmkit.v1.RemoveSecretRequest\x1a(.docker.swarmkit.v1.RemoveSecretResponse\"\x15ʮ\xee\x98\x02\x0f\n" + + "\rswarm-manager\x12o\n" + + "\tGetConfig\x12$.docker.swarmkit.v1.GetConfigRequest\x1a%.docker.swarmkit.v1.GetConfigResponse\"\x15ʮ\xee\x98\x02\x0f\n" + + "\rswarm-manager\x12x\n" + + "\fUpdateConfig\x12'.docker.swarmkit.v1.UpdateConfigRequest\x1a(.docker.swarmkit.v1.UpdateConfigResponse\"\x15ʮ\xee\x98\x02\x0f\n" + + "\rswarm-manager\x12u\n" + + "\vListConfigs\x12&.docker.swarmkit.v1.ListConfigsRequest\x1a'.docker.swarmkit.v1.ListConfigsResponse\"\x15ʮ\xee\x98\x02\x0f\n" + + "\rswarm-manager\x12x\n" + + "\fCreateConfig\x12'.docker.swarmkit.v1.CreateConfigRequest\x1a(.docker.swarmkit.v1.CreateConfigResponse\"\x15ʮ\xee\x98\x02\x0f\n" + + "\rswarm-manager\x12x\n" + + "\fRemoveConfig\x12'.docker.swarmkit.v1.RemoveConfigRequest\x1a(.docker.swarmkit.v1.RemoveConfigResponse\"\x15ʮ\xee\x98\x02\x0f\n" + + "\rswarm-manager\x12x\n" + + "\fGetExtension\x12'.docker.swarmkit.v1.GetExtensionRequest\x1a(.docker.swarmkit.v1.GetExtensionResponse\"\x15ʮ\xee\x98\x02\x0f\n" + + "\rswarm-manager\x12\x81\x01\n" + + "\x0fCreateExtension\x12*.docker.swarmkit.v1.CreateExtensionRequest\x1a+.docker.swarmkit.v1.CreateExtensionResponse\"\x15ʮ\xee\x98\x02\x0f\n" + + "\rswarm-manager\x12\x81\x01\n" + + "\x0fRemoveExtension\x12*.docker.swarmkit.v1.RemoveExtensionRequest\x1a+.docker.swarmkit.v1.RemoveExtensionResponse\"\x15ʮ\xee\x98\x02\x0f\n" + + "\rswarm-manager\x12u\n" + + "\vGetResource\x12&.docker.swarmkit.v1.GetResourceRequest\x1a'.docker.swarmkit.v1.GetResourceResponse\"\x15ʮ\xee\x98\x02\x0f\n" + + "\rswarm-manager\x12~\n" + + "\x0eUpdateResource\x12).docker.swarmkit.v1.UpdateResourceRequest\x1a*.docker.swarmkit.v1.UpdateResourceResponse\"\x15ʮ\xee\x98\x02\x0f\n" + + "\rswarm-manager\x12{\n" + + "\rListResources\x12(.docker.swarmkit.v1.ListResourcesRequest\x1a).docker.swarmkit.v1.ListResourcesResponse\"\x15ʮ\xee\x98\x02\x0f\n" + + "\rswarm-manager\x12~\n" + + "\x0eCreateResource\x12).docker.swarmkit.v1.CreateResourceRequest\x1a*.docker.swarmkit.v1.CreateResourceResponse\"\x15ʮ\xee\x98\x02\x0f\n" + + "\rswarm-manager\x12~\n" + + "\x0eRemoveResource\x12).docker.swarmkit.v1.RemoveResourceRequest\x1a*.docker.swarmkit.v1.RemoveResourceResponse\"\x15ʮ\xee\x98\x02\x0f\n" + + "\rswarm-manager\x12x\n" + + "\fCreateVolume\x12'.docker.swarmkit.v1.CreateVolumeRequest\x1a(.docker.swarmkit.v1.CreateVolumeResponse\"\x15ʮ\xee\x98\x02\x0f\n" + + "\rswarm-manager\x12o\n" + + "\tGetVolume\x12$.docker.swarmkit.v1.GetVolumeRequest\x1a%.docker.swarmkit.v1.GetVolumeResponse\"\x15ʮ\xee\x98\x02\x0f\n" + + "\rswarm-manager\x12x\n" + + "\fUpdateVolume\x12'.docker.swarmkit.v1.UpdateVolumeRequest\x1a(.docker.swarmkit.v1.UpdateVolumeResponse\"\x15ʮ\xee\x98\x02\x0f\n" + + "\rswarm-manager\x12u\n" + + "\vListVolumes\x12&.docker.swarmkit.v1.ListVolumesRequest\x1a'.docker.swarmkit.v1.ListVolumesResponse\"\x15ʮ\xee\x98\x02\x0f\n" + + "\rswarm-manager\x12x\n" + + "\fRemoveVolume\x12'.docker.swarmkit.v1.RemoveVolumeRequest\x1a(.docker.swarmkit.v1.RemoveVolumeResponse\"\x15ʮ\xee\x98\x02\x0f\n" + + "\rswarm-managerB!Z\x1fgithub.com/moby/swarmkit/v2/apib\x06proto3" - o := src.(*GetClusterRequest) - *m = *o -} +var ( + file_api_control_proto_rawDescOnce sync.Once + file_api_control_proto_rawDescData []byte +) -func (m *GetClusterResponse) Copy() *GetClusterResponse { - if m == nil { - return nil - } - o := &GetClusterResponse{} - o.CopyFrom(m) - return o +func file_api_control_proto_rawDescGZIP() []byte { + file_api_control_proto_rawDescOnce.Do(func() { + file_api_control_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_api_control_proto_rawDesc), len(file_api_control_proto_rawDesc))) + }) + return file_api_control_proto_rawDescData +} + +var file_api_control_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_api_control_proto_msgTypes = make([]protoimpl.MessageInfo, 107) +var file_api_control_proto_goTypes = []any{ + (UpdateServiceRequest_Rollback)(0), // 0: docker.swarmkit.v1.UpdateServiceRequest.Rollback + (*GetNodeRequest)(nil), // 1: docker.swarmkit.v1.GetNodeRequest + (*GetNodeResponse)(nil), // 2: docker.swarmkit.v1.GetNodeResponse + (*ListNodesRequest)(nil), // 3: docker.swarmkit.v1.ListNodesRequest + (*ListNodesResponse)(nil), // 4: docker.swarmkit.v1.ListNodesResponse + (*UpdateNodeRequest)(nil), // 5: docker.swarmkit.v1.UpdateNodeRequest + (*UpdateNodeResponse)(nil), // 6: docker.swarmkit.v1.UpdateNodeResponse + (*RemoveNodeRequest)(nil), // 7: docker.swarmkit.v1.RemoveNodeRequest + (*RemoveNodeResponse)(nil), // 8: docker.swarmkit.v1.RemoveNodeResponse + (*GetTaskRequest)(nil), // 9: docker.swarmkit.v1.GetTaskRequest + (*GetTaskResponse)(nil), // 10: docker.swarmkit.v1.GetTaskResponse + (*RemoveTaskRequest)(nil), // 11: docker.swarmkit.v1.RemoveTaskRequest + (*RemoveTaskResponse)(nil), // 12: docker.swarmkit.v1.RemoveTaskResponse + (*ListTasksRequest)(nil), // 13: docker.swarmkit.v1.ListTasksRequest + (*ListTasksResponse)(nil), // 14: docker.swarmkit.v1.ListTasksResponse + (*CreateServiceRequest)(nil), // 15: docker.swarmkit.v1.CreateServiceRequest + (*CreateServiceResponse)(nil), // 16: docker.swarmkit.v1.CreateServiceResponse + (*GetServiceRequest)(nil), // 17: docker.swarmkit.v1.GetServiceRequest + (*GetServiceResponse)(nil), // 18: docker.swarmkit.v1.GetServiceResponse + (*UpdateServiceRequest)(nil), // 19: docker.swarmkit.v1.UpdateServiceRequest + (*UpdateServiceResponse)(nil), // 20: docker.swarmkit.v1.UpdateServiceResponse + (*RemoveServiceRequest)(nil), // 21: docker.swarmkit.v1.RemoveServiceRequest + (*RemoveServiceResponse)(nil), // 22: docker.swarmkit.v1.RemoveServiceResponse + (*ListServicesRequest)(nil), // 23: docker.swarmkit.v1.ListServicesRequest + (*ListServicesResponse)(nil), // 24: docker.swarmkit.v1.ListServicesResponse + (*ListServiceStatusesRequest)(nil), // 25: docker.swarmkit.v1.ListServiceStatusesRequest + (*ListServiceStatusesResponse)(nil), // 26: docker.swarmkit.v1.ListServiceStatusesResponse + (*CreateNetworkRequest)(nil), // 27: docker.swarmkit.v1.CreateNetworkRequest + (*CreateNetworkResponse)(nil), // 28: docker.swarmkit.v1.CreateNetworkResponse + (*GetNetworkRequest)(nil), // 29: docker.swarmkit.v1.GetNetworkRequest + (*GetNetworkResponse)(nil), // 30: docker.swarmkit.v1.GetNetworkResponse + (*RemoveNetworkRequest)(nil), // 31: docker.swarmkit.v1.RemoveNetworkRequest + (*RemoveNetworkResponse)(nil), // 32: docker.swarmkit.v1.RemoveNetworkResponse + (*ListNetworksRequest)(nil), // 33: docker.swarmkit.v1.ListNetworksRequest + (*ListNetworksResponse)(nil), // 34: docker.swarmkit.v1.ListNetworksResponse + (*GetClusterRequest)(nil), // 35: docker.swarmkit.v1.GetClusterRequest + (*GetClusterResponse)(nil), // 36: docker.swarmkit.v1.GetClusterResponse + (*ListClustersRequest)(nil), // 37: docker.swarmkit.v1.ListClustersRequest + (*ListClustersResponse)(nil), // 38: docker.swarmkit.v1.ListClustersResponse + (*KeyRotation)(nil), // 39: docker.swarmkit.v1.KeyRotation + (*UpdateClusterRequest)(nil), // 40: docker.swarmkit.v1.UpdateClusterRequest + (*UpdateClusterResponse)(nil), // 41: docker.swarmkit.v1.UpdateClusterResponse + (*GetSecretRequest)(nil), // 42: docker.swarmkit.v1.GetSecretRequest + (*GetSecretResponse)(nil), // 43: docker.swarmkit.v1.GetSecretResponse + (*UpdateSecretRequest)(nil), // 44: docker.swarmkit.v1.UpdateSecretRequest + (*UpdateSecretResponse)(nil), // 45: docker.swarmkit.v1.UpdateSecretResponse + (*ListSecretsRequest)(nil), // 46: docker.swarmkit.v1.ListSecretsRequest + (*ListSecretsResponse)(nil), // 47: docker.swarmkit.v1.ListSecretsResponse + (*CreateSecretRequest)(nil), // 48: docker.swarmkit.v1.CreateSecretRequest + (*CreateSecretResponse)(nil), // 49: docker.swarmkit.v1.CreateSecretResponse + (*RemoveSecretRequest)(nil), // 50: docker.swarmkit.v1.RemoveSecretRequest + (*RemoveSecretResponse)(nil), // 51: docker.swarmkit.v1.RemoveSecretResponse + (*GetConfigRequest)(nil), // 52: docker.swarmkit.v1.GetConfigRequest + (*GetConfigResponse)(nil), // 53: docker.swarmkit.v1.GetConfigResponse + (*UpdateConfigRequest)(nil), // 54: docker.swarmkit.v1.UpdateConfigRequest + (*UpdateConfigResponse)(nil), // 55: docker.swarmkit.v1.UpdateConfigResponse + (*ListConfigsRequest)(nil), // 56: docker.swarmkit.v1.ListConfigsRequest + (*ListConfigsResponse)(nil), // 57: docker.swarmkit.v1.ListConfigsResponse + (*CreateConfigRequest)(nil), // 58: docker.swarmkit.v1.CreateConfigRequest + (*CreateConfigResponse)(nil), // 59: docker.swarmkit.v1.CreateConfigResponse + (*RemoveConfigRequest)(nil), // 60: docker.swarmkit.v1.RemoveConfigRequest + (*RemoveConfigResponse)(nil), // 61: docker.swarmkit.v1.RemoveConfigResponse + (*CreateExtensionRequest)(nil), // 62: docker.swarmkit.v1.CreateExtensionRequest + (*CreateExtensionResponse)(nil), // 63: docker.swarmkit.v1.CreateExtensionResponse + (*RemoveExtensionRequest)(nil), // 64: docker.swarmkit.v1.RemoveExtensionRequest + (*RemoveExtensionResponse)(nil), // 65: docker.swarmkit.v1.RemoveExtensionResponse + (*GetExtensionRequest)(nil), // 66: docker.swarmkit.v1.GetExtensionRequest + (*GetExtensionResponse)(nil), // 67: docker.swarmkit.v1.GetExtensionResponse + (*CreateResourceRequest)(nil), // 68: docker.swarmkit.v1.CreateResourceRequest + (*CreateResourceResponse)(nil), // 69: docker.swarmkit.v1.CreateResourceResponse + (*RemoveResourceRequest)(nil), // 70: docker.swarmkit.v1.RemoveResourceRequest + (*RemoveResourceResponse)(nil), // 71: docker.swarmkit.v1.RemoveResourceResponse + (*UpdateResourceRequest)(nil), // 72: docker.swarmkit.v1.UpdateResourceRequest + (*UpdateResourceResponse)(nil), // 73: docker.swarmkit.v1.UpdateResourceResponse + (*GetResourceRequest)(nil), // 74: docker.swarmkit.v1.GetResourceRequest + (*GetResourceResponse)(nil), // 75: docker.swarmkit.v1.GetResourceResponse + (*ListResourcesRequest)(nil), // 76: docker.swarmkit.v1.ListResourcesRequest + (*ListResourcesResponse)(nil), // 77: docker.swarmkit.v1.ListResourcesResponse + (*CreateVolumeRequest)(nil), // 78: docker.swarmkit.v1.CreateVolumeRequest + (*CreateVolumeResponse)(nil), // 79: docker.swarmkit.v1.CreateVolumeResponse + (*GetVolumeRequest)(nil), // 80: docker.swarmkit.v1.GetVolumeRequest + (*GetVolumeResponse)(nil), // 81: docker.swarmkit.v1.GetVolumeResponse + (*UpdateVolumeRequest)(nil), // 82: docker.swarmkit.v1.UpdateVolumeRequest + (*UpdateVolumeResponse)(nil), // 83: docker.swarmkit.v1.UpdateVolumeResponse + (*ListVolumesRequest)(nil), // 84: docker.swarmkit.v1.ListVolumesRequest + (*ListVolumesResponse)(nil), // 85: docker.swarmkit.v1.ListVolumesResponse + (*RemoveVolumeRequest)(nil), // 86: docker.swarmkit.v1.RemoveVolumeRequest + (*RemoveVolumeResponse)(nil), // 87: docker.swarmkit.v1.RemoveVolumeResponse + (*ListNodesRequest_Filters)(nil), // 88: docker.swarmkit.v1.ListNodesRequest.Filters + nil, // 89: docker.swarmkit.v1.ListNodesRequest.Filters.LabelsEntry + nil, // 90: docker.swarmkit.v1.ListNodesRequest.Filters.NodeLabelsEntry + (*ListTasksRequest_Filters)(nil), // 91: docker.swarmkit.v1.ListTasksRequest.Filters + nil, // 92: docker.swarmkit.v1.ListTasksRequest.Filters.LabelsEntry + (*ListServicesRequest_Filters)(nil), // 93: docker.swarmkit.v1.ListServicesRequest.Filters + nil, // 94: docker.swarmkit.v1.ListServicesRequest.Filters.LabelsEntry + (*ListServiceStatusesResponse_ServiceStatus)(nil), // 95: docker.swarmkit.v1.ListServiceStatusesResponse.ServiceStatus + (*ListNetworksRequest_Filters)(nil), // 96: docker.swarmkit.v1.ListNetworksRequest.Filters + nil, // 97: docker.swarmkit.v1.ListNetworksRequest.Filters.LabelsEntry + (*ListClustersRequest_Filters)(nil), // 98: docker.swarmkit.v1.ListClustersRequest.Filters + nil, // 99: docker.swarmkit.v1.ListClustersRequest.Filters.LabelsEntry + (*ListSecretsRequest_Filters)(nil), // 100: docker.swarmkit.v1.ListSecretsRequest.Filters + nil, // 101: docker.swarmkit.v1.ListSecretsRequest.Filters.LabelsEntry + (*ListConfigsRequest_Filters)(nil), // 102: docker.swarmkit.v1.ListConfigsRequest.Filters + nil, // 103: docker.swarmkit.v1.ListConfigsRequest.Filters.LabelsEntry + (*ListResourcesRequest_Filters)(nil), // 104: docker.swarmkit.v1.ListResourcesRequest.Filters + nil, // 105: docker.swarmkit.v1.ListResourcesRequest.Filters.LabelsEntry + (*ListVolumesRequest_Filters)(nil), // 106: docker.swarmkit.v1.ListVolumesRequest.Filters + nil, // 107: docker.swarmkit.v1.ListVolumesRequest.Filters.LabelsEntry + (*Node)(nil), // 108: docker.swarmkit.v1.Node + (*Version)(nil), // 109: docker.swarmkit.v1.Version + (*NodeSpec)(nil), // 110: docker.swarmkit.v1.NodeSpec + (*Task)(nil), // 111: docker.swarmkit.v1.Task + (*ServiceSpec)(nil), // 112: docker.swarmkit.v1.ServiceSpec + (*Service)(nil), // 113: docker.swarmkit.v1.Service + (*NetworkSpec)(nil), // 114: docker.swarmkit.v1.NetworkSpec + (*Network)(nil), // 115: docker.swarmkit.v1.Network + (*anypb.Any)(nil), // 116: google.protobuf.Any + (*Cluster)(nil), // 117: docker.swarmkit.v1.Cluster + (*ClusterSpec)(nil), // 118: docker.swarmkit.v1.ClusterSpec + (*Secret)(nil), // 119: docker.swarmkit.v1.Secret + (*SecretSpec)(nil), // 120: docker.swarmkit.v1.SecretSpec + (*Config)(nil), // 121: docker.swarmkit.v1.Config + (*ConfigSpec)(nil), // 122: docker.swarmkit.v1.ConfigSpec + (*Annotations)(nil), // 123: docker.swarmkit.v1.Annotations + (*Extension)(nil), // 124: docker.swarmkit.v1.Extension + (*Resource)(nil), // 125: docker.swarmkit.v1.Resource + (*VolumeSpec)(nil), // 126: docker.swarmkit.v1.VolumeSpec + (*Volume)(nil), // 127: docker.swarmkit.v1.Volume + (NodeSpec_Membership)(0), // 128: docker.swarmkit.v1.NodeSpec.Membership + (NodeRole)(0), // 129: docker.swarmkit.v1.NodeRole + (TaskState)(0), // 130: docker.swarmkit.v1.TaskState +} +var file_api_control_proto_depIdxs = []int32{ + 108, // 0: docker.swarmkit.v1.GetNodeResponse.node:type_name -> docker.swarmkit.v1.Node + 88, // 1: docker.swarmkit.v1.ListNodesRequest.filters:type_name -> docker.swarmkit.v1.ListNodesRequest.Filters + 108, // 2: docker.swarmkit.v1.ListNodesResponse.nodes:type_name -> docker.swarmkit.v1.Node + 109, // 3: docker.swarmkit.v1.UpdateNodeRequest.node_version:type_name -> docker.swarmkit.v1.Version + 110, // 4: docker.swarmkit.v1.UpdateNodeRequest.spec:type_name -> docker.swarmkit.v1.NodeSpec + 108, // 5: docker.swarmkit.v1.UpdateNodeResponse.node:type_name -> docker.swarmkit.v1.Node + 111, // 6: docker.swarmkit.v1.GetTaskResponse.task:type_name -> docker.swarmkit.v1.Task + 91, // 7: docker.swarmkit.v1.ListTasksRequest.filters:type_name -> docker.swarmkit.v1.ListTasksRequest.Filters + 111, // 8: docker.swarmkit.v1.ListTasksResponse.tasks:type_name -> docker.swarmkit.v1.Task + 112, // 9: docker.swarmkit.v1.CreateServiceRequest.spec:type_name -> docker.swarmkit.v1.ServiceSpec + 113, // 10: docker.swarmkit.v1.CreateServiceResponse.service:type_name -> docker.swarmkit.v1.Service + 113, // 11: docker.swarmkit.v1.GetServiceResponse.service:type_name -> docker.swarmkit.v1.Service + 109, // 12: docker.swarmkit.v1.UpdateServiceRequest.service_version:type_name -> docker.swarmkit.v1.Version + 112, // 13: docker.swarmkit.v1.UpdateServiceRequest.spec:type_name -> docker.swarmkit.v1.ServiceSpec + 0, // 14: docker.swarmkit.v1.UpdateServiceRequest.rollback:type_name -> docker.swarmkit.v1.UpdateServiceRequest.Rollback + 113, // 15: docker.swarmkit.v1.UpdateServiceResponse.service:type_name -> docker.swarmkit.v1.Service + 93, // 16: docker.swarmkit.v1.ListServicesRequest.filters:type_name -> docker.swarmkit.v1.ListServicesRequest.Filters + 113, // 17: docker.swarmkit.v1.ListServicesResponse.services:type_name -> docker.swarmkit.v1.Service + 95, // 18: docker.swarmkit.v1.ListServiceStatusesResponse.statuses:type_name -> docker.swarmkit.v1.ListServiceStatusesResponse.ServiceStatus + 114, // 19: docker.swarmkit.v1.CreateNetworkRequest.spec:type_name -> docker.swarmkit.v1.NetworkSpec + 115, // 20: docker.swarmkit.v1.CreateNetworkResponse.network:type_name -> docker.swarmkit.v1.Network + 116, // 21: docker.swarmkit.v1.GetNetworkRequest.appdata:type_name -> google.protobuf.Any + 115, // 22: docker.swarmkit.v1.GetNetworkResponse.network:type_name -> docker.swarmkit.v1.Network + 96, // 23: docker.swarmkit.v1.ListNetworksRequest.filters:type_name -> docker.swarmkit.v1.ListNetworksRequest.Filters + 116, // 24: docker.swarmkit.v1.ListNetworksRequest.appdata:type_name -> google.protobuf.Any + 115, // 25: docker.swarmkit.v1.ListNetworksResponse.networks:type_name -> docker.swarmkit.v1.Network + 117, // 26: docker.swarmkit.v1.GetClusterResponse.cluster:type_name -> docker.swarmkit.v1.Cluster + 98, // 27: docker.swarmkit.v1.ListClustersRequest.filters:type_name -> docker.swarmkit.v1.ListClustersRequest.Filters + 117, // 28: docker.swarmkit.v1.ListClustersResponse.clusters:type_name -> docker.swarmkit.v1.Cluster + 109, // 29: docker.swarmkit.v1.UpdateClusterRequest.cluster_version:type_name -> docker.swarmkit.v1.Version + 118, // 30: docker.swarmkit.v1.UpdateClusterRequest.spec:type_name -> docker.swarmkit.v1.ClusterSpec + 39, // 31: docker.swarmkit.v1.UpdateClusterRequest.rotation:type_name -> docker.swarmkit.v1.KeyRotation + 117, // 32: docker.swarmkit.v1.UpdateClusterResponse.cluster:type_name -> docker.swarmkit.v1.Cluster + 119, // 33: docker.swarmkit.v1.GetSecretResponse.secret:type_name -> docker.swarmkit.v1.Secret + 109, // 34: docker.swarmkit.v1.UpdateSecretRequest.secret_version:type_name -> docker.swarmkit.v1.Version + 120, // 35: docker.swarmkit.v1.UpdateSecretRequest.spec:type_name -> docker.swarmkit.v1.SecretSpec + 119, // 36: docker.swarmkit.v1.UpdateSecretResponse.secret:type_name -> docker.swarmkit.v1.Secret + 100, // 37: docker.swarmkit.v1.ListSecretsRequest.filters:type_name -> docker.swarmkit.v1.ListSecretsRequest.Filters + 119, // 38: docker.swarmkit.v1.ListSecretsResponse.secrets:type_name -> docker.swarmkit.v1.Secret + 120, // 39: docker.swarmkit.v1.CreateSecretRequest.spec:type_name -> docker.swarmkit.v1.SecretSpec + 119, // 40: docker.swarmkit.v1.CreateSecretResponse.secret:type_name -> docker.swarmkit.v1.Secret + 121, // 41: docker.swarmkit.v1.GetConfigResponse.config:type_name -> docker.swarmkit.v1.Config + 109, // 42: docker.swarmkit.v1.UpdateConfigRequest.config_version:type_name -> docker.swarmkit.v1.Version + 122, // 43: docker.swarmkit.v1.UpdateConfigRequest.spec:type_name -> docker.swarmkit.v1.ConfigSpec + 121, // 44: docker.swarmkit.v1.UpdateConfigResponse.config:type_name -> docker.swarmkit.v1.Config + 102, // 45: docker.swarmkit.v1.ListConfigsRequest.filters:type_name -> docker.swarmkit.v1.ListConfigsRequest.Filters + 121, // 46: docker.swarmkit.v1.ListConfigsResponse.configs:type_name -> docker.swarmkit.v1.Config + 122, // 47: docker.swarmkit.v1.CreateConfigRequest.spec:type_name -> docker.swarmkit.v1.ConfigSpec + 121, // 48: docker.swarmkit.v1.CreateConfigResponse.config:type_name -> docker.swarmkit.v1.Config + 123, // 49: docker.swarmkit.v1.CreateExtensionRequest.annotations:type_name -> docker.swarmkit.v1.Annotations + 124, // 50: docker.swarmkit.v1.CreateExtensionResponse.extension:type_name -> docker.swarmkit.v1.Extension + 124, // 51: docker.swarmkit.v1.GetExtensionResponse.extension:type_name -> docker.swarmkit.v1.Extension + 123, // 52: docker.swarmkit.v1.CreateResourceRequest.annotations:type_name -> docker.swarmkit.v1.Annotations + 116, // 53: docker.swarmkit.v1.CreateResourceRequest.payload:type_name -> google.protobuf.Any + 125, // 54: docker.swarmkit.v1.CreateResourceResponse.resource:type_name -> docker.swarmkit.v1.Resource + 109, // 55: docker.swarmkit.v1.UpdateResourceRequest.resource_version:type_name -> docker.swarmkit.v1.Version + 123, // 56: docker.swarmkit.v1.UpdateResourceRequest.annotations:type_name -> docker.swarmkit.v1.Annotations + 116, // 57: docker.swarmkit.v1.UpdateResourceRequest.payload:type_name -> google.protobuf.Any + 125, // 58: docker.swarmkit.v1.UpdateResourceResponse.resource:type_name -> docker.swarmkit.v1.Resource + 125, // 59: docker.swarmkit.v1.GetResourceResponse.resource:type_name -> docker.swarmkit.v1.Resource + 104, // 60: docker.swarmkit.v1.ListResourcesRequest.filters:type_name -> docker.swarmkit.v1.ListResourcesRequest.Filters + 125, // 61: docker.swarmkit.v1.ListResourcesResponse.resources:type_name -> docker.swarmkit.v1.Resource + 126, // 62: docker.swarmkit.v1.CreateVolumeRequest.spec:type_name -> docker.swarmkit.v1.VolumeSpec + 127, // 63: docker.swarmkit.v1.CreateVolumeResponse.volume:type_name -> docker.swarmkit.v1.Volume + 127, // 64: docker.swarmkit.v1.GetVolumeResponse.volume:type_name -> docker.swarmkit.v1.Volume + 109, // 65: docker.swarmkit.v1.UpdateVolumeRequest.volume_version:type_name -> docker.swarmkit.v1.Version + 126, // 66: docker.swarmkit.v1.UpdateVolumeRequest.spec:type_name -> docker.swarmkit.v1.VolumeSpec + 127, // 67: docker.swarmkit.v1.UpdateVolumeResponse.volume:type_name -> docker.swarmkit.v1.Volume + 106, // 68: docker.swarmkit.v1.ListVolumesRequest.filters:type_name -> docker.swarmkit.v1.ListVolumesRequest.Filters + 127, // 69: docker.swarmkit.v1.ListVolumesResponse.volumes:type_name -> docker.swarmkit.v1.Volume + 89, // 70: docker.swarmkit.v1.ListNodesRequest.Filters.labels:type_name -> docker.swarmkit.v1.ListNodesRequest.Filters.LabelsEntry + 90, // 71: docker.swarmkit.v1.ListNodesRequest.Filters.node_labels:type_name -> docker.swarmkit.v1.ListNodesRequest.Filters.NodeLabelsEntry + 128, // 72: docker.swarmkit.v1.ListNodesRequest.Filters.memberships:type_name -> docker.swarmkit.v1.NodeSpec.Membership + 129, // 73: docker.swarmkit.v1.ListNodesRequest.Filters.roles:type_name -> docker.swarmkit.v1.NodeRole + 92, // 74: docker.swarmkit.v1.ListTasksRequest.Filters.labels:type_name -> docker.swarmkit.v1.ListTasksRequest.Filters.LabelsEntry + 130, // 75: docker.swarmkit.v1.ListTasksRequest.Filters.desired_states:type_name -> docker.swarmkit.v1.TaskState + 94, // 76: docker.swarmkit.v1.ListServicesRequest.Filters.labels:type_name -> docker.swarmkit.v1.ListServicesRequest.Filters.LabelsEntry + 97, // 77: docker.swarmkit.v1.ListNetworksRequest.Filters.labels:type_name -> docker.swarmkit.v1.ListNetworksRequest.Filters.LabelsEntry + 99, // 78: docker.swarmkit.v1.ListClustersRequest.Filters.labels:type_name -> docker.swarmkit.v1.ListClustersRequest.Filters.LabelsEntry + 101, // 79: docker.swarmkit.v1.ListSecretsRequest.Filters.labels:type_name -> docker.swarmkit.v1.ListSecretsRequest.Filters.LabelsEntry + 103, // 80: docker.swarmkit.v1.ListConfigsRequest.Filters.labels:type_name -> docker.swarmkit.v1.ListConfigsRequest.Filters.LabelsEntry + 105, // 81: docker.swarmkit.v1.ListResourcesRequest.Filters.labels:type_name -> docker.swarmkit.v1.ListResourcesRequest.Filters.LabelsEntry + 107, // 82: docker.swarmkit.v1.ListVolumesRequest.Filters.labels:type_name -> docker.swarmkit.v1.ListVolumesRequest.Filters.LabelsEntry + 1, // 83: docker.swarmkit.v1.Control.GetNode:input_type -> docker.swarmkit.v1.GetNodeRequest + 3, // 84: docker.swarmkit.v1.Control.ListNodes:input_type -> docker.swarmkit.v1.ListNodesRequest + 5, // 85: docker.swarmkit.v1.Control.UpdateNode:input_type -> docker.swarmkit.v1.UpdateNodeRequest + 7, // 86: docker.swarmkit.v1.Control.RemoveNode:input_type -> docker.swarmkit.v1.RemoveNodeRequest + 9, // 87: docker.swarmkit.v1.Control.GetTask:input_type -> docker.swarmkit.v1.GetTaskRequest + 13, // 88: docker.swarmkit.v1.Control.ListTasks:input_type -> docker.swarmkit.v1.ListTasksRequest + 11, // 89: docker.swarmkit.v1.Control.RemoveTask:input_type -> docker.swarmkit.v1.RemoveTaskRequest + 17, // 90: docker.swarmkit.v1.Control.GetService:input_type -> docker.swarmkit.v1.GetServiceRequest + 23, // 91: docker.swarmkit.v1.Control.ListServices:input_type -> docker.swarmkit.v1.ListServicesRequest + 15, // 92: docker.swarmkit.v1.Control.CreateService:input_type -> docker.swarmkit.v1.CreateServiceRequest + 19, // 93: docker.swarmkit.v1.Control.UpdateService:input_type -> docker.swarmkit.v1.UpdateServiceRequest + 21, // 94: docker.swarmkit.v1.Control.RemoveService:input_type -> docker.swarmkit.v1.RemoveServiceRequest + 25, // 95: docker.swarmkit.v1.Control.ListServiceStatuses:input_type -> docker.swarmkit.v1.ListServiceStatusesRequest + 29, // 96: docker.swarmkit.v1.Control.GetNetwork:input_type -> docker.swarmkit.v1.GetNetworkRequest + 33, // 97: docker.swarmkit.v1.Control.ListNetworks:input_type -> docker.swarmkit.v1.ListNetworksRequest + 27, // 98: docker.swarmkit.v1.Control.CreateNetwork:input_type -> docker.swarmkit.v1.CreateNetworkRequest + 31, // 99: docker.swarmkit.v1.Control.RemoveNetwork:input_type -> docker.swarmkit.v1.RemoveNetworkRequest + 35, // 100: docker.swarmkit.v1.Control.GetCluster:input_type -> docker.swarmkit.v1.GetClusterRequest + 37, // 101: docker.swarmkit.v1.Control.ListClusters:input_type -> docker.swarmkit.v1.ListClustersRequest + 40, // 102: docker.swarmkit.v1.Control.UpdateCluster:input_type -> docker.swarmkit.v1.UpdateClusterRequest + 42, // 103: docker.swarmkit.v1.Control.GetSecret:input_type -> docker.swarmkit.v1.GetSecretRequest + 44, // 104: docker.swarmkit.v1.Control.UpdateSecret:input_type -> docker.swarmkit.v1.UpdateSecretRequest + 46, // 105: docker.swarmkit.v1.Control.ListSecrets:input_type -> docker.swarmkit.v1.ListSecretsRequest + 48, // 106: docker.swarmkit.v1.Control.CreateSecret:input_type -> docker.swarmkit.v1.CreateSecretRequest + 50, // 107: docker.swarmkit.v1.Control.RemoveSecret:input_type -> docker.swarmkit.v1.RemoveSecretRequest + 52, // 108: docker.swarmkit.v1.Control.GetConfig:input_type -> docker.swarmkit.v1.GetConfigRequest + 54, // 109: docker.swarmkit.v1.Control.UpdateConfig:input_type -> docker.swarmkit.v1.UpdateConfigRequest + 56, // 110: docker.swarmkit.v1.Control.ListConfigs:input_type -> docker.swarmkit.v1.ListConfigsRequest + 58, // 111: docker.swarmkit.v1.Control.CreateConfig:input_type -> docker.swarmkit.v1.CreateConfigRequest + 60, // 112: docker.swarmkit.v1.Control.RemoveConfig:input_type -> docker.swarmkit.v1.RemoveConfigRequest + 66, // 113: docker.swarmkit.v1.Control.GetExtension:input_type -> docker.swarmkit.v1.GetExtensionRequest + 62, // 114: docker.swarmkit.v1.Control.CreateExtension:input_type -> docker.swarmkit.v1.CreateExtensionRequest + 64, // 115: docker.swarmkit.v1.Control.RemoveExtension:input_type -> docker.swarmkit.v1.RemoveExtensionRequest + 74, // 116: docker.swarmkit.v1.Control.GetResource:input_type -> docker.swarmkit.v1.GetResourceRequest + 72, // 117: docker.swarmkit.v1.Control.UpdateResource:input_type -> docker.swarmkit.v1.UpdateResourceRequest + 76, // 118: docker.swarmkit.v1.Control.ListResources:input_type -> docker.swarmkit.v1.ListResourcesRequest + 68, // 119: docker.swarmkit.v1.Control.CreateResource:input_type -> docker.swarmkit.v1.CreateResourceRequest + 70, // 120: docker.swarmkit.v1.Control.RemoveResource:input_type -> docker.swarmkit.v1.RemoveResourceRequest + 78, // 121: docker.swarmkit.v1.Control.CreateVolume:input_type -> docker.swarmkit.v1.CreateVolumeRequest + 80, // 122: docker.swarmkit.v1.Control.GetVolume:input_type -> docker.swarmkit.v1.GetVolumeRequest + 82, // 123: docker.swarmkit.v1.Control.UpdateVolume:input_type -> docker.swarmkit.v1.UpdateVolumeRequest + 84, // 124: docker.swarmkit.v1.Control.ListVolumes:input_type -> docker.swarmkit.v1.ListVolumesRequest + 86, // 125: docker.swarmkit.v1.Control.RemoveVolume:input_type -> docker.swarmkit.v1.RemoveVolumeRequest + 2, // 126: docker.swarmkit.v1.Control.GetNode:output_type -> docker.swarmkit.v1.GetNodeResponse + 4, // 127: docker.swarmkit.v1.Control.ListNodes:output_type -> docker.swarmkit.v1.ListNodesResponse + 6, // 128: docker.swarmkit.v1.Control.UpdateNode:output_type -> docker.swarmkit.v1.UpdateNodeResponse + 8, // 129: docker.swarmkit.v1.Control.RemoveNode:output_type -> docker.swarmkit.v1.RemoveNodeResponse + 10, // 130: docker.swarmkit.v1.Control.GetTask:output_type -> docker.swarmkit.v1.GetTaskResponse + 14, // 131: docker.swarmkit.v1.Control.ListTasks:output_type -> docker.swarmkit.v1.ListTasksResponse + 12, // 132: docker.swarmkit.v1.Control.RemoveTask:output_type -> docker.swarmkit.v1.RemoveTaskResponse + 18, // 133: docker.swarmkit.v1.Control.GetService:output_type -> docker.swarmkit.v1.GetServiceResponse + 24, // 134: docker.swarmkit.v1.Control.ListServices:output_type -> docker.swarmkit.v1.ListServicesResponse + 16, // 135: docker.swarmkit.v1.Control.CreateService:output_type -> docker.swarmkit.v1.CreateServiceResponse + 20, // 136: docker.swarmkit.v1.Control.UpdateService:output_type -> docker.swarmkit.v1.UpdateServiceResponse + 22, // 137: docker.swarmkit.v1.Control.RemoveService:output_type -> docker.swarmkit.v1.RemoveServiceResponse + 26, // 138: docker.swarmkit.v1.Control.ListServiceStatuses:output_type -> docker.swarmkit.v1.ListServiceStatusesResponse + 30, // 139: docker.swarmkit.v1.Control.GetNetwork:output_type -> docker.swarmkit.v1.GetNetworkResponse + 34, // 140: docker.swarmkit.v1.Control.ListNetworks:output_type -> docker.swarmkit.v1.ListNetworksResponse + 28, // 141: docker.swarmkit.v1.Control.CreateNetwork:output_type -> docker.swarmkit.v1.CreateNetworkResponse + 32, // 142: docker.swarmkit.v1.Control.RemoveNetwork:output_type -> docker.swarmkit.v1.RemoveNetworkResponse + 36, // 143: docker.swarmkit.v1.Control.GetCluster:output_type -> docker.swarmkit.v1.GetClusterResponse + 38, // 144: docker.swarmkit.v1.Control.ListClusters:output_type -> docker.swarmkit.v1.ListClustersResponse + 41, // 145: docker.swarmkit.v1.Control.UpdateCluster:output_type -> docker.swarmkit.v1.UpdateClusterResponse + 43, // 146: docker.swarmkit.v1.Control.GetSecret:output_type -> docker.swarmkit.v1.GetSecretResponse + 45, // 147: docker.swarmkit.v1.Control.UpdateSecret:output_type -> docker.swarmkit.v1.UpdateSecretResponse + 47, // 148: docker.swarmkit.v1.Control.ListSecrets:output_type -> docker.swarmkit.v1.ListSecretsResponse + 49, // 149: docker.swarmkit.v1.Control.CreateSecret:output_type -> docker.swarmkit.v1.CreateSecretResponse + 51, // 150: docker.swarmkit.v1.Control.RemoveSecret:output_type -> docker.swarmkit.v1.RemoveSecretResponse + 53, // 151: docker.swarmkit.v1.Control.GetConfig:output_type -> docker.swarmkit.v1.GetConfigResponse + 55, // 152: docker.swarmkit.v1.Control.UpdateConfig:output_type -> docker.swarmkit.v1.UpdateConfigResponse + 57, // 153: docker.swarmkit.v1.Control.ListConfigs:output_type -> docker.swarmkit.v1.ListConfigsResponse + 59, // 154: docker.swarmkit.v1.Control.CreateConfig:output_type -> docker.swarmkit.v1.CreateConfigResponse + 61, // 155: docker.swarmkit.v1.Control.RemoveConfig:output_type -> docker.swarmkit.v1.RemoveConfigResponse + 67, // 156: docker.swarmkit.v1.Control.GetExtension:output_type -> docker.swarmkit.v1.GetExtensionResponse + 63, // 157: docker.swarmkit.v1.Control.CreateExtension:output_type -> docker.swarmkit.v1.CreateExtensionResponse + 65, // 158: docker.swarmkit.v1.Control.RemoveExtension:output_type -> docker.swarmkit.v1.RemoveExtensionResponse + 75, // 159: docker.swarmkit.v1.Control.GetResource:output_type -> docker.swarmkit.v1.GetResourceResponse + 73, // 160: docker.swarmkit.v1.Control.UpdateResource:output_type -> docker.swarmkit.v1.UpdateResourceResponse + 77, // 161: docker.swarmkit.v1.Control.ListResources:output_type -> docker.swarmkit.v1.ListResourcesResponse + 69, // 162: docker.swarmkit.v1.Control.CreateResource:output_type -> docker.swarmkit.v1.CreateResourceResponse + 71, // 163: docker.swarmkit.v1.Control.RemoveResource:output_type -> docker.swarmkit.v1.RemoveResourceResponse + 79, // 164: docker.swarmkit.v1.Control.CreateVolume:output_type -> docker.swarmkit.v1.CreateVolumeResponse + 81, // 165: docker.swarmkit.v1.Control.GetVolume:output_type -> docker.swarmkit.v1.GetVolumeResponse + 83, // 166: docker.swarmkit.v1.Control.UpdateVolume:output_type -> docker.swarmkit.v1.UpdateVolumeResponse + 85, // 167: docker.swarmkit.v1.Control.ListVolumes:output_type -> docker.swarmkit.v1.ListVolumesResponse + 87, // 168: docker.swarmkit.v1.Control.RemoveVolume:output_type -> docker.swarmkit.v1.RemoveVolumeResponse + 126, // [126:169] is the sub-list for method output_type + 83, // [83:126] is the sub-list for method input_type + 83, // [83:83] is the sub-list for extension type_name + 83, // [83:83] is the sub-list for extension extendee + 0, // [0:83] is the sub-list for field type_name +} + +func init() { file_api_control_proto_init() } +func file_api_control_proto_init() { + if File_api_control_proto != nil { + return + } + file_api_specs_proto_init() + file_api_objects_proto_init() + file_api_types_proto_init() + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_api_control_proto_rawDesc), len(file_api_control_proto_rawDesc)), + NumEnums: 1, + NumMessages: 107, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_api_control_proto_goTypes, + DependencyIndexes: file_api_control_proto_depIdxs, + EnumInfos: file_api_control_proto_enumTypes, + MessageInfos: file_api_control_proto_msgTypes, + }.Build() + File_api_control_proto = out.File + file_api_control_proto_goTypes = nil + file_api_control_proto_depIdxs = nil } - -func (m *GetClusterResponse) CopyFrom(src interface{}) { - - o := src.(*GetClusterResponse) - *m = *o - if o.Cluster != nil { - m.Cluster = &Cluster{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Cluster, o.Cluster) - } -} - -func (m *ListClustersRequest) Copy() *ListClustersRequest { - if m == nil { - return nil - } - o := &ListClustersRequest{} - o.CopyFrom(m) - return o -} - -func (m *ListClustersRequest) CopyFrom(src interface{}) { - - o := src.(*ListClustersRequest) - *m = *o - if o.Filters != nil { - m.Filters = &ListClustersRequest_Filters{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Filters, o.Filters) - } -} - -func (m *ListClustersRequest_Filters) Copy() *ListClustersRequest_Filters { - if m == nil { - return nil - } - o := &ListClustersRequest_Filters{} - o.CopyFrom(m) - return o -} - -func (m *ListClustersRequest_Filters) CopyFrom(src interface{}) { - - o := src.(*ListClustersRequest_Filters) - *m = *o - if o.Names != nil { - m.Names = make([]string, len(o.Names)) - copy(m.Names, o.Names) - } - - if o.IDPrefixes != nil { - m.IDPrefixes = make([]string, len(o.IDPrefixes)) - copy(m.IDPrefixes, o.IDPrefixes) - } - - if o.Labels != nil { - m.Labels = make(map[string]string, len(o.Labels)) - for k, v := range o.Labels { - m.Labels[k] = v - } - } - - if o.NamePrefixes != nil { - m.NamePrefixes = make([]string, len(o.NamePrefixes)) - copy(m.NamePrefixes, o.NamePrefixes) - } - -} - -func (m *ListClustersResponse) Copy() *ListClustersResponse { - if m == nil { - return nil - } - o := &ListClustersResponse{} - o.CopyFrom(m) - return o -} - -func (m *ListClustersResponse) CopyFrom(src interface{}) { - - o := src.(*ListClustersResponse) - *m = *o - if o.Clusters != nil { - m.Clusters = make([]*Cluster, len(o.Clusters)) - for i := range m.Clusters { - m.Clusters[i] = &Cluster{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Clusters[i], o.Clusters[i]) - } - } - -} - -func (m *KeyRotation) Copy() *KeyRotation { - if m == nil { - return nil - } - o := &KeyRotation{} - o.CopyFrom(m) - return o -} - -func (m *KeyRotation) CopyFrom(src interface{}) { - - o := src.(*KeyRotation) - *m = *o -} - -func (m *UpdateClusterRequest) Copy() *UpdateClusterRequest { - if m == nil { - return nil - } - o := &UpdateClusterRequest{} - o.CopyFrom(m) - return o -} - -func (m *UpdateClusterRequest) CopyFrom(src interface{}) { - - o := src.(*UpdateClusterRequest) - *m = *o - if o.ClusterVersion != nil { - m.ClusterVersion = &Version{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.ClusterVersion, o.ClusterVersion) - } - if o.Spec != nil { - m.Spec = &ClusterSpec{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Spec, o.Spec) - } - github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Rotation, &o.Rotation) -} - -func (m *UpdateClusterResponse) Copy() *UpdateClusterResponse { - if m == nil { - return nil - } - o := &UpdateClusterResponse{} - o.CopyFrom(m) - return o -} - -func (m *UpdateClusterResponse) CopyFrom(src interface{}) { - - o := src.(*UpdateClusterResponse) - *m = *o - if o.Cluster != nil { - m.Cluster = &Cluster{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Cluster, o.Cluster) - } -} - -func (m *GetSecretRequest) Copy() *GetSecretRequest { - if m == nil { - return nil - } - o := &GetSecretRequest{} - o.CopyFrom(m) - return o -} - -func (m *GetSecretRequest) CopyFrom(src interface{}) { - - o := src.(*GetSecretRequest) - *m = *o -} - -func (m *GetSecretResponse) Copy() *GetSecretResponse { - if m == nil { - return nil - } - o := &GetSecretResponse{} - o.CopyFrom(m) - return o -} - -func (m *GetSecretResponse) CopyFrom(src interface{}) { - - o := src.(*GetSecretResponse) - *m = *o - if o.Secret != nil { - m.Secret = &Secret{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Secret, o.Secret) - } -} - -func (m *UpdateSecretRequest) Copy() *UpdateSecretRequest { - if m == nil { - return nil - } - o := &UpdateSecretRequest{} - o.CopyFrom(m) - return o -} - -func (m *UpdateSecretRequest) CopyFrom(src interface{}) { - - o := src.(*UpdateSecretRequest) - *m = *o - if o.SecretVersion != nil { - m.SecretVersion = &Version{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.SecretVersion, o.SecretVersion) - } - if o.Spec != nil { - m.Spec = &SecretSpec{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Spec, o.Spec) - } -} - -func (m *UpdateSecretResponse) Copy() *UpdateSecretResponse { - if m == nil { - return nil - } - o := &UpdateSecretResponse{} - o.CopyFrom(m) - return o -} - -func (m *UpdateSecretResponse) CopyFrom(src interface{}) { - - o := src.(*UpdateSecretResponse) - *m = *o - if o.Secret != nil { - m.Secret = &Secret{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Secret, o.Secret) - } -} - -func (m *ListSecretsRequest) Copy() *ListSecretsRequest { - if m == nil { - return nil - } - o := &ListSecretsRequest{} - o.CopyFrom(m) - return o -} - -func (m *ListSecretsRequest) CopyFrom(src interface{}) { - - o := src.(*ListSecretsRequest) - *m = *o - if o.Filters != nil { - m.Filters = &ListSecretsRequest_Filters{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Filters, o.Filters) - } -} - -func (m *ListSecretsRequest_Filters) Copy() *ListSecretsRequest_Filters { - if m == nil { - return nil - } - o := &ListSecretsRequest_Filters{} - o.CopyFrom(m) - return o -} - -func (m *ListSecretsRequest_Filters) CopyFrom(src interface{}) { - - o := src.(*ListSecretsRequest_Filters) - *m = *o - if o.Names != nil { - m.Names = make([]string, len(o.Names)) - copy(m.Names, o.Names) - } - - if o.IDPrefixes != nil { - m.IDPrefixes = make([]string, len(o.IDPrefixes)) - copy(m.IDPrefixes, o.IDPrefixes) - } - - if o.Labels != nil { - m.Labels = make(map[string]string, len(o.Labels)) - for k, v := range o.Labels { - m.Labels[k] = v - } - } - - if o.NamePrefixes != nil { - m.NamePrefixes = make([]string, len(o.NamePrefixes)) - copy(m.NamePrefixes, o.NamePrefixes) - } - -} - -func (m *ListSecretsResponse) Copy() *ListSecretsResponse { - if m == nil { - return nil - } - o := &ListSecretsResponse{} - o.CopyFrom(m) - return o -} - -func (m *ListSecretsResponse) CopyFrom(src interface{}) { - - o := src.(*ListSecretsResponse) - *m = *o - if o.Secrets != nil { - m.Secrets = make([]*Secret, len(o.Secrets)) - for i := range m.Secrets { - m.Secrets[i] = &Secret{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Secrets[i], o.Secrets[i]) - } - } - -} - -func (m *CreateSecretRequest) Copy() *CreateSecretRequest { - if m == nil { - return nil - } - o := &CreateSecretRequest{} - o.CopyFrom(m) - return o -} - -func (m *CreateSecretRequest) CopyFrom(src interface{}) { - - o := src.(*CreateSecretRequest) - *m = *o - if o.Spec != nil { - m.Spec = &SecretSpec{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Spec, o.Spec) - } -} - -func (m *CreateSecretResponse) Copy() *CreateSecretResponse { - if m == nil { - return nil - } - o := &CreateSecretResponse{} - o.CopyFrom(m) - return o -} - -func (m *CreateSecretResponse) CopyFrom(src interface{}) { - - o := src.(*CreateSecretResponse) - *m = *o - if o.Secret != nil { - m.Secret = &Secret{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Secret, o.Secret) - } -} - -func (m *RemoveSecretRequest) Copy() *RemoveSecretRequest { - if m == nil { - return nil - } - o := &RemoveSecretRequest{} - o.CopyFrom(m) - return o -} - -func (m *RemoveSecretRequest) CopyFrom(src interface{}) { - - o := src.(*RemoveSecretRequest) - *m = *o -} - -func (m *RemoveSecretResponse) Copy() *RemoveSecretResponse { - if m == nil { - return nil - } - o := &RemoveSecretResponse{} - o.CopyFrom(m) - return o -} - -func (m *RemoveSecretResponse) CopyFrom(src interface{}) {} -func (m *GetConfigRequest) Copy() *GetConfigRequest { - if m == nil { - return nil - } - o := &GetConfigRequest{} - o.CopyFrom(m) - return o -} - -func (m *GetConfigRequest) CopyFrom(src interface{}) { - - o := src.(*GetConfigRequest) - *m = *o -} - -func (m *GetConfigResponse) Copy() *GetConfigResponse { - if m == nil { - return nil - } - o := &GetConfigResponse{} - o.CopyFrom(m) - return o -} - -func (m *GetConfigResponse) CopyFrom(src interface{}) { - - o := src.(*GetConfigResponse) - *m = *o - if o.Config != nil { - m.Config = &Config{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Config, o.Config) - } -} - -func (m *UpdateConfigRequest) Copy() *UpdateConfigRequest { - if m == nil { - return nil - } - o := &UpdateConfigRequest{} - o.CopyFrom(m) - return o -} - -func (m *UpdateConfigRequest) CopyFrom(src interface{}) { - - o := src.(*UpdateConfigRequest) - *m = *o - if o.ConfigVersion != nil { - m.ConfigVersion = &Version{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.ConfigVersion, o.ConfigVersion) - } - if o.Spec != nil { - m.Spec = &ConfigSpec{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Spec, o.Spec) - } -} - -func (m *UpdateConfigResponse) Copy() *UpdateConfigResponse { - if m == nil { - return nil - } - o := &UpdateConfigResponse{} - o.CopyFrom(m) - return o -} - -func (m *UpdateConfigResponse) CopyFrom(src interface{}) { - - o := src.(*UpdateConfigResponse) - *m = *o - if o.Config != nil { - m.Config = &Config{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Config, o.Config) - } -} - -func (m *ListConfigsRequest) Copy() *ListConfigsRequest { - if m == nil { - return nil - } - o := &ListConfigsRequest{} - o.CopyFrom(m) - return o -} - -func (m *ListConfigsRequest) CopyFrom(src interface{}) { - - o := src.(*ListConfigsRequest) - *m = *o - if o.Filters != nil { - m.Filters = &ListConfigsRequest_Filters{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Filters, o.Filters) - } -} - -func (m *ListConfigsRequest_Filters) Copy() *ListConfigsRequest_Filters { - if m == nil { - return nil - } - o := &ListConfigsRequest_Filters{} - o.CopyFrom(m) - return o -} - -func (m *ListConfigsRequest_Filters) CopyFrom(src interface{}) { - - o := src.(*ListConfigsRequest_Filters) - *m = *o - if o.Names != nil { - m.Names = make([]string, len(o.Names)) - copy(m.Names, o.Names) - } - - if o.IDPrefixes != nil { - m.IDPrefixes = make([]string, len(o.IDPrefixes)) - copy(m.IDPrefixes, o.IDPrefixes) - } - - if o.Labels != nil { - m.Labels = make(map[string]string, len(o.Labels)) - for k, v := range o.Labels { - m.Labels[k] = v - } - } - - if o.NamePrefixes != nil { - m.NamePrefixes = make([]string, len(o.NamePrefixes)) - copy(m.NamePrefixes, o.NamePrefixes) - } - -} - -func (m *ListConfigsResponse) Copy() *ListConfigsResponse { - if m == nil { - return nil - } - o := &ListConfigsResponse{} - o.CopyFrom(m) - return o -} - -func (m *ListConfigsResponse) CopyFrom(src interface{}) { - - o := src.(*ListConfigsResponse) - *m = *o - if o.Configs != nil { - m.Configs = make([]*Config, len(o.Configs)) - for i := range m.Configs { - m.Configs[i] = &Config{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Configs[i], o.Configs[i]) - } - } - -} - -func (m *CreateConfigRequest) Copy() *CreateConfigRequest { - if m == nil { - return nil - } - o := &CreateConfigRequest{} - o.CopyFrom(m) - return o -} - -func (m *CreateConfigRequest) CopyFrom(src interface{}) { - - o := src.(*CreateConfigRequest) - *m = *o - if o.Spec != nil { - m.Spec = &ConfigSpec{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Spec, o.Spec) - } -} - -func (m *CreateConfigResponse) Copy() *CreateConfigResponse { - if m == nil { - return nil - } - o := &CreateConfigResponse{} - o.CopyFrom(m) - return o -} - -func (m *CreateConfigResponse) CopyFrom(src interface{}) { - - o := src.(*CreateConfigResponse) - *m = *o - if o.Config != nil { - m.Config = &Config{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Config, o.Config) - } -} - -func (m *RemoveConfigRequest) Copy() *RemoveConfigRequest { - if m == nil { - return nil - } - o := &RemoveConfigRequest{} - o.CopyFrom(m) - return o -} - -func (m *RemoveConfigRequest) CopyFrom(src interface{}) { - - o := src.(*RemoveConfigRequest) - *m = *o -} - -func (m *RemoveConfigResponse) Copy() *RemoveConfigResponse { - if m == nil { - return nil - } - o := &RemoveConfigResponse{} - o.CopyFrom(m) - return o -} - -func (m *RemoveConfigResponse) CopyFrom(src interface{}) {} -func (m *CreateExtensionRequest) Copy() *CreateExtensionRequest { - if m == nil { - return nil - } - o := &CreateExtensionRequest{} - o.CopyFrom(m) - return o -} - -func (m *CreateExtensionRequest) CopyFrom(src interface{}) { - - o := src.(*CreateExtensionRequest) - *m = *o - if o.Annotations != nil { - m.Annotations = &Annotations{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Annotations, o.Annotations) - } -} - -func (m *CreateExtensionResponse) Copy() *CreateExtensionResponse { - if m == nil { - return nil - } - o := &CreateExtensionResponse{} - o.CopyFrom(m) - return o -} - -func (m *CreateExtensionResponse) CopyFrom(src interface{}) { - - o := src.(*CreateExtensionResponse) - *m = *o - if o.Extension != nil { - m.Extension = &Extension{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Extension, o.Extension) - } -} - -func (m *RemoveExtensionRequest) Copy() *RemoveExtensionRequest { - if m == nil { - return nil - } - o := &RemoveExtensionRequest{} - o.CopyFrom(m) - return o -} - -func (m *RemoveExtensionRequest) CopyFrom(src interface{}) { - - o := src.(*RemoveExtensionRequest) - *m = *o -} - -func (m *RemoveExtensionResponse) Copy() *RemoveExtensionResponse { - if m == nil { - return nil - } - o := &RemoveExtensionResponse{} - o.CopyFrom(m) - return o -} - -func (m *RemoveExtensionResponse) CopyFrom(src interface{}) {} -func (m *GetExtensionRequest) Copy() *GetExtensionRequest { - if m == nil { - return nil - } - o := &GetExtensionRequest{} - o.CopyFrom(m) - return o -} - -func (m *GetExtensionRequest) CopyFrom(src interface{}) { - - o := src.(*GetExtensionRequest) - *m = *o -} - -func (m *GetExtensionResponse) Copy() *GetExtensionResponse { - if m == nil { - return nil - } - o := &GetExtensionResponse{} - o.CopyFrom(m) - return o -} - -func (m *GetExtensionResponse) CopyFrom(src interface{}) { - - o := src.(*GetExtensionResponse) - *m = *o - if o.Extension != nil { - m.Extension = &Extension{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Extension, o.Extension) - } -} - -func (m *CreateResourceRequest) Copy() *CreateResourceRequest { - if m == nil { - return nil - } - o := &CreateResourceRequest{} - o.CopyFrom(m) - return o -} - -func (m *CreateResourceRequest) CopyFrom(src interface{}) { - - o := src.(*CreateResourceRequest) - *m = *o - if o.Annotations != nil { - m.Annotations = &Annotations{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Annotations, o.Annotations) - } - if o.Payload != nil { - m.Payload = &types.Any{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Payload, o.Payload) - } -} - -func (m *CreateResourceResponse) Copy() *CreateResourceResponse { - if m == nil { - return nil - } - o := &CreateResourceResponse{} - o.CopyFrom(m) - return o -} - -func (m *CreateResourceResponse) CopyFrom(src interface{}) { - - o := src.(*CreateResourceResponse) - *m = *o - if o.Resource != nil { - m.Resource = &Resource{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Resource, o.Resource) - } -} - -func (m *RemoveResourceRequest) Copy() *RemoveResourceRequest { - if m == nil { - return nil - } - o := &RemoveResourceRequest{} - o.CopyFrom(m) - return o -} - -func (m *RemoveResourceRequest) CopyFrom(src interface{}) { - - o := src.(*RemoveResourceRequest) - *m = *o -} - -func (m *RemoveResourceResponse) Copy() *RemoveResourceResponse { - if m == nil { - return nil - } - o := &RemoveResourceResponse{} - o.CopyFrom(m) - return o -} - -func (m *RemoveResourceResponse) CopyFrom(src interface{}) {} -func (m *UpdateResourceRequest) Copy() *UpdateResourceRequest { - if m == nil { - return nil - } - o := &UpdateResourceRequest{} - o.CopyFrom(m) - return o -} - -func (m *UpdateResourceRequest) CopyFrom(src interface{}) { - - o := src.(*UpdateResourceRequest) - *m = *o - if o.ResourceVersion != nil { - m.ResourceVersion = &Version{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.ResourceVersion, o.ResourceVersion) - } - if o.Annotations != nil { - m.Annotations = &Annotations{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Annotations, o.Annotations) - } - if o.Payload != nil { - m.Payload = &types.Any{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Payload, o.Payload) - } -} - -func (m *UpdateResourceResponse) Copy() *UpdateResourceResponse { - if m == nil { - return nil - } - o := &UpdateResourceResponse{} - o.CopyFrom(m) - return o -} - -func (m *UpdateResourceResponse) CopyFrom(src interface{}) { - - o := src.(*UpdateResourceResponse) - *m = *o - if o.Resource != nil { - m.Resource = &Resource{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Resource, o.Resource) - } -} - -func (m *GetResourceRequest) Copy() *GetResourceRequest { - if m == nil { - return nil - } - o := &GetResourceRequest{} - o.CopyFrom(m) - return o -} - -func (m *GetResourceRequest) CopyFrom(src interface{}) { - - o := src.(*GetResourceRequest) - *m = *o -} - -func (m *GetResourceResponse) Copy() *GetResourceResponse { - if m == nil { - return nil - } - o := &GetResourceResponse{} - o.CopyFrom(m) - return o -} - -func (m *GetResourceResponse) CopyFrom(src interface{}) { - - o := src.(*GetResourceResponse) - *m = *o - if o.Resource != nil { - m.Resource = &Resource{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Resource, o.Resource) - } -} - -func (m *ListResourcesRequest) Copy() *ListResourcesRequest { - if m == nil { - return nil - } - o := &ListResourcesRequest{} - o.CopyFrom(m) - return o -} - -func (m *ListResourcesRequest) CopyFrom(src interface{}) { - - o := src.(*ListResourcesRequest) - *m = *o - if o.Filters != nil { - m.Filters = &ListResourcesRequest_Filters{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Filters, o.Filters) - } -} - -func (m *ListResourcesRequest_Filters) Copy() *ListResourcesRequest_Filters { - if m == nil { - return nil - } - o := &ListResourcesRequest_Filters{} - o.CopyFrom(m) - return o -} - -func (m *ListResourcesRequest_Filters) CopyFrom(src interface{}) { - - o := src.(*ListResourcesRequest_Filters) - *m = *o - if o.Names != nil { - m.Names = make([]string, len(o.Names)) - copy(m.Names, o.Names) - } - - if o.IDPrefixes != nil { - m.IDPrefixes = make([]string, len(o.IDPrefixes)) - copy(m.IDPrefixes, o.IDPrefixes) - } - - if o.Labels != nil { - m.Labels = make(map[string]string, len(o.Labels)) - for k, v := range o.Labels { - m.Labels[k] = v - } - } - - if o.NamePrefixes != nil { - m.NamePrefixes = make([]string, len(o.NamePrefixes)) - copy(m.NamePrefixes, o.NamePrefixes) - } - -} - -func (m *ListResourcesResponse) Copy() *ListResourcesResponse { - if m == nil { - return nil - } - o := &ListResourcesResponse{} - o.CopyFrom(m) - return o -} - -func (m *ListResourcesResponse) CopyFrom(src interface{}) { - - o := src.(*ListResourcesResponse) - *m = *o - if o.Resources != nil { - m.Resources = make([]*Resource, len(o.Resources)) - for i := range m.Resources { - m.Resources[i] = &Resource{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Resources[i], o.Resources[i]) - } - } - -} - -func (m *CreateVolumeRequest) Copy() *CreateVolumeRequest { - if m == nil { - return nil - } - o := &CreateVolumeRequest{} - o.CopyFrom(m) - return o -} - -func (m *CreateVolumeRequest) CopyFrom(src interface{}) { - - o := src.(*CreateVolumeRequest) - *m = *o - if o.Spec != nil { - m.Spec = &VolumeSpec{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Spec, o.Spec) - } -} - -func (m *CreateVolumeResponse) Copy() *CreateVolumeResponse { - if m == nil { - return nil - } - o := &CreateVolumeResponse{} - o.CopyFrom(m) - return o -} - -func (m *CreateVolumeResponse) CopyFrom(src interface{}) { - - o := src.(*CreateVolumeResponse) - *m = *o - if o.Volume != nil { - m.Volume = &Volume{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Volume, o.Volume) - } -} - -func (m *GetVolumeRequest) Copy() *GetVolumeRequest { - if m == nil { - return nil - } - o := &GetVolumeRequest{} - o.CopyFrom(m) - return o -} - -func (m *GetVolumeRequest) CopyFrom(src interface{}) { - - o := src.(*GetVolumeRequest) - *m = *o -} - -func (m *GetVolumeResponse) Copy() *GetVolumeResponse { - if m == nil { - return nil - } - o := &GetVolumeResponse{} - o.CopyFrom(m) - return o -} - -func (m *GetVolumeResponse) CopyFrom(src interface{}) { - - o := src.(*GetVolumeResponse) - *m = *o - if o.Volume != nil { - m.Volume = &Volume{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Volume, o.Volume) - } -} - -func (m *UpdateVolumeRequest) Copy() *UpdateVolumeRequest { - if m == nil { - return nil - } - o := &UpdateVolumeRequest{} - o.CopyFrom(m) - return o -} - -func (m *UpdateVolumeRequest) CopyFrom(src interface{}) { - - o := src.(*UpdateVolumeRequest) - *m = *o - if o.VolumeVersion != nil { - m.VolumeVersion = &Version{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.VolumeVersion, o.VolumeVersion) - } - if o.Spec != nil { - m.Spec = &VolumeSpec{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Spec, o.Spec) - } -} - -func (m *UpdateVolumeResponse) Copy() *UpdateVolumeResponse { - if m == nil { - return nil - } - o := &UpdateVolumeResponse{} - o.CopyFrom(m) - return o -} - -func (m *UpdateVolumeResponse) CopyFrom(src interface{}) { - - o := src.(*UpdateVolumeResponse) - *m = *o - if o.Volume != nil { - m.Volume = &Volume{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Volume, o.Volume) - } -} - -func (m *ListVolumesRequest) Copy() *ListVolumesRequest { - if m == nil { - return nil - } - o := &ListVolumesRequest{} - o.CopyFrom(m) - return o -} - -func (m *ListVolumesRequest) CopyFrom(src interface{}) { - - o := src.(*ListVolumesRequest) - *m = *o - if o.Filters != nil { - m.Filters = &ListVolumesRequest_Filters{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Filters, o.Filters) - } -} - -func (m *ListVolumesRequest_Filters) Copy() *ListVolumesRequest_Filters { - if m == nil { - return nil - } - o := &ListVolumesRequest_Filters{} - o.CopyFrom(m) - return o -} - -func (m *ListVolumesRequest_Filters) CopyFrom(src interface{}) { - - o := src.(*ListVolumesRequest_Filters) - *m = *o - if o.Names != nil { - m.Names = make([]string, len(o.Names)) - copy(m.Names, o.Names) - } - - if o.IDPrefixes != nil { - m.IDPrefixes = make([]string, len(o.IDPrefixes)) - copy(m.IDPrefixes, o.IDPrefixes) - } - - if o.Labels != nil { - m.Labels = make(map[string]string, len(o.Labels)) - for k, v := range o.Labels { - m.Labels[k] = v - } - } - - if o.NamePrefixes != nil { - m.NamePrefixes = make([]string, len(o.NamePrefixes)) - copy(m.NamePrefixes, o.NamePrefixes) - } - - if o.Groups != nil { - m.Groups = make([]string, len(o.Groups)) - copy(m.Groups, o.Groups) - } - - if o.Drivers != nil { - m.Drivers = make([]string, len(o.Drivers)) - copy(m.Drivers, o.Drivers) - } - -} - -func (m *ListVolumesResponse) Copy() *ListVolumesResponse { - if m == nil { - return nil - } - o := &ListVolumesResponse{} - o.CopyFrom(m) - return o -} - -func (m *ListVolumesResponse) CopyFrom(src interface{}) { - - o := src.(*ListVolumesResponse) - *m = *o - if o.Volumes != nil { - m.Volumes = make([]*Volume, len(o.Volumes)) - for i := range m.Volumes { - m.Volumes[i] = &Volume{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Volumes[i], o.Volumes[i]) - } - } - -} - -func (m *RemoveVolumeRequest) Copy() *RemoveVolumeRequest { - if m == nil { - return nil - } - o := &RemoveVolumeRequest{} - o.CopyFrom(m) - return o -} - -func (m *RemoveVolumeRequest) CopyFrom(src interface{}) { - - o := src.(*RemoveVolumeRequest) - *m = *o -} - -func (m *RemoveVolumeResponse) Copy() *RemoveVolumeResponse { - if m == nil { - return nil - } - o := &RemoveVolumeResponse{} - o.CopyFrom(m) - return o -} - -func (m *RemoveVolumeResponse) CopyFrom(src interface{}) {} - -// Reference imports to suppress errors if they are not otherwise used. -var _ context.Context -var _ grpc.ClientConn - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 - -// ControlClient is the client API for Control service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. -type ControlClient interface { - GetNode(ctx context.Context, in *GetNodeRequest, opts ...grpc.CallOption) (*GetNodeResponse, error) - ListNodes(ctx context.Context, in *ListNodesRequest, opts ...grpc.CallOption) (*ListNodesResponse, error) - UpdateNode(ctx context.Context, in *UpdateNodeRequest, opts ...grpc.CallOption) (*UpdateNodeResponse, error) - RemoveNode(ctx context.Context, in *RemoveNodeRequest, opts ...grpc.CallOption) (*RemoveNodeResponse, error) - GetTask(ctx context.Context, in *GetTaskRequest, opts ...grpc.CallOption) (*GetTaskResponse, error) - ListTasks(ctx context.Context, in *ListTasksRequest, opts ...grpc.CallOption) (*ListTasksResponse, error) - RemoveTask(ctx context.Context, in *RemoveTaskRequest, opts ...grpc.CallOption) (*RemoveTaskResponse, error) - GetService(ctx context.Context, in *GetServiceRequest, opts ...grpc.CallOption) (*GetServiceResponse, error) - ListServices(ctx context.Context, in *ListServicesRequest, opts ...grpc.CallOption) (*ListServicesResponse, error) - CreateService(ctx context.Context, in *CreateServiceRequest, opts ...grpc.CallOption) (*CreateServiceResponse, error) - UpdateService(ctx context.Context, in *UpdateServiceRequest, opts ...grpc.CallOption) (*UpdateServiceResponse, error) - RemoveService(ctx context.Context, in *RemoveServiceRequest, opts ...grpc.CallOption) (*RemoveServiceResponse, error) - // ListServiceStatuses returns a `ListServiceStatusesResponse` with the - // status of the requested services, formed by computing the number of - // running vs desired tasks. It is provided as a shortcut or helper method, - // which allows a client to avoid having to calculate this value by listing - // all Tasks. If any service requested does not exist, it will be returned - // but with empty status values. - ListServiceStatuses(ctx context.Context, in *ListServiceStatusesRequest, opts ...grpc.CallOption) (*ListServiceStatusesResponse, error) - GetNetwork(ctx context.Context, in *GetNetworkRequest, opts ...grpc.CallOption) (*GetNetworkResponse, error) - ListNetworks(ctx context.Context, in *ListNetworksRequest, opts ...grpc.CallOption) (*ListNetworksResponse, error) - CreateNetwork(ctx context.Context, in *CreateNetworkRequest, opts ...grpc.CallOption) (*CreateNetworkResponse, error) - RemoveNetwork(ctx context.Context, in *RemoveNetworkRequest, opts ...grpc.CallOption) (*RemoveNetworkResponse, error) - GetCluster(ctx context.Context, in *GetClusterRequest, opts ...grpc.CallOption) (*GetClusterResponse, error) - ListClusters(ctx context.Context, in *ListClustersRequest, opts ...grpc.CallOption) (*ListClustersResponse, error) - UpdateCluster(ctx context.Context, in *UpdateClusterRequest, opts ...grpc.CallOption) (*UpdateClusterResponse, error) - // GetSecret returns a `GetSecretResponse` with a `Secret` with the same - // id as `GetSecretRequest.SecretID` - // - Returns `NotFound` if the Secret with the given id is not found. - // - Returns `InvalidArgument` if the `GetSecretRequest.SecretID` is empty. - // - Returns an error if getting fails. - GetSecret(ctx context.Context, in *GetSecretRequest, opts ...grpc.CallOption) (*GetSecretResponse, error) - // UpdateSecret returns a `UpdateSecretResponse` with a `Secret` with the same - // id as `GetSecretRequest.SecretID` - // - Returns `NotFound` if the Secret with the given id is not found. - // - Returns `InvalidArgument` if the `GetSecretRequest.SecretID` is empty. - // - Returns an error if updating fails. - UpdateSecret(ctx context.Context, in *UpdateSecretRequest, opts ...grpc.CallOption) (*UpdateSecretResponse, error) - // ListSecrets returns a `ListSecretResponse` with a list of all non-internal `Secret`s being - // managed, or all secrets matching any name in `ListSecretsRequest.Names`, any - // name prefix in `ListSecretsRequest.NamePrefixes`, any id in - // `ListSecretsRequest.SecretIDs`, or any id prefix in `ListSecretsRequest.IDPrefixes`. - // - Returns an error if listing fails. - ListSecrets(ctx context.Context, in *ListSecretsRequest, opts ...grpc.CallOption) (*ListSecretsResponse, error) - // CreateSecret creates and return a `CreateSecretResponse` with a `Secret` based - // on the provided `CreateSecretRequest.SecretSpec`. - // - Returns `InvalidArgument` if the `CreateSecretRequest.SecretSpec` is malformed, - // or if the secret data is too long or contains invalid characters. - // - Returns an error if the creation fails. - CreateSecret(ctx context.Context, in *CreateSecretRequest, opts ...grpc.CallOption) (*CreateSecretResponse, error) - // RemoveSecret removes the secret referenced by `RemoveSecretRequest.ID`. - // - Returns `InvalidArgument` if `RemoveSecretRequest.ID` is empty. - // - Returns `NotFound` if the a secret named `RemoveSecretRequest.ID` is not found. - // - Returns an error if the deletion fails. - RemoveSecret(ctx context.Context, in *RemoveSecretRequest, opts ...grpc.CallOption) (*RemoveSecretResponse, error) - // GetConfig returns a `GetConfigResponse` with a `Config` with the same - // id as `GetConfigRequest.ConfigID` - // - Returns `NotFound` if the Config with the given id is not found. - // - Returns `InvalidArgument` if the `GetConfigRequest.ConfigID` is empty. - // - Returns an error if getting fails. - GetConfig(ctx context.Context, in *GetConfigRequest, opts ...grpc.CallOption) (*GetConfigResponse, error) - // UpdateConfig returns a `UpdateConfigResponse` with a `Config` with the same - // id as `GetConfigRequest.ConfigID` - // - Returns `NotFound` if the Config with the given id is not found. - // - Returns `InvalidArgument` if the `GetConfigRequest.ConfigID` is empty. - // - Returns an error if updating fails. - UpdateConfig(ctx context.Context, in *UpdateConfigRequest, opts ...grpc.CallOption) (*UpdateConfigResponse, error) - // ListConfigs returns a `ListConfigResponse` with a list of `Config`s being - // managed, or all configs matching any name in `ListConfigsRequest.Names`, any - // name prefix in `ListConfigsRequest.NamePrefixes`, any id in - // `ListConfigsRequest.ConfigIDs`, or any id prefix in `ListConfigsRequest.IDPrefixes`. - // - Returns an error if listing fails. - ListConfigs(ctx context.Context, in *ListConfigsRequest, opts ...grpc.CallOption) (*ListConfigsResponse, error) - // CreateConfig creates and return a `CreateConfigResponse` with a `Config` based - // on the provided `CreateConfigRequest.ConfigSpec`. - // - Returns `InvalidArgument` if the `CreateConfigRequest.ConfigSpec` is malformed, - // or if the config data is too long or contains invalid characters. - // - Returns an error if the creation fails. - CreateConfig(ctx context.Context, in *CreateConfigRequest, opts ...grpc.CallOption) (*CreateConfigResponse, error) - // RemoveConfig removes the config referenced by `RemoveConfigRequest.ID`. - // - Returns `InvalidArgument` if `RemoveConfigRequest.ID` is empty. - // - Returns `NotFound` if the a config named `RemoveConfigRequest.ID` is not found. - // - Returns an error if the deletion fails. - RemoveConfig(ctx context.Context, in *RemoveConfigRequest, opts ...grpc.CallOption) (*RemoveConfigResponse, error) - // GetExtension returns a `GetExtensionResponse` with a `Extension` with the same - // id as `GetExtensionRequest.ExtensionId` - // - Returns `NotFound` if the Extension with the given id is not found. - // - Returns `InvalidArgument` if the `GetExtensionRequest.ExtensionId` is empty. - // - Returns an error if the get fails. - GetExtension(ctx context.Context, in *GetExtensionRequest, opts ...grpc.CallOption) (*GetExtensionResponse, error) - // CreateExtension creates an `Extension` based on the provided `CreateExtensionRequest.Extension` - // and returns a `CreateExtensionResponse`. - // - Returns `InvalidArgument` if the `CreateExtensionRequest.Extension` is malformed, - // or fails validation. - // - Returns an error if the creation fails. - CreateExtension(ctx context.Context, in *CreateExtensionRequest, opts ...grpc.CallOption) (*CreateExtensionResponse, error) - // RemoveExtension removes the extension referenced by `RemoveExtensionRequest.ID`. - // - Returns `InvalidArgument` if `RemoveExtensionRequest.ExtensionId` is empty. - // - Returns `NotFound` if the an extension named `RemoveExtensionRequest.ExtensionId` is not found. - // - Returns an error if the deletion fails. - RemoveExtension(ctx context.Context, in *RemoveExtensionRequest, opts ...grpc.CallOption) (*RemoveExtensionResponse, error) - // GetResource returns a `GetResourceResponse` with a `Resource` with the same - // id as `GetResourceRequest.Resource` - // - Returns `NotFound` if the Resource with the given id is not found. - // - Returns `InvalidArgument` if the `GetResourceRequest.Resource` is empty. - // - Returns an error if getting fails. - GetResource(ctx context.Context, in *GetResourceRequest, opts ...grpc.CallOption) (*GetResourceResponse, error) - // UpdateResource updates the resource with the given `UpdateResourceRequest.Resource.Id` using the given `UpdateResourceRequest.Resource` and returns a `UpdateResourceResponse`. - // - Returns `NotFound` if the Resource with the given `UpdateResourceRequest.Resource.Id` is not found. - // - Returns `InvalidArgument` if the UpdateResourceRequest.Resource.Id` is empty. - // - Returns an error if updating fails. - UpdateResource(ctx context.Context, in *UpdateResourceRequest, opts ...grpc.CallOption) (*UpdateResourceResponse, error) - // ListResources returns a `ListResourcesResponse` with a list of `Resource`s stored in the raft store, - // or all resources matching any name in `ListConfigsRequest.Names`, any - // name prefix in `ListResourcesRequest.NamePrefixes`, any id in - // `ListResourcesRequest.ResourceIDs`, or any id prefix in `ListResourcesRequest.IDPrefixes`, - // extension name equal to `ListResourcesRequest.Extension`. - // - Returns an error if listing fails. - ListResources(ctx context.Context, in *ListResourcesRequest, opts ...grpc.CallOption) (*ListResourcesResponse, error) - // CreateResource returns a `CreateResourceResponse` after creating a `Resource` based - // on the provided `CreateResourceRequest.Resource`. - // - Returns `InvalidArgument` if the `CreateResourceRequest.Resource` is malformed, - // or if the config data is too long or contains invalid characters. - // - Returns an error if the creation fails. - CreateResource(ctx context.Context, in *CreateResourceRequest, opts ...grpc.CallOption) (*CreateResourceResponse, error) - // RemoveResource removes the `Resource` referenced by `RemoveResourceRequest.ResourceID`. - // - Returns `InvalidArgument` if `RemoveResourceRequest.ResourceID` is empty. - // - Returns `NotFound` if the a resource named `RemoveResourceRequest.ResourceID` is not found. - // - Returns an error if the deletion fails. - RemoveResource(ctx context.Context, in *RemoveResourceRequest, opts ...grpc.CallOption) (*RemoveResourceResponse, error) - // CreateVolume returns a `CreateVolumeResponse` with a `Volume` based on the - // provided `CreateVolumeRequest.VolumeSpec`. - // - Returns `InvalidArgument` if the `CreateVolumeRequest.VolumeSpec` is - // malformed. - CreateVolume(ctx context.Context, in *CreateVolumeRequest, opts ...grpc.CallOption) (*CreateVolumeResponse, error) - // GetVolume returns a `GetVolumeResponse` with a Volume with the same ID - // as `GetVolumeRequest.ID` - GetVolume(ctx context.Context, in *GetVolumeRequest, opts ...grpc.CallOption) (*GetVolumeResponse, error) - UpdateVolume(ctx context.Context, in *UpdateVolumeRequest, opts ...grpc.CallOption) (*UpdateVolumeResponse, error) - ListVolumes(ctx context.Context, in *ListVolumesRequest, opts ...grpc.CallOption) (*ListVolumesResponse, error) - RemoveVolume(ctx context.Context, in *RemoveVolumeRequest, opts ...grpc.CallOption) (*RemoveVolumeResponse, error) -} - -type controlClient struct { - cc *grpc.ClientConn -} - -func NewControlClient(cc *grpc.ClientConn) ControlClient { - return &controlClient{cc} -} - -func (c *controlClient) GetNode(ctx context.Context, in *GetNodeRequest, opts ...grpc.CallOption) (*GetNodeResponse, error) { - out := new(GetNodeResponse) - err := c.cc.Invoke(ctx, "/docker.swarmkit.v1.Control/GetNode", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *controlClient) ListNodes(ctx context.Context, in *ListNodesRequest, opts ...grpc.CallOption) (*ListNodesResponse, error) { - out := new(ListNodesResponse) - err := c.cc.Invoke(ctx, "/docker.swarmkit.v1.Control/ListNodes", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *controlClient) UpdateNode(ctx context.Context, in *UpdateNodeRequest, opts ...grpc.CallOption) (*UpdateNodeResponse, error) { - out := new(UpdateNodeResponse) - err := c.cc.Invoke(ctx, "/docker.swarmkit.v1.Control/UpdateNode", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *controlClient) RemoveNode(ctx context.Context, in *RemoveNodeRequest, opts ...grpc.CallOption) (*RemoveNodeResponse, error) { - out := new(RemoveNodeResponse) - err := c.cc.Invoke(ctx, "/docker.swarmkit.v1.Control/RemoveNode", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *controlClient) GetTask(ctx context.Context, in *GetTaskRequest, opts ...grpc.CallOption) (*GetTaskResponse, error) { - out := new(GetTaskResponse) - err := c.cc.Invoke(ctx, "/docker.swarmkit.v1.Control/GetTask", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *controlClient) ListTasks(ctx context.Context, in *ListTasksRequest, opts ...grpc.CallOption) (*ListTasksResponse, error) { - out := new(ListTasksResponse) - err := c.cc.Invoke(ctx, "/docker.swarmkit.v1.Control/ListTasks", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *controlClient) RemoveTask(ctx context.Context, in *RemoveTaskRequest, opts ...grpc.CallOption) (*RemoveTaskResponse, error) { - out := new(RemoveTaskResponse) - err := c.cc.Invoke(ctx, "/docker.swarmkit.v1.Control/RemoveTask", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *controlClient) GetService(ctx context.Context, in *GetServiceRequest, opts ...grpc.CallOption) (*GetServiceResponse, error) { - out := new(GetServiceResponse) - err := c.cc.Invoke(ctx, "/docker.swarmkit.v1.Control/GetService", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *controlClient) ListServices(ctx context.Context, in *ListServicesRequest, opts ...grpc.CallOption) (*ListServicesResponse, error) { - out := new(ListServicesResponse) - err := c.cc.Invoke(ctx, "/docker.swarmkit.v1.Control/ListServices", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *controlClient) CreateService(ctx context.Context, in *CreateServiceRequest, opts ...grpc.CallOption) (*CreateServiceResponse, error) { - out := new(CreateServiceResponse) - err := c.cc.Invoke(ctx, "/docker.swarmkit.v1.Control/CreateService", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *controlClient) UpdateService(ctx context.Context, in *UpdateServiceRequest, opts ...grpc.CallOption) (*UpdateServiceResponse, error) { - out := new(UpdateServiceResponse) - err := c.cc.Invoke(ctx, "/docker.swarmkit.v1.Control/UpdateService", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *controlClient) RemoveService(ctx context.Context, in *RemoveServiceRequest, opts ...grpc.CallOption) (*RemoveServiceResponse, error) { - out := new(RemoveServiceResponse) - err := c.cc.Invoke(ctx, "/docker.swarmkit.v1.Control/RemoveService", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *controlClient) ListServiceStatuses(ctx context.Context, in *ListServiceStatusesRequest, opts ...grpc.CallOption) (*ListServiceStatusesResponse, error) { - out := new(ListServiceStatusesResponse) - err := c.cc.Invoke(ctx, "/docker.swarmkit.v1.Control/ListServiceStatuses", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *controlClient) GetNetwork(ctx context.Context, in *GetNetworkRequest, opts ...grpc.CallOption) (*GetNetworkResponse, error) { - out := new(GetNetworkResponse) - err := c.cc.Invoke(ctx, "/docker.swarmkit.v1.Control/GetNetwork", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *controlClient) ListNetworks(ctx context.Context, in *ListNetworksRequest, opts ...grpc.CallOption) (*ListNetworksResponse, error) { - out := new(ListNetworksResponse) - err := c.cc.Invoke(ctx, "/docker.swarmkit.v1.Control/ListNetworks", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *controlClient) CreateNetwork(ctx context.Context, in *CreateNetworkRequest, opts ...grpc.CallOption) (*CreateNetworkResponse, error) { - out := new(CreateNetworkResponse) - err := c.cc.Invoke(ctx, "/docker.swarmkit.v1.Control/CreateNetwork", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *controlClient) RemoveNetwork(ctx context.Context, in *RemoveNetworkRequest, opts ...grpc.CallOption) (*RemoveNetworkResponse, error) { - out := new(RemoveNetworkResponse) - err := c.cc.Invoke(ctx, "/docker.swarmkit.v1.Control/RemoveNetwork", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *controlClient) GetCluster(ctx context.Context, in *GetClusterRequest, opts ...grpc.CallOption) (*GetClusterResponse, error) { - out := new(GetClusterResponse) - err := c.cc.Invoke(ctx, "/docker.swarmkit.v1.Control/GetCluster", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *controlClient) ListClusters(ctx context.Context, in *ListClustersRequest, opts ...grpc.CallOption) (*ListClustersResponse, error) { - out := new(ListClustersResponse) - err := c.cc.Invoke(ctx, "/docker.swarmkit.v1.Control/ListClusters", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *controlClient) UpdateCluster(ctx context.Context, in *UpdateClusterRequest, opts ...grpc.CallOption) (*UpdateClusterResponse, error) { - out := new(UpdateClusterResponse) - err := c.cc.Invoke(ctx, "/docker.swarmkit.v1.Control/UpdateCluster", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *controlClient) GetSecret(ctx context.Context, in *GetSecretRequest, opts ...grpc.CallOption) (*GetSecretResponse, error) { - out := new(GetSecretResponse) - err := c.cc.Invoke(ctx, "/docker.swarmkit.v1.Control/GetSecret", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *controlClient) UpdateSecret(ctx context.Context, in *UpdateSecretRequest, opts ...grpc.CallOption) (*UpdateSecretResponse, error) { - out := new(UpdateSecretResponse) - err := c.cc.Invoke(ctx, "/docker.swarmkit.v1.Control/UpdateSecret", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *controlClient) ListSecrets(ctx context.Context, in *ListSecretsRequest, opts ...grpc.CallOption) (*ListSecretsResponse, error) { - out := new(ListSecretsResponse) - err := c.cc.Invoke(ctx, "/docker.swarmkit.v1.Control/ListSecrets", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *controlClient) CreateSecret(ctx context.Context, in *CreateSecretRequest, opts ...grpc.CallOption) (*CreateSecretResponse, error) { - out := new(CreateSecretResponse) - err := c.cc.Invoke(ctx, "/docker.swarmkit.v1.Control/CreateSecret", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *controlClient) RemoveSecret(ctx context.Context, in *RemoveSecretRequest, opts ...grpc.CallOption) (*RemoveSecretResponse, error) { - out := new(RemoveSecretResponse) - err := c.cc.Invoke(ctx, "/docker.swarmkit.v1.Control/RemoveSecret", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *controlClient) GetConfig(ctx context.Context, in *GetConfigRequest, opts ...grpc.CallOption) (*GetConfigResponse, error) { - out := new(GetConfigResponse) - err := c.cc.Invoke(ctx, "/docker.swarmkit.v1.Control/GetConfig", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *controlClient) UpdateConfig(ctx context.Context, in *UpdateConfigRequest, opts ...grpc.CallOption) (*UpdateConfigResponse, error) { - out := new(UpdateConfigResponse) - err := c.cc.Invoke(ctx, "/docker.swarmkit.v1.Control/UpdateConfig", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *controlClient) ListConfigs(ctx context.Context, in *ListConfigsRequest, opts ...grpc.CallOption) (*ListConfigsResponse, error) { - out := new(ListConfigsResponse) - err := c.cc.Invoke(ctx, "/docker.swarmkit.v1.Control/ListConfigs", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *controlClient) CreateConfig(ctx context.Context, in *CreateConfigRequest, opts ...grpc.CallOption) (*CreateConfigResponse, error) { - out := new(CreateConfigResponse) - err := c.cc.Invoke(ctx, "/docker.swarmkit.v1.Control/CreateConfig", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *controlClient) RemoveConfig(ctx context.Context, in *RemoveConfigRequest, opts ...grpc.CallOption) (*RemoveConfigResponse, error) { - out := new(RemoveConfigResponse) - err := c.cc.Invoke(ctx, "/docker.swarmkit.v1.Control/RemoveConfig", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *controlClient) GetExtension(ctx context.Context, in *GetExtensionRequest, opts ...grpc.CallOption) (*GetExtensionResponse, error) { - out := new(GetExtensionResponse) - err := c.cc.Invoke(ctx, "/docker.swarmkit.v1.Control/GetExtension", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *controlClient) CreateExtension(ctx context.Context, in *CreateExtensionRequest, opts ...grpc.CallOption) (*CreateExtensionResponse, error) { - out := new(CreateExtensionResponse) - err := c.cc.Invoke(ctx, "/docker.swarmkit.v1.Control/CreateExtension", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *controlClient) RemoveExtension(ctx context.Context, in *RemoveExtensionRequest, opts ...grpc.CallOption) (*RemoveExtensionResponse, error) { - out := new(RemoveExtensionResponse) - err := c.cc.Invoke(ctx, "/docker.swarmkit.v1.Control/RemoveExtension", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *controlClient) GetResource(ctx context.Context, in *GetResourceRequest, opts ...grpc.CallOption) (*GetResourceResponse, error) { - out := new(GetResourceResponse) - err := c.cc.Invoke(ctx, "/docker.swarmkit.v1.Control/GetResource", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *controlClient) UpdateResource(ctx context.Context, in *UpdateResourceRequest, opts ...grpc.CallOption) (*UpdateResourceResponse, error) { - out := new(UpdateResourceResponse) - err := c.cc.Invoke(ctx, "/docker.swarmkit.v1.Control/UpdateResource", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *controlClient) ListResources(ctx context.Context, in *ListResourcesRequest, opts ...grpc.CallOption) (*ListResourcesResponse, error) { - out := new(ListResourcesResponse) - err := c.cc.Invoke(ctx, "/docker.swarmkit.v1.Control/ListResources", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *controlClient) CreateResource(ctx context.Context, in *CreateResourceRequest, opts ...grpc.CallOption) (*CreateResourceResponse, error) { - out := new(CreateResourceResponse) - err := c.cc.Invoke(ctx, "/docker.swarmkit.v1.Control/CreateResource", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *controlClient) RemoveResource(ctx context.Context, in *RemoveResourceRequest, opts ...grpc.CallOption) (*RemoveResourceResponse, error) { - out := new(RemoveResourceResponse) - err := c.cc.Invoke(ctx, "/docker.swarmkit.v1.Control/RemoveResource", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *controlClient) CreateVolume(ctx context.Context, in *CreateVolumeRequest, opts ...grpc.CallOption) (*CreateVolumeResponse, error) { - out := new(CreateVolumeResponse) - err := c.cc.Invoke(ctx, "/docker.swarmkit.v1.Control/CreateVolume", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *controlClient) GetVolume(ctx context.Context, in *GetVolumeRequest, opts ...grpc.CallOption) (*GetVolumeResponse, error) { - out := new(GetVolumeResponse) - err := c.cc.Invoke(ctx, "/docker.swarmkit.v1.Control/GetVolume", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *controlClient) UpdateVolume(ctx context.Context, in *UpdateVolumeRequest, opts ...grpc.CallOption) (*UpdateVolumeResponse, error) { - out := new(UpdateVolumeResponse) - err := c.cc.Invoke(ctx, "/docker.swarmkit.v1.Control/UpdateVolume", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *controlClient) ListVolumes(ctx context.Context, in *ListVolumesRequest, opts ...grpc.CallOption) (*ListVolumesResponse, error) { - out := new(ListVolumesResponse) - err := c.cc.Invoke(ctx, "/docker.swarmkit.v1.Control/ListVolumes", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *controlClient) RemoveVolume(ctx context.Context, in *RemoveVolumeRequest, opts ...grpc.CallOption) (*RemoveVolumeResponse, error) { - out := new(RemoveVolumeResponse) - err := c.cc.Invoke(ctx, "/docker.swarmkit.v1.Control/RemoveVolume", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// ControlServer is the server API for Control service. -type ControlServer interface { - GetNode(context.Context, *GetNodeRequest) (*GetNodeResponse, error) - ListNodes(context.Context, *ListNodesRequest) (*ListNodesResponse, error) - UpdateNode(context.Context, *UpdateNodeRequest) (*UpdateNodeResponse, error) - RemoveNode(context.Context, *RemoveNodeRequest) (*RemoveNodeResponse, error) - GetTask(context.Context, *GetTaskRequest) (*GetTaskResponse, error) - ListTasks(context.Context, *ListTasksRequest) (*ListTasksResponse, error) - RemoveTask(context.Context, *RemoveTaskRequest) (*RemoveTaskResponse, error) - GetService(context.Context, *GetServiceRequest) (*GetServiceResponse, error) - ListServices(context.Context, *ListServicesRequest) (*ListServicesResponse, error) - CreateService(context.Context, *CreateServiceRequest) (*CreateServiceResponse, error) - UpdateService(context.Context, *UpdateServiceRequest) (*UpdateServiceResponse, error) - RemoveService(context.Context, *RemoveServiceRequest) (*RemoveServiceResponse, error) - // ListServiceStatuses returns a `ListServiceStatusesResponse` with the - // status of the requested services, formed by computing the number of - // running vs desired tasks. It is provided as a shortcut or helper method, - // which allows a client to avoid having to calculate this value by listing - // all Tasks. If any service requested does not exist, it will be returned - // but with empty status values. - ListServiceStatuses(context.Context, *ListServiceStatusesRequest) (*ListServiceStatusesResponse, error) - GetNetwork(context.Context, *GetNetworkRequest) (*GetNetworkResponse, error) - ListNetworks(context.Context, *ListNetworksRequest) (*ListNetworksResponse, error) - CreateNetwork(context.Context, *CreateNetworkRequest) (*CreateNetworkResponse, error) - RemoveNetwork(context.Context, *RemoveNetworkRequest) (*RemoveNetworkResponse, error) - GetCluster(context.Context, *GetClusterRequest) (*GetClusterResponse, error) - ListClusters(context.Context, *ListClustersRequest) (*ListClustersResponse, error) - UpdateCluster(context.Context, *UpdateClusterRequest) (*UpdateClusterResponse, error) - // GetSecret returns a `GetSecretResponse` with a `Secret` with the same - // id as `GetSecretRequest.SecretID` - // - Returns `NotFound` if the Secret with the given id is not found. - // - Returns `InvalidArgument` if the `GetSecretRequest.SecretID` is empty. - // - Returns an error if getting fails. - GetSecret(context.Context, *GetSecretRequest) (*GetSecretResponse, error) - // UpdateSecret returns a `UpdateSecretResponse` with a `Secret` with the same - // id as `GetSecretRequest.SecretID` - // - Returns `NotFound` if the Secret with the given id is not found. - // - Returns `InvalidArgument` if the `GetSecretRequest.SecretID` is empty. - // - Returns an error if updating fails. - UpdateSecret(context.Context, *UpdateSecretRequest) (*UpdateSecretResponse, error) - // ListSecrets returns a `ListSecretResponse` with a list of all non-internal `Secret`s being - // managed, or all secrets matching any name in `ListSecretsRequest.Names`, any - // name prefix in `ListSecretsRequest.NamePrefixes`, any id in - // `ListSecretsRequest.SecretIDs`, or any id prefix in `ListSecretsRequest.IDPrefixes`. - // - Returns an error if listing fails. - ListSecrets(context.Context, *ListSecretsRequest) (*ListSecretsResponse, error) - // CreateSecret creates and return a `CreateSecretResponse` with a `Secret` based - // on the provided `CreateSecretRequest.SecretSpec`. - // - Returns `InvalidArgument` if the `CreateSecretRequest.SecretSpec` is malformed, - // or if the secret data is too long or contains invalid characters. - // - Returns an error if the creation fails. - CreateSecret(context.Context, *CreateSecretRequest) (*CreateSecretResponse, error) - // RemoveSecret removes the secret referenced by `RemoveSecretRequest.ID`. - // - Returns `InvalidArgument` if `RemoveSecretRequest.ID` is empty. - // - Returns `NotFound` if the a secret named `RemoveSecretRequest.ID` is not found. - // - Returns an error if the deletion fails. - RemoveSecret(context.Context, *RemoveSecretRequest) (*RemoveSecretResponse, error) - // GetConfig returns a `GetConfigResponse` with a `Config` with the same - // id as `GetConfigRequest.ConfigID` - // - Returns `NotFound` if the Config with the given id is not found. - // - Returns `InvalidArgument` if the `GetConfigRequest.ConfigID` is empty. - // - Returns an error if getting fails. - GetConfig(context.Context, *GetConfigRequest) (*GetConfigResponse, error) - // UpdateConfig returns a `UpdateConfigResponse` with a `Config` with the same - // id as `GetConfigRequest.ConfigID` - // - Returns `NotFound` if the Config with the given id is not found. - // - Returns `InvalidArgument` if the `GetConfigRequest.ConfigID` is empty. - // - Returns an error if updating fails. - UpdateConfig(context.Context, *UpdateConfigRequest) (*UpdateConfigResponse, error) - // ListConfigs returns a `ListConfigResponse` with a list of `Config`s being - // managed, or all configs matching any name in `ListConfigsRequest.Names`, any - // name prefix in `ListConfigsRequest.NamePrefixes`, any id in - // `ListConfigsRequest.ConfigIDs`, or any id prefix in `ListConfigsRequest.IDPrefixes`. - // - Returns an error if listing fails. - ListConfigs(context.Context, *ListConfigsRequest) (*ListConfigsResponse, error) - // CreateConfig creates and return a `CreateConfigResponse` with a `Config` based - // on the provided `CreateConfigRequest.ConfigSpec`. - // - Returns `InvalidArgument` if the `CreateConfigRequest.ConfigSpec` is malformed, - // or if the config data is too long or contains invalid characters. - // - Returns an error if the creation fails. - CreateConfig(context.Context, *CreateConfigRequest) (*CreateConfigResponse, error) - // RemoveConfig removes the config referenced by `RemoveConfigRequest.ID`. - // - Returns `InvalidArgument` if `RemoveConfigRequest.ID` is empty. - // - Returns `NotFound` if the a config named `RemoveConfigRequest.ID` is not found. - // - Returns an error if the deletion fails. - RemoveConfig(context.Context, *RemoveConfigRequest) (*RemoveConfigResponse, error) - // GetExtension returns a `GetExtensionResponse` with a `Extension` with the same - // id as `GetExtensionRequest.ExtensionId` - // - Returns `NotFound` if the Extension with the given id is not found. - // - Returns `InvalidArgument` if the `GetExtensionRequest.ExtensionId` is empty. - // - Returns an error if the get fails. - GetExtension(context.Context, *GetExtensionRequest) (*GetExtensionResponse, error) - // CreateExtension creates an `Extension` based on the provided `CreateExtensionRequest.Extension` - // and returns a `CreateExtensionResponse`. - // - Returns `InvalidArgument` if the `CreateExtensionRequest.Extension` is malformed, - // or fails validation. - // - Returns an error if the creation fails. - CreateExtension(context.Context, *CreateExtensionRequest) (*CreateExtensionResponse, error) - // RemoveExtension removes the extension referenced by `RemoveExtensionRequest.ID`. - // - Returns `InvalidArgument` if `RemoveExtensionRequest.ExtensionId` is empty. - // - Returns `NotFound` if the an extension named `RemoveExtensionRequest.ExtensionId` is not found. - // - Returns an error if the deletion fails. - RemoveExtension(context.Context, *RemoveExtensionRequest) (*RemoveExtensionResponse, error) - // GetResource returns a `GetResourceResponse` with a `Resource` with the same - // id as `GetResourceRequest.Resource` - // - Returns `NotFound` if the Resource with the given id is not found. - // - Returns `InvalidArgument` if the `GetResourceRequest.Resource` is empty. - // - Returns an error if getting fails. - GetResource(context.Context, *GetResourceRequest) (*GetResourceResponse, error) - // UpdateResource updates the resource with the given `UpdateResourceRequest.Resource.Id` using the given `UpdateResourceRequest.Resource` and returns a `UpdateResourceResponse`. - // - Returns `NotFound` if the Resource with the given `UpdateResourceRequest.Resource.Id` is not found. - // - Returns `InvalidArgument` if the UpdateResourceRequest.Resource.Id` is empty. - // - Returns an error if updating fails. - UpdateResource(context.Context, *UpdateResourceRequest) (*UpdateResourceResponse, error) - // ListResources returns a `ListResourcesResponse` with a list of `Resource`s stored in the raft store, - // or all resources matching any name in `ListConfigsRequest.Names`, any - // name prefix in `ListResourcesRequest.NamePrefixes`, any id in - // `ListResourcesRequest.ResourceIDs`, or any id prefix in `ListResourcesRequest.IDPrefixes`, - // extension name equal to `ListResourcesRequest.Extension`. - // - Returns an error if listing fails. - ListResources(context.Context, *ListResourcesRequest) (*ListResourcesResponse, error) - // CreateResource returns a `CreateResourceResponse` after creating a `Resource` based - // on the provided `CreateResourceRequest.Resource`. - // - Returns `InvalidArgument` if the `CreateResourceRequest.Resource` is malformed, - // or if the config data is too long or contains invalid characters. - // - Returns an error if the creation fails. - CreateResource(context.Context, *CreateResourceRequest) (*CreateResourceResponse, error) - // RemoveResource removes the `Resource` referenced by `RemoveResourceRequest.ResourceID`. - // - Returns `InvalidArgument` if `RemoveResourceRequest.ResourceID` is empty. - // - Returns `NotFound` if the a resource named `RemoveResourceRequest.ResourceID` is not found. - // - Returns an error if the deletion fails. - RemoveResource(context.Context, *RemoveResourceRequest) (*RemoveResourceResponse, error) - // CreateVolume returns a `CreateVolumeResponse` with a `Volume` based on the - // provided `CreateVolumeRequest.VolumeSpec`. - // - Returns `InvalidArgument` if the `CreateVolumeRequest.VolumeSpec` is - // malformed. - CreateVolume(context.Context, *CreateVolumeRequest) (*CreateVolumeResponse, error) - // GetVolume returns a `GetVolumeResponse` with a Volume with the same ID - // as `GetVolumeRequest.ID` - GetVolume(context.Context, *GetVolumeRequest) (*GetVolumeResponse, error) - UpdateVolume(context.Context, *UpdateVolumeRequest) (*UpdateVolumeResponse, error) - ListVolumes(context.Context, *ListVolumesRequest) (*ListVolumesResponse, error) - RemoveVolume(context.Context, *RemoveVolumeRequest) (*RemoveVolumeResponse, error) -} - -// UnimplementedControlServer can be embedded to have forward compatible implementations. -type UnimplementedControlServer struct { -} - -func (*UnimplementedControlServer) GetNode(ctx context.Context, req *GetNodeRequest) (*GetNodeResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetNode not implemented") -} -func (*UnimplementedControlServer) ListNodes(ctx context.Context, req *ListNodesRequest) (*ListNodesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListNodes not implemented") -} -func (*UnimplementedControlServer) UpdateNode(ctx context.Context, req *UpdateNodeRequest) (*UpdateNodeResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateNode not implemented") -} -func (*UnimplementedControlServer) RemoveNode(ctx context.Context, req *RemoveNodeRequest) (*RemoveNodeResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method RemoveNode not implemented") -} -func (*UnimplementedControlServer) GetTask(ctx context.Context, req *GetTaskRequest) (*GetTaskResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetTask not implemented") -} -func (*UnimplementedControlServer) ListTasks(ctx context.Context, req *ListTasksRequest) (*ListTasksResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListTasks not implemented") -} -func (*UnimplementedControlServer) RemoveTask(ctx context.Context, req *RemoveTaskRequest) (*RemoveTaskResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method RemoveTask not implemented") -} -func (*UnimplementedControlServer) GetService(ctx context.Context, req *GetServiceRequest) (*GetServiceResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetService not implemented") -} -func (*UnimplementedControlServer) ListServices(ctx context.Context, req *ListServicesRequest) (*ListServicesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListServices not implemented") -} -func (*UnimplementedControlServer) CreateService(ctx context.Context, req *CreateServiceRequest) (*CreateServiceResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CreateService not implemented") -} -func (*UnimplementedControlServer) UpdateService(ctx context.Context, req *UpdateServiceRequest) (*UpdateServiceResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateService not implemented") -} -func (*UnimplementedControlServer) RemoveService(ctx context.Context, req *RemoveServiceRequest) (*RemoveServiceResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method RemoveService not implemented") -} -func (*UnimplementedControlServer) ListServiceStatuses(ctx context.Context, req *ListServiceStatusesRequest) (*ListServiceStatusesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListServiceStatuses not implemented") -} -func (*UnimplementedControlServer) GetNetwork(ctx context.Context, req *GetNetworkRequest) (*GetNetworkResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetNetwork not implemented") -} -func (*UnimplementedControlServer) ListNetworks(ctx context.Context, req *ListNetworksRequest) (*ListNetworksResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListNetworks not implemented") -} -func (*UnimplementedControlServer) CreateNetwork(ctx context.Context, req *CreateNetworkRequest) (*CreateNetworkResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CreateNetwork not implemented") -} -func (*UnimplementedControlServer) RemoveNetwork(ctx context.Context, req *RemoveNetworkRequest) (*RemoveNetworkResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method RemoveNetwork not implemented") -} -func (*UnimplementedControlServer) GetCluster(ctx context.Context, req *GetClusterRequest) (*GetClusterResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetCluster not implemented") -} -func (*UnimplementedControlServer) ListClusters(ctx context.Context, req *ListClustersRequest) (*ListClustersResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListClusters not implemented") -} -func (*UnimplementedControlServer) UpdateCluster(ctx context.Context, req *UpdateClusterRequest) (*UpdateClusterResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateCluster not implemented") -} -func (*UnimplementedControlServer) GetSecret(ctx context.Context, req *GetSecretRequest) (*GetSecretResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetSecret not implemented") -} -func (*UnimplementedControlServer) UpdateSecret(ctx context.Context, req *UpdateSecretRequest) (*UpdateSecretResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateSecret not implemented") -} -func (*UnimplementedControlServer) ListSecrets(ctx context.Context, req *ListSecretsRequest) (*ListSecretsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListSecrets not implemented") -} -func (*UnimplementedControlServer) CreateSecret(ctx context.Context, req *CreateSecretRequest) (*CreateSecretResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CreateSecret not implemented") -} -func (*UnimplementedControlServer) RemoveSecret(ctx context.Context, req *RemoveSecretRequest) (*RemoveSecretResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method RemoveSecret not implemented") -} -func (*UnimplementedControlServer) GetConfig(ctx context.Context, req *GetConfigRequest) (*GetConfigResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetConfig not implemented") -} -func (*UnimplementedControlServer) UpdateConfig(ctx context.Context, req *UpdateConfigRequest) (*UpdateConfigResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateConfig not implemented") -} -func (*UnimplementedControlServer) ListConfigs(ctx context.Context, req *ListConfigsRequest) (*ListConfigsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListConfigs not implemented") -} -func (*UnimplementedControlServer) CreateConfig(ctx context.Context, req *CreateConfigRequest) (*CreateConfigResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CreateConfig not implemented") -} -func (*UnimplementedControlServer) RemoveConfig(ctx context.Context, req *RemoveConfigRequest) (*RemoveConfigResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method RemoveConfig not implemented") -} -func (*UnimplementedControlServer) GetExtension(ctx context.Context, req *GetExtensionRequest) (*GetExtensionResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetExtension not implemented") -} -func (*UnimplementedControlServer) CreateExtension(ctx context.Context, req *CreateExtensionRequest) (*CreateExtensionResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CreateExtension not implemented") -} -func (*UnimplementedControlServer) RemoveExtension(ctx context.Context, req *RemoveExtensionRequest) (*RemoveExtensionResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method RemoveExtension not implemented") -} -func (*UnimplementedControlServer) GetResource(ctx context.Context, req *GetResourceRequest) (*GetResourceResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetResource not implemented") -} -func (*UnimplementedControlServer) UpdateResource(ctx context.Context, req *UpdateResourceRequest) (*UpdateResourceResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateResource not implemented") -} -func (*UnimplementedControlServer) ListResources(ctx context.Context, req *ListResourcesRequest) (*ListResourcesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListResources not implemented") -} -func (*UnimplementedControlServer) CreateResource(ctx context.Context, req *CreateResourceRequest) (*CreateResourceResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CreateResource not implemented") -} -func (*UnimplementedControlServer) RemoveResource(ctx context.Context, req *RemoveResourceRequest) (*RemoveResourceResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method RemoveResource not implemented") -} -func (*UnimplementedControlServer) CreateVolume(ctx context.Context, req *CreateVolumeRequest) (*CreateVolumeResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CreateVolume not implemented") -} -func (*UnimplementedControlServer) GetVolume(ctx context.Context, req *GetVolumeRequest) (*GetVolumeResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetVolume not implemented") -} -func (*UnimplementedControlServer) UpdateVolume(ctx context.Context, req *UpdateVolumeRequest) (*UpdateVolumeResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateVolume not implemented") -} -func (*UnimplementedControlServer) ListVolumes(ctx context.Context, req *ListVolumesRequest) (*ListVolumesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListVolumes not implemented") -} -func (*UnimplementedControlServer) RemoveVolume(ctx context.Context, req *RemoveVolumeRequest) (*RemoveVolumeResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method RemoveVolume not implemented") -} - -func RegisterControlServer(s *grpc.Server, srv ControlServer) { - s.RegisterService(&_Control_serviceDesc, srv) -} - -func _Control_GetNode_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetNodeRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ControlServer).GetNode(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/docker.swarmkit.v1.Control/GetNode", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ControlServer).GetNode(ctx, req.(*GetNodeRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Control_ListNodes_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ListNodesRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ControlServer).ListNodes(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/docker.swarmkit.v1.Control/ListNodes", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ControlServer).ListNodes(ctx, req.(*ListNodesRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Control_UpdateNode_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(UpdateNodeRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ControlServer).UpdateNode(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/docker.swarmkit.v1.Control/UpdateNode", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ControlServer).UpdateNode(ctx, req.(*UpdateNodeRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Control_RemoveNode_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(RemoveNodeRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ControlServer).RemoveNode(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/docker.swarmkit.v1.Control/RemoveNode", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ControlServer).RemoveNode(ctx, req.(*RemoveNodeRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Control_GetTask_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetTaskRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ControlServer).GetTask(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/docker.swarmkit.v1.Control/GetTask", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ControlServer).GetTask(ctx, req.(*GetTaskRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Control_ListTasks_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ListTasksRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ControlServer).ListTasks(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/docker.swarmkit.v1.Control/ListTasks", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ControlServer).ListTasks(ctx, req.(*ListTasksRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Control_RemoveTask_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(RemoveTaskRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ControlServer).RemoveTask(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/docker.swarmkit.v1.Control/RemoveTask", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ControlServer).RemoveTask(ctx, req.(*RemoveTaskRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Control_GetService_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetServiceRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ControlServer).GetService(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/docker.swarmkit.v1.Control/GetService", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ControlServer).GetService(ctx, req.(*GetServiceRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Control_ListServices_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ListServicesRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ControlServer).ListServices(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/docker.swarmkit.v1.Control/ListServices", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ControlServer).ListServices(ctx, req.(*ListServicesRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Control_CreateService_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(CreateServiceRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ControlServer).CreateService(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/docker.swarmkit.v1.Control/CreateService", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ControlServer).CreateService(ctx, req.(*CreateServiceRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Control_UpdateService_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(UpdateServiceRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ControlServer).UpdateService(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/docker.swarmkit.v1.Control/UpdateService", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ControlServer).UpdateService(ctx, req.(*UpdateServiceRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Control_RemoveService_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(RemoveServiceRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ControlServer).RemoveService(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/docker.swarmkit.v1.Control/RemoveService", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ControlServer).RemoveService(ctx, req.(*RemoveServiceRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Control_ListServiceStatuses_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ListServiceStatusesRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ControlServer).ListServiceStatuses(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/docker.swarmkit.v1.Control/ListServiceStatuses", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ControlServer).ListServiceStatuses(ctx, req.(*ListServiceStatusesRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Control_GetNetwork_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetNetworkRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ControlServer).GetNetwork(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/docker.swarmkit.v1.Control/GetNetwork", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ControlServer).GetNetwork(ctx, req.(*GetNetworkRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Control_ListNetworks_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ListNetworksRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ControlServer).ListNetworks(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/docker.swarmkit.v1.Control/ListNetworks", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ControlServer).ListNetworks(ctx, req.(*ListNetworksRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Control_CreateNetwork_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(CreateNetworkRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ControlServer).CreateNetwork(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/docker.swarmkit.v1.Control/CreateNetwork", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ControlServer).CreateNetwork(ctx, req.(*CreateNetworkRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Control_RemoveNetwork_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(RemoveNetworkRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ControlServer).RemoveNetwork(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/docker.swarmkit.v1.Control/RemoveNetwork", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ControlServer).RemoveNetwork(ctx, req.(*RemoveNetworkRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Control_GetCluster_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetClusterRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ControlServer).GetCluster(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/docker.swarmkit.v1.Control/GetCluster", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ControlServer).GetCluster(ctx, req.(*GetClusterRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Control_ListClusters_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ListClustersRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ControlServer).ListClusters(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/docker.swarmkit.v1.Control/ListClusters", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ControlServer).ListClusters(ctx, req.(*ListClustersRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Control_UpdateCluster_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(UpdateClusterRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ControlServer).UpdateCluster(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/docker.swarmkit.v1.Control/UpdateCluster", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ControlServer).UpdateCluster(ctx, req.(*UpdateClusterRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Control_GetSecret_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetSecretRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ControlServer).GetSecret(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/docker.swarmkit.v1.Control/GetSecret", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ControlServer).GetSecret(ctx, req.(*GetSecretRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Control_UpdateSecret_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(UpdateSecretRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ControlServer).UpdateSecret(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/docker.swarmkit.v1.Control/UpdateSecret", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ControlServer).UpdateSecret(ctx, req.(*UpdateSecretRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Control_ListSecrets_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ListSecretsRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ControlServer).ListSecrets(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/docker.swarmkit.v1.Control/ListSecrets", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ControlServer).ListSecrets(ctx, req.(*ListSecretsRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Control_CreateSecret_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(CreateSecretRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ControlServer).CreateSecret(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/docker.swarmkit.v1.Control/CreateSecret", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ControlServer).CreateSecret(ctx, req.(*CreateSecretRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Control_RemoveSecret_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(RemoveSecretRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ControlServer).RemoveSecret(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/docker.swarmkit.v1.Control/RemoveSecret", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ControlServer).RemoveSecret(ctx, req.(*RemoveSecretRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Control_GetConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetConfigRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ControlServer).GetConfig(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/docker.swarmkit.v1.Control/GetConfig", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ControlServer).GetConfig(ctx, req.(*GetConfigRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Control_UpdateConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(UpdateConfigRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ControlServer).UpdateConfig(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/docker.swarmkit.v1.Control/UpdateConfig", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ControlServer).UpdateConfig(ctx, req.(*UpdateConfigRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Control_ListConfigs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ListConfigsRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ControlServer).ListConfigs(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/docker.swarmkit.v1.Control/ListConfigs", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ControlServer).ListConfigs(ctx, req.(*ListConfigsRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Control_CreateConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(CreateConfigRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ControlServer).CreateConfig(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/docker.swarmkit.v1.Control/CreateConfig", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ControlServer).CreateConfig(ctx, req.(*CreateConfigRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Control_RemoveConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(RemoveConfigRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ControlServer).RemoveConfig(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/docker.swarmkit.v1.Control/RemoveConfig", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ControlServer).RemoveConfig(ctx, req.(*RemoveConfigRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Control_GetExtension_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetExtensionRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ControlServer).GetExtension(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/docker.swarmkit.v1.Control/GetExtension", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ControlServer).GetExtension(ctx, req.(*GetExtensionRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Control_CreateExtension_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(CreateExtensionRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ControlServer).CreateExtension(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/docker.swarmkit.v1.Control/CreateExtension", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ControlServer).CreateExtension(ctx, req.(*CreateExtensionRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Control_RemoveExtension_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(RemoveExtensionRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ControlServer).RemoveExtension(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/docker.swarmkit.v1.Control/RemoveExtension", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ControlServer).RemoveExtension(ctx, req.(*RemoveExtensionRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Control_GetResource_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetResourceRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ControlServer).GetResource(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/docker.swarmkit.v1.Control/GetResource", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ControlServer).GetResource(ctx, req.(*GetResourceRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Control_UpdateResource_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(UpdateResourceRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ControlServer).UpdateResource(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/docker.swarmkit.v1.Control/UpdateResource", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ControlServer).UpdateResource(ctx, req.(*UpdateResourceRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Control_ListResources_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ListResourcesRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ControlServer).ListResources(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/docker.swarmkit.v1.Control/ListResources", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ControlServer).ListResources(ctx, req.(*ListResourcesRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Control_CreateResource_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(CreateResourceRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ControlServer).CreateResource(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/docker.swarmkit.v1.Control/CreateResource", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ControlServer).CreateResource(ctx, req.(*CreateResourceRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Control_RemoveResource_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(RemoveResourceRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ControlServer).RemoveResource(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/docker.swarmkit.v1.Control/RemoveResource", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ControlServer).RemoveResource(ctx, req.(*RemoveResourceRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Control_CreateVolume_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(CreateVolumeRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ControlServer).CreateVolume(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/docker.swarmkit.v1.Control/CreateVolume", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ControlServer).CreateVolume(ctx, req.(*CreateVolumeRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Control_GetVolume_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetVolumeRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ControlServer).GetVolume(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/docker.swarmkit.v1.Control/GetVolume", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ControlServer).GetVolume(ctx, req.(*GetVolumeRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Control_UpdateVolume_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(UpdateVolumeRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ControlServer).UpdateVolume(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/docker.swarmkit.v1.Control/UpdateVolume", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ControlServer).UpdateVolume(ctx, req.(*UpdateVolumeRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Control_ListVolumes_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ListVolumesRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ControlServer).ListVolumes(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/docker.swarmkit.v1.Control/ListVolumes", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ControlServer).ListVolumes(ctx, req.(*ListVolumesRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Control_RemoveVolume_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(RemoveVolumeRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ControlServer).RemoveVolume(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/docker.swarmkit.v1.Control/RemoveVolume", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ControlServer).RemoveVolume(ctx, req.(*RemoveVolumeRequest)) - } - return interceptor(ctx, in, info, handler) -} - -var _Control_serviceDesc = grpc.ServiceDesc{ - ServiceName: "docker.swarmkit.v1.Control", - HandlerType: (*ControlServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "GetNode", - Handler: _Control_GetNode_Handler, - }, - { - MethodName: "ListNodes", - Handler: _Control_ListNodes_Handler, - }, - { - MethodName: "UpdateNode", - Handler: _Control_UpdateNode_Handler, - }, - { - MethodName: "RemoveNode", - Handler: _Control_RemoveNode_Handler, - }, - { - MethodName: "GetTask", - Handler: _Control_GetTask_Handler, - }, - { - MethodName: "ListTasks", - Handler: _Control_ListTasks_Handler, - }, - { - MethodName: "RemoveTask", - Handler: _Control_RemoveTask_Handler, - }, - { - MethodName: "GetService", - Handler: _Control_GetService_Handler, - }, - { - MethodName: "ListServices", - Handler: _Control_ListServices_Handler, - }, - { - MethodName: "CreateService", - Handler: _Control_CreateService_Handler, - }, - { - MethodName: "UpdateService", - Handler: _Control_UpdateService_Handler, - }, - { - MethodName: "RemoveService", - Handler: _Control_RemoveService_Handler, - }, - { - MethodName: "ListServiceStatuses", - Handler: _Control_ListServiceStatuses_Handler, - }, - { - MethodName: "GetNetwork", - Handler: _Control_GetNetwork_Handler, - }, - { - MethodName: "ListNetworks", - Handler: _Control_ListNetworks_Handler, - }, - { - MethodName: "CreateNetwork", - Handler: _Control_CreateNetwork_Handler, - }, - { - MethodName: "RemoveNetwork", - Handler: _Control_RemoveNetwork_Handler, - }, - { - MethodName: "GetCluster", - Handler: _Control_GetCluster_Handler, - }, - { - MethodName: "ListClusters", - Handler: _Control_ListClusters_Handler, - }, - { - MethodName: "UpdateCluster", - Handler: _Control_UpdateCluster_Handler, - }, - { - MethodName: "GetSecret", - Handler: _Control_GetSecret_Handler, - }, - { - MethodName: "UpdateSecret", - Handler: _Control_UpdateSecret_Handler, - }, - { - MethodName: "ListSecrets", - Handler: _Control_ListSecrets_Handler, - }, - { - MethodName: "CreateSecret", - Handler: _Control_CreateSecret_Handler, - }, - { - MethodName: "RemoveSecret", - Handler: _Control_RemoveSecret_Handler, - }, - { - MethodName: "GetConfig", - Handler: _Control_GetConfig_Handler, - }, - { - MethodName: "UpdateConfig", - Handler: _Control_UpdateConfig_Handler, - }, - { - MethodName: "ListConfigs", - Handler: _Control_ListConfigs_Handler, - }, - { - MethodName: "CreateConfig", - Handler: _Control_CreateConfig_Handler, - }, - { - MethodName: "RemoveConfig", - Handler: _Control_RemoveConfig_Handler, - }, - { - MethodName: "GetExtension", - Handler: _Control_GetExtension_Handler, - }, - { - MethodName: "CreateExtension", - Handler: _Control_CreateExtension_Handler, - }, - { - MethodName: "RemoveExtension", - Handler: _Control_RemoveExtension_Handler, - }, - { - MethodName: "GetResource", - Handler: _Control_GetResource_Handler, - }, - { - MethodName: "UpdateResource", - Handler: _Control_UpdateResource_Handler, - }, - { - MethodName: "ListResources", - Handler: _Control_ListResources_Handler, - }, - { - MethodName: "CreateResource", - Handler: _Control_CreateResource_Handler, - }, - { - MethodName: "RemoveResource", - Handler: _Control_RemoveResource_Handler, - }, - { - MethodName: "CreateVolume", - Handler: _Control_CreateVolume_Handler, - }, - { - MethodName: "GetVolume", - Handler: _Control_GetVolume_Handler, - }, - { - MethodName: "UpdateVolume", - Handler: _Control_UpdateVolume_Handler, - }, - { - MethodName: "ListVolumes", - Handler: _Control_ListVolumes_Handler, - }, - { - MethodName: "RemoveVolume", - Handler: _Control_RemoveVolume_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "github.com/docker/swarmkit/api/control.proto", -} - -func (m *GetNodeRequest) 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 *GetNodeRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *GetNodeRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.NodeID) > 0 { - i -= len(m.NodeID) - copy(dAtA[i:], m.NodeID) - i = encodeVarintControl(dAtA, i, uint64(len(m.NodeID))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *GetNodeResponse) 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 *GetNodeResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *GetNodeResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Node != nil { - { - size, err := m.Node.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *ListNodesRequest) 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 *ListNodesRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ListNodesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Filters != nil { - { - size, err := m.Filters.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *ListNodesRequest_Filters) 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 *ListNodesRequest_Filters) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ListNodesRequest_Filters) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.NodeLabels) > 0 { - for k := range m.NodeLabels { - v := m.NodeLabels[k] - baseI := i - i -= len(v) - copy(dAtA[i:], v) - i = encodeVarintControl(dAtA, i, uint64(len(v))) - i-- - dAtA[i] = 0x12 - i -= len(k) - copy(dAtA[i:], k) - i = encodeVarintControl(dAtA, i, uint64(len(k))) - i-- - dAtA[i] = 0xa - i = encodeVarintControl(dAtA, i, uint64(baseI-i)) - i-- - dAtA[i] = 0x3a - } - } - if len(m.NamePrefixes) > 0 { - for iNdEx := len(m.NamePrefixes) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.NamePrefixes[iNdEx]) - copy(dAtA[i:], m.NamePrefixes[iNdEx]) - i = encodeVarintControl(dAtA, i, uint64(len(m.NamePrefixes[iNdEx]))) - i-- - dAtA[i] = 0x32 - } - } - if len(m.Roles) > 0 { - for iNdEx := len(m.Roles) - 1; iNdEx >= 0; iNdEx-- { - i = encodeVarintControl(dAtA, i, uint64(m.Roles[iNdEx])) - i-- - dAtA[i] = 0x28 - } - } - if len(m.Memberships) > 0 { - for iNdEx := len(m.Memberships) - 1; iNdEx >= 0; iNdEx-- { - i = encodeVarintControl(dAtA, i, uint64(m.Memberships[iNdEx])) - i-- - dAtA[i] = 0x20 - } - } - if len(m.Labels) > 0 { - for k := range m.Labels { - v := m.Labels[k] - baseI := i - i -= len(v) - copy(dAtA[i:], v) - i = encodeVarintControl(dAtA, i, uint64(len(v))) - i-- - dAtA[i] = 0x12 - i -= len(k) - copy(dAtA[i:], k) - i = encodeVarintControl(dAtA, i, uint64(len(k))) - i-- - dAtA[i] = 0xa - i = encodeVarintControl(dAtA, i, uint64(baseI-i)) - i-- - dAtA[i] = 0x1a - } - } - if len(m.IDPrefixes) > 0 { - for iNdEx := len(m.IDPrefixes) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.IDPrefixes[iNdEx]) - copy(dAtA[i:], m.IDPrefixes[iNdEx]) - i = encodeVarintControl(dAtA, i, uint64(len(m.IDPrefixes[iNdEx]))) - i-- - dAtA[i] = 0x12 - } - } - if len(m.Names) > 0 { - for iNdEx := len(m.Names) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.Names[iNdEx]) - copy(dAtA[i:], m.Names[iNdEx]) - i = encodeVarintControl(dAtA, i, uint64(len(m.Names[iNdEx]))) - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func (m *ListNodesResponse) 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 *ListNodesResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ListNodesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Nodes) > 0 { - for iNdEx := len(m.Nodes) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Nodes[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func (m *UpdateNodeRequest) 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 *UpdateNodeRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *UpdateNodeRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Spec != nil { - { - size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - } - if m.NodeVersion != nil { - { - size, err := m.NodeVersion.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - if len(m.NodeID) > 0 { - i -= len(m.NodeID) - copy(dAtA[i:], m.NodeID) - i = encodeVarintControl(dAtA, i, uint64(len(m.NodeID))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *UpdateNodeResponse) 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 *UpdateNodeResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *UpdateNodeResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Node != nil { - { - size, err := m.Node.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *RemoveNodeRequest) 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 *RemoveNodeRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *RemoveNodeRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Force { - i-- - if m.Force { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x10 - } - if len(m.NodeID) > 0 { - i -= len(m.NodeID) - copy(dAtA[i:], m.NodeID) - i = encodeVarintControl(dAtA, i, uint64(len(m.NodeID))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *RemoveNodeResponse) 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 *RemoveNodeResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *RemoveNodeResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil -} - -func (m *GetTaskRequest) 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 *GetTaskRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *GetTaskRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.TaskID) > 0 { - i -= len(m.TaskID) - copy(dAtA[i:], m.TaskID) - i = encodeVarintControl(dAtA, i, uint64(len(m.TaskID))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *GetTaskResponse) 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 *GetTaskResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *GetTaskResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Task != nil { - { - size, err := m.Task.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *RemoveTaskRequest) 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 *RemoveTaskRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *RemoveTaskRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.TaskID) > 0 { - i -= len(m.TaskID) - copy(dAtA[i:], m.TaskID) - i = encodeVarintControl(dAtA, i, uint64(len(m.TaskID))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *RemoveTaskResponse) 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 *RemoveTaskResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *RemoveTaskResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil -} - -func (m *ListTasksRequest) 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 *ListTasksRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ListTasksRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Filters != nil { - { - size, err := m.Filters.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *ListTasksRequest_Filters) 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 *ListTasksRequest_Filters) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ListTasksRequest_Filters) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Runtimes) > 0 { - for iNdEx := len(m.Runtimes) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.Runtimes[iNdEx]) - copy(dAtA[i:], m.Runtimes[iNdEx]) - i = encodeVarintControl(dAtA, i, uint64(len(m.Runtimes[iNdEx]))) - i-- - dAtA[i] = 0x4a - } - } - if m.UpToDate { - i-- - if m.UpToDate { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x40 - } - if len(m.NamePrefixes) > 0 { - for iNdEx := len(m.NamePrefixes) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.NamePrefixes[iNdEx]) - copy(dAtA[i:], m.NamePrefixes[iNdEx]) - i = encodeVarintControl(dAtA, i, uint64(len(m.NamePrefixes[iNdEx]))) - i-- - dAtA[i] = 0x3a - } - } - if len(m.DesiredStates) > 0 { - for iNdEx := len(m.DesiredStates) - 1; iNdEx >= 0; iNdEx-- { - i = encodeVarintControl(dAtA, i, uint64(m.DesiredStates[iNdEx])) - i-- - dAtA[i] = 0x30 - } - } - if len(m.NodeIDs) > 0 { - for iNdEx := len(m.NodeIDs) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.NodeIDs[iNdEx]) - copy(dAtA[i:], m.NodeIDs[iNdEx]) - i = encodeVarintControl(dAtA, i, uint64(len(m.NodeIDs[iNdEx]))) - i-- - dAtA[i] = 0x2a - } - } - if len(m.ServiceIDs) > 0 { - for iNdEx := len(m.ServiceIDs) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.ServiceIDs[iNdEx]) - copy(dAtA[i:], m.ServiceIDs[iNdEx]) - i = encodeVarintControl(dAtA, i, uint64(len(m.ServiceIDs[iNdEx]))) - i-- - dAtA[i] = 0x22 - } - } - if len(m.Labels) > 0 { - for k := range m.Labels { - v := m.Labels[k] - baseI := i - i -= len(v) - copy(dAtA[i:], v) - i = encodeVarintControl(dAtA, i, uint64(len(v))) - i-- - dAtA[i] = 0x12 - i -= len(k) - copy(dAtA[i:], k) - i = encodeVarintControl(dAtA, i, uint64(len(k))) - i-- - dAtA[i] = 0xa - i = encodeVarintControl(dAtA, i, uint64(baseI-i)) - i-- - dAtA[i] = 0x1a - } - } - if len(m.IDPrefixes) > 0 { - for iNdEx := len(m.IDPrefixes) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.IDPrefixes[iNdEx]) - copy(dAtA[i:], m.IDPrefixes[iNdEx]) - i = encodeVarintControl(dAtA, i, uint64(len(m.IDPrefixes[iNdEx]))) - i-- - dAtA[i] = 0x12 - } - } - if len(m.Names) > 0 { - for iNdEx := len(m.Names) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.Names[iNdEx]) - copy(dAtA[i:], m.Names[iNdEx]) - i = encodeVarintControl(dAtA, i, uint64(len(m.Names[iNdEx]))) - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func (m *ListTasksResponse) 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 *ListTasksResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ListTasksResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Tasks) > 0 { - for iNdEx := len(m.Tasks) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Tasks[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func (m *CreateServiceRequest) 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 *CreateServiceRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *CreateServiceRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Spec != nil { - { - size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *CreateServiceResponse) 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 *CreateServiceResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *CreateServiceResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Service != nil { - { - size, err := m.Service.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *GetServiceRequest) 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 *GetServiceRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *GetServiceRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.InsertDefaults { - i-- - if m.InsertDefaults { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x10 - } - if len(m.ServiceID) > 0 { - i -= len(m.ServiceID) - copy(dAtA[i:], m.ServiceID) - i = encodeVarintControl(dAtA, i, uint64(len(m.ServiceID))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *GetServiceResponse) 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 *GetServiceResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *GetServiceResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Service != nil { - { - size, err := m.Service.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *UpdateServiceRequest) 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 *UpdateServiceRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *UpdateServiceRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Rollback != 0 { - i = encodeVarintControl(dAtA, i, uint64(m.Rollback)) - i-- - dAtA[i] = 0x20 - } - if m.Spec != nil { - { - size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - } - if m.ServiceVersion != nil { - { - size, err := m.ServiceVersion.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - if len(m.ServiceID) > 0 { - i -= len(m.ServiceID) - copy(dAtA[i:], m.ServiceID) - i = encodeVarintControl(dAtA, i, uint64(len(m.ServiceID))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *UpdateServiceResponse) 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 *UpdateServiceResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *UpdateServiceResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Service != nil { - { - size, err := m.Service.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *RemoveServiceRequest) 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 *RemoveServiceRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *RemoveServiceRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.ServiceID) > 0 { - i -= len(m.ServiceID) - copy(dAtA[i:], m.ServiceID) - i = encodeVarintControl(dAtA, i, uint64(len(m.ServiceID))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *RemoveServiceResponse) 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 *RemoveServiceResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *RemoveServiceResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil -} - -func (m *ListServicesRequest) 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 *ListServicesRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ListServicesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Filters != nil { - { - size, err := m.Filters.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *ListServicesRequest_Filters) 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 *ListServicesRequest_Filters) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ListServicesRequest_Filters) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Runtimes) > 0 { - for iNdEx := len(m.Runtimes) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.Runtimes[iNdEx]) - copy(dAtA[i:], m.Runtimes[iNdEx]) - i = encodeVarintControl(dAtA, i, uint64(len(m.Runtimes[iNdEx]))) - i-- - dAtA[i] = 0x2a - } - } - if len(m.NamePrefixes) > 0 { - for iNdEx := len(m.NamePrefixes) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.NamePrefixes[iNdEx]) - copy(dAtA[i:], m.NamePrefixes[iNdEx]) - i = encodeVarintControl(dAtA, i, uint64(len(m.NamePrefixes[iNdEx]))) - i-- - dAtA[i] = 0x22 - } - } - if len(m.Labels) > 0 { - for k := range m.Labels { - v := m.Labels[k] - baseI := i - i -= len(v) - copy(dAtA[i:], v) - i = encodeVarintControl(dAtA, i, uint64(len(v))) - i-- - dAtA[i] = 0x12 - i -= len(k) - copy(dAtA[i:], k) - i = encodeVarintControl(dAtA, i, uint64(len(k))) - i-- - dAtA[i] = 0xa - i = encodeVarintControl(dAtA, i, uint64(baseI-i)) - i-- - dAtA[i] = 0x1a - } - } - if len(m.IDPrefixes) > 0 { - for iNdEx := len(m.IDPrefixes) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.IDPrefixes[iNdEx]) - copy(dAtA[i:], m.IDPrefixes[iNdEx]) - i = encodeVarintControl(dAtA, i, uint64(len(m.IDPrefixes[iNdEx]))) - i-- - dAtA[i] = 0x12 - } - } - if len(m.Names) > 0 { - for iNdEx := len(m.Names) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.Names[iNdEx]) - copy(dAtA[i:], m.Names[iNdEx]) - i = encodeVarintControl(dAtA, i, uint64(len(m.Names[iNdEx]))) - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func (m *ListServicesResponse) 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 *ListServicesResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ListServicesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Services) > 0 { - for iNdEx := len(m.Services) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Services[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func (m *ListServiceStatusesRequest) 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 *ListServiceStatusesRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ListServiceStatusesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Services) > 0 { - for iNdEx := len(m.Services) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.Services[iNdEx]) - copy(dAtA[i:], m.Services[iNdEx]) - i = encodeVarintControl(dAtA, i, uint64(len(m.Services[iNdEx]))) - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func (m *ListServiceStatusesResponse) 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 *ListServiceStatusesResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ListServiceStatusesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Statuses) > 0 { - for iNdEx := len(m.Statuses) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Statuses[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func (m *ListServiceStatusesResponse_ServiceStatus) 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 *ListServiceStatusesResponse_ServiceStatus) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ListServiceStatusesResponse_ServiceStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.CompletedTasks != 0 { - i = encodeVarintControl(dAtA, i, uint64(m.CompletedTasks)) - i-- - dAtA[i] = 0x20 - } - if m.RunningTasks != 0 { - i = encodeVarintControl(dAtA, i, uint64(m.RunningTasks)) - i-- - dAtA[i] = 0x18 - } - if m.DesiredTasks != 0 { - i = encodeVarintControl(dAtA, i, uint64(m.DesiredTasks)) - i-- - dAtA[i] = 0x10 - } - if len(m.ServiceID) > 0 { - i -= len(m.ServiceID) - copy(dAtA[i:], m.ServiceID) - i = encodeVarintControl(dAtA, i, uint64(len(m.ServiceID))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *CreateNetworkRequest) 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 *CreateNetworkRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *CreateNetworkRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Spec != nil { - { - size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *CreateNetworkResponse) 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 *CreateNetworkResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *CreateNetworkResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Network != nil { - { - size, err := m.Network.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *GetNetworkRequest) 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 *GetNetworkRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *GetNetworkRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Appdata != nil { - { - size, err := m.Appdata.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - } - if len(m.NetworkID) > 0 { - i -= len(m.NetworkID) - copy(dAtA[i:], m.NetworkID) - i = encodeVarintControl(dAtA, i, uint64(len(m.NetworkID))) - i-- - dAtA[i] = 0x12 - } - if len(m.Name) > 0 { - i -= len(m.Name) - copy(dAtA[i:], m.Name) - i = encodeVarintControl(dAtA, i, uint64(len(m.Name))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *GetNetworkResponse) 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 *GetNetworkResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *GetNetworkResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Network != nil { - { - size, err := m.Network.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *RemoveNetworkRequest) 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 *RemoveNetworkRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *RemoveNetworkRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.NetworkID) > 0 { - i -= len(m.NetworkID) - copy(dAtA[i:], m.NetworkID) - i = encodeVarintControl(dAtA, i, uint64(len(m.NetworkID))) - i-- - dAtA[i] = 0x12 - } - if len(m.Name) > 0 { - i -= len(m.Name) - copy(dAtA[i:], m.Name) - i = encodeVarintControl(dAtA, i, uint64(len(m.Name))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *RemoveNetworkResponse) 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 *RemoveNetworkResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *RemoveNetworkResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil -} - -func (m *ListNetworksRequest) 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 *ListNetworksRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ListNetworksRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Appdata != nil { - { - size, err := m.Appdata.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - if m.Filters != nil { - { - size, err := m.Filters.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *ListNetworksRequest_Filters) 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 *ListNetworksRequest_Filters) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ListNetworksRequest_Filters) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.NamePrefixes) > 0 { - for iNdEx := len(m.NamePrefixes) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.NamePrefixes[iNdEx]) - copy(dAtA[i:], m.NamePrefixes[iNdEx]) - i = encodeVarintControl(dAtA, i, uint64(len(m.NamePrefixes[iNdEx]))) - i-- - dAtA[i] = 0x22 - } - } - if len(m.Labels) > 0 { - for k := range m.Labels { - v := m.Labels[k] - baseI := i - i -= len(v) - copy(dAtA[i:], v) - i = encodeVarintControl(dAtA, i, uint64(len(v))) - i-- - dAtA[i] = 0x12 - i -= len(k) - copy(dAtA[i:], k) - i = encodeVarintControl(dAtA, i, uint64(len(k))) - i-- - dAtA[i] = 0xa - i = encodeVarintControl(dAtA, i, uint64(baseI-i)) - i-- - dAtA[i] = 0x1a - } - } - if len(m.IDPrefixes) > 0 { - for iNdEx := len(m.IDPrefixes) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.IDPrefixes[iNdEx]) - copy(dAtA[i:], m.IDPrefixes[iNdEx]) - i = encodeVarintControl(dAtA, i, uint64(len(m.IDPrefixes[iNdEx]))) - i-- - dAtA[i] = 0x12 - } - } - if len(m.Names) > 0 { - for iNdEx := len(m.Names) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.Names[iNdEx]) - copy(dAtA[i:], m.Names[iNdEx]) - i = encodeVarintControl(dAtA, i, uint64(len(m.Names[iNdEx]))) - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func (m *ListNetworksResponse) 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 *ListNetworksResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ListNetworksResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Networks) > 0 { - for iNdEx := len(m.Networks) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Networks[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func (m *GetClusterRequest) 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 *GetClusterRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *GetClusterRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.ClusterID) > 0 { - i -= len(m.ClusterID) - copy(dAtA[i:], m.ClusterID) - i = encodeVarintControl(dAtA, i, uint64(len(m.ClusterID))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *GetClusterResponse) 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 *GetClusterResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *GetClusterResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Cluster != nil { - { - size, err := m.Cluster.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *ListClustersRequest) 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 *ListClustersRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ListClustersRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Filters != nil { - { - size, err := m.Filters.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *ListClustersRequest_Filters) 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 *ListClustersRequest_Filters) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ListClustersRequest_Filters) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.NamePrefixes) > 0 { - for iNdEx := len(m.NamePrefixes) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.NamePrefixes[iNdEx]) - copy(dAtA[i:], m.NamePrefixes[iNdEx]) - i = encodeVarintControl(dAtA, i, uint64(len(m.NamePrefixes[iNdEx]))) - i-- - dAtA[i] = 0x22 - } - } - if len(m.Labels) > 0 { - for k := range m.Labels { - v := m.Labels[k] - baseI := i - i -= len(v) - copy(dAtA[i:], v) - i = encodeVarintControl(dAtA, i, uint64(len(v))) - i-- - dAtA[i] = 0x12 - i -= len(k) - copy(dAtA[i:], k) - i = encodeVarintControl(dAtA, i, uint64(len(k))) - i-- - dAtA[i] = 0xa - i = encodeVarintControl(dAtA, i, uint64(baseI-i)) - i-- - dAtA[i] = 0x1a - } - } - if len(m.IDPrefixes) > 0 { - for iNdEx := len(m.IDPrefixes) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.IDPrefixes[iNdEx]) - copy(dAtA[i:], m.IDPrefixes[iNdEx]) - i = encodeVarintControl(dAtA, i, uint64(len(m.IDPrefixes[iNdEx]))) - i-- - dAtA[i] = 0x12 - } - } - if len(m.Names) > 0 { - for iNdEx := len(m.Names) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.Names[iNdEx]) - copy(dAtA[i:], m.Names[iNdEx]) - i = encodeVarintControl(dAtA, i, uint64(len(m.Names[iNdEx]))) - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func (m *ListClustersResponse) 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 *ListClustersResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ListClustersResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Clusters) > 0 { - for iNdEx := len(m.Clusters) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Clusters[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func (m *KeyRotation) 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 *KeyRotation) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *KeyRotation) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.ManagerUnlockKey { - i-- - if m.ManagerUnlockKey { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x18 - } - if m.ManagerJoinToken { - i-- - if m.ManagerJoinToken { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x10 - } - if m.WorkerJoinToken { - i-- - if m.WorkerJoinToken { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *UpdateClusterRequest) 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 *UpdateClusterRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *UpdateClusterRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size, err := m.Rotation.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - if m.Spec != nil { - { - size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - } - if m.ClusterVersion != nil { - { - size, err := m.ClusterVersion.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - if len(m.ClusterID) > 0 { - i -= len(m.ClusterID) - copy(dAtA[i:], m.ClusterID) - i = encodeVarintControl(dAtA, i, uint64(len(m.ClusterID))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *UpdateClusterResponse) 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 *UpdateClusterResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *UpdateClusterResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Cluster != nil { - { - size, err := m.Cluster.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *GetSecretRequest) 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 *GetSecretRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *GetSecretRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.SecretID) > 0 { - i -= len(m.SecretID) - copy(dAtA[i:], m.SecretID) - i = encodeVarintControl(dAtA, i, uint64(len(m.SecretID))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *GetSecretResponse) 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 *GetSecretResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *GetSecretResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Secret != nil { - { - size, err := m.Secret.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *UpdateSecretRequest) 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 *UpdateSecretRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *UpdateSecretRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Spec != nil { - { - size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - } - if m.SecretVersion != nil { - { - size, err := m.SecretVersion.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - if len(m.SecretID) > 0 { - i -= len(m.SecretID) - copy(dAtA[i:], m.SecretID) - i = encodeVarintControl(dAtA, i, uint64(len(m.SecretID))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *UpdateSecretResponse) 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 *UpdateSecretResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *UpdateSecretResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Secret != nil { - { - size, err := m.Secret.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *ListSecretsRequest) 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 *ListSecretsRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ListSecretsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Filters != nil { - { - size, err := m.Filters.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *ListSecretsRequest_Filters) 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 *ListSecretsRequest_Filters) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ListSecretsRequest_Filters) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.NamePrefixes) > 0 { - for iNdEx := len(m.NamePrefixes) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.NamePrefixes[iNdEx]) - copy(dAtA[i:], m.NamePrefixes[iNdEx]) - i = encodeVarintControl(dAtA, i, uint64(len(m.NamePrefixes[iNdEx]))) - i-- - dAtA[i] = 0x22 - } - } - if len(m.Labels) > 0 { - for k := range m.Labels { - v := m.Labels[k] - baseI := i - i -= len(v) - copy(dAtA[i:], v) - i = encodeVarintControl(dAtA, i, uint64(len(v))) - i-- - dAtA[i] = 0x12 - i -= len(k) - copy(dAtA[i:], k) - i = encodeVarintControl(dAtA, i, uint64(len(k))) - i-- - dAtA[i] = 0xa - i = encodeVarintControl(dAtA, i, uint64(baseI-i)) - i-- - dAtA[i] = 0x1a - } - } - if len(m.IDPrefixes) > 0 { - for iNdEx := len(m.IDPrefixes) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.IDPrefixes[iNdEx]) - copy(dAtA[i:], m.IDPrefixes[iNdEx]) - i = encodeVarintControl(dAtA, i, uint64(len(m.IDPrefixes[iNdEx]))) - i-- - dAtA[i] = 0x12 - } - } - if len(m.Names) > 0 { - for iNdEx := len(m.Names) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.Names[iNdEx]) - copy(dAtA[i:], m.Names[iNdEx]) - i = encodeVarintControl(dAtA, i, uint64(len(m.Names[iNdEx]))) - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func (m *ListSecretsResponse) 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 *ListSecretsResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ListSecretsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Secrets) > 0 { - for iNdEx := len(m.Secrets) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Secrets[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func (m *CreateSecretRequest) 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 *CreateSecretRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *CreateSecretRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Spec != nil { - { - size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *CreateSecretResponse) 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 *CreateSecretResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *CreateSecretResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Secret != nil { - { - size, err := m.Secret.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *RemoveSecretRequest) 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 *RemoveSecretRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *RemoveSecretRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.SecretID) > 0 { - i -= len(m.SecretID) - copy(dAtA[i:], m.SecretID) - i = encodeVarintControl(dAtA, i, uint64(len(m.SecretID))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *RemoveSecretResponse) 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 *RemoveSecretResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *RemoveSecretResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil -} - -func (m *GetConfigRequest) 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 *GetConfigRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *GetConfigRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.ConfigID) > 0 { - i -= len(m.ConfigID) - copy(dAtA[i:], m.ConfigID) - i = encodeVarintControl(dAtA, i, uint64(len(m.ConfigID))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *GetConfigResponse) 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 *GetConfigResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *GetConfigResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Config != nil { - { - size, err := m.Config.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *UpdateConfigRequest) 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 *UpdateConfigRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *UpdateConfigRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Spec != nil { - { - size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - } - if m.ConfigVersion != nil { - { - size, err := m.ConfigVersion.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - if len(m.ConfigID) > 0 { - i -= len(m.ConfigID) - copy(dAtA[i:], m.ConfigID) - i = encodeVarintControl(dAtA, i, uint64(len(m.ConfigID))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *UpdateConfigResponse) 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 *UpdateConfigResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *UpdateConfigResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Config != nil { - { - size, err := m.Config.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *ListConfigsRequest) 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 *ListConfigsRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ListConfigsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Filters != nil { - { - size, err := m.Filters.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *ListConfigsRequest_Filters) 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 *ListConfigsRequest_Filters) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ListConfigsRequest_Filters) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.NamePrefixes) > 0 { - for iNdEx := len(m.NamePrefixes) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.NamePrefixes[iNdEx]) - copy(dAtA[i:], m.NamePrefixes[iNdEx]) - i = encodeVarintControl(dAtA, i, uint64(len(m.NamePrefixes[iNdEx]))) - i-- - dAtA[i] = 0x22 - } - } - if len(m.Labels) > 0 { - for k := range m.Labels { - v := m.Labels[k] - baseI := i - i -= len(v) - copy(dAtA[i:], v) - i = encodeVarintControl(dAtA, i, uint64(len(v))) - i-- - dAtA[i] = 0x12 - i -= len(k) - copy(dAtA[i:], k) - i = encodeVarintControl(dAtA, i, uint64(len(k))) - i-- - dAtA[i] = 0xa - i = encodeVarintControl(dAtA, i, uint64(baseI-i)) - i-- - dAtA[i] = 0x1a - } - } - if len(m.IDPrefixes) > 0 { - for iNdEx := len(m.IDPrefixes) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.IDPrefixes[iNdEx]) - copy(dAtA[i:], m.IDPrefixes[iNdEx]) - i = encodeVarintControl(dAtA, i, uint64(len(m.IDPrefixes[iNdEx]))) - i-- - dAtA[i] = 0x12 - } - } - if len(m.Names) > 0 { - for iNdEx := len(m.Names) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.Names[iNdEx]) - copy(dAtA[i:], m.Names[iNdEx]) - i = encodeVarintControl(dAtA, i, uint64(len(m.Names[iNdEx]))) - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func (m *ListConfigsResponse) 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 *ListConfigsResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ListConfigsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Configs) > 0 { - for iNdEx := len(m.Configs) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Configs[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func (m *CreateConfigRequest) 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 *CreateConfigRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *CreateConfigRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Spec != nil { - { - size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *CreateConfigResponse) 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 *CreateConfigResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *CreateConfigResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Config != nil { - { - size, err := m.Config.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *RemoveConfigRequest) 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 *RemoveConfigRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *RemoveConfigRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.ConfigID) > 0 { - i -= len(m.ConfigID) - copy(dAtA[i:], m.ConfigID) - i = encodeVarintControl(dAtA, i, uint64(len(m.ConfigID))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *RemoveConfigResponse) 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 *RemoveConfigResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *RemoveConfigResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil -} - -func (m *CreateExtensionRequest) 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 *CreateExtensionRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *CreateExtensionRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Description) > 0 { - i -= len(m.Description) - copy(dAtA[i:], m.Description) - i = encodeVarintControl(dAtA, i, uint64(len(m.Description))) - i-- - dAtA[i] = 0x12 - } - if m.Annotations != nil { - { - size, err := m.Annotations.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *CreateExtensionResponse) 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 *CreateExtensionResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *CreateExtensionResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Extension != nil { - { - size, err := m.Extension.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *RemoveExtensionRequest) 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 *RemoveExtensionRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *RemoveExtensionRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.ExtensionID) > 0 { - i -= len(m.ExtensionID) - copy(dAtA[i:], m.ExtensionID) - i = encodeVarintControl(dAtA, i, uint64(len(m.ExtensionID))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *RemoveExtensionResponse) 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 *RemoveExtensionResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *RemoveExtensionResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil -} - -func (m *GetExtensionRequest) 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 *GetExtensionRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *GetExtensionRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.ExtensionID) > 0 { - i -= len(m.ExtensionID) - copy(dAtA[i:], m.ExtensionID) - i = encodeVarintControl(dAtA, i, uint64(len(m.ExtensionID))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *GetExtensionResponse) 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 *GetExtensionResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *GetExtensionResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Extension != nil { - { - size, err := m.Extension.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *CreateResourceRequest) 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 *CreateResourceRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *CreateResourceRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Payload != nil { - { - size, err := m.Payload.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - } - if len(m.Kind) > 0 { - i -= len(m.Kind) - copy(dAtA[i:], m.Kind) - i = encodeVarintControl(dAtA, i, uint64(len(m.Kind))) - i-- - dAtA[i] = 0x12 - } - if m.Annotations != nil { - { - size, err := m.Annotations.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *CreateResourceResponse) 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 *CreateResourceResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *CreateResourceResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Resource != nil { - { - size, err := m.Resource.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *RemoveResourceRequest) 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 *RemoveResourceRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *RemoveResourceRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.ResourceID) > 0 { - i -= len(m.ResourceID) - copy(dAtA[i:], m.ResourceID) - i = encodeVarintControl(dAtA, i, uint64(len(m.ResourceID))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *RemoveResourceResponse) 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 *RemoveResourceResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *RemoveResourceResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil -} - -func (m *UpdateResourceRequest) 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 *UpdateResourceRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *UpdateResourceRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Payload != nil { - { - size, err := m.Payload.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - } - if m.Annotations != nil { - { - size, err := m.Annotations.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - } - if m.ResourceVersion != nil { - { - size, err := m.ResourceVersion.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - if len(m.ResourceID) > 0 { - i -= len(m.ResourceID) - copy(dAtA[i:], m.ResourceID) - i = encodeVarintControl(dAtA, i, uint64(len(m.ResourceID))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *UpdateResourceResponse) 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 *UpdateResourceResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *UpdateResourceResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Resource != nil { - { - size, err := m.Resource.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *GetResourceRequest) 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 *GetResourceRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *GetResourceRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.ResourceID) > 0 { - i -= len(m.ResourceID) - copy(dAtA[i:], m.ResourceID) - i = encodeVarintControl(dAtA, i, uint64(len(m.ResourceID))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *GetResourceResponse) 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 *GetResourceResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *GetResourceResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Resource != nil { - { - size, err := m.Resource.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *ListResourcesRequest) 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 *ListResourcesRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ListResourcesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Filters != nil { - { - size, err := m.Filters.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *ListResourcesRequest_Filters) 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 *ListResourcesRequest_Filters) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ListResourcesRequest_Filters) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Kind) > 0 { - i -= len(m.Kind) - copy(dAtA[i:], m.Kind) - i = encodeVarintControl(dAtA, i, uint64(len(m.Kind))) - i-- - dAtA[i] = 0x2a - } - if len(m.NamePrefixes) > 0 { - for iNdEx := len(m.NamePrefixes) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.NamePrefixes[iNdEx]) - copy(dAtA[i:], m.NamePrefixes[iNdEx]) - i = encodeVarintControl(dAtA, i, uint64(len(m.NamePrefixes[iNdEx]))) - i-- - dAtA[i] = 0x22 - } - } - if len(m.Labels) > 0 { - for k := range m.Labels { - v := m.Labels[k] - baseI := i - i -= len(v) - copy(dAtA[i:], v) - i = encodeVarintControl(dAtA, i, uint64(len(v))) - i-- - dAtA[i] = 0x12 - i -= len(k) - copy(dAtA[i:], k) - i = encodeVarintControl(dAtA, i, uint64(len(k))) - i-- - dAtA[i] = 0xa - i = encodeVarintControl(dAtA, i, uint64(baseI-i)) - i-- - dAtA[i] = 0x1a - } - } - if len(m.IDPrefixes) > 0 { - for iNdEx := len(m.IDPrefixes) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.IDPrefixes[iNdEx]) - copy(dAtA[i:], m.IDPrefixes[iNdEx]) - i = encodeVarintControl(dAtA, i, uint64(len(m.IDPrefixes[iNdEx]))) - i-- - dAtA[i] = 0x12 - } - } - if len(m.Names) > 0 { - for iNdEx := len(m.Names) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.Names[iNdEx]) - copy(dAtA[i:], m.Names[iNdEx]) - i = encodeVarintControl(dAtA, i, uint64(len(m.Names[iNdEx]))) - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func (m *ListResourcesResponse) 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 *ListResourcesResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ListResourcesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Resources) > 0 { - for iNdEx := len(m.Resources) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Resources[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func (m *CreateVolumeRequest) 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 *CreateVolumeRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *CreateVolumeRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Spec != nil { - { - size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *CreateVolumeResponse) 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 *CreateVolumeResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *CreateVolumeResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Volume != nil { - { - size, err := m.Volume.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *GetVolumeRequest) 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 *GetVolumeRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *GetVolumeRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.VolumeID) > 0 { - i -= len(m.VolumeID) - copy(dAtA[i:], m.VolumeID) - i = encodeVarintControl(dAtA, i, uint64(len(m.VolumeID))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *GetVolumeResponse) 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 *GetVolumeResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *GetVolumeResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Volume != nil { - { - size, err := m.Volume.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *UpdateVolumeRequest) 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 *UpdateVolumeRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *UpdateVolumeRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Spec != nil { - { - size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - } - if m.VolumeVersion != nil { - { - size, err := m.VolumeVersion.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - if len(m.VolumeID) > 0 { - i -= len(m.VolumeID) - copy(dAtA[i:], m.VolumeID) - i = encodeVarintControl(dAtA, i, uint64(len(m.VolumeID))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *UpdateVolumeResponse) 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 *UpdateVolumeResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *UpdateVolumeResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Volume != nil { - { - size, err := m.Volume.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *ListVolumesRequest) 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 *ListVolumesRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ListVolumesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Filters != nil { - { - size, err := m.Filters.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *ListVolumesRequest_Filters) 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 *ListVolumesRequest_Filters) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ListVolumesRequest_Filters) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Drivers) > 0 { - for iNdEx := len(m.Drivers) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.Drivers[iNdEx]) - copy(dAtA[i:], m.Drivers[iNdEx]) - i = encodeVarintControl(dAtA, i, uint64(len(m.Drivers[iNdEx]))) - i-- - dAtA[i] = 0x32 - } - } - if len(m.Groups) > 0 { - for iNdEx := len(m.Groups) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.Groups[iNdEx]) - copy(dAtA[i:], m.Groups[iNdEx]) - i = encodeVarintControl(dAtA, i, uint64(len(m.Groups[iNdEx]))) - i-- - dAtA[i] = 0x2a - } - } - if len(m.NamePrefixes) > 0 { - for iNdEx := len(m.NamePrefixes) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.NamePrefixes[iNdEx]) - copy(dAtA[i:], m.NamePrefixes[iNdEx]) - i = encodeVarintControl(dAtA, i, uint64(len(m.NamePrefixes[iNdEx]))) - i-- - dAtA[i] = 0x22 - } - } - if len(m.Labels) > 0 { - for k := range m.Labels { - v := m.Labels[k] - baseI := i - i -= len(v) - copy(dAtA[i:], v) - i = encodeVarintControl(dAtA, i, uint64(len(v))) - i-- - dAtA[i] = 0x12 - i -= len(k) - copy(dAtA[i:], k) - i = encodeVarintControl(dAtA, i, uint64(len(k))) - i-- - dAtA[i] = 0xa - i = encodeVarintControl(dAtA, i, uint64(baseI-i)) - i-- - dAtA[i] = 0x1a - } - } - if len(m.IDPrefixes) > 0 { - for iNdEx := len(m.IDPrefixes) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.IDPrefixes[iNdEx]) - copy(dAtA[i:], m.IDPrefixes[iNdEx]) - i = encodeVarintControl(dAtA, i, uint64(len(m.IDPrefixes[iNdEx]))) - i-- - dAtA[i] = 0x12 - } - } - if len(m.Names) > 0 { - for iNdEx := len(m.Names) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.Names[iNdEx]) - copy(dAtA[i:], m.Names[iNdEx]) - i = encodeVarintControl(dAtA, i, uint64(len(m.Names[iNdEx]))) - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func (m *ListVolumesResponse) 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 *ListVolumesResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ListVolumesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Volumes) > 0 { - for iNdEx := len(m.Volumes) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Volumes[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintControl(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func (m *RemoveVolumeRequest) 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 *RemoveVolumeRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *RemoveVolumeRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Force { - i-- - if m.Force { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x10 - } - if len(m.VolumeID) > 0 { - i -= len(m.VolumeID) - copy(dAtA[i:], m.VolumeID) - i = encodeVarintControl(dAtA, i, uint64(len(m.VolumeID))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *RemoveVolumeResponse) 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 *RemoveVolumeResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *RemoveVolumeResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil -} - -func encodeVarintControl(dAtA []byte, offset int, v uint64) int { - offset -= sovControl(v) - base := offset - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return base -} - -type raftProxyControlServer struct { - local ControlServer - connSelector raftselector.ConnProvider - localCtxMods, remoteCtxMods []func(context.Context) (context.Context, error) -} - -func NewRaftProxyControlServer(local ControlServer, connSelector raftselector.ConnProvider, localCtxMod, remoteCtxMod func(context.Context) (context.Context, error)) ControlServer { - redirectChecker := func(ctx context.Context) (context.Context, error) { - p, ok := peer.FromContext(ctx) - if !ok { - return ctx, status.Errorf(codes.InvalidArgument, "remote addr is not found in context") - } - addr := p.Addr.String() - md, ok := metadata.FromIncomingContext(ctx) - if ok && len(md["redirect"]) != 0 { - return ctx, status.Errorf(codes.ResourceExhausted, "more than one redirect to leader from: %s", md["redirect"]) - } - if !ok { - md = metadata.New(map[string]string{}) - } - md["redirect"] = append(md["redirect"], addr) - return metadata.NewOutgoingContext(ctx, md), nil - } - remoteMods := []func(context.Context) (context.Context, error){redirectChecker} - remoteMods = append(remoteMods, remoteCtxMod) - - var localMods []func(context.Context) (context.Context, error) - if localCtxMod != nil { - localMods = []func(context.Context) (context.Context, error){localCtxMod} - } - - return &raftProxyControlServer{ - local: local, - connSelector: connSelector, - localCtxMods: localMods, - remoteCtxMods: remoteMods, - } -} -func (p *raftProxyControlServer) runCtxMods(ctx context.Context, ctxMods []func(context.Context) (context.Context, error)) (context.Context, error) { - var err error - for _, mod := range ctxMods { - ctx, err = mod(ctx) - if err != nil { - return ctx, err - } - } - return ctx, nil -} -func (p *raftProxyControlServer) pollNewLeaderConn(ctx context.Context) (*grpc.ClientConn, error) { - ticker := rafttime.NewTicker(500 * rafttime.Millisecond) - defer ticker.Stop() - for { - select { - case <-ticker.C: - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - return nil, err - } - - client := NewHealthClient(conn) - - resp, err := client.Check(ctx, &HealthCheckRequest{Service: "Raft"}) - if err != nil || resp.Status != HealthCheckResponse_SERVING { - continue - } - return conn, nil - case <-ctx.Done(): - return nil, ctx.Err() - } - } -} - -func (p *raftProxyControlServer) GetNode(ctx context.Context, r *GetNodeRequest) (*GetNodeResponse, error) { - - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return nil, err - } - return p.local.GetNode(ctx, r) - } - return nil, err - } - modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return nil, err - } - - resp, err := NewControlClient(conn).GetNode(modCtx, r) - if err != nil { - if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { - return resp, err - } - conn, err := p.pollNewLeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - return p.local.GetNode(ctx, r) - } - return nil, err - } - return NewControlClient(conn).GetNode(modCtx, r) - } - return resp, err -} - -func (p *raftProxyControlServer) ListNodes(ctx context.Context, r *ListNodesRequest) (*ListNodesResponse, error) { - - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return nil, err - } - return p.local.ListNodes(ctx, r) - } - return nil, err - } - modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return nil, err - } - - resp, err := NewControlClient(conn).ListNodes(modCtx, r) - if err != nil { - if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { - return resp, err - } - conn, err := p.pollNewLeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - return p.local.ListNodes(ctx, r) - } - return nil, err - } - return NewControlClient(conn).ListNodes(modCtx, r) - } - return resp, err -} - -func (p *raftProxyControlServer) UpdateNode(ctx context.Context, r *UpdateNodeRequest) (*UpdateNodeResponse, error) { - - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return nil, err - } - return p.local.UpdateNode(ctx, r) - } - return nil, err - } - modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return nil, err - } - - resp, err := NewControlClient(conn).UpdateNode(modCtx, r) - if err != nil { - if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { - return resp, err - } - conn, err := p.pollNewLeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - return p.local.UpdateNode(ctx, r) - } - return nil, err - } - return NewControlClient(conn).UpdateNode(modCtx, r) - } - return resp, err -} - -func (p *raftProxyControlServer) RemoveNode(ctx context.Context, r *RemoveNodeRequest) (*RemoveNodeResponse, error) { - - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return nil, err - } - return p.local.RemoveNode(ctx, r) - } - return nil, err - } - modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return nil, err - } - - resp, err := NewControlClient(conn).RemoveNode(modCtx, r) - if err != nil { - if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { - return resp, err - } - conn, err := p.pollNewLeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - return p.local.RemoveNode(ctx, r) - } - return nil, err - } - return NewControlClient(conn).RemoveNode(modCtx, r) - } - return resp, err -} - -func (p *raftProxyControlServer) GetTask(ctx context.Context, r *GetTaskRequest) (*GetTaskResponse, error) { - - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return nil, err - } - return p.local.GetTask(ctx, r) - } - return nil, err - } - modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return nil, err - } - - resp, err := NewControlClient(conn).GetTask(modCtx, r) - if err != nil { - if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { - return resp, err - } - conn, err := p.pollNewLeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - return p.local.GetTask(ctx, r) - } - return nil, err - } - return NewControlClient(conn).GetTask(modCtx, r) - } - return resp, err -} - -func (p *raftProxyControlServer) ListTasks(ctx context.Context, r *ListTasksRequest) (*ListTasksResponse, error) { - - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return nil, err - } - return p.local.ListTasks(ctx, r) - } - return nil, err - } - modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return nil, err - } - - resp, err := NewControlClient(conn).ListTasks(modCtx, r) - if err != nil { - if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { - return resp, err - } - conn, err := p.pollNewLeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - return p.local.ListTasks(ctx, r) - } - return nil, err - } - return NewControlClient(conn).ListTasks(modCtx, r) - } - return resp, err -} - -func (p *raftProxyControlServer) RemoveTask(ctx context.Context, r *RemoveTaskRequest) (*RemoveTaskResponse, error) { - - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return nil, err - } - return p.local.RemoveTask(ctx, r) - } - return nil, err - } - modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return nil, err - } - - resp, err := NewControlClient(conn).RemoveTask(modCtx, r) - if err != nil { - if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { - return resp, err - } - conn, err := p.pollNewLeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - return p.local.RemoveTask(ctx, r) - } - return nil, err - } - return NewControlClient(conn).RemoveTask(modCtx, r) - } - return resp, err -} - -func (p *raftProxyControlServer) GetService(ctx context.Context, r *GetServiceRequest) (*GetServiceResponse, error) { - - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return nil, err - } - return p.local.GetService(ctx, r) - } - return nil, err - } - modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return nil, err - } - - resp, err := NewControlClient(conn).GetService(modCtx, r) - if err != nil { - if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { - return resp, err - } - conn, err := p.pollNewLeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - return p.local.GetService(ctx, r) - } - return nil, err - } - return NewControlClient(conn).GetService(modCtx, r) - } - return resp, err -} - -func (p *raftProxyControlServer) ListServices(ctx context.Context, r *ListServicesRequest) (*ListServicesResponse, error) { - - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return nil, err - } - return p.local.ListServices(ctx, r) - } - return nil, err - } - modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return nil, err - } - - resp, err := NewControlClient(conn).ListServices(modCtx, r) - if err != nil { - if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { - return resp, err - } - conn, err := p.pollNewLeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - return p.local.ListServices(ctx, r) - } - return nil, err - } - return NewControlClient(conn).ListServices(modCtx, r) - } - return resp, err -} - -func (p *raftProxyControlServer) CreateService(ctx context.Context, r *CreateServiceRequest) (*CreateServiceResponse, error) { - - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return nil, err - } - return p.local.CreateService(ctx, r) - } - return nil, err - } - modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return nil, err - } - - resp, err := NewControlClient(conn).CreateService(modCtx, r) - if err != nil { - if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { - return resp, err - } - conn, err := p.pollNewLeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - return p.local.CreateService(ctx, r) - } - return nil, err - } - return NewControlClient(conn).CreateService(modCtx, r) - } - return resp, err -} - -func (p *raftProxyControlServer) UpdateService(ctx context.Context, r *UpdateServiceRequest) (*UpdateServiceResponse, error) { - - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return nil, err - } - return p.local.UpdateService(ctx, r) - } - return nil, err - } - modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return nil, err - } - - resp, err := NewControlClient(conn).UpdateService(modCtx, r) - if err != nil { - if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { - return resp, err - } - conn, err := p.pollNewLeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - return p.local.UpdateService(ctx, r) - } - return nil, err - } - return NewControlClient(conn).UpdateService(modCtx, r) - } - return resp, err -} - -func (p *raftProxyControlServer) RemoveService(ctx context.Context, r *RemoveServiceRequest) (*RemoveServiceResponse, error) { - - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return nil, err - } - return p.local.RemoveService(ctx, r) - } - return nil, err - } - modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return nil, err - } - - resp, err := NewControlClient(conn).RemoveService(modCtx, r) - if err != nil { - if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { - return resp, err - } - conn, err := p.pollNewLeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - return p.local.RemoveService(ctx, r) - } - return nil, err - } - return NewControlClient(conn).RemoveService(modCtx, r) - } - return resp, err -} - -func (p *raftProxyControlServer) ListServiceStatuses(ctx context.Context, r *ListServiceStatusesRequest) (*ListServiceStatusesResponse, error) { - - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return nil, err - } - return p.local.ListServiceStatuses(ctx, r) - } - return nil, err - } - modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return nil, err - } - - resp, err := NewControlClient(conn).ListServiceStatuses(modCtx, r) - if err != nil { - if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { - return resp, err - } - conn, err := p.pollNewLeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - return p.local.ListServiceStatuses(ctx, r) - } - return nil, err - } - return NewControlClient(conn).ListServiceStatuses(modCtx, r) - } - return resp, err -} - -func (p *raftProxyControlServer) GetNetwork(ctx context.Context, r *GetNetworkRequest) (*GetNetworkResponse, error) { - - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return nil, err - } - return p.local.GetNetwork(ctx, r) - } - return nil, err - } - modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return nil, err - } - - resp, err := NewControlClient(conn).GetNetwork(modCtx, r) - if err != nil { - if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { - return resp, err - } - conn, err := p.pollNewLeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - return p.local.GetNetwork(ctx, r) - } - return nil, err - } - return NewControlClient(conn).GetNetwork(modCtx, r) - } - return resp, err -} - -func (p *raftProxyControlServer) ListNetworks(ctx context.Context, r *ListNetworksRequest) (*ListNetworksResponse, error) { - - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return nil, err - } - return p.local.ListNetworks(ctx, r) - } - return nil, err - } - modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return nil, err - } - - resp, err := NewControlClient(conn).ListNetworks(modCtx, r) - if err != nil { - if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { - return resp, err - } - conn, err := p.pollNewLeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - return p.local.ListNetworks(ctx, r) - } - return nil, err - } - return NewControlClient(conn).ListNetworks(modCtx, r) - } - return resp, err -} - -func (p *raftProxyControlServer) CreateNetwork(ctx context.Context, r *CreateNetworkRequest) (*CreateNetworkResponse, error) { - - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return nil, err - } - return p.local.CreateNetwork(ctx, r) - } - return nil, err - } - modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return nil, err - } - - resp, err := NewControlClient(conn).CreateNetwork(modCtx, r) - if err != nil { - if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { - return resp, err - } - conn, err := p.pollNewLeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - return p.local.CreateNetwork(ctx, r) - } - return nil, err - } - return NewControlClient(conn).CreateNetwork(modCtx, r) - } - return resp, err -} - -func (p *raftProxyControlServer) RemoveNetwork(ctx context.Context, r *RemoveNetworkRequest) (*RemoveNetworkResponse, error) { - - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return nil, err - } - return p.local.RemoveNetwork(ctx, r) - } - return nil, err - } - modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return nil, err - } - - resp, err := NewControlClient(conn).RemoveNetwork(modCtx, r) - if err != nil { - if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { - return resp, err - } - conn, err := p.pollNewLeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - return p.local.RemoveNetwork(ctx, r) - } - return nil, err - } - return NewControlClient(conn).RemoveNetwork(modCtx, r) - } - return resp, err -} - -func (p *raftProxyControlServer) GetCluster(ctx context.Context, r *GetClusterRequest) (*GetClusterResponse, error) { - - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return nil, err - } - return p.local.GetCluster(ctx, r) - } - return nil, err - } - modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return nil, err - } - - resp, err := NewControlClient(conn).GetCluster(modCtx, r) - if err != nil { - if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { - return resp, err - } - conn, err := p.pollNewLeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - return p.local.GetCluster(ctx, r) - } - return nil, err - } - return NewControlClient(conn).GetCluster(modCtx, r) - } - return resp, err -} - -func (p *raftProxyControlServer) ListClusters(ctx context.Context, r *ListClustersRequest) (*ListClustersResponse, error) { - - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return nil, err - } - return p.local.ListClusters(ctx, r) - } - return nil, err - } - modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return nil, err - } - - resp, err := NewControlClient(conn).ListClusters(modCtx, r) - if err != nil { - if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { - return resp, err - } - conn, err := p.pollNewLeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - return p.local.ListClusters(ctx, r) - } - return nil, err - } - return NewControlClient(conn).ListClusters(modCtx, r) - } - return resp, err -} - -func (p *raftProxyControlServer) UpdateCluster(ctx context.Context, r *UpdateClusterRequest) (*UpdateClusterResponse, error) { - - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return nil, err - } - return p.local.UpdateCluster(ctx, r) - } - return nil, err - } - modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return nil, err - } - - resp, err := NewControlClient(conn).UpdateCluster(modCtx, r) - if err != nil { - if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { - return resp, err - } - conn, err := p.pollNewLeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - return p.local.UpdateCluster(ctx, r) - } - return nil, err - } - return NewControlClient(conn).UpdateCluster(modCtx, r) - } - return resp, err -} - -func (p *raftProxyControlServer) GetSecret(ctx context.Context, r *GetSecretRequest) (*GetSecretResponse, error) { - - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return nil, err - } - return p.local.GetSecret(ctx, r) - } - return nil, err - } - modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return nil, err - } - - resp, err := NewControlClient(conn).GetSecret(modCtx, r) - if err != nil { - if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { - return resp, err - } - conn, err := p.pollNewLeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - return p.local.GetSecret(ctx, r) - } - return nil, err - } - return NewControlClient(conn).GetSecret(modCtx, r) - } - return resp, err -} - -func (p *raftProxyControlServer) UpdateSecret(ctx context.Context, r *UpdateSecretRequest) (*UpdateSecretResponse, error) { - - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return nil, err - } - return p.local.UpdateSecret(ctx, r) - } - return nil, err - } - modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return nil, err - } - - resp, err := NewControlClient(conn).UpdateSecret(modCtx, r) - if err != nil { - if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { - return resp, err - } - conn, err := p.pollNewLeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - return p.local.UpdateSecret(ctx, r) - } - return nil, err - } - return NewControlClient(conn).UpdateSecret(modCtx, r) - } - return resp, err -} - -func (p *raftProxyControlServer) ListSecrets(ctx context.Context, r *ListSecretsRequest) (*ListSecretsResponse, error) { - - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return nil, err - } - return p.local.ListSecrets(ctx, r) - } - return nil, err - } - modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return nil, err - } - - resp, err := NewControlClient(conn).ListSecrets(modCtx, r) - if err != nil { - if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { - return resp, err - } - conn, err := p.pollNewLeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - return p.local.ListSecrets(ctx, r) - } - return nil, err - } - return NewControlClient(conn).ListSecrets(modCtx, r) - } - return resp, err -} - -func (p *raftProxyControlServer) CreateSecret(ctx context.Context, r *CreateSecretRequest) (*CreateSecretResponse, error) { - - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return nil, err - } - return p.local.CreateSecret(ctx, r) - } - return nil, err - } - modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return nil, err - } - - resp, err := NewControlClient(conn).CreateSecret(modCtx, r) - if err != nil { - if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { - return resp, err - } - conn, err := p.pollNewLeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - return p.local.CreateSecret(ctx, r) - } - return nil, err - } - return NewControlClient(conn).CreateSecret(modCtx, r) - } - return resp, err -} - -func (p *raftProxyControlServer) RemoveSecret(ctx context.Context, r *RemoveSecretRequest) (*RemoveSecretResponse, error) { - - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return nil, err - } - return p.local.RemoveSecret(ctx, r) - } - return nil, err - } - modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return nil, err - } - - resp, err := NewControlClient(conn).RemoveSecret(modCtx, r) - if err != nil { - if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { - return resp, err - } - conn, err := p.pollNewLeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - return p.local.RemoveSecret(ctx, r) - } - return nil, err - } - return NewControlClient(conn).RemoveSecret(modCtx, r) - } - return resp, err -} - -func (p *raftProxyControlServer) GetConfig(ctx context.Context, r *GetConfigRequest) (*GetConfigResponse, error) { - - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return nil, err - } - return p.local.GetConfig(ctx, r) - } - return nil, err - } - modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return nil, err - } - - resp, err := NewControlClient(conn).GetConfig(modCtx, r) - if err != nil { - if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { - return resp, err - } - conn, err := p.pollNewLeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - return p.local.GetConfig(ctx, r) - } - return nil, err - } - return NewControlClient(conn).GetConfig(modCtx, r) - } - return resp, err -} - -func (p *raftProxyControlServer) UpdateConfig(ctx context.Context, r *UpdateConfigRequest) (*UpdateConfigResponse, error) { - - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return nil, err - } - return p.local.UpdateConfig(ctx, r) - } - return nil, err - } - modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return nil, err - } - - resp, err := NewControlClient(conn).UpdateConfig(modCtx, r) - if err != nil { - if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { - return resp, err - } - conn, err := p.pollNewLeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - return p.local.UpdateConfig(ctx, r) - } - return nil, err - } - return NewControlClient(conn).UpdateConfig(modCtx, r) - } - return resp, err -} - -func (p *raftProxyControlServer) ListConfigs(ctx context.Context, r *ListConfigsRequest) (*ListConfigsResponse, error) { - - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return nil, err - } - return p.local.ListConfigs(ctx, r) - } - return nil, err - } - modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return nil, err - } - - resp, err := NewControlClient(conn).ListConfigs(modCtx, r) - if err != nil { - if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { - return resp, err - } - conn, err := p.pollNewLeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - return p.local.ListConfigs(ctx, r) - } - return nil, err - } - return NewControlClient(conn).ListConfigs(modCtx, r) - } - return resp, err -} - -func (p *raftProxyControlServer) CreateConfig(ctx context.Context, r *CreateConfigRequest) (*CreateConfigResponse, error) { - - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return nil, err - } - return p.local.CreateConfig(ctx, r) - } - return nil, err - } - modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return nil, err - } - - resp, err := NewControlClient(conn).CreateConfig(modCtx, r) - if err != nil { - if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { - return resp, err - } - conn, err := p.pollNewLeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - return p.local.CreateConfig(ctx, r) - } - return nil, err - } - return NewControlClient(conn).CreateConfig(modCtx, r) - } - return resp, err -} - -func (p *raftProxyControlServer) RemoveConfig(ctx context.Context, r *RemoveConfigRequest) (*RemoveConfigResponse, error) { - - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return nil, err - } - return p.local.RemoveConfig(ctx, r) - } - return nil, err - } - modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return nil, err - } - - resp, err := NewControlClient(conn).RemoveConfig(modCtx, r) - if err != nil { - if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { - return resp, err - } - conn, err := p.pollNewLeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - return p.local.RemoveConfig(ctx, r) - } - return nil, err - } - return NewControlClient(conn).RemoveConfig(modCtx, r) - } - return resp, err -} - -func (p *raftProxyControlServer) GetExtension(ctx context.Context, r *GetExtensionRequest) (*GetExtensionResponse, error) { - - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return nil, err - } - return p.local.GetExtension(ctx, r) - } - return nil, err - } - modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return nil, err - } - - resp, err := NewControlClient(conn).GetExtension(modCtx, r) - if err != nil { - if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { - return resp, err - } - conn, err := p.pollNewLeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - return p.local.GetExtension(ctx, r) - } - return nil, err - } - return NewControlClient(conn).GetExtension(modCtx, r) - } - return resp, err -} - -func (p *raftProxyControlServer) CreateExtension(ctx context.Context, r *CreateExtensionRequest) (*CreateExtensionResponse, error) { - - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return nil, err - } - return p.local.CreateExtension(ctx, r) - } - return nil, err - } - modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return nil, err - } - - resp, err := NewControlClient(conn).CreateExtension(modCtx, r) - if err != nil { - if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { - return resp, err - } - conn, err := p.pollNewLeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - return p.local.CreateExtension(ctx, r) - } - return nil, err - } - return NewControlClient(conn).CreateExtension(modCtx, r) - } - return resp, err -} - -func (p *raftProxyControlServer) RemoveExtension(ctx context.Context, r *RemoveExtensionRequest) (*RemoveExtensionResponse, error) { - - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return nil, err - } - return p.local.RemoveExtension(ctx, r) - } - return nil, err - } - modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return nil, err - } - - resp, err := NewControlClient(conn).RemoveExtension(modCtx, r) - if err != nil { - if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { - return resp, err - } - conn, err := p.pollNewLeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - return p.local.RemoveExtension(ctx, r) - } - return nil, err - } - return NewControlClient(conn).RemoveExtension(modCtx, r) - } - return resp, err -} - -func (p *raftProxyControlServer) GetResource(ctx context.Context, r *GetResourceRequest) (*GetResourceResponse, error) { - - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return nil, err - } - return p.local.GetResource(ctx, r) - } - return nil, err - } - modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return nil, err - } - - resp, err := NewControlClient(conn).GetResource(modCtx, r) - if err != nil { - if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { - return resp, err - } - conn, err := p.pollNewLeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - return p.local.GetResource(ctx, r) - } - return nil, err - } - return NewControlClient(conn).GetResource(modCtx, r) - } - return resp, err -} - -func (p *raftProxyControlServer) UpdateResource(ctx context.Context, r *UpdateResourceRequest) (*UpdateResourceResponse, error) { - - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return nil, err - } - return p.local.UpdateResource(ctx, r) - } - return nil, err - } - modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return nil, err - } - - resp, err := NewControlClient(conn).UpdateResource(modCtx, r) - if err != nil { - if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { - return resp, err - } - conn, err := p.pollNewLeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - return p.local.UpdateResource(ctx, r) - } - return nil, err - } - return NewControlClient(conn).UpdateResource(modCtx, r) - } - return resp, err -} - -func (p *raftProxyControlServer) ListResources(ctx context.Context, r *ListResourcesRequest) (*ListResourcesResponse, error) { - - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return nil, err - } - return p.local.ListResources(ctx, r) - } - return nil, err - } - modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return nil, err - } - - resp, err := NewControlClient(conn).ListResources(modCtx, r) - if err != nil { - if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { - return resp, err - } - conn, err := p.pollNewLeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - return p.local.ListResources(ctx, r) - } - return nil, err - } - return NewControlClient(conn).ListResources(modCtx, r) - } - return resp, err -} - -func (p *raftProxyControlServer) CreateResource(ctx context.Context, r *CreateResourceRequest) (*CreateResourceResponse, error) { - - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return nil, err - } - return p.local.CreateResource(ctx, r) - } - return nil, err - } - modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return nil, err - } - - resp, err := NewControlClient(conn).CreateResource(modCtx, r) - if err != nil { - if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { - return resp, err - } - conn, err := p.pollNewLeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - return p.local.CreateResource(ctx, r) - } - return nil, err - } - return NewControlClient(conn).CreateResource(modCtx, r) - } - return resp, err -} - -func (p *raftProxyControlServer) RemoveResource(ctx context.Context, r *RemoveResourceRequest) (*RemoveResourceResponse, error) { - - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return nil, err - } - return p.local.RemoveResource(ctx, r) - } - return nil, err - } - modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return nil, err - } - - resp, err := NewControlClient(conn).RemoveResource(modCtx, r) - if err != nil { - if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { - return resp, err - } - conn, err := p.pollNewLeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - return p.local.RemoveResource(ctx, r) - } - return nil, err - } - return NewControlClient(conn).RemoveResource(modCtx, r) - } - return resp, err -} - -func (p *raftProxyControlServer) CreateVolume(ctx context.Context, r *CreateVolumeRequest) (*CreateVolumeResponse, error) { - - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return nil, err - } - return p.local.CreateVolume(ctx, r) - } - return nil, err - } - modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return nil, err - } - - resp, err := NewControlClient(conn).CreateVolume(modCtx, r) - if err != nil { - if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { - return resp, err - } - conn, err := p.pollNewLeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - return p.local.CreateVolume(ctx, r) - } - return nil, err - } - return NewControlClient(conn).CreateVolume(modCtx, r) - } - return resp, err -} - -func (p *raftProxyControlServer) GetVolume(ctx context.Context, r *GetVolumeRequest) (*GetVolumeResponse, error) { - - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return nil, err - } - return p.local.GetVolume(ctx, r) - } - return nil, err - } - modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return nil, err - } - - resp, err := NewControlClient(conn).GetVolume(modCtx, r) - if err != nil { - if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { - return resp, err - } - conn, err := p.pollNewLeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - return p.local.GetVolume(ctx, r) - } - return nil, err - } - return NewControlClient(conn).GetVolume(modCtx, r) - } - return resp, err -} - -func (p *raftProxyControlServer) UpdateVolume(ctx context.Context, r *UpdateVolumeRequest) (*UpdateVolumeResponse, error) { - - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return nil, err - } - return p.local.UpdateVolume(ctx, r) - } - return nil, err - } - modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return nil, err - } - - resp, err := NewControlClient(conn).UpdateVolume(modCtx, r) - if err != nil { - if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { - return resp, err - } - conn, err := p.pollNewLeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - return p.local.UpdateVolume(ctx, r) - } - return nil, err - } - return NewControlClient(conn).UpdateVolume(modCtx, r) - } - return resp, err -} - -func (p *raftProxyControlServer) ListVolumes(ctx context.Context, r *ListVolumesRequest) (*ListVolumesResponse, error) { - - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return nil, err - } - return p.local.ListVolumes(ctx, r) - } - return nil, err - } - modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return nil, err - } - - resp, err := NewControlClient(conn).ListVolumes(modCtx, r) - if err != nil { - if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { - return resp, err - } - conn, err := p.pollNewLeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - return p.local.ListVolumes(ctx, r) - } - return nil, err - } - return NewControlClient(conn).ListVolumes(modCtx, r) - } - return resp, err -} - -func (p *raftProxyControlServer) RemoveVolume(ctx context.Context, r *RemoveVolumeRequest) (*RemoveVolumeResponse, error) { - - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return nil, err - } - return p.local.RemoveVolume(ctx, r) - } - return nil, err - } - modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return nil, err - } - - resp, err := NewControlClient(conn).RemoveVolume(modCtx, r) - if err != nil { - if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { - return resp, err - } - conn, err := p.pollNewLeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - return p.local.RemoveVolume(ctx, r) - } - return nil, err - } - return NewControlClient(conn).RemoveVolume(modCtx, r) - } - return resp, err -} - -func (m *GetNodeRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.NodeID) - if l > 0 { - n += 1 + l + sovControl(uint64(l)) - } - return n -} - -func (m *GetNodeResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Node != nil { - l = m.Node.Size() - n += 1 + l + sovControl(uint64(l)) - } - return n -} - -func (m *ListNodesRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Filters != nil { - l = m.Filters.Size() - n += 1 + l + sovControl(uint64(l)) - } - return n -} - -func (m *ListNodesRequest_Filters) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Names) > 0 { - for _, s := range m.Names { - l = len(s) - n += 1 + l + sovControl(uint64(l)) - } - } - if len(m.IDPrefixes) > 0 { - for _, s := range m.IDPrefixes { - l = len(s) - n += 1 + l + sovControl(uint64(l)) - } - } - if len(m.Labels) > 0 { - for k, v := range m.Labels { - _ = k - _ = v - mapEntrySize := 1 + len(k) + sovControl(uint64(len(k))) + 1 + len(v) + sovControl(uint64(len(v))) - n += mapEntrySize + 1 + sovControl(uint64(mapEntrySize)) - } - } - if len(m.Memberships) > 0 { - for _, e := range m.Memberships { - n += 1 + sovControl(uint64(e)) - } - } - if len(m.Roles) > 0 { - for _, e := range m.Roles { - n += 1 + sovControl(uint64(e)) - } - } - if len(m.NamePrefixes) > 0 { - for _, s := range m.NamePrefixes { - l = len(s) - n += 1 + l + sovControl(uint64(l)) - } - } - if len(m.NodeLabels) > 0 { - for k, v := range m.NodeLabels { - _ = k - _ = v - mapEntrySize := 1 + len(k) + sovControl(uint64(len(k))) + 1 + len(v) + sovControl(uint64(len(v))) - n += mapEntrySize + 1 + sovControl(uint64(mapEntrySize)) - } - } - return n -} - -func (m *ListNodesResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Nodes) > 0 { - for _, e := range m.Nodes { - l = e.Size() - n += 1 + l + sovControl(uint64(l)) - } - } - return n -} - -func (m *UpdateNodeRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.NodeID) - if l > 0 { - n += 1 + l + sovControl(uint64(l)) - } - if m.NodeVersion != nil { - l = m.NodeVersion.Size() - n += 1 + l + sovControl(uint64(l)) - } - if m.Spec != nil { - l = m.Spec.Size() - n += 1 + l + sovControl(uint64(l)) - } - return n -} - -func (m *UpdateNodeResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Node != nil { - l = m.Node.Size() - n += 1 + l + sovControl(uint64(l)) - } - return n -} - -func (m *RemoveNodeRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.NodeID) - if l > 0 { - n += 1 + l + sovControl(uint64(l)) - } - if m.Force { - n += 2 - } - return n -} - -func (m *RemoveNodeResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - return n -} - -func (m *GetTaskRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.TaskID) - if l > 0 { - n += 1 + l + sovControl(uint64(l)) - } - return n -} - -func (m *GetTaskResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Task != nil { - l = m.Task.Size() - n += 1 + l + sovControl(uint64(l)) - } - return n -} - -func (m *RemoveTaskRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.TaskID) - if l > 0 { - n += 1 + l + sovControl(uint64(l)) - } - return n -} - -func (m *RemoveTaskResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - return n -} - -func (m *ListTasksRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Filters != nil { - l = m.Filters.Size() - n += 1 + l + sovControl(uint64(l)) - } - return n -} - -func (m *ListTasksRequest_Filters) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Names) > 0 { - for _, s := range m.Names { - l = len(s) - n += 1 + l + sovControl(uint64(l)) - } - } - if len(m.IDPrefixes) > 0 { - for _, s := range m.IDPrefixes { - l = len(s) - n += 1 + l + sovControl(uint64(l)) - } - } - if len(m.Labels) > 0 { - for k, v := range m.Labels { - _ = k - _ = v - mapEntrySize := 1 + len(k) + sovControl(uint64(len(k))) + 1 + len(v) + sovControl(uint64(len(v))) - n += mapEntrySize + 1 + sovControl(uint64(mapEntrySize)) - } - } - if len(m.ServiceIDs) > 0 { - for _, s := range m.ServiceIDs { - l = len(s) - n += 1 + l + sovControl(uint64(l)) - } - } - if len(m.NodeIDs) > 0 { - for _, s := range m.NodeIDs { - l = len(s) - n += 1 + l + sovControl(uint64(l)) - } - } - if len(m.DesiredStates) > 0 { - for _, e := range m.DesiredStates { - n += 1 + sovControl(uint64(e)) - } - } - if len(m.NamePrefixes) > 0 { - for _, s := range m.NamePrefixes { - l = len(s) - n += 1 + l + sovControl(uint64(l)) - } - } - if m.UpToDate { - n += 2 - } - if len(m.Runtimes) > 0 { - for _, s := range m.Runtimes { - l = len(s) - n += 1 + l + sovControl(uint64(l)) - } - } - return n -} - -func (m *ListTasksResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Tasks) > 0 { - for _, e := range m.Tasks { - l = e.Size() - n += 1 + l + sovControl(uint64(l)) - } - } - return n -} - -func (m *CreateServiceRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Spec != nil { - l = m.Spec.Size() - n += 1 + l + sovControl(uint64(l)) - } - return n -} - -func (m *CreateServiceResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Service != nil { - l = m.Service.Size() - n += 1 + l + sovControl(uint64(l)) - } - return n -} - -func (m *GetServiceRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.ServiceID) - if l > 0 { - n += 1 + l + sovControl(uint64(l)) - } - if m.InsertDefaults { - n += 2 - } - return n -} - -func (m *GetServiceResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Service != nil { - l = m.Service.Size() - n += 1 + l + sovControl(uint64(l)) - } - return n -} - -func (m *UpdateServiceRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.ServiceID) - if l > 0 { - n += 1 + l + sovControl(uint64(l)) - } - if m.ServiceVersion != nil { - l = m.ServiceVersion.Size() - n += 1 + l + sovControl(uint64(l)) - } - if m.Spec != nil { - l = m.Spec.Size() - n += 1 + l + sovControl(uint64(l)) - } - if m.Rollback != 0 { - n += 1 + sovControl(uint64(m.Rollback)) - } - return n -} - -func (m *UpdateServiceResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Service != nil { - l = m.Service.Size() - n += 1 + l + sovControl(uint64(l)) - } - return n -} - -func (m *RemoveServiceRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.ServiceID) - if l > 0 { - n += 1 + l + sovControl(uint64(l)) - } - return n -} - -func (m *RemoveServiceResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - return n -} - -func (m *ListServicesRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Filters != nil { - l = m.Filters.Size() - n += 1 + l + sovControl(uint64(l)) - } - return n -} - -func (m *ListServicesRequest_Filters) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Names) > 0 { - for _, s := range m.Names { - l = len(s) - n += 1 + l + sovControl(uint64(l)) - } - } - if len(m.IDPrefixes) > 0 { - for _, s := range m.IDPrefixes { - l = len(s) - n += 1 + l + sovControl(uint64(l)) - } - } - if len(m.Labels) > 0 { - for k, v := range m.Labels { - _ = k - _ = v - mapEntrySize := 1 + len(k) + sovControl(uint64(len(k))) + 1 + len(v) + sovControl(uint64(len(v))) - n += mapEntrySize + 1 + sovControl(uint64(mapEntrySize)) - } - } - if len(m.NamePrefixes) > 0 { - for _, s := range m.NamePrefixes { - l = len(s) - n += 1 + l + sovControl(uint64(l)) - } - } - if len(m.Runtimes) > 0 { - for _, s := range m.Runtimes { - l = len(s) - n += 1 + l + sovControl(uint64(l)) - } - } - return n -} - -func (m *ListServicesResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Services) > 0 { - for _, e := range m.Services { - l = e.Size() - n += 1 + l + sovControl(uint64(l)) - } - } - return n -} - -func (m *ListServiceStatusesRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Services) > 0 { - for _, s := range m.Services { - l = len(s) - n += 1 + l + sovControl(uint64(l)) - } - } - return n -} - -func (m *ListServiceStatusesResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Statuses) > 0 { - for _, e := range m.Statuses { - l = e.Size() - n += 1 + l + sovControl(uint64(l)) - } - } - return n -} - -func (m *ListServiceStatusesResponse_ServiceStatus) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.ServiceID) - if l > 0 { - n += 1 + l + sovControl(uint64(l)) - } - if m.DesiredTasks != 0 { - n += 1 + sovControl(uint64(m.DesiredTasks)) - } - if m.RunningTasks != 0 { - n += 1 + sovControl(uint64(m.RunningTasks)) - } - if m.CompletedTasks != 0 { - n += 1 + sovControl(uint64(m.CompletedTasks)) - } - return n -} - -func (m *CreateNetworkRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Spec != nil { - l = m.Spec.Size() - n += 1 + l + sovControl(uint64(l)) - } - return n -} - -func (m *CreateNetworkResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Network != nil { - l = m.Network.Size() - n += 1 + l + sovControl(uint64(l)) - } - return n -} - -func (m *GetNetworkRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Name) - if l > 0 { - n += 1 + l + sovControl(uint64(l)) - } - l = len(m.NetworkID) - if l > 0 { - n += 1 + l + sovControl(uint64(l)) - } - if m.Appdata != nil { - l = m.Appdata.Size() - n += 1 + l + sovControl(uint64(l)) - } - return n -} - -func (m *GetNetworkResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Network != nil { - l = m.Network.Size() - n += 1 + l + sovControl(uint64(l)) - } - return n -} - -func (m *RemoveNetworkRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Name) - if l > 0 { - n += 1 + l + sovControl(uint64(l)) - } - l = len(m.NetworkID) - if l > 0 { - n += 1 + l + sovControl(uint64(l)) - } - return n -} - -func (m *RemoveNetworkResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - return n -} - -func (m *ListNetworksRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Filters != nil { - l = m.Filters.Size() - n += 1 + l + sovControl(uint64(l)) - } - if m.Appdata != nil { - l = m.Appdata.Size() - n += 1 + l + sovControl(uint64(l)) - } - return n -} - -func (m *ListNetworksRequest_Filters) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Names) > 0 { - for _, s := range m.Names { - l = len(s) - n += 1 + l + sovControl(uint64(l)) - } - } - if len(m.IDPrefixes) > 0 { - for _, s := range m.IDPrefixes { - l = len(s) - n += 1 + l + sovControl(uint64(l)) - } - } - if len(m.Labels) > 0 { - for k, v := range m.Labels { - _ = k - _ = v - mapEntrySize := 1 + len(k) + sovControl(uint64(len(k))) + 1 + len(v) + sovControl(uint64(len(v))) - n += mapEntrySize + 1 + sovControl(uint64(mapEntrySize)) - } - } - if len(m.NamePrefixes) > 0 { - for _, s := range m.NamePrefixes { - l = len(s) - n += 1 + l + sovControl(uint64(l)) - } - } - return n -} - -func (m *ListNetworksResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Networks) > 0 { - for _, e := range m.Networks { - l = e.Size() - n += 1 + l + sovControl(uint64(l)) - } - } - return n -} - -func (m *GetClusterRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.ClusterID) - if l > 0 { - n += 1 + l + sovControl(uint64(l)) - } - return n -} - -func (m *GetClusterResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Cluster != nil { - l = m.Cluster.Size() - n += 1 + l + sovControl(uint64(l)) - } - return n -} - -func (m *ListClustersRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Filters != nil { - l = m.Filters.Size() - n += 1 + l + sovControl(uint64(l)) - } - return n -} - -func (m *ListClustersRequest_Filters) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Names) > 0 { - for _, s := range m.Names { - l = len(s) - n += 1 + l + sovControl(uint64(l)) - } - } - if len(m.IDPrefixes) > 0 { - for _, s := range m.IDPrefixes { - l = len(s) - n += 1 + l + sovControl(uint64(l)) - } - } - if len(m.Labels) > 0 { - for k, v := range m.Labels { - _ = k - _ = v - mapEntrySize := 1 + len(k) + sovControl(uint64(len(k))) + 1 + len(v) + sovControl(uint64(len(v))) - n += mapEntrySize + 1 + sovControl(uint64(mapEntrySize)) - } - } - if len(m.NamePrefixes) > 0 { - for _, s := range m.NamePrefixes { - l = len(s) - n += 1 + l + sovControl(uint64(l)) - } - } - return n -} - -func (m *ListClustersResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Clusters) > 0 { - for _, e := range m.Clusters { - l = e.Size() - n += 1 + l + sovControl(uint64(l)) - } - } - return n -} - -func (m *KeyRotation) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.WorkerJoinToken { - n += 2 - } - if m.ManagerJoinToken { - n += 2 - } - if m.ManagerUnlockKey { - n += 2 - } - return n -} - -func (m *UpdateClusterRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.ClusterID) - if l > 0 { - n += 1 + l + sovControl(uint64(l)) - } - if m.ClusterVersion != nil { - l = m.ClusterVersion.Size() - n += 1 + l + sovControl(uint64(l)) - } - if m.Spec != nil { - l = m.Spec.Size() - n += 1 + l + sovControl(uint64(l)) - } - l = m.Rotation.Size() - n += 1 + l + sovControl(uint64(l)) - return n -} - -func (m *UpdateClusterResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Cluster != nil { - l = m.Cluster.Size() - n += 1 + l + sovControl(uint64(l)) - } - return n -} - -func (m *GetSecretRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.SecretID) - if l > 0 { - n += 1 + l + sovControl(uint64(l)) - } - return n -} - -func (m *GetSecretResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Secret != nil { - l = m.Secret.Size() - n += 1 + l + sovControl(uint64(l)) - } - return n -} - -func (m *UpdateSecretRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.SecretID) - if l > 0 { - n += 1 + l + sovControl(uint64(l)) - } - if m.SecretVersion != nil { - l = m.SecretVersion.Size() - n += 1 + l + sovControl(uint64(l)) - } - if m.Spec != nil { - l = m.Spec.Size() - n += 1 + l + sovControl(uint64(l)) - } - return n -} - -func (m *UpdateSecretResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Secret != nil { - l = m.Secret.Size() - n += 1 + l + sovControl(uint64(l)) - } - return n -} - -func (m *ListSecretsRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Filters != nil { - l = m.Filters.Size() - n += 1 + l + sovControl(uint64(l)) - } - return n -} - -func (m *ListSecretsRequest_Filters) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Names) > 0 { - for _, s := range m.Names { - l = len(s) - n += 1 + l + sovControl(uint64(l)) - } - } - if len(m.IDPrefixes) > 0 { - for _, s := range m.IDPrefixes { - l = len(s) - n += 1 + l + sovControl(uint64(l)) - } - } - if len(m.Labels) > 0 { - for k, v := range m.Labels { - _ = k - _ = v - mapEntrySize := 1 + len(k) + sovControl(uint64(len(k))) + 1 + len(v) + sovControl(uint64(len(v))) - n += mapEntrySize + 1 + sovControl(uint64(mapEntrySize)) - } - } - if len(m.NamePrefixes) > 0 { - for _, s := range m.NamePrefixes { - l = len(s) - n += 1 + l + sovControl(uint64(l)) - } - } - return n -} - -func (m *ListSecretsResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Secrets) > 0 { - for _, e := range m.Secrets { - l = e.Size() - n += 1 + l + sovControl(uint64(l)) - } - } - return n -} - -func (m *CreateSecretRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Spec != nil { - l = m.Spec.Size() - n += 1 + l + sovControl(uint64(l)) - } - return n -} - -func (m *CreateSecretResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Secret != nil { - l = m.Secret.Size() - n += 1 + l + sovControl(uint64(l)) - } - return n -} - -func (m *RemoveSecretRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.SecretID) - if l > 0 { - n += 1 + l + sovControl(uint64(l)) - } - return n -} - -func (m *RemoveSecretResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - return n -} - -func (m *GetConfigRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.ConfigID) - if l > 0 { - n += 1 + l + sovControl(uint64(l)) - } - return n -} - -func (m *GetConfigResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Config != nil { - l = m.Config.Size() - n += 1 + l + sovControl(uint64(l)) - } - return n -} - -func (m *UpdateConfigRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.ConfigID) - if l > 0 { - n += 1 + l + sovControl(uint64(l)) - } - if m.ConfigVersion != nil { - l = m.ConfigVersion.Size() - n += 1 + l + sovControl(uint64(l)) - } - if m.Spec != nil { - l = m.Spec.Size() - n += 1 + l + sovControl(uint64(l)) - } - return n -} - -func (m *UpdateConfigResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Config != nil { - l = m.Config.Size() - n += 1 + l + sovControl(uint64(l)) - } - return n -} - -func (m *ListConfigsRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Filters != nil { - l = m.Filters.Size() - n += 1 + l + sovControl(uint64(l)) - } - return n -} - -func (m *ListConfigsRequest_Filters) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Names) > 0 { - for _, s := range m.Names { - l = len(s) - n += 1 + l + sovControl(uint64(l)) - } - } - if len(m.IDPrefixes) > 0 { - for _, s := range m.IDPrefixes { - l = len(s) - n += 1 + l + sovControl(uint64(l)) - } - } - if len(m.Labels) > 0 { - for k, v := range m.Labels { - _ = k - _ = v - mapEntrySize := 1 + len(k) + sovControl(uint64(len(k))) + 1 + len(v) + sovControl(uint64(len(v))) - n += mapEntrySize + 1 + sovControl(uint64(mapEntrySize)) - } - } - if len(m.NamePrefixes) > 0 { - for _, s := range m.NamePrefixes { - l = len(s) - n += 1 + l + sovControl(uint64(l)) - } - } - return n -} - -func (m *ListConfigsResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Configs) > 0 { - for _, e := range m.Configs { - l = e.Size() - n += 1 + l + sovControl(uint64(l)) - } - } - return n -} - -func (m *CreateConfigRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Spec != nil { - l = m.Spec.Size() - n += 1 + l + sovControl(uint64(l)) - } - return n -} - -func (m *CreateConfigResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Config != nil { - l = m.Config.Size() - n += 1 + l + sovControl(uint64(l)) - } - return n -} - -func (m *RemoveConfigRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.ConfigID) - if l > 0 { - n += 1 + l + sovControl(uint64(l)) - } - return n -} - -func (m *RemoveConfigResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - return n -} - -func (m *CreateExtensionRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Annotations != nil { - l = m.Annotations.Size() - n += 1 + l + sovControl(uint64(l)) - } - l = len(m.Description) - if l > 0 { - n += 1 + l + sovControl(uint64(l)) - } - return n -} - -func (m *CreateExtensionResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Extension != nil { - l = m.Extension.Size() - n += 1 + l + sovControl(uint64(l)) - } - return n -} - -func (m *RemoveExtensionRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.ExtensionID) - if l > 0 { - n += 1 + l + sovControl(uint64(l)) - } - return n -} - -func (m *RemoveExtensionResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - return n -} - -func (m *GetExtensionRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.ExtensionID) - if l > 0 { - n += 1 + l + sovControl(uint64(l)) - } - return n -} - -func (m *GetExtensionResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Extension != nil { - l = m.Extension.Size() - n += 1 + l + sovControl(uint64(l)) - } - return n -} - -func (m *CreateResourceRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Annotations != nil { - l = m.Annotations.Size() - n += 1 + l + sovControl(uint64(l)) - } - l = len(m.Kind) - if l > 0 { - n += 1 + l + sovControl(uint64(l)) - } - if m.Payload != nil { - l = m.Payload.Size() - n += 1 + l + sovControl(uint64(l)) - } - return n -} - -func (m *CreateResourceResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Resource != nil { - l = m.Resource.Size() - n += 1 + l + sovControl(uint64(l)) - } - return n -} - -func (m *RemoveResourceRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.ResourceID) - if l > 0 { - n += 1 + l + sovControl(uint64(l)) - } - return n -} - -func (m *RemoveResourceResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - return n -} - -func (m *UpdateResourceRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.ResourceID) - if l > 0 { - n += 1 + l + sovControl(uint64(l)) - } - if m.ResourceVersion != nil { - l = m.ResourceVersion.Size() - n += 1 + l + sovControl(uint64(l)) - } - if m.Annotations != nil { - l = m.Annotations.Size() - n += 1 + l + sovControl(uint64(l)) - } - if m.Payload != nil { - l = m.Payload.Size() - n += 1 + l + sovControl(uint64(l)) - } - return n -} - -func (m *UpdateResourceResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Resource != nil { - l = m.Resource.Size() - n += 1 + l + sovControl(uint64(l)) - } - return n -} - -func (m *GetResourceRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.ResourceID) - if l > 0 { - n += 1 + l + sovControl(uint64(l)) - } - return n -} - -func (m *GetResourceResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Resource != nil { - l = m.Resource.Size() - n += 1 + l + sovControl(uint64(l)) - } - return n -} - -func (m *ListResourcesRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Filters != nil { - l = m.Filters.Size() - n += 1 + l + sovControl(uint64(l)) - } - return n -} - -func (m *ListResourcesRequest_Filters) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Names) > 0 { - for _, s := range m.Names { - l = len(s) - n += 1 + l + sovControl(uint64(l)) - } - } - if len(m.IDPrefixes) > 0 { - for _, s := range m.IDPrefixes { - l = len(s) - n += 1 + l + sovControl(uint64(l)) - } - } - if len(m.Labels) > 0 { - for k, v := range m.Labels { - _ = k - _ = v - mapEntrySize := 1 + len(k) + sovControl(uint64(len(k))) + 1 + len(v) + sovControl(uint64(len(v))) - n += mapEntrySize + 1 + sovControl(uint64(mapEntrySize)) - } - } - if len(m.NamePrefixes) > 0 { - for _, s := range m.NamePrefixes { - l = len(s) - n += 1 + l + sovControl(uint64(l)) - } - } - l = len(m.Kind) - if l > 0 { - n += 1 + l + sovControl(uint64(l)) - } - return n -} - -func (m *ListResourcesResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Resources) > 0 { - for _, e := range m.Resources { - l = e.Size() - n += 1 + l + sovControl(uint64(l)) - } - } - return n -} - -func (m *CreateVolumeRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Spec != nil { - l = m.Spec.Size() - n += 1 + l + sovControl(uint64(l)) - } - return n -} - -func (m *CreateVolumeResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Volume != nil { - l = m.Volume.Size() - n += 1 + l + sovControl(uint64(l)) - } - return n -} - -func (m *GetVolumeRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.VolumeID) - if l > 0 { - n += 1 + l + sovControl(uint64(l)) - } - return n -} - -func (m *GetVolumeResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Volume != nil { - l = m.Volume.Size() - n += 1 + l + sovControl(uint64(l)) - } - return n -} - -func (m *UpdateVolumeRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.VolumeID) - if l > 0 { - n += 1 + l + sovControl(uint64(l)) - } - if m.VolumeVersion != nil { - l = m.VolumeVersion.Size() - n += 1 + l + sovControl(uint64(l)) - } - if m.Spec != nil { - l = m.Spec.Size() - n += 1 + l + sovControl(uint64(l)) - } - return n -} - -func (m *UpdateVolumeResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Volume != nil { - l = m.Volume.Size() - n += 1 + l + sovControl(uint64(l)) - } - return n -} - -func (m *ListVolumesRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Filters != nil { - l = m.Filters.Size() - n += 1 + l + sovControl(uint64(l)) - } - return n -} - -func (m *ListVolumesRequest_Filters) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Names) > 0 { - for _, s := range m.Names { - l = len(s) - n += 1 + l + sovControl(uint64(l)) - } - } - if len(m.IDPrefixes) > 0 { - for _, s := range m.IDPrefixes { - l = len(s) - n += 1 + l + sovControl(uint64(l)) - } - } - if len(m.Labels) > 0 { - for k, v := range m.Labels { - _ = k - _ = v - mapEntrySize := 1 + len(k) + sovControl(uint64(len(k))) + 1 + len(v) + sovControl(uint64(len(v))) - n += mapEntrySize + 1 + sovControl(uint64(mapEntrySize)) - } - } - if len(m.NamePrefixes) > 0 { - for _, s := range m.NamePrefixes { - l = len(s) - n += 1 + l + sovControl(uint64(l)) - } - } - if len(m.Groups) > 0 { - for _, s := range m.Groups { - l = len(s) - n += 1 + l + sovControl(uint64(l)) - } - } - if len(m.Drivers) > 0 { - for _, s := range m.Drivers { - l = len(s) - n += 1 + l + sovControl(uint64(l)) - } - } - return n -} - -func (m *ListVolumesResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Volumes) > 0 { - for _, e := range m.Volumes { - l = e.Size() - n += 1 + l + sovControl(uint64(l)) - } - } - return n -} - -func (m *RemoveVolumeRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.VolumeID) - if l > 0 { - n += 1 + l + sovControl(uint64(l)) - } - if m.Force { - n += 2 - } - return n -} - -func (m *RemoveVolumeResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - return n -} - -func sovControl(x uint64) (n int) { - return (math_bits.Len64(x|1) + 6) / 7 -} -func sozControl(x uint64) (n int) { - return sovControl(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (this *GetNodeRequest) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&GetNodeRequest{`, - `NodeID:` + fmt.Sprintf("%v", this.NodeID) + `,`, - `}`, - }, "") - return s -} -func (this *GetNodeResponse) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&GetNodeResponse{`, - `Node:` + strings.Replace(fmt.Sprintf("%v", this.Node), "Node", "Node", 1) + `,`, - `}`, - }, "") - return s -} -func (this *ListNodesRequest) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&ListNodesRequest{`, - `Filters:` + strings.Replace(fmt.Sprintf("%v", this.Filters), "ListNodesRequest_Filters", "ListNodesRequest_Filters", 1) + `,`, - `}`, - }, "") - return s -} -func (this *ListNodesRequest_Filters) String() string { - if this == nil { - return "nil" - } - keysForLabels := make([]string, 0, len(this.Labels)) - for k, _ := range this.Labels { - keysForLabels = append(keysForLabels, k) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForLabels) - mapStringForLabels := "map[string]string{" - for _, k := range keysForLabels { - mapStringForLabels += fmt.Sprintf("%v: %v,", k, this.Labels[k]) - } - mapStringForLabels += "}" - keysForNodeLabels := make([]string, 0, len(this.NodeLabels)) - for k, _ := range this.NodeLabels { - keysForNodeLabels = append(keysForNodeLabels, k) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForNodeLabels) - mapStringForNodeLabels := "map[string]string{" - for _, k := range keysForNodeLabels { - mapStringForNodeLabels += fmt.Sprintf("%v: %v,", k, this.NodeLabels[k]) - } - mapStringForNodeLabels += "}" - s := strings.Join([]string{`&ListNodesRequest_Filters{`, - `Names:` + fmt.Sprintf("%v", this.Names) + `,`, - `IDPrefixes:` + fmt.Sprintf("%v", this.IDPrefixes) + `,`, - `Labels:` + mapStringForLabels + `,`, - `Memberships:` + fmt.Sprintf("%v", this.Memberships) + `,`, - `Roles:` + fmt.Sprintf("%v", this.Roles) + `,`, - `NamePrefixes:` + fmt.Sprintf("%v", this.NamePrefixes) + `,`, - `NodeLabels:` + mapStringForNodeLabels + `,`, - `}`, - }, "") - return s -} -func (this *ListNodesResponse) String() string { - if this == nil { - return "nil" - } - repeatedStringForNodes := "[]*Node{" - for _, f := range this.Nodes { - repeatedStringForNodes += strings.Replace(fmt.Sprintf("%v", f), "Node", "Node", 1) + "," - } - repeatedStringForNodes += "}" - s := strings.Join([]string{`&ListNodesResponse{`, - `Nodes:` + repeatedStringForNodes + `,`, - `}`, - }, "") - return s -} -func (this *UpdateNodeRequest) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&UpdateNodeRequest{`, - `NodeID:` + fmt.Sprintf("%v", this.NodeID) + `,`, - `NodeVersion:` + strings.Replace(fmt.Sprintf("%v", this.NodeVersion), "Version", "Version", 1) + `,`, - `Spec:` + strings.Replace(fmt.Sprintf("%v", this.Spec), "NodeSpec", "NodeSpec", 1) + `,`, - `}`, - }, "") - return s -} -func (this *UpdateNodeResponse) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&UpdateNodeResponse{`, - `Node:` + strings.Replace(fmt.Sprintf("%v", this.Node), "Node", "Node", 1) + `,`, - `}`, - }, "") - return s -} -func (this *RemoveNodeRequest) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&RemoveNodeRequest{`, - `NodeID:` + fmt.Sprintf("%v", this.NodeID) + `,`, - `Force:` + fmt.Sprintf("%v", this.Force) + `,`, - `}`, - }, "") - return s -} -func (this *RemoveNodeResponse) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&RemoveNodeResponse{`, - `}`, - }, "") - return s -} -func (this *GetTaskRequest) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&GetTaskRequest{`, - `TaskID:` + fmt.Sprintf("%v", this.TaskID) + `,`, - `}`, - }, "") - return s -} -func (this *GetTaskResponse) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&GetTaskResponse{`, - `Task:` + strings.Replace(fmt.Sprintf("%v", this.Task), "Task", "Task", 1) + `,`, - `}`, - }, "") - return s -} -func (this *RemoveTaskRequest) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&RemoveTaskRequest{`, - `TaskID:` + fmt.Sprintf("%v", this.TaskID) + `,`, - `}`, - }, "") - return s -} -func (this *RemoveTaskResponse) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&RemoveTaskResponse{`, - `}`, - }, "") - return s -} -func (this *ListTasksRequest) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&ListTasksRequest{`, - `Filters:` + strings.Replace(fmt.Sprintf("%v", this.Filters), "ListTasksRequest_Filters", "ListTasksRequest_Filters", 1) + `,`, - `}`, - }, "") - return s -} -func (this *ListTasksRequest_Filters) String() string { - if this == nil { - return "nil" - } - keysForLabels := make([]string, 0, len(this.Labels)) - for k, _ := range this.Labels { - keysForLabels = append(keysForLabels, k) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForLabels) - mapStringForLabels := "map[string]string{" - for _, k := range keysForLabels { - mapStringForLabels += fmt.Sprintf("%v: %v,", k, this.Labels[k]) - } - mapStringForLabels += "}" - s := strings.Join([]string{`&ListTasksRequest_Filters{`, - `Names:` + fmt.Sprintf("%v", this.Names) + `,`, - `IDPrefixes:` + fmt.Sprintf("%v", this.IDPrefixes) + `,`, - `Labels:` + mapStringForLabels + `,`, - `ServiceIDs:` + fmt.Sprintf("%v", this.ServiceIDs) + `,`, - `NodeIDs:` + fmt.Sprintf("%v", this.NodeIDs) + `,`, - `DesiredStates:` + fmt.Sprintf("%v", this.DesiredStates) + `,`, - `NamePrefixes:` + fmt.Sprintf("%v", this.NamePrefixes) + `,`, - `UpToDate:` + fmt.Sprintf("%v", this.UpToDate) + `,`, - `Runtimes:` + fmt.Sprintf("%v", this.Runtimes) + `,`, - `}`, - }, "") - return s -} -func (this *ListTasksResponse) String() string { - if this == nil { - return "nil" - } - repeatedStringForTasks := "[]*Task{" - for _, f := range this.Tasks { - repeatedStringForTasks += strings.Replace(fmt.Sprintf("%v", f), "Task", "Task", 1) + "," - } - repeatedStringForTasks += "}" - s := strings.Join([]string{`&ListTasksResponse{`, - `Tasks:` + repeatedStringForTasks + `,`, - `}`, - }, "") - return s -} -func (this *CreateServiceRequest) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&CreateServiceRequest{`, - `Spec:` + strings.Replace(fmt.Sprintf("%v", this.Spec), "ServiceSpec", "ServiceSpec", 1) + `,`, - `}`, - }, "") - return s -} -func (this *CreateServiceResponse) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&CreateServiceResponse{`, - `Service:` + strings.Replace(fmt.Sprintf("%v", this.Service), "Service", "Service", 1) + `,`, - `}`, - }, "") - return s -} -func (this *GetServiceRequest) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&GetServiceRequest{`, - `ServiceID:` + fmt.Sprintf("%v", this.ServiceID) + `,`, - `InsertDefaults:` + fmt.Sprintf("%v", this.InsertDefaults) + `,`, - `}`, - }, "") - return s -} -func (this *GetServiceResponse) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&GetServiceResponse{`, - `Service:` + strings.Replace(fmt.Sprintf("%v", this.Service), "Service", "Service", 1) + `,`, - `}`, - }, "") - return s -} -func (this *UpdateServiceRequest) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&UpdateServiceRequest{`, - `ServiceID:` + fmt.Sprintf("%v", this.ServiceID) + `,`, - `ServiceVersion:` + strings.Replace(fmt.Sprintf("%v", this.ServiceVersion), "Version", "Version", 1) + `,`, - `Spec:` + strings.Replace(fmt.Sprintf("%v", this.Spec), "ServiceSpec", "ServiceSpec", 1) + `,`, - `Rollback:` + fmt.Sprintf("%v", this.Rollback) + `,`, - `}`, - }, "") - return s -} -func (this *UpdateServiceResponse) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&UpdateServiceResponse{`, - `Service:` + strings.Replace(fmt.Sprintf("%v", this.Service), "Service", "Service", 1) + `,`, - `}`, - }, "") - return s -} -func (this *RemoveServiceRequest) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&RemoveServiceRequest{`, - `ServiceID:` + fmt.Sprintf("%v", this.ServiceID) + `,`, - `}`, - }, "") - return s -} -func (this *RemoveServiceResponse) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&RemoveServiceResponse{`, - `}`, - }, "") - return s -} -func (this *ListServicesRequest) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&ListServicesRequest{`, - `Filters:` + strings.Replace(fmt.Sprintf("%v", this.Filters), "ListServicesRequest_Filters", "ListServicesRequest_Filters", 1) + `,`, - `}`, - }, "") - return s -} -func (this *ListServicesRequest_Filters) String() string { - if this == nil { - return "nil" - } - keysForLabels := make([]string, 0, len(this.Labels)) - for k, _ := range this.Labels { - keysForLabels = append(keysForLabels, k) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForLabels) - mapStringForLabels := "map[string]string{" - for _, k := range keysForLabels { - mapStringForLabels += fmt.Sprintf("%v: %v,", k, this.Labels[k]) - } - mapStringForLabels += "}" - s := strings.Join([]string{`&ListServicesRequest_Filters{`, - `Names:` + fmt.Sprintf("%v", this.Names) + `,`, - `IDPrefixes:` + fmt.Sprintf("%v", this.IDPrefixes) + `,`, - `Labels:` + mapStringForLabels + `,`, - `NamePrefixes:` + fmt.Sprintf("%v", this.NamePrefixes) + `,`, - `Runtimes:` + fmt.Sprintf("%v", this.Runtimes) + `,`, - `}`, - }, "") - return s -} -func (this *ListServicesResponse) String() string { - if this == nil { - return "nil" - } - repeatedStringForServices := "[]*Service{" - for _, f := range this.Services { - repeatedStringForServices += strings.Replace(fmt.Sprintf("%v", f), "Service", "Service", 1) + "," - } - repeatedStringForServices += "}" - s := strings.Join([]string{`&ListServicesResponse{`, - `Services:` + repeatedStringForServices + `,`, - `}`, - }, "") - return s -} -func (this *ListServiceStatusesRequest) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&ListServiceStatusesRequest{`, - `Services:` + fmt.Sprintf("%v", this.Services) + `,`, - `}`, - }, "") - return s -} -func (this *ListServiceStatusesResponse) String() string { - if this == nil { - return "nil" - } - repeatedStringForStatuses := "[]*ListServiceStatusesResponse_ServiceStatus{" - for _, f := range this.Statuses { - repeatedStringForStatuses += strings.Replace(fmt.Sprintf("%v", f), "ListServiceStatusesResponse_ServiceStatus", "ListServiceStatusesResponse_ServiceStatus", 1) + "," - } - repeatedStringForStatuses += "}" - s := strings.Join([]string{`&ListServiceStatusesResponse{`, - `Statuses:` + repeatedStringForStatuses + `,`, - `}`, - }, "") - return s -} -func (this *ListServiceStatusesResponse_ServiceStatus) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&ListServiceStatusesResponse_ServiceStatus{`, - `ServiceID:` + fmt.Sprintf("%v", this.ServiceID) + `,`, - `DesiredTasks:` + fmt.Sprintf("%v", this.DesiredTasks) + `,`, - `RunningTasks:` + fmt.Sprintf("%v", this.RunningTasks) + `,`, - `CompletedTasks:` + fmt.Sprintf("%v", this.CompletedTasks) + `,`, - `}`, - }, "") - return s -} -func (this *CreateNetworkRequest) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&CreateNetworkRequest{`, - `Spec:` + strings.Replace(fmt.Sprintf("%v", this.Spec), "NetworkSpec", "NetworkSpec", 1) + `,`, - `}`, - }, "") - return s -} -func (this *CreateNetworkResponse) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&CreateNetworkResponse{`, - `Network:` + strings.Replace(fmt.Sprintf("%v", this.Network), "Network", "Network", 1) + `,`, - `}`, - }, "") - return s -} -func (this *GetNetworkRequest) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&GetNetworkRequest{`, - `Name:` + fmt.Sprintf("%v", this.Name) + `,`, - `NetworkID:` + fmt.Sprintf("%v", this.NetworkID) + `,`, - `Appdata:` + strings.Replace(fmt.Sprintf("%v", this.Appdata), "Any", "types.Any", 1) + `,`, - `}`, - }, "") - return s -} -func (this *GetNetworkResponse) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&GetNetworkResponse{`, - `Network:` + strings.Replace(fmt.Sprintf("%v", this.Network), "Network", "Network", 1) + `,`, - `}`, - }, "") - return s -} -func (this *RemoveNetworkRequest) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&RemoveNetworkRequest{`, - `Name:` + fmt.Sprintf("%v", this.Name) + `,`, - `NetworkID:` + fmt.Sprintf("%v", this.NetworkID) + `,`, - `}`, - }, "") - return s -} -func (this *RemoveNetworkResponse) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&RemoveNetworkResponse{`, - `}`, - }, "") - return s -} -func (this *ListNetworksRequest) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&ListNetworksRequest{`, - `Filters:` + strings.Replace(fmt.Sprintf("%v", this.Filters), "ListNetworksRequest_Filters", "ListNetworksRequest_Filters", 1) + `,`, - `Appdata:` + strings.Replace(fmt.Sprintf("%v", this.Appdata), "Any", "types.Any", 1) + `,`, - `}`, - }, "") - return s -} -func (this *ListNetworksRequest_Filters) String() string { - if this == nil { - return "nil" - } - keysForLabels := make([]string, 0, len(this.Labels)) - for k, _ := range this.Labels { - keysForLabels = append(keysForLabels, k) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForLabels) - mapStringForLabels := "map[string]string{" - for _, k := range keysForLabels { - mapStringForLabels += fmt.Sprintf("%v: %v,", k, this.Labels[k]) - } - mapStringForLabels += "}" - s := strings.Join([]string{`&ListNetworksRequest_Filters{`, - `Names:` + fmt.Sprintf("%v", this.Names) + `,`, - `IDPrefixes:` + fmt.Sprintf("%v", this.IDPrefixes) + `,`, - `Labels:` + mapStringForLabels + `,`, - `NamePrefixes:` + fmt.Sprintf("%v", this.NamePrefixes) + `,`, - `}`, - }, "") - return s -} -func (this *ListNetworksResponse) String() string { - if this == nil { - return "nil" - } - repeatedStringForNetworks := "[]*Network{" - for _, f := range this.Networks { - repeatedStringForNetworks += strings.Replace(fmt.Sprintf("%v", f), "Network", "Network", 1) + "," - } - repeatedStringForNetworks += "}" - s := strings.Join([]string{`&ListNetworksResponse{`, - `Networks:` + repeatedStringForNetworks + `,`, - `}`, - }, "") - return s -} -func (this *GetClusterRequest) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&GetClusterRequest{`, - `ClusterID:` + fmt.Sprintf("%v", this.ClusterID) + `,`, - `}`, - }, "") - return s -} -func (this *GetClusterResponse) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&GetClusterResponse{`, - `Cluster:` + strings.Replace(fmt.Sprintf("%v", this.Cluster), "Cluster", "Cluster", 1) + `,`, - `}`, - }, "") - return s -} -func (this *ListClustersRequest) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&ListClustersRequest{`, - `Filters:` + strings.Replace(fmt.Sprintf("%v", this.Filters), "ListClustersRequest_Filters", "ListClustersRequest_Filters", 1) + `,`, - `}`, - }, "") - return s -} -func (this *ListClustersRequest_Filters) String() string { - if this == nil { - return "nil" - } - keysForLabels := make([]string, 0, len(this.Labels)) - for k, _ := range this.Labels { - keysForLabels = append(keysForLabels, k) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForLabels) - mapStringForLabels := "map[string]string{" - for _, k := range keysForLabels { - mapStringForLabels += fmt.Sprintf("%v: %v,", k, this.Labels[k]) - } - mapStringForLabels += "}" - s := strings.Join([]string{`&ListClustersRequest_Filters{`, - `Names:` + fmt.Sprintf("%v", this.Names) + `,`, - `IDPrefixes:` + fmt.Sprintf("%v", this.IDPrefixes) + `,`, - `Labels:` + mapStringForLabels + `,`, - `NamePrefixes:` + fmt.Sprintf("%v", this.NamePrefixes) + `,`, - `}`, - }, "") - return s -} -func (this *ListClustersResponse) String() string { - if this == nil { - return "nil" - } - repeatedStringForClusters := "[]*Cluster{" - for _, f := range this.Clusters { - repeatedStringForClusters += strings.Replace(fmt.Sprintf("%v", f), "Cluster", "Cluster", 1) + "," - } - repeatedStringForClusters += "}" - s := strings.Join([]string{`&ListClustersResponse{`, - `Clusters:` + repeatedStringForClusters + `,`, - `}`, - }, "") - return s -} -func (this *KeyRotation) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&KeyRotation{`, - `WorkerJoinToken:` + fmt.Sprintf("%v", this.WorkerJoinToken) + `,`, - `ManagerJoinToken:` + fmt.Sprintf("%v", this.ManagerJoinToken) + `,`, - `ManagerUnlockKey:` + fmt.Sprintf("%v", this.ManagerUnlockKey) + `,`, - `}`, - }, "") - return s -} -func (this *UpdateClusterRequest) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&UpdateClusterRequest{`, - `ClusterID:` + fmt.Sprintf("%v", this.ClusterID) + `,`, - `ClusterVersion:` + strings.Replace(fmt.Sprintf("%v", this.ClusterVersion), "Version", "Version", 1) + `,`, - `Spec:` + strings.Replace(fmt.Sprintf("%v", this.Spec), "ClusterSpec", "ClusterSpec", 1) + `,`, - `Rotation:` + strings.Replace(strings.Replace(this.Rotation.String(), "KeyRotation", "KeyRotation", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s -} -func (this *UpdateClusterResponse) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&UpdateClusterResponse{`, - `Cluster:` + strings.Replace(fmt.Sprintf("%v", this.Cluster), "Cluster", "Cluster", 1) + `,`, - `}`, - }, "") - return s -} -func (this *GetSecretRequest) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&GetSecretRequest{`, - `SecretID:` + fmt.Sprintf("%v", this.SecretID) + `,`, - `}`, - }, "") - return s -} -func (this *GetSecretResponse) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&GetSecretResponse{`, - `Secret:` + strings.Replace(fmt.Sprintf("%v", this.Secret), "Secret", "Secret", 1) + `,`, - `}`, - }, "") - return s -} -func (this *UpdateSecretRequest) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&UpdateSecretRequest{`, - `SecretID:` + fmt.Sprintf("%v", this.SecretID) + `,`, - `SecretVersion:` + strings.Replace(fmt.Sprintf("%v", this.SecretVersion), "Version", "Version", 1) + `,`, - `Spec:` + strings.Replace(fmt.Sprintf("%v", this.Spec), "SecretSpec", "SecretSpec", 1) + `,`, - `}`, - }, "") - return s -} -func (this *UpdateSecretResponse) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&UpdateSecretResponse{`, - `Secret:` + strings.Replace(fmt.Sprintf("%v", this.Secret), "Secret", "Secret", 1) + `,`, - `}`, - }, "") - return s -} -func (this *ListSecretsRequest) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&ListSecretsRequest{`, - `Filters:` + strings.Replace(fmt.Sprintf("%v", this.Filters), "ListSecretsRequest_Filters", "ListSecretsRequest_Filters", 1) + `,`, - `}`, - }, "") - return s -} -func (this *ListSecretsRequest_Filters) String() string { - if this == nil { - return "nil" - } - keysForLabels := make([]string, 0, len(this.Labels)) - for k, _ := range this.Labels { - keysForLabels = append(keysForLabels, k) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForLabels) - mapStringForLabels := "map[string]string{" - for _, k := range keysForLabels { - mapStringForLabels += fmt.Sprintf("%v: %v,", k, this.Labels[k]) - } - mapStringForLabels += "}" - s := strings.Join([]string{`&ListSecretsRequest_Filters{`, - `Names:` + fmt.Sprintf("%v", this.Names) + `,`, - `IDPrefixes:` + fmt.Sprintf("%v", this.IDPrefixes) + `,`, - `Labels:` + mapStringForLabels + `,`, - `NamePrefixes:` + fmt.Sprintf("%v", this.NamePrefixes) + `,`, - `}`, - }, "") - return s -} -func (this *ListSecretsResponse) String() string { - if this == nil { - return "nil" - } - repeatedStringForSecrets := "[]*Secret{" - for _, f := range this.Secrets { - repeatedStringForSecrets += strings.Replace(fmt.Sprintf("%v", f), "Secret", "Secret", 1) + "," - } - repeatedStringForSecrets += "}" - s := strings.Join([]string{`&ListSecretsResponse{`, - `Secrets:` + repeatedStringForSecrets + `,`, - `}`, - }, "") - return s -} -func (this *CreateSecretRequest) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&CreateSecretRequest{`, - `Spec:` + strings.Replace(fmt.Sprintf("%v", this.Spec), "SecretSpec", "SecretSpec", 1) + `,`, - `}`, - }, "") - return s -} -func (this *CreateSecretResponse) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&CreateSecretResponse{`, - `Secret:` + strings.Replace(fmt.Sprintf("%v", this.Secret), "Secret", "Secret", 1) + `,`, - `}`, - }, "") - return s -} -func (this *RemoveSecretRequest) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&RemoveSecretRequest{`, - `SecretID:` + fmt.Sprintf("%v", this.SecretID) + `,`, - `}`, - }, "") - return s -} -func (this *RemoveSecretResponse) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&RemoveSecretResponse{`, - `}`, - }, "") - return s -} -func (this *GetConfigRequest) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&GetConfigRequest{`, - `ConfigID:` + fmt.Sprintf("%v", this.ConfigID) + `,`, - `}`, - }, "") - return s -} -func (this *GetConfigResponse) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&GetConfigResponse{`, - `Config:` + strings.Replace(fmt.Sprintf("%v", this.Config), "Config", "Config", 1) + `,`, - `}`, - }, "") - return s -} -func (this *UpdateConfigRequest) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&UpdateConfigRequest{`, - `ConfigID:` + fmt.Sprintf("%v", this.ConfigID) + `,`, - `ConfigVersion:` + strings.Replace(fmt.Sprintf("%v", this.ConfigVersion), "Version", "Version", 1) + `,`, - `Spec:` + strings.Replace(fmt.Sprintf("%v", this.Spec), "ConfigSpec", "ConfigSpec", 1) + `,`, - `}`, - }, "") - return s -} -func (this *UpdateConfigResponse) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&UpdateConfigResponse{`, - `Config:` + strings.Replace(fmt.Sprintf("%v", this.Config), "Config", "Config", 1) + `,`, - `}`, - }, "") - return s -} -func (this *ListConfigsRequest) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&ListConfigsRequest{`, - `Filters:` + strings.Replace(fmt.Sprintf("%v", this.Filters), "ListConfigsRequest_Filters", "ListConfigsRequest_Filters", 1) + `,`, - `}`, - }, "") - return s -} -func (this *ListConfigsRequest_Filters) String() string { - if this == nil { - return "nil" - } - keysForLabels := make([]string, 0, len(this.Labels)) - for k, _ := range this.Labels { - keysForLabels = append(keysForLabels, k) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForLabels) - mapStringForLabels := "map[string]string{" - for _, k := range keysForLabels { - mapStringForLabels += fmt.Sprintf("%v: %v,", k, this.Labels[k]) - } - mapStringForLabels += "}" - s := strings.Join([]string{`&ListConfigsRequest_Filters{`, - `Names:` + fmt.Sprintf("%v", this.Names) + `,`, - `IDPrefixes:` + fmt.Sprintf("%v", this.IDPrefixes) + `,`, - `Labels:` + mapStringForLabels + `,`, - `NamePrefixes:` + fmt.Sprintf("%v", this.NamePrefixes) + `,`, - `}`, - }, "") - return s -} -func (this *ListConfigsResponse) String() string { - if this == nil { - return "nil" - } - repeatedStringForConfigs := "[]*Config{" - for _, f := range this.Configs { - repeatedStringForConfigs += strings.Replace(fmt.Sprintf("%v", f), "Config", "Config", 1) + "," - } - repeatedStringForConfigs += "}" - s := strings.Join([]string{`&ListConfigsResponse{`, - `Configs:` + repeatedStringForConfigs + `,`, - `}`, - }, "") - return s -} -func (this *CreateConfigRequest) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&CreateConfigRequest{`, - `Spec:` + strings.Replace(fmt.Sprintf("%v", this.Spec), "ConfigSpec", "ConfigSpec", 1) + `,`, - `}`, - }, "") - return s -} -func (this *CreateConfigResponse) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&CreateConfigResponse{`, - `Config:` + strings.Replace(fmt.Sprintf("%v", this.Config), "Config", "Config", 1) + `,`, - `}`, - }, "") - return s -} -func (this *RemoveConfigRequest) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&RemoveConfigRequest{`, - `ConfigID:` + fmt.Sprintf("%v", this.ConfigID) + `,`, - `}`, - }, "") - return s -} -func (this *RemoveConfigResponse) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&RemoveConfigResponse{`, - `}`, - }, "") - return s -} -func (this *CreateExtensionRequest) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&CreateExtensionRequest{`, - `Annotations:` + strings.Replace(fmt.Sprintf("%v", this.Annotations), "Annotations", "Annotations", 1) + `,`, - `Description:` + fmt.Sprintf("%v", this.Description) + `,`, - `}`, - }, "") - return s -} -func (this *CreateExtensionResponse) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&CreateExtensionResponse{`, - `Extension:` + strings.Replace(fmt.Sprintf("%v", this.Extension), "Extension", "Extension", 1) + `,`, - `}`, - }, "") - return s -} -func (this *RemoveExtensionRequest) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&RemoveExtensionRequest{`, - `ExtensionID:` + fmt.Sprintf("%v", this.ExtensionID) + `,`, - `}`, - }, "") - return s -} -func (this *RemoveExtensionResponse) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&RemoveExtensionResponse{`, - `}`, - }, "") - return s -} -func (this *GetExtensionRequest) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&GetExtensionRequest{`, - `ExtensionID:` + fmt.Sprintf("%v", this.ExtensionID) + `,`, - `}`, - }, "") - return s -} -func (this *GetExtensionResponse) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&GetExtensionResponse{`, - `Extension:` + strings.Replace(fmt.Sprintf("%v", this.Extension), "Extension", "Extension", 1) + `,`, - `}`, - }, "") - return s -} -func (this *CreateResourceRequest) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&CreateResourceRequest{`, - `Annotations:` + strings.Replace(fmt.Sprintf("%v", this.Annotations), "Annotations", "Annotations", 1) + `,`, - `Kind:` + fmt.Sprintf("%v", this.Kind) + `,`, - `Payload:` + strings.Replace(fmt.Sprintf("%v", this.Payload), "Any", "types.Any", 1) + `,`, - `}`, - }, "") - return s -} -func (this *CreateResourceResponse) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&CreateResourceResponse{`, - `Resource:` + strings.Replace(fmt.Sprintf("%v", this.Resource), "Resource", "Resource", 1) + `,`, - `}`, - }, "") - return s -} -func (this *RemoveResourceRequest) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&RemoveResourceRequest{`, - `ResourceID:` + fmt.Sprintf("%v", this.ResourceID) + `,`, - `}`, - }, "") - return s -} -func (this *RemoveResourceResponse) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&RemoveResourceResponse{`, - `}`, - }, "") - return s -} -func (this *UpdateResourceRequest) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&UpdateResourceRequest{`, - `ResourceID:` + fmt.Sprintf("%v", this.ResourceID) + `,`, - `ResourceVersion:` + strings.Replace(fmt.Sprintf("%v", this.ResourceVersion), "Version", "Version", 1) + `,`, - `Annotations:` + strings.Replace(fmt.Sprintf("%v", this.Annotations), "Annotations", "Annotations", 1) + `,`, - `Payload:` + strings.Replace(fmt.Sprintf("%v", this.Payload), "Any", "types.Any", 1) + `,`, - `}`, - }, "") - return s -} -func (this *UpdateResourceResponse) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&UpdateResourceResponse{`, - `Resource:` + strings.Replace(fmt.Sprintf("%v", this.Resource), "Resource", "Resource", 1) + `,`, - `}`, - }, "") - return s -} -func (this *GetResourceRequest) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&GetResourceRequest{`, - `ResourceID:` + fmt.Sprintf("%v", this.ResourceID) + `,`, - `}`, - }, "") - return s -} -func (this *GetResourceResponse) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&GetResourceResponse{`, - `Resource:` + strings.Replace(fmt.Sprintf("%v", this.Resource), "Resource", "Resource", 1) + `,`, - `}`, - }, "") - return s -} -func (this *ListResourcesRequest) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&ListResourcesRequest{`, - `Filters:` + strings.Replace(fmt.Sprintf("%v", this.Filters), "ListResourcesRequest_Filters", "ListResourcesRequest_Filters", 1) + `,`, - `}`, - }, "") - return s -} -func (this *ListResourcesRequest_Filters) String() string { - if this == nil { - return "nil" - } - keysForLabels := make([]string, 0, len(this.Labels)) - for k, _ := range this.Labels { - keysForLabels = append(keysForLabels, k) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForLabels) - mapStringForLabels := "map[string]string{" - for _, k := range keysForLabels { - mapStringForLabels += fmt.Sprintf("%v: %v,", k, this.Labels[k]) - } - mapStringForLabels += "}" - s := strings.Join([]string{`&ListResourcesRequest_Filters{`, - `Names:` + fmt.Sprintf("%v", this.Names) + `,`, - `IDPrefixes:` + fmt.Sprintf("%v", this.IDPrefixes) + `,`, - `Labels:` + mapStringForLabels + `,`, - `NamePrefixes:` + fmt.Sprintf("%v", this.NamePrefixes) + `,`, - `Kind:` + fmt.Sprintf("%v", this.Kind) + `,`, - `}`, - }, "") - return s -} -func (this *ListResourcesResponse) String() string { - if this == nil { - return "nil" - } - repeatedStringForResources := "[]*Resource{" - for _, f := range this.Resources { - repeatedStringForResources += strings.Replace(fmt.Sprintf("%v", f), "Resource", "Resource", 1) + "," - } - repeatedStringForResources += "}" - s := strings.Join([]string{`&ListResourcesResponse{`, - `Resources:` + repeatedStringForResources + `,`, - `}`, - }, "") - return s -} -func (this *CreateVolumeRequest) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&CreateVolumeRequest{`, - `Spec:` + strings.Replace(fmt.Sprintf("%v", this.Spec), "VolumeSpec", "VolumeSpec", 1) + `,`, - `}`, - }, "") - return s -} -func (this *CreateVolumeResponse) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&CreateVolumeResponse{`, - `Volume:` + strings.Replace(fmt.Sprintf("%v", this.Volume), "Volume", "Volume", 1) + `,`, - `}`, - }, "") - return s -} -func (this *GetVolumeRequest) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&GetVolumeRequest{`, - `VolumeID:` + fmt.Sprintf("%v", this.VolumeID) + `,`, - `}`, - }, "") - return s -} -func (this *GetVolumeResponse) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&GetVolumeResponse{`, - `Volume:` + strings.Replace(fmt.Sprintf("%v", this.Volume), "Volume", "Volume", 1) + `,`, - `}`, - }, "") - return s -} -func (this *UpdateVolumeRequest) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&UpdateVolumeRequest{`, - `VolumeID:` + fmt.Sprintf("%v", this.VolumeID) + `,`, - `VolumeVersion:` + strings.Replace(fmt.Sprintf("%v", this.VolumeVersion), "Version", "Version", 1) + `,`, - `Spec:` + strings.Replace(fmt.Sprintf("%v", this.Spec), "VolumeSpec", "VolumeSpec", 1) + `,`, - `}`, - }, "") - return s -} -func (this *UpdateVolumeResponse) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&UpdateVolumeResponse{`, - `Volume:` + strings.Replace(fmt.Sprintf("%v", this.Volume), "Volume", "Volume", 1) + `,`, - `}`, - }, "") - return s -} -func (this *ListVolumesRequest) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&ListVolumesRequest{`, - `Filters:` + strings.Replace(fmt.Sprintf("%v", this.Filters), "ListVolumesRequest_Filters", "ListVolumesRequest_Filters", 1) + `,`, - `}`, - }, "") - return s -} -func (this *ListVolumesRequest_Filters) String() string { - if this == nil { - return "nil" - } - keysForLabels := make([]string, 0, len(this.Labels)) - for k, _ := range this.Labels { - keysForLabels = append(keysForLabels, k) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForLabels) - mapStringForLabels := "map[string]string{" - for _, k := range keysForLabels { - mapStringForLabels += fmt.Sprintf("%v: %v,", k, this.Labels[k]) - } - mapStringForLabels += "}" - s := strings.Join([]string{`&ListVolumesRequest_Filters{`, - `Names:` + fmt.Sprintf("%v", this.Names) + `,`, - `IDPrefixes:` + fmt.Sprintf("%v", this.IDPrefixes) + `,`, - `Labels:` + mapStringForLabels + `,`, - `NamePrefixes:` + fmt.Sprintf("%v", this.NamePrefixes) + `,`, - `Groups:` + fmt.Sprintf("%v", this.Groups) + `,`, - `Drivers:` + fmt.Sprintf("%v", this.Drivers) + `,`, - `}`, - }, "") - return s -} -func (this *ListVolumesResponse) String() string { - if this == nil { - return "nil" - } - repeatedStringForVolumes := "[]*Volume{" - for _, f := range this.Volumes { - repeatedStringForVolumes += strings.Replace(fmt.Sprintf("%v", f), "Volume", "Volume", 1) + "," - } - repeatedStringForVolumes += "}" - s := strings.Join([]string{`&ListVolumesResponse{`, - `Volumes:` + repeatedStringForVolumes + `,`, - `}`, - }, "") - return s -} -func (this *RemoveVolumeRequest) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&RemoveVolumeRequest{`, - `VolumeID:` + fmt.Sprintf("%v", this.VolumeID) + `,`, - `Force:` + fmt.Sprintf("%v", this.Force) + `,`, - `}`, - }, "") - return s -} -func (this *RemoveVolumeResponse) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&RemoveVolumeResponse{`, - `}`, - }, "") - return s -} -func valueToStringControl(v interface{}) string { - rv := reflect.ValueOf(v) - if rv.IsNil() { - return "nil" - } - pv := reflect.Indirect(rv).Interface() - return fmt.Sprintf("*%v", pv) -} -func (m *GetNodeRequest) 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 ErrIntOverflowControl - } - 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: GetNodeRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GetNodeRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NodeID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.NodeID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *GetNodeResponse) 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 ErrIntOverflowControl - } - 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: GetNodeResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GetNodeResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Node", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Node == nil { - m.Node = &Node{} - } - if err := m.Node.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ListNodesRequest) 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 ErrIntOverflowControl - } - 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: ListNodesRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ListNodesRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Filters", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Filters == nil { - m.Filters = &ListNodesRequest_Filters{} - } - if err := m.Filters.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ListNodesRequest_Filters) 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 ErrIntOverflowControl - } - 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: Filters: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Filters: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Names", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Names = append(m.Names, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field IDPrefixes", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.IDPrefixes = append(m.IDPrefixes, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Labels", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Labels == nil { - m.Labels = make(map[string]string) - } - var mapkey string - var mapvalue string - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { - return ErrInvalidLengthControl - } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey < 0 { - return ErrInvalidLengthControl - } - if postStringIndexmapkey > l { - return io.ErrUnexpectedEOF - } - mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - } else if fieldNum == 2 { - var stringLenmapvalue uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapvalue |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapvalue := int(stringLenmapvalue) - if intStringLenmapvalue < 0 { - return ErrInvalidLengthControl - } - postStringIndexmapvalue := iNdEx + intStringLenmapvalue - if postStringIndexmapvalue < 0 { - return ErrInvalidLengthControl - } - if postStringIndexmapvalue > l { - return io.ErrUnexpectedEOF - } - mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) - iNdEx = postStringIndexmapvalue - } else { - iNdEx = entryPreIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - m.Labels[mapkey] = mapvalue - iNdEx = postIndex - case 4: - if wireType == 0 { - var v NodeSpec_Membership - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= NodeSpec_Membership(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.Memberships = append(m.Memberships, v) - } else if wireType == 2 { - var packedLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - packedLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if packedLen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + packedLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - var elementCount int - if elementCount != 0 && len(m.Memberships) == 0 { - m.Memberships = make([]NodeSpec_Membership, 0, elementCount) - } - for iNdEx < postIndex { - var v NodeSpec_Membership - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= NodeSpec_Membership(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.Memberships = append(m.Memberships, v) - } - } else { - return fmt.Errorf("proto: wrong wireType = %d for field Memberships", wireType) - } - case 5: - if wireType == 0 { - var v NodeRole - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= NodeRole(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.Roles = append(m.Roles, v) - } else if wireType == 2 { - var packedLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - packedLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if packedLen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + packedLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - var elementCount int - if elementCount != 0 && len(m.Roles) == 0 { - m.Roles = make([]NodeRole, 0, elementCount) - } - for iNdEx < postIndex { - var v NodeRole - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= NodeRole(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.Roles = append(m.Roles, v) - } - } else { - return fmt.Errorf("proto: wrong wireType = %d for field Roles", wireType) - } - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NamePrefixes", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.NamePrefixes = append(m.NamePrefixes, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NodeLabels", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.NodeLabels == nil { - m.NodeLabels = make(map[string]string) - } - var mapkey string - var mapvalue string - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { - return ErrInvalidLengthControl - } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey < 0 { - return ErrInvalidLengthControl - } - if postStringIndexmapkey > l { - return io.ErrUnexpectedEOF - } - mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - } else if fieldNum == 2 { - var stringLenmapvalue uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapvalue |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapvalue := int(stringLenmapvalue) - if intStringLenmapvalue < 0 { - return ErrInvalidLengthControl - } - postStringIndexmapvalue := iNdEx + intStringLenmapvalue - if postStringIndexmapvalue < 0 { - return ErrInvalidLengthControl - } - if postStringIndexmapvalue > l { - return io.ErrUnexpectedEOF - } - mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) - iNdEx = postStringIndexmapvalue - } else { - iNdEx = entryPreIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - m.NodeLabels[mapkey] = mapvalue - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ListNodesResponse) 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 ErrIntOverflowControl - } - 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: ListNodesResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ListNodesResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Nodes", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Nodes = append(m.Nodes, &Node{}) - if err := m.Nodes[len(m.Nodes)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *UpdateNodeRequest) 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 ErrIntOverflowControl - } - 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: UpdateNodeRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: UpdateNodeRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NodeID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.NodeID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NodeVersion", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.NodeVersion == nil { - m.NodeVersion = &Version{} - } - if err := m.NodeVersion.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Spec == nil { - m.Spec = &NodeSpec{} - } - if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *UpdateNodeResponse) 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 ErrIntOverflowControl - } - 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: UpdateNodeResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: UpdateNodeResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Node", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Node == nil { - m.Node = &Node{} - } - if err := m.Node.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RemoveNodeRequest) 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 ErrIntOverflowControl - } - 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: RemoveNodeRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RemoveNodeRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NodeID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.NodeID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Force", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.Force = bool(v != 0) - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RemoveNodeResponse) 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 ErrIntOverflowControl - } - 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: RemoveNodeResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RemoveNodeResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *GetTaskRequest) 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 ErrIntOverflowControl - } - 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: GetTaskRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GetTaskRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TaskID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.TaskID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *GetTaskResponse) 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 ErrIntOverflowControl - } - 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: GetTaskResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GetTaskResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Task", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Task == nil { - m.Task = &Task{} - } - if err := m.Task.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RemoveTaskRequest) 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 ErrIntOverflowControl - } - 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: RemoveTaskRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RemoveTaskRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TaskID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.TaskID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RemoveTaskResponse) 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 ErrIntOverflowControl - } - 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: RemoveTaskResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RemoveTaskResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ListTasksRequest) 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 ErrIntOverflowControl - } - 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: ListTasksRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ListTasksRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Filters", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Filters == nil { - m.Filters = &ListTasksRequest_Filters{} - } - if err := m.Filters.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ListTasksRequest_Filters) 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 ErrIntOverflowControl - } - 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: Filters: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Filters: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Names", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Names = append(m.Names, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field IDPrefixes", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.IDPrefixes = append(m.IDPrefixes, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Labels", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Labels == nil { - m.Labels = make(map[string]string) - } - var mapkey string - var mapvalue string - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { - return ErrInvalidLengthControl - } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey < 0 { - return ErrInvalidLengthControl - } - if postStringIndexmapkey > l { - return io.ErrUnexpectedEOF - } - mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - } else if fieldNum == 2 { - var stringLenmapvalue uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapvalue |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapvalue := int(stringLenmapvalue) - if intStringLenmapvalue < 0 { - return ErrInvalidLengthControl - } - postStringIndexmapvalue := iNdEx + intStringLenmapvalue - if postStringIndexmapvalue < 0 { - return ErrInvalidLengthControl - } - if postStringIndexmapvalue > l { - return io.ErrUnexpectedEOF - } - mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) - iNdEx = postStringIndexmapvalue - } else { - iNdEx = entryPreIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - m.Labels[mapkey] = mapvalue - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ServiceIDs", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ServiceIDs = append(m.ServiceIDs, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NodeIDs", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.NodeIDs = append(m.NodeIDs, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 6: - if wireType == 0 { - var v TaskState - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= TaskState(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.DesiredStates = append(m.DesiredStates, v) - } else if wireType == 2 { - var packedLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - packedLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if packedLen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + packedLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - var elementCount int - if elementCount != 0 && len(m.DesiredStates) == 0 { - m.DesiredStates = make([]TaskState, 0, elementCount) - } - for iNdEx < postIndex { - var v TaskState - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= TaskState(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.DesiredStates = append(m.DesiredStates, v) - } - } else { - return fmt.Errorf("proto: wrong wireType = %d for field DesiredStates", wireType) - } - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NamePrefixes", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.NamePrefixes = append(m.NamePrefixes, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 8: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field UpToDate", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.UpToDate = bool(v != 0) - case 9: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Runtimes", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Runtimes = append(m.Runtimes, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ListTasksResponse) 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 ErrIntOverflowControl - } - 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: ListTasksResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ListTasksResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Tasks", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Tasks = append(m.Tasks, &Task{}) - if err := m.Tasks[len(m.Tasks)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *CreateServiceRequest) 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 ErrIntOverflowControl - } - 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: CreateServiceRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: CreateServiceRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Spec == nil { - m.Spec = &ServiceSpec{} - } - if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *CreateServiceResponse) 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 ErrIntOverflowControl - } - 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: CreateServiceResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: CreateServiceResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Service", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Service == nil { - m.Service = &Service{} - } - if err := m.Service.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *GetServiceRequest) 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 ErrIntOverflowControl - } - 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: GetServiceRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GetServiceRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ServiceID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ServiceID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field InsertDefaults", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.InsertDefaults = bool(v != 0) - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *GetServiceResponse) 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 ErrIntOverflowControl - } - 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: GetServiceResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GetServiceResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Service", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Service == nil { - m.Service = &Service{} - } - if err := m.Service.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *UpdateServiceRequest) 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 ErrIntOverflowControl - } - 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: UpdateServiceRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: UpdateServiceRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ServiceID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ServiceID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ServiceVersion", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.ServiceVersion == nil { - m.ServiceVersion = &Version{} - } - if err := m.ServiceVersion.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Spec == nil { - m.Spec = &ServiceSpec{} - } - if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Rollback", wireType) - } - m.Rollback = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Rollback |= UpdateServiceRequest_Rollback(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *UpdateServiceResponse) 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 ErrIntOverflowControl - } - 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: UpdateServiceResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: UpdateServiceResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Service", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Service == nil { - m.Service = &Service{} - } - if err := m.Service.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RemoveServiceRequest) 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 ErrIntOverflowControl - } - 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: RemoveServiceRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RemoveServiceRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ServiceID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ServiceID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RemoveServiceResponse) 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 ErrIntOverflowControl - } - 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: RemoveServiceResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RemoveServiceResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ListServicesRequest) 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 ErrIntOverflowControl - } - 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: ListServicesRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ListServicesRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Filters", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Filters == nil { - m.Filters = &ListServicesRequest_Filters{} - } - if err := m.Filters.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ListServicesRequest_Filters) 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 ErrIntOverflowControl - } - 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: Filters: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Filters: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Names", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Names = append(m.Names, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field IDPrefixes", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.IDPrefixes = append(m.IDPrefixes, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Labels", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Labels == nil { - m.Labels = make(map[string]string) - } - var mapkey string - var mapvalue string - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { - return ErrInvalidLengthControl - } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey < 0 { - return ErrInvalidLengthControl - } - if postStringIndexmapkey > l { - return io.ErrUnexpectedEOF - } - mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - } else if fieldNum == 2 { - var stringLenmapvalue uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapvalue |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapvalue := int(stringLenmapvalue) - if intStringLenmapvalue < 0 { - return ErrInvalidLengthControl - } - postStringIndexmapvalue := iNdEx + intStringLenmapvalue - if postStringIndexmapvalue < 0 { - return ErrInvalidLengthControl - } - if postStringIndexmapvalue > l { - return io.ErrUnexpectedEOF - } - mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) - iNdEx = postStringIndexmapvalue - } else { - iNdEx = entryPreIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - m.Labels[mapkey] = mapvalue - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NamePrefixes", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.NamePrefixes = append(m.NamePrefixes, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Runtimes", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Runtimes = append(m.Runtimes, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ListServicesResponse) 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 ErrIntOverflowControl - } - 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: ListServicesResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ListServicesResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Services", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Services = append(m.Services, &Service{}) - if err := m.Services[len(m.Services)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ListServiceStatusesRequest) 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 ErrIntOverflowControl - } - 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: ListServiceStatusesRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ListServiceStatusesRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Services", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Services = append(m.Services, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ListServiceStatusesResponse) 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 ErrIntOverflowControl - } - 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: ListServiceStatusesResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ListServiceStatusesResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Statuses", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Statuses = append(m.Statuses, &ListServiceStatusesResponse_ServiceStatus{}) - if err := m.Statuses[len(m.Statuses)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ListServiceStatusesResponse_ServiceStatus) 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 ErrIntOverflowControl - } - 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: ServiceStatus: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ServiceStatus: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ServiceID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ServiceID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field DesiredTasks", wireType) - } - m.DesiredTasks = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.DesiredTasks |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field RunningTasks", wireType) - } - m.RunningTasks = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.RunningTasks |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field CompletedTasks", wireType) - } - m.CompletedTasks = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.CompletedTasks |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *CreateNetworkRequest) 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 ErrIntOverflowControl - } - 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: CreateNetworkRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: CreateNetworkRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Spec == nil { - m.Spec = &NetworkSpec{} - } - if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *CreateNetworkResponse) 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 ErrIntOverflowControl - } - 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: CreateNetworkResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: CreateNetworkResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Network", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Network == nil { - m.Network = &Network{} - } - if err := m.Network.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *GetNetworkRequest) 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 ErrIntOverflowControl - } - 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: GetNetworkRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GetNetworkRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Name = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NetworkID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.NetworkID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Appdata", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Appdata == nil { - m.Appdata = &types.Any{} - } - if err := m.Appdata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *GetNetworkResponse) 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 ErrIntOverflowControl - } - 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: GetNetworkResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GetNetworkResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Network", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Network == nil { - m.Network = &Network{} - } - if err := m.Network.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RemoveNetworkRequest) 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 ErrIntOverflowControl - } - 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: RemoveNetworkRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RemoveNetworkRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Name = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NetworkID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.NetworkID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RemoveNetworkResponse) 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 ErrIntOverflowControl - } - 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: RemoveNetworkResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RemoveNetworkResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ListNetworksRequest) 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 ErrIntOverflowControl - } - 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: ListNetworksRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ListNetworksRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Filters", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Filters == nil { - m.Filters = &ListNetworksRequest_Filters{} - } - if err := m.Filters.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Appdata", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Appdata == nil { - m.Appdata = &types.Any{} - } - if err := m.Appdata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ListNetworksRequest_Filters) 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 ErrIntOverflowControl - } - 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: Filters: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Filters: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Names", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Names = append(m.Names, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field IDPrefixes", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.IDPrefixes = append(m.IDPrefixes, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Labels", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Labels == nil { - m.Labels = make(map[string]string) - } - var mapkey string - var mapvalue string - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { - return ErrInvalidLengthControl - } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey < 0 { - return ErrInvalidLengthControl - } - if postStringIndexmapkey > l { - return io.ErrUnexpectedEOF - } - mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - } else if fieldNum == 2 { - var stringLenmapvalue uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapvalue |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapvalue := int(stringLenmapvalue) - if intStringLenmapvalue < 0 { - return ErrInvalidLengthControl - } - postStringIndexmapvalue := iNdEx + intStringLenmapvalue - if postStringIndexmapvalue < 0 { - return ErrInvalidLengthControl - } - if postStringIndexmapvalue > l { - return io.ErrUnexpectedEOF - } - mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) - iNdEx = postStringIndexmapvalue - } else { - iNdEx = entryPreIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - m.Labels[mapkey] = mapvalue - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NamePrefixes", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.NamePrefixes = append(m.NamePrefixes, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ListNetworksResponse) 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 ErrIntOverflowControl - } - 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: ListNetworksResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ListNetworksResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Networks", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Networks = append(m.Networks, &Network{}) - if err := m.Networks[len(m.Networks)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *GetClusterRequest) 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 ErrIntOverflowControl - } - 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: GetClusterRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GetClusterRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ClusterID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ClusterID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *GetClusterResponse) 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 ErrIntOverflowControl - } - 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: GetClusterResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GetClusterResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Cluster", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Cluster == nil { - m.Cluster = &Cluster{} - } - if err := m.Cluster.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ListClustersRequest) 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 ErrIntOverflowControl - } - 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: ListClustersRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ListClustersRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Filters", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Filters == nil { - m.Filters = &ListClustersRequest_Filters{} - } - if err := m.Filters.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ListClustersRequest_Filters) 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 ErrIntOverflowControl - } - 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: Filters: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Filters: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Names", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Names = append(m.Names, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field IDPrefixes", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.IDPrefixes = append(m.IDPrefixes, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Labels", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Labels == nil { - m.Labels = make(map[string]string) - } - var mapkey string - var mapvalue string - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { - return ErrInvalidLengthControl - } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey < 0 { - return ErrInvalidLengthControl - } - if postStringIndexmapkey > l { - return io.ErrUnexpectedEOF - } - mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - } else if fieldNum == 2 { - var stringLenmapvalue uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapvalue |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapvalue := int(stringLenmapvalue) - if intStringLenmapvalue < 0 { - return ErrInvalidLengthControl - } - postStringIndexmapvalue := iNdEx + intStringLenmapvalue - if postStringIndexmapvalue < 0 { - return ErrInvalidLengthControl - } - if postStringIndexmapvalue > l { - return io.ErrUnexpectedEOF - } - mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) - iNdEx = postStringIndexmapvalue - } else { - iNdEx = entryPreIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - m.Labels[mapkey] = mapvalue - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NamePrefixes", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.NamePrefixes = append(m.NamePrefixes, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ListClustersResponse) 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 ErrIntOverflowControl - } - 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: ListClustersResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ListClustersResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Clusters", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Clusters = append(m.Clusters, &Cluster{}) - if err := m.Clusters[len(m.Clusters)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *KeyRotation) 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 ErrIntOverflowControl - } - 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: KeyRotation: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: KeyRotation: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field WorkerJoinToken", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.WorkerJoinToken = bool(v != 0) - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ManagerJoinToken", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.ManagerJoinToken = bool(v != 0) - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ManagerUnlockKey", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.ManagerUnlockKey = bool(v != 0) - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *UpdateClusterRequest) 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 ErrIntOverflowControl - } - 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: UpdateClusterRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: UpdateClusterRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ClusterID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ClusterID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ClusterVersion", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.ClusterVersion == nil { - m.ClusterVersion = &Version{} - } - if err := m.ClusterVersion.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Spec == nil { - m.Spec = &ClusterSpec{} - } - if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Rotation", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Rotation.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *UpdateClusterResponse) 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 ErrIntOverflowControl - } - 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: UpdateClusterResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: UpdateClusterResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Cluster", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Cluster == nil { - m.Cluster = &Cluster{} - } - if err := m.Cluster.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *GetSecretRequest) 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 ErrIntOverflowControl - } - 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: GetSecretRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GetSecretRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SecretID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.SecretID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *GetSecretResponse) 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 ErrIntOverflowControl - } - 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: GetSecretResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GetSecretResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Secret", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Secret == nil { - m.Secret = &Secret{} - } - if err := m.Secret.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *UpdateSecretRequest) 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 ErrIntOverflowControl - } - 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: UpdateSecretRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: UpdateSecretRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SecretID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.SecretID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SecretVersion", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.SecretVersion == nil { - m.SecretVersion = &Version{} - } - if err := m.SecretVersion.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Spec == nil { - m.Spec = &SecretSpec{} - } - if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *UpdateSecretResponse) 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 ErrIntOverflowControl - } - 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: UpdateSecretResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: UpdateSecretResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Secret", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Secret == nil { - m.Secret = &Secret{} - } - if err := m.Secret.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ListSecretsRequest) 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 ErrIntOverflowControl - } - 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: ListSecretsRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ListSecretsRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Filters", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Filters == nil { - m.Filters = &ListSecretsRequest_Filters{} - } - if err := m.Filters.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ListSecretsRequest_Filters) 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 ErrIntOverflowControl - } - 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: Filters: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Filters: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Names", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Names = append(m.Names, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field IDPrefixes", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.IDPrefixes = append(m.IDPrefixes, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Labels", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Labels == nil { - m.Labels = make(map[string]string) - } - var mapkey string - var mapvalue string - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { - return ErrInvalidLengthControl - } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey < 0 { - return ErrInvalidLengthControl - } - if postStringIndexmapkey > l { - return io.ErrUnexpectedEOF - } - mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - } else if fieldNum == 2 { - var stringLenmapvalue uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapvalue |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapvalue := int(stringLenmapvalue) - if intStringLenmapvalue < 0 { - return ErrInvalidLengthControl - } - postStringIndexmapvalue := iNdEx + intStringLenmapvalue - if postStringIndexmapvalue < 0 { - return ErrInvalidLengthControl - } - if postStringIndexmapvalue > l { - return io.ErrUnexpectedEOF - } - mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) - iNdEx = postStringIndexmapvalue - } else { - iNdEx = entryPreIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - m.Labels[mapkey] = mapvalue - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NamePrefixes", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.NamePrefixes = append(m.NamePrefixes, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ListSecretsResponse) 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 ErrIntOverflowControl - } - 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: ListSecretsResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ListSecretsResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Secrets", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Secrets = append(m.Secrets, &Secret{}) - if err := m.Secrets[len(m.Secrets)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *CreateSecretRequest) 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 ErrIntOverflowControl - } - 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: CreateSecretRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: CreateSecretRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Spec == nil { - m.Spec = &SecretSpec{} - } - if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *CreateSecretResponse) 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 ErrIntOverflowControl - } - 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: CreateSecretResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: CreateSecretResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Secret", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Secret == nil { - m.Secret = &Secret{} - } - if err := m.Secret.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RemoveSecretRequest) 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 ErrIntOverflowControl - } - 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: RemoveSecretRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RemoveSecretRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SecretID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.SecretID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RemoveSecretResponse) 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 ErrIntOverflowControl - } - 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: RemoveSecretResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RemoveSecretResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *GetConfigRequest) 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 ErrIntOverflowControl - } - 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: GetConfigRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GetConfigRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ConfigID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ConfigID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *GetConfigResponse) 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 ErrIntOverflowControl - } - 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: GetConfigResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GetConfigResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Config", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Config == nil { - m.Config = &Config{} - } - if err := m.Config.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *UpdateConfigRequest) 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 ErrIntOverflowControl - } - 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: UpdateConfigRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: UpdateConfigRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ConfigID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ConfigID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ConfigVersion", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.ConfigVersion == nil { - m.ConfigVersion = &Version{} - } - if err := m.ConfigVersion.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Spec == nil { - m.Spec = &ConfigSpec{} - } - if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *UpdateConfigResponse) 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 ErrIntOverflowControl - } - 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: UpdateConfigResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: UpdateConfigResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Config", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Config == nil { - m.Config = &Config{} - } - if err := m.Config.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ListConfigsRequest) 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 ErrIntOverflowControl - } - 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: ListConfigsRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ListConfigsRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Filters", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Filters == nil { - m.Filters = &ListConfigsRequest_Filters{} - } - if err := m.Filters.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ListConfigsRequest_Filters) 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 ErrIntOverflowControl - } - 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: Filters: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Filters: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Names", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Names = append(m.Names, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field IDPrefixes", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.IDPrefixes = append(m.IDPrefixes, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Labels", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Labels == nil { - m.Labels = make(map[string]string) - } - var mapkey string - var mapvalue string - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { - return ErrInvalidLengthControl - } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey < 0 { - return ErrInvalidLengthControl - } - if postStringIndexmapkey > l { - return io.ErrUnexpectedEOF - } - mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - } else if fieldNum == 2 { - var stringLenmapvalue uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapvalue |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapvalue := int(stringLenmapvalue) - if intStringLenmapvalue < 0 { - return ErrInvalidLengthControl - } - postStringIndexmapvalue := iNdEx + intStringLenmapvalue - if postStringIndexmapvalue < 0 { - return ErrInvalidLengthControl - } - if postStringIndexmapvalue > l { - return io.ErrUnexpectedEOF - } - mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) - iNdEx = postStringIndexmapvalue - } else { - iNdEx = entryPreIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - m.Labels[mapkey] = mapvalue - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NamePrefixes", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.NamePrefixes = append(m.NamePrefixes, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ListConfigsResponse) 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 ErrIntOverflowControl - } - 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: ListConfigsResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ListConfigsResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Configs", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Configs = append(m.Configs, &Config{}) - if err := m.Configs[len(m.Configs)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *CreateConfigRequest) 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 ErrIntOverflowControl - } - 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: CreateConfigRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: CreateConfigRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Spec == nil { - m.Spec = &ConfigSpec{} - } - if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *CreateConfigResponse) 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 ErrIntOverflowControl - } - 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: CreateConfigResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: CreateConfigResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Config", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Config == nil { - m.Config = &Config{} - } - if err := m.Config.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RemoveConfigRequest) 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 ErrIntOverflowControl - } - 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: RemoveConfigRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RemoveConfigRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ConfigID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ConfigID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RemoveConfigResponse) 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 ErrIntOverflowControl - } - 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: RemoveConfigResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RemoveConfigResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *CreateExtensionRequest) 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 ErrIntOverflowControl - } - 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: CreateExtensionRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: CreateExtensionRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Annotations", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Annotations == nil { - m.Annotations = &Annotations{} - } - if err := m.Annotations.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Description", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Description = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *CreateExtensionResponse) 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 ErrIntOverflowControl - } - 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: CreateExtensionResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: CreateExtensionResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Extension", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Extension == nil { - m.Extension = &Extension{} - } - if err := m.Extension.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RemoveExtensionRequest) 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 ErrIntOverflowControl - } - 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: RemoveExtensionRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RemoveExtensionRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ExtensionID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ExtensionID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RemoveExtensionResponse) 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 ErrIntOverflowControl - } - 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: RemoveExtensionResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RemoveExtensionResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *GetExtensionRequest) 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 ErrIntOverflowControl - } - 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: GetExtensionRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GetExtensionRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ExtensionID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ExtensionID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *GetExtensionResponse) 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 ErrIntOverflowControl - } - 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: GetExtensionResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GetExtensionResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Extension", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Extension == nil { - m.Extension = &Extension{} - } - if err := m.Extension.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *CreateResourceRequest) 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 ErrIntOverflowControl - } - 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: CreateResourceRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: CreateResourceRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Annotations", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Annotations == nil { - m.Annotations = &Annotations{} - } - if err := m.Annotations.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Kind", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Kind = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Payload", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Payload == nil { - m.Payload = &types.Any{} - } - if err := m.Payload.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *CreateResourceResponse) 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 ErrIntOverflowControl - } - 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: CreateResourceResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: CreateResourceResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Resource", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Resource == nil { - m.Resource = &Resource{} - } - if err := m.Resource.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RemoveResourceRequest) 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 ErrIntOverflowControl - } - 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: RemoveResourceRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RemoveResourceRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ResourceID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ResourceID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RemoveResourceResponse) 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 ErrIntOverflowControl - } - 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: RemoveResourceResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RemoveResourceResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *UpdateResourceRequest) 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 ErrIntOverflowControl - } - 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: UpdateResourceRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: UpdateResourceRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ResourceID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ResourceID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ResourceVersion", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.ResourceVersion == nil { - m.ResourceVersion = &Version{} - } - if err := m.ResourceVersion.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Annotations", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Annotations == nil { - m.Annotations = &Annotations{} - } - if err := m.Annotations.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Payload", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Payload == nil { - m.Payload = &types.Any{} - } - if err := m.Payload.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *UpdateResourceResponse) 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 ErrIntOverflowControl - } - 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: UpdateResourceResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: UpdateResourceResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Resource", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Resource == nil { - m.Resource = &Resource{} - } - if err := m.Resource.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *GetResourceRequest) 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 ErrIntOverflowControl - } - 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: GetResourceRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GetResourceRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ResourceID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ResourceID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *GetResourceResponse) 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 ErrIntOverflowControl - } - 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: GetResourceResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GetResourceResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Resource", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Resource == nil { - m.Resource = &Resource{} - } - if err := m.Resource.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ListResourcesRequest) 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 ErrIntOverflowControl - } - 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: ListResourcesRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ListResourcesRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Filters", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Filters == nil { - m.Filters = &ListResourcesRequest_Filters{} - } - if err := m.Filters.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ListResourcesRequest_Filters) 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 ErrIntOverflowControl - } - 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: Filters: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Filters: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Names", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Names = append(m.Names, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field IDPrefixes", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.IDPrefixes = append(m.IDPrefixes, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Labels", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Labels == nil { - m.Labels = make(map[string]string) - } - var mapkey string - var mapvalue string - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { - return ErrInvalidLengthControl - } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey < 0 { - return ErrInvalidLengthControl - } - if postStringIndexmapkey > l { - return io.ErrUnexpectedEOF - } - mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - } else if fieldNum == 2 { - var stringLenmapvalue uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapvalue |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapvalue := int(stringLenmapvalue) - if intStringLenmapvalue < 0 { - return ErrInvalidLengthControl - } - postStringIndexmapvalue := iNdEx + intStringLenmapvalue - if postStringIndexmapvalue < 0 { - return ErrInvalidLengthControl - } - if postStringIndexmapvalue > l { - return io.ErrUnexpectedEOF - } - mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) - iNdEx = postStringIndexmapvalue - } else { - iNdEx = entryPreIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - m.Labels[mapkey] = mapvalue - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NamePrefixes", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.NamePrefixes = append(m.NamePrefixes, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Kind", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Kind = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ListResourcesResponse) 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 ErrIntOverflowControl - } - 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: ListResourcesResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ListResourcesResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Resources", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Resources = append(m.Resources, &Resource{}) - if err := m.Resources[len(m.Resources)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *CreateVolumeRequest) 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 ErrIntOverflowControl - } - 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: CreateVolumeRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: CreateVolumeRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Spec == nil { - m.Spec = &VolumeSpec{} - } - if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *CreateVolumeResponse) 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 ErrIntOverflowControl - } - 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: CreateVolumeResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: CreateVolumeResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Volume", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Volume == nil { - m.Volume = &Volume{} - } - if err := m.Volume.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *GetVolumeRequest) 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 ErrIntOverflowControl - } - 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: GetVolumeRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GetVolumeRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field VolumeID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.VolumeID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *GetVolumeResponse) 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 ErrIntOverflowControl - } - 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: GetVolumeResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GetVolumeResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Volume", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Volume == nil { - m.Volume = &Volume{} - } - if err := m.Volume.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *UpdateVolumeRequest) 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 ErrIntOverflowControl - } - 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: UpdateVolumeRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: UpdateVolumeRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field VolumeID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.VolumeID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field VolumeVersion", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.VolumeVersion == nil { - m.VolumeVersion = &Version{} - } - if err := m.VolumeVersion.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Spec == nil { - m.Spec = &VolumeSpec{} - } - if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *UpdateVolumeResponse) 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 ErrIntOverflowControl - } - 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: UpdateVolumeResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: UpdateVolumeResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Volume", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Volume == nil { - m.Volume = &Volume{} - } - if err := m.Volume.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ListVolumesRequest) 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 ErrIntOverflowControl - } - 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: ListVolumesRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ListVolumesRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Filters", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Filters == nil { - m.Filters = &ListVolumesRequest_Filters{} - } - if err := m.Filters.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ListVolumesRequest_Filters) 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 ErrIntOverflowControl - } - 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: Filters: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Filters: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Names", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Names = append(m.Names, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field IDPrefixes", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.IDPrefixes = append(m.IDPrefixes, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Labels", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Labels == nil { - m.Labels = make(map[string]string) - } - var mapkey string - var mapvalue string - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { - return ErrInvalidLengthControl - } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey < 0 { - return ErrInvalidLengthControl - } - if postStringIndexmapkey > l { - return io.ErrUnexpectedEOF - } - mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - } else if fieldNum == 2 { - var stringLenmapvalue uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapvalue |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapvalue := int(stringLenmapvalue) - if intStringLenmapvalue < 0 { - return ErrInvalidLengthControl - } - postStringIndexmapvalue := iNdEx + intStringLenmapvalue - if postStringIndexmapvalue < 0 { - return ErrInvalidLengthControl - } - if postStringIndexmapvalue > l { - return io.ErrUnexpectedEOF - } - mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) - iNdEx = postStringIndexmapvalue - } else { - iNdEx = entryPreIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - m.Labels[mapkey] = mapvalue - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NamePrefixes", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.NamePrefixes = append(m.NamePrefixes, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Groups", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Groups = append(m.Groups, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Drivers", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Drivers = append(m.Drivers, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ListVolumesResponse) 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 ErrIntOverflowControl - } - 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: ListVolumesResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ListVolumesResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Volumes", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthControl - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Volumes = append(m.Volumes, &Volume{}) - if err := m.Volumes[len(m.Volumes)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RemoveVolumeRequest) 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 ErrIntOverflowControl - } - 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: RemoveVolumeRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RemoveVolumeRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field VolumeID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - 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 ErrInvalidLengthControl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthControl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.VolumeID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Force", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowControl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.Force = bool(v != 0) - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RemoveVolumeResponse) 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 ErrIntOverflowControl - } - 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: RemoveVolumeResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RemoveVolumeResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipControl(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthControl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipControl(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - depth := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowControl - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowControl - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - case 1: - iNdEx += 8 - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowControl - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLengthControl - } - iNdEx += length - case 3: - depth++ - case 4: - if depth == 0 { - return 0, ErrUnexpectedEndOfGroupControl - } - depth-- - case 5: - iNdEx += 4 - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - if iNdEx < 0 { - return 0, ErrInvalidLengthControl - } - if depth == 0 { - return iNdEx, nil - } - } - return 0, io.ErrUnexpectedEOF -} - -var ( - ErrInvalidLengthControl = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowControl = fmt.Errorf("proto: integer overflow") - ErrUnexpectedEndOfGroupControl = fmt.Errorf("proto: unexpected end of group") -) diff --git a/api/control.pb.raftproxy.go b/api/control.pb.raftproxy.go new file mode 100644 index 0000000000..edf12225d2 --- /dev/null +++ b/api/control.pb.raftproxy.go @@ -0,0 +1,1592 @@ +// Code generated by protoc-gen-goswarm. DO NOT EDIT. + +package api + +import ( + context "context" + raftselector "github.com/moby/swarmkit/v2/manager/raftselector" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + metadata "google.golang.org/grpc/metadata" + peer "google.golang.org/grpc/peer" + status "google.golang.org/grpc/status" + strings "strings" + time "time" +) + +type raftProxyControlServer struct { + local ControlServer + connSelector raftselector.ConnProvider + localCtxMods, remoteCtxMods []func(context.Context) (context.Context, error) +} + +func NewRaftProxyControlServer(local ControlServer, connSelector raftselector.ConnProvider, localCtxMod, remoteCtxMod func(context.Context) (context.Context, error)) ControlServer { + redirectChecker := func(ctx context.Context) (context.Context, error) { + p, ok := peer.FromContext(ctx) + if !ok { + return ctx, status.Errorf(codes.InvalidArgument, "remote addr is not found in context") + } + addr := p.Addr.String() + md, ok := metadata.FromIncomingContext(ctx) + if ok && len(md["redirect"]) != 0 { + return ctx, status.Errorf(codes.ResourceExhausted, "more than one redirect to leader from: %s", md["redirect"]) + } + if !ok { + md = metadata.New(map[string]string{}) + } + md["redirect"] = append(md["redirect"], addr) + return metadata.NewOutgoingContext(ctx, md), nil + } + remoteMods := []func(context.Context) (context.Context, error){redirectChecker} + remoteMods = append(remoteMods, remoteCtxMod) + + var localMods []func(context.Context) (context.Context, error) + if localCtxMod != nil { + localMods = []func(context.Context) (context.Context, error){localCtxMod} + } + + return &raftProxyControlServer{ + local: local, + connSelector: connSelector, + localCtxMods: localMods, + remoteCtxMods: remoteMods, + } +} +func (p *raftProxyControlServer) runCtxMods(ctx context.Context, ctxMods []func(context.Context) (context.Context, error)) (context.Context, error) { + var err error + for _, mod := range ctxMods { + ctx, err = mod(ctx) + if err != nil { + return ctx, err + } + } + return ctx, nil +} +func (p *raftProxyControlServer) pollNewLeaderConn(ctx context.Context) (*grpc.ClientConn, error) { + ticker := time.NewTicker(500 * time.Millisecond) + defer ticker.Stop() + for { + select { + case <-ticker.C: + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + return nil, err + } + + client := NewHealthClient(conn) + + resp, err := client.Check(ctx, &HealthCheckRequest{Service: "Raft"}) + if err != nil || resp.Status != HealthCheckResponse_SERVING { + continue + } + return conn, nil + case <-ctx.Done(): + return nil, ctx.Err() + } + } +} + +func (p *raftProxyControlServer) GetNode(ctx context.Context, r *GetNodeRequest) (*GetNodeResponse, error) { + + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return nil, err + } + return p.local.GetNode(ctx, r) + } + return nil, err + } + modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return nil, err + } + + resp, err := NewControlClient(conn).GetNode(modCtx, r) + if err != nil { + if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { + return resp, err + } + conn, err := p.pollNewLeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + return p.local.GetNode(ctx, r) + } + return nil, err + } + return NewControlClient(conn).GetNode(modCtx, r) + } + return resp, err +} + +func (p *raftProxyControlServer) ListNodes(ctx context.Context, r *ListNodesRequest) (*ListNodesResponse, error) { + + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return nil, err + } + return p.local.ListNodes(ctx, r) + } + return nil, err + } + modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return nil, err + } + + resp, err := NewControlClient(conn).ListNodes(modCtx, r) + if err != nil { + if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { + return resp, err + } + conn, err := p.pollNewLeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + return p.local.ListNodes(ctx, r) + } + return nil, err + } + return NewControlClient(conn).ListNodes(modCtx, r) + } + return resp, err +} + +func (p *raftProxyControlServer) UpdateNode(ctx context.Context, r *UpdateNodeRequest) (*UpdateNodeResponse, error) { + + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return nil, err + } + return p.local.UpdateNode(ctx, r) + } + return nil, err + } + modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return nil, err + } + + resp, err := NewControlClient(conn).UpdateNode(modCtx, r) + if err != nil { + if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { + return resp, err + } + conn, err := p.pollNewLeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + return p.local.UpdateNode(ctx, r) + } + return nil, err + } + return NewControlClient(conn).UpdateNode(modCtx, r) + } + return resp, err +} + +func (p *raftProxyControlServer) RemoveNode(ctx context.Context, r *RemoveNodeRequest) (*RemoveNodeResponse, error) { + + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return nil, err + } + return p.local.RemoveNode(ctx, r) + } + return nil, err + } + modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return nil, err + } + + resp, err := NewControlClient(conn).RemoveNode(modCtx, r) + if err != nil { + if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { + return resp, err + } + conn, err := p.pollNewLeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + return p.local.RemoveNode(ctx, r) + } + return nil, err + } + return NewControlClient(conn).RemoveNode(modCtx, r) + } + return resp, err +} + +func (p *raftProxyControlServer) GetTask(ctx context.Context, r *GetTaskRequest) (*GetTaskResponse, error) { + + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return nil, err + } + return p.local.GetTask(ctx, r) + } + return nil, err + } + modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return nil, err + } + + resp, err := NewControlClient(conn).GetTask(modCtx, r) + if err != nil { + if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { + return resp, err + } + conn, err := p.pollNewLeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + return p.local.GetTask(ctx, r) + } + return nil, err + } + return NewControlClient(conn).GetTask(modCtx, r) + } + return resp, err +} + +func (p *raftProxyControlServer) ListTasks(ctx context.Context, r *ListTasksRequest) (*ListTasksResponse, error) { + + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return nil, err + } + return p.local.ListTasks(ctx, r) + } + return nil, err + } + modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return nil, err + } + + resp, err := NewControlClient(conn).ListTasks(modCtx, r) + if err != nil { + if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { + return resp, err + } + conn, err := p.pollNewLeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + return p.local.ListTasks(ctx, r) + } + return nil, err + } + return NewControlClient(conn).ListTasks(modCtx, r) + } + return resp, err +} + +func (p *raftProxyControlServer) RemoveTask(ctx context.Context, r *RemoveTaskRequest) (*RemoveTaskResponse, error) { + + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return nil, err + } + return p.local.RemoveTask(ctx, r) + } + return nil, err + } + modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return nil, err + } + + resp, err := NewControlClient(conn).RemoveTask(modCtx, r) + if err != nil { + if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { + return resp, err + } + conn, err := p.pollNewLeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + return p.local.RemoveTask(ctx, r) + } + return nil, err + } + return NewControlClient(conn).RemoveTask(modCtx, r) + } + return resp, err +} + +func (p *raftProxyControlServer) GetService(ctx context.Context, r *GetServiceRequest) (*GetServiceResponse, error) { + + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return nil, err + } + return p.local.GetService(ctx, r) + } + return nil, err + } + modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return nil, err + } + + resp, err := NewControlClient(conn).GetService(modCtx, r) + if err != nil { + if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { + return resp, err + } + conn, err := p.pollNewLeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + return p.local.GetService(ctx, r) + } + return nil, err + } + return NewControlClient(conn).GetService(modCtx, r) + } + return resp, err +} + +func (p *raftProxyControlServer) ListServices(ctx context.Context, r *ListServicesRequest) (*ListServicesResponse, error) { + + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return nil, err + } + return p.local.ListServices(ctx, r) + } + return nil, err + } + modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return nil, err + } + + resp, err := NewControlClient(conn).ListServices(modCtx, r) + if err != nil { + if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { + return resp, err + } + conn, err := p.pollNewLeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + return p.local.ListServices(ctx, r) + } + return nil, err + } + return NewControlClient(conn).ListServices(modCtx, r) + } + return resp, err +} + +func (p *raftProxyControlServer) CreateService(ctx context.Context, r *CreateServiceRequest) (*CreateServiceResponse, error) { + + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return nil, err + } + return p.local.CreateService(ctx, r) + } + return nil, err + } + modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return nil, err + } + + resp, err := NewControlClient(conn).CreateService(modCtx, r) + if err != nil { + if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { + return resp, err + } + conn, err := p.pollNewLeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + return p.local.CreateService(ctx, r) + } + return nil, err + } + return NewControlClient(conn).CreateService(modCtx, r) + } + return resp, err +} + +func (p *raftProxyControlServer) UpdateService(ctx context.Context, r *UpdateServiceRequest) (*UpdateServiceResponse, error) { + + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return nil, err + } + return p.local.UpdateService(ctx, r) + } + return nil, err + } + modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return nil, err + } + + resp, err := NewControlClient(conn).UpdateService(modCtx, r) + if err != nil { + if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { + return resp, err + } + conn, err := p.pollNewLeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + return p.local.UpdateService(ctx, r) + } + return nil, err + } + return NewControlClient(conn).UpdateService(modCtx, r) + } + return resp, err +} + +func (p *raftProxyControlServer) RemoveService(ctx context.Context, r *RemoveServiceRequest) (*RemoveServiceResponse, error) { + + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return nil, err + } + return p.local.RemoveService(ctx, r) + } + return nil, err + } + modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return nil, err + } + + resp, err := NewControlClient(conn).RemoveService(modCtx, r) + if err != nil { + if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { + return resp, err + } + conn, err := p.pollNewLeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + return p.local.RemoveService(ctx, r) + } + return nil, err + } + return NewControlClient(conn).RemoveService(modCtx, r) + } + return resp, err +} + +func (p *raftProxyControlServer) ListServiceStatuses(ctx context.Context, r *ListServiceStatusesRequest) (*ListServiceStatusesResponse, error) { + + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return nil, err + } + return p.local.ListServiceStatuses(ctx, r) + } + return nil, err + } + modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return nil, err + } + + resp, err := NewControlClient(conn).ListServiceStatuses(modCtx, r) + if err != nil { + if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { + return resp, err + } + conn, err := p.pollNewLeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + return p.local.ListServiceStatuses(ctx, r) + } + return nil, err + } + return NewControlClient(conn).ListServiceStatuses(modCtx, r) + } + return resp, err +} + +func (p *raftProxyControlServer) GetNetwork(ctx context.Context, r *GetNetworkRequest) (*GetNetworkResponse, error) { + + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return nil, err + } + return p.local.GetNetwork(ctx, r) + } + return nil, err + } + modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return nil, err + } + + resp, err := NewControlClient(conn).GetNetwork(modCtx, r) + if err != nil { + if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { + return resp, err + } + conn, err := p.pollNewLeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + return p.local.GetNetwork(ctx, r) + } + return nil, err + } + return NewControlClient(conn).GetNetwork(modCtx, r) + } + return resp, err +} + +func (p *raftProxyControlServer) ListNetworks(ctx context.Context, r *ListNetworksRequest) (*ListNetworksResponse, error) { + + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return nil, err + } + return p.local.ListNetworks(ctx, r) + } + return nil, err + } + modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return nil, err + } + + resp, err := NewControlClient(conn).ListNetworks(modCtx, r) + if err != nil { + if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { + return resp, err + } + conn, err := p.pollNewLeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + return p.local.ListNetworks(ctx, r) + } + return nil, err + } + return NewControlClient(conn).ListNetworks(modCtx, r) + } + return resp, err +} + +func (p *raftProxyControlServer) CreateNetwork(ctx context.Context, r *CreateNetworkRequest) (*CreateNetworkResponse, error) { + + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return nil, err + } + return p.local.CreateNetwork(ctx, r) + } + return nil, err + } + modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return nil, err + } + + resp, err := NewControlClient(conn).CreateNetwork(modCtx, r) + if err != nil { + if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { + return resp, err + } + conn, err := p.pollNewLeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + return p.local.CreateNetwork(ctx, r) + } + return nil, err + } + return NewControlClient(conn).CreateNetwork(modCtx, r) + } + return resp, err +} + +func (p *raftProxyControlServer) RemoveNetwork(ctx context.Context, r *RemoveNetworkRequest) (*RemoveNetworkResponse, error) { + + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return nil, err + } + return p.local.RemoveNetwork(ctx, r) + } + return nil, err + } + modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return nil, err + } + + resp, err := NewControlClient(conn).RemoveNetwork(modCtx, r) + if err != nil { + if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { + return resp, err + } + conn, err := p.pollNewLeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + return p.local.RemoveNetwork(ctx, r) + } + return nil, err + } + return NewControlClient(conn).RemoveNetwork(modCtx, r) + } + return resp, err +} + +func (p *raftProxyControlServer) GetCluster(ctx context.Context, r *GetClusterRequest) (*GetClusterResponse, error) { + + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return nil, err + } + return p.local.GetCluster(ctx, r) + } + return nil, err + } + modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return nil, err + } + + resp, err := NewControlClient(conn).GetCluster(modCtx, r) + if err != nil { + if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { + return resp, err + } + conn, err := p.pollNewLeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + return p.local.GetCluster(ctx, r) + } + return nil, err + } + return NewControlClient(conn).GetCluster(modCtx, r) + } + return resp, err +} + +func (p *raftProxyControlServer) ListClusters(ctx context.Context, r *ListClustersRequest) (*ListClustersResponse, error) { + + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return nil, err + } + return p.local.ListClusters(ctx, r) + } + return nil, err + } + modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return nil, err + } + + resp, err := NewControlClient(conn).ListClusters(modCtx, r) + if err != nil { + if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { + return resp, err + } + conn, err := p.pollNewLeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + return p.local.ListClusters(ctx, r) + } + return nil, err + } + return NewControlClient(conn).ListClusters(modCtx, r) + } + return resp, err +} + +func (p *raftProxyControlServer) UpdateCluster(ctx context.Context, r *UpdateClusterRequest) (*UpdateClusterResponse, error) { + + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return nil, err + } + return p.local.UpdateCluster(ctx, r) + } + return nil, err + } + modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return nil, err + } + + resp, err := NewControlClient(conn).UpdateCluster(modCtx, r) + if err != nil { + if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { + return resp, err + } + conn, err := p.pollNewLeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + return p.local.UpdateCluster(ctx, r) + } + return nil, err + } + return NewControlClient(conn).UpdateCluster(modCtx, r) + } + return resp, err +} + +func (p *raftProxyControlServer) GetSecret(ctx context.Context, r *GetSecretRequest) (*GetSecretResponse, error) { + + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return nil, err + } + return p.local.GetSecret(ctx, r) + } + return nil, err + } + modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return nil, err + } + + resp, err := NewControlClient(conn).GetSecret(modCtx, r) + if err != nil { + if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { + return resp, err + } + conn, err := p.pollNewLeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + return p.local.GetSecret(ctx, r) + } + return nil, err + } + return NewControlClient(conn).GetSecret(modCtx, r) + } + return resp, err +} + +func (p *raftProxyControlServer) UpdateSecret(ctx context.Context, r *UpdateSecretRequest) (*UpdateSecretResponse, error) { + + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return nil, err + } + return p.local.UpdateSecret(ctx, r) + } + return nil, err + } + modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return nil, err + } + + resp, err := NewControlClient(conn).UpdateSecret(modCtx, r) + if err != nil { + if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { + return resp, err + } + conn, err := p.pollNewLeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + return p.local.UpdateSecret(ctx, r) + } + return nil, err + } + return NewControlClient(conn).UpdateSecret(modCtx, r) + } + return resp, err +} + +func (p *raftProxyControlServer) ListSecrets(ctx context.Context, r *ListSecretsRequest) (*ListSecretsResponse, error) { + + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return nil, err + } + return p.local.ListSecrets(ctx, r) + } + return nil, err + } + modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return nil, err + } + + resp, err := NewControlClient(conn).ListSecrets(modCtx, r) + if err != nil { + if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { + return resp, err + } + conn, err := p.pollNewLeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + return p.local.ListSecrets(ctx, r) + } + return nil, err + } + return NewControlClient(conn).ListSecrets(modCtx, r) + } + return resp, err +} + +func (p *raftProxyControlServer) CreateSecret(ctx context.Context, r *CreateSecretRequest) (*CreateSecretResponse, error) { + + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return nil, err + } + return p.local.CreateSecret(ctx, r) + } + return nil, err + } + modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return nil, err + } + + resp, err := NewControlClient(conn).CreateSecret(modCtx, r) + if err != nil { + if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { + return resp, err + } + conn, err := p.pollNewLeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + return p.local.CreateSecret(ctx, r) + } + return nil, err + } + return NewControlClient(conn).CreateSecret(modCtx, r) + } + return resp, err +} + +func (p *raftProxyControlServer) RemoveSecret(ctx context.Context, r *RemoveSecretRequest) (*RemoveSecretResponse, error) { + + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return nil, err + } + return p.local.RemoveSecret(ctx, r) + } + return nil, err + } + modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return nil, err + } + + resp, err := NewControlClient(conn).RemoveSecret(modCtx, r) + if err != nil { + if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { + return resp, err + } + conn, err := p.pollNewLeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + return p.local.RemoveSecret(ctx, r) + } + return nil, err + } + return NewControlClient(conn).RemoveSecret(modCtx, r) + } + return resp, err +} + +func (p *raftProxyControlServer) GetConfig(ctx context.Context, r *GetConfigRequest) (*GetConfigResponse, error) { + + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return nil, err + } + return p.local.GetConfig(ctx, r) + } + return nil, err + } + modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return nil, err + } + + resp, err := NewControlClient(conn).GetConfig(modCtx, r) + if err != nil { + if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { + return resp, err + } + conn, err := p.pollNewLeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + return p.local.GetConfig(ctx, r) + } + return nil, err + } + return NewControlClient(conn).GetConfig(modCtx, r) + } + return resp, err +} + +func (p *raftProxyControlServer) UpdateConfig(ctx context.Context, r *UpdateConfigRequest) (*UpdateConfigResponse, error) { + + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return nil, err + } + return p.local.UpdateConfig(ctx, r) + } + return nil, err + } + modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return nil, err + } + + resp, err := NewControlClient(conn).UpdateConfig(modCtx, r) + if err != nil { + if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { + return resp, err + } + conn, err := p.pollNewLeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + return p.local.UpdateConfig(ctx, r) + } + return nil, err + } + return NewControlClient(conn).UpdateConfig(modCtx, r) + } + return resp, err +} + +func (p *raftProxyControlServer) ListConfigs(ctx context.Context, r *ListConfigsRequest) (*ListConfigsResponse, error) { + + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return nil, err + } + return p.local.ListConfigs(ctx, r) + } + return nil, err + } + modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return nil, err + } + + resp, err := NewControlClient(conn).ListConfigs(modCtx, r) + if err != nil { + if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { + return resp, err + } + conn, err := p.pollNewLeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + return p.local.ListConfigs(ctx, r) + } + return nil, err + } + return NewControlClient(conn).ListConfigs(modCtx, r) + } + return resp, err +} + +func (p *raftProxyControlServer) CreateConfig(ctx context.Context, r *CreateConfigRequest) (*CreateConfigResponse, error) { + + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return nil, err + } + return p.local.CreateConfig(ctx, r) + } + return nil, err + } + modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return nil, err + } + + resp, err := NewControlClient(conn).CreateConfig(modCtx, r) + if err != nil { + if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { + return resp, err + } + conn, err := p.pollNewLeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + return p.local.CreateConfig(ctx, r) + } + return nil, err + } + return NewControlClient(conn).CreateConfig(modCtx, r) + } + return resp, err +} + +func (p *raftProxyControlServer) RemoveConfig(ctx context.Context, r *RemoveConfigRequest) (*RemoveConfigResponse, error) { + + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return nil, err + } + return p.local.RemoveConfig(ctx, r) + } + return nil, err + } + modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return nil, err + } + + resp, err := NewControlClient(conn).RemoveConfig(modCtx, r) + if err != nil { + if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { + return resp, err + } + conn, err := p.pollNewLeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + return p.local.RemoveConfig(ctx, r) + } + return nil, err + } + return NewControlClient(conn).RemoveConfig(modCtx, r) + } + return resp, err +} + +func (p *raftProxyControlServer) GetExtension(ctx context.Context, r *GetExtensionRequest) (*GetExtensionResponse, error) { + + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return nil, err + } + return p.local.GetExtension(ctx, r) + } + return nil, err + } + modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return nil, err + } + + resp, err := NewControlClient(conn).GetExtension(modCtx, r) + if err != nil { + if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { + return resp, err + } + conn, err := p.pollNewLeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + return p.local.GetExtension(ctx, r) + } + return nil, err + } + return NewControlClient(conn).GetExtension(modCtx, r) + } + return resp, err +} + +func (p *raftProxyControlServer) CreateExtension(ctx context.Context, r *CreateExtensionRequest) (*CreateExtensionResponse, error) { + + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return nil, err + } + return p.local.CreateExtension(ctx, r) + } + return nil, err + } + modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return nil, err + } + + resp, err := NewControlClient(conn).CreateExtension(modCtx, r) + if err != nil { + if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { + return resp, err + } + conn, err := p.pollNewLeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + return p.local.CreateExtension(ctx, r) + } + return nil, err + } + return NewControlClient(conn).CreateExtension(modCtx, r) + } + return resp, err +} + +func (p *raftProxyControlServer) RemoveExtension(ctx context.Context, r *RemoveExtensionRequest) (*RemoveExtensionResponse, error) { + + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return nil, err + } + return p.local.RemoveExtension(ctx, r) + } + return nil, err + } + modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return nil, err + } + + resp, err := NewControlClient(conn).RemoveExtension(modCtx, r) + if err != nil { + if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { + return resp, err + } + conn, err := p.pollNewLeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + return p.local.RemoveExtension(ctx, r) + } + return nil, err + } + return NewControlClient(conn).RemoveExtension(modCtx, r) + } + return resp, err +} + +func (p *raftProxyControlServer) GetResource(ctx context.Context, r *GetResourceRequest) (*GetResourceResponse, error) { + + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return nil, err + } + return p.local.GetResource(ctx, r) + } + return nil, err + } + modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return nil, err + } + + resp, err := NewControlClient(conn).GetResource(modCtx, r) + if err != nil { + if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { + return resp, err + } + conn, err := p.pollNewLeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + return p.local.GetResource(ctx, r) + } + return nil, err + } + return NewControlClient(conn).GetResource(modCtx, r) + } + return resp, err +} + +func (p *raftProxyControlServer) UpdateResource(ctx context.Context, r *UpdateResourceRequest) (*UpdateResourceResponse, error) { + + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return nil, err + } + return p.local.UpdateResource(ctx, r) + } + return nil, err + } + modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return nil, err + } + + resp, err := NewControlClient(conn).UpdateResource(modCtx, r) + if err != nil { + if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { + return resp, err + } + conn, err := p.pollNewLeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + return p.local.UpdateResource(ctx, r) + } + return nil, err + } + return NewControlClient(conn).UpdateResource(modCtx, r) + } + return resp, err +} + +func (p *raftProxyControlServer) ListResources(ctx context.Context, r *ListResourcesRequest) (*ListResourcesResponse, error) { + + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return nil, err + } + return p.local.ListResources(ctx, r) + } + return nil, err + } + modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return nil, err + } + + resp, err := NewControlClient(conn).ListResources(modCtx, r) + if err != nil { + if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { + return resp, err + } + conn, err := p.pollNewLeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + return p.local.ListResources(ctx, r) + } + return nil, err + } + return NewControlClient(conn).ListResources(modCtx, r) + } + return resp, err +} + +func (p *raftProxyControlServer) CreateResource(ctx context.Context, r *CreateResourceRequest) (*CreateResourceResponse, error) { + + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return nil, err + } + return p.local.CreateResource(ctx, r) + } + return nil, err + } + modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return nil, err + } + + resp, err := NewControlClient(conn).CreateResource(modCtx, r) + if err != nil { + if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { + return resp, err + } + conn, err := p.pollNewLeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + return p.local.CreateResource(ctx, r) + } + return nil, err + } + return NewControlClient(conn).CreateResource(modCtx, r) + } + return resp, err +} + +func (p *raftProxyControlServer) RemoveResource(ctx context.Context, r *RemoveResourceRequest) (*RemoveResourceResponse, error) { + + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return nil, err + } + return p.local.RemoveResource(ctx, r) + } + return nil, err + } + modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return nil, err + } + + resp, err := NewControlClient(conn).RemoveResource(modCtx, r) + if err != nil { + if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { + return resp, err + } + conn, err := p.pollNewLeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + return p.local.RemoveResource(ctx, r) + } + return nil, err + } + return NewControlClient(conn).RemoveResource(modCtx, r) + } + return resp, err +} + +func (p *raftProxyControlServer) CreateVolume(ctx context.Context, r *CreateVolumeRequest) (*CreateVolumeResponse, error) { + + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return nil, err + } + return p.local.CreateVolume(ctx, r) + } + return nil, err + } + modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return nil, err + } + + resp, err := NewControlClient(conn).CreateVolume(modCtx, r) + if err != nil { + if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { + return resp, err + } + conn, err := p.pollNewLeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + return p.local.CreateVolume(ctx, r) + } + return nil, err + } + return NewControlClient(conn).CreateVolume(modCtx, r) + } + return resp, err +} + +func (p *raftProxyControlServer) GetVolume(ctx context.Context, r *GetVolumeRequest) (*GetVolumeResponse, error) { + + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return nil, err + } + return p.local.GetVolume(ctx, r) + } + return nil, err + } + modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return nil, err + } + + resp, err := NewControlClient(conn).GetVolume(modCtx, r) + if err != nil { + if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { + return resp, err + } + conn, err := p.pollNewLeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + return p.local.GetVolume(ctx, r) + } + return nil, err + } + return NewControlClient(conn).GetVolume(modCtx, r) + } + return resp, err +} + +func (p *raftProxyControlServer) UpdateVolume(ctx context.Context, r *UpdateVolumeRequest) (*UpdateVolumeResponse, error) { + + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return nil, err + } + return p.local.UpdateVolume(ctx, r) + } + return nil, err + } + modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return nil, err + } + + resp, err := NewControlClient(conn).UpdateVolume(modCtx, r) + if err != nil { + if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { + return resp, err + } + conn, err := p.pollNewLeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + return p.local.UpdateVolume(ctx, r) + } + return nil, err + } + return NewControlClient(conn).UpdateVolume(modCtx, r) + } + return resp, err +} + +func (p *raftProxyControlServer) ListVolumes(ctx context.Context, r *ListVolumesRequest) (*ListVolumesResponse, error) { + + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return nil, err + } + return p.local.ListVolumes(ctx, r) + } + return nil, err + } + modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return nil, err + } + + resp, err := NewControlClient(conn).ListVolumes(modCtx, r) + if err != nil { + if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { + return resp, err + } + conn, err := p.pollNewLeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + return p.local.ListVolumes(ctx, r) + } + return nil, err + } + return NewControlClient(conn).ListVolumes(modCtx, r) + } + return resp, err +} + +func (p *raftProxyControlServer) RemoveVolume(ctx context.Context, r *RemoveVolumeRequest) (*RemoveVolumeResponse, error) { + + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return nil, err + } + return p.local.RemoveVolume(ctx, r) + } + return nil, err + } + modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return nil, err + } + + resp, err := NewControlClient(conn).RemoveVolume(modCtx, r) + if err != nil { + if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { + return resp, err + } + conn, err := p.pollNewLeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + return p.local.RemoveVolume(ctx, r) + } + return nil, err + } + return NewControlClient(conn).RemoveVolume(modCtx, r) + } + return resp, err +} diff --git a/api/control.proto b/api/control.proto index 2b16026b06..9c7ac049d0 100644 --- a/api/control.proto +++ b/api/control.proto @@ -2,12 +2,13 @@ syntax = "proto3"; package docker.swarmkit.v1; -import "github.com/docker/swarmkit/api/specs.proto"; -import "github.com/docker/swarmkit/api/objects.proto"; -import "github.com/docker/swarmkit/api/types.proto"; -import "gogoproto/gogo.proto"; +option go_package = "github.com/moby/swarmkit/v2/api"; + +import "api/specs.proto"; +import "api/objects.proto"; +import "api/types.proto"; import "google/protobuf/any.proto"; -import "github.com/docker/swarmkit/protobuf/plugin/plugin.proto"; +import "protobuf/plugin/plugin.proto"; // Control defines the RPC methods for controlling a cluster. service Control { @@ -565,7 +566,7 @@ message UpdateClusterRequest { ClusterSpec spec = 3; // Rotation contains flags for join token and unlock key rotation - KeyRotation rotation = 4 [(gogoproto.nullable) = false]; + KeyRotation rotation = 4; } message UpdateClusterResponse { diff --git a/api/control_grpc.pb.go b/api/control_grpc.pb.go new file mode 100644 index 0000000000..532d11c04e --- /dev/null +++ b/api/control_grpc.pb.go @@ -0,0 +1,1915 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.6.2 +// - protoc v3.21.12 +// source: api/control.proto + +package api + +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.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 + +const ( + Control_GetNode_FullMethodName = "/docker.swarmkit.v1.Control/GetNode" + Control_ListNodes_FullMethodName = "/docker.swarmkit.v1.Control/ListNodes" + Control_UpdateNode_FullMethodName = "/docker.swarmkit.v1.Control/UpdateNode" + Control_RemoveNode_FullMethodName = "/docker.swarmkit.v1.Control/RemoveNode" + Control_GetTask_FullMethodName = "/docker.swarmkit.v1.Control/GetTask" + Control_ListTasks_FullMethodName = "/docker.swarmkit.v1.Control/ListTasks" + Control_RemoveTask_FullMethodName = "/docker.swarmkit.v1.Control/RemoveTask" + Control_GetService_FullMethodName = "/docker.swarmkit.v1.Control/GetService" + Control_ListServices_FullMethodName = "/docker.swarmkit.v1.Control/ListServices" + Control_CreateService_FullMethodName = "/docker.swarmkit.v1.Control/CreateService" + Control_UpdateService_FullMethodName = "/docker.swarmkit.v1.Control/UpdateService" + Control_RemoveService_FullMethodName = "/docker.swarmkit.v1.Control/RemoveService" + Control_ListServiceStatuses_FullMethodName = "/docker.swarmkit.v1.Control/ListServiceStatuses" + Control_GetNetwork_FullMethodName = "/docker.swarmkit.v1.Control/GetNetwork" + Control_ListNetworks_FullMethodName = "/docker.swarmkit.v1.Control/ListNetworks" + Control_CreateNetwork_FullMethodName = "/docker.swarmkit.v1.Control/CreateNetwork" + Control_RemoveNetwork_FullMethodName = "/docker.swarmkit.v1.Control/RemoveNetwork" + Control_GetCluster_FullMethodName = "/docker.swarmkit.v1.Control/GetCluster" + Control_ListClusters_FullMethodName = "/docker.swarmkit.v1.Control/ListClusters" + Control_UpdateCluster_FullMethodName = "/docker.swarmkit.v1.Control/UpdateCluster" + Control_GetSecret_FullMethodName = "/docker.swarmkit.v1.Control/GetSecret" + Control_UpdateSecret_FullMethodName = "/docker.swarmkit.v1.Control/UpdateSecret" + Control_ListSecrets_FullMethodName = "/docker.swarmkit.v1.Control/ListSecrets" + Control_CreateSecret_FullMethodName = "/docker.swarmkit.v1.Control/CreateSecret" + Control_RemoveSecret_FullMethodName = "/docker.swarmkit.v1.Control/RemoveSecret" + Control_GetConfig_FullMethodName = "/docker.swarmkit.v1.Control/GetConfig" + Control_UpdateConfig_FullMethodName = "/docker.swarmkit.v1.Control/UpdateConfig" + Control_ListConfigs_FullMethodName = "/docker.swarmkit.v1.Control/ListConfigs" + Control_CreateConfig_FullMethodName = "/docker.swarmkit.v1.Control/CreateConfig" + Control_RemoveConfig_FullMethodName = "/docker.swarmkit.v1.Control/RemoveConfig" + Control_GetExtension_FullMethodName = "/docker.swarmkit.v1.Control/GetExtension" + Control_CreateExtension_FullMethodName = "/docker.swarmkit.v1.Control/CreateExtension" + Control_RemoveExtension_FullMethodName = "/docker.swarmkit.v1.Control/RemoveExtension" + Control_GetResource_FullMethodName = "/docker.swarmkit.v1.Control/GetResource" + Control_UpdateResource_FullMethodName = "/docker.swarmkit.v1.Control/UpdateResource" + Control_ListResources_FullMethodName = "/docker.swarmkit.v1.Control/ListResources" + Control_CreateResource_FullMethodName = "/docker.swarmkit.v1.Control/CreateResource" + Control_RemoveResource_FullMethodName = "/docker.swarmkit.v1.Control/RemoveResource" + Control_CreateVolume_FullMethodName = "/docker.swarmkit.v1.Control/CreateVolume" + Control_GetVolume_FullMethodName = "/docker.swarmkit.v1.Control/GetVolume" + Control_UpdateVolume_FullMethodName = "/docker.swarmkit.v1.Control/UpdateVolume" + Control_ListVolumes_FullMethodName = "/docker.swarmkit.v1.Control/ListVolumes" + Control_RemoveVolume_FullMethodName = "/docker.swarmkit.v1.Control/RemoveVolume" +) + +// ControlClient is the client API for Control 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. +// +// Control defines the RPC methods for controlling a cluster. +type ControlClient interface { + GetNode(ctx context.Context, in *GetNodeRequest, opts ...grpc.CallOption) (*GetNodeResponse, error) + ListNodes(ctx context.Context, in *ListNodesRequest, opts ...grpc.CallOption) (*ListNodesResponse, error) + UpdateNode(ctx context.Context, in *UpdateNodeRequest, opts ...grpc.CallOption) (*UpdateNodeResponse, error) + RemoveNode(ctx context.Context, in *RemoveNodeRequest, opts ...grpc.CallOption) (*RemoveNodeResponse, error) + GetTask(ctx context.Context, in *GetTaskRequest, opts ...grpc.CallOption) (*GetTaskResponse, error) + ListTasks(ctx context.Context, in *ListTasksRequest, opts ...grpc.CallOption) (*ListTasksResponse, error) + RemoveTask(ctx context.Context, in *RemoveTaskRequest, opts ...grpc.CallOption) (*RemoveTaskResponse, error) + GetService(ctx context.Context, in *GetServiceRequest, opts ...grpc.CallOption) (*GetServiceResponse, error) + ListServices(ctx context.Context, in *ListServicesRequest, opts ...grpc.CallOption) (*ListServicesResponse, error) + CreateService(ctx context.Context, in *CreateServiceRequest, opts ...grpc.CallOption) (*CreateServiceResponse, error) + UpdateService(ctx context.Context, in *UpdateServiceRequest, opts ...grpc.CallOption) (*UpdateServiceResponse, error) + RemoveService(ctx context.Context, in *RemoveServiceRequest, opts ...grpc.CallOption) (*RemoveServiceResponse, error) + // ListServiceStatuses returns a `ListServiceStatusesResponse` with the + // status of the requested services, formed by computing the number of + // running vs desired tasks. It is provided as a shortcut or helper method, + // which allows a client to avoid having to calculate this value by listing + // all Tasks. If any service requested does not exist, it will be returned + // but with empty status values. + ListServiceStatuses(ctx context.Context, in *ListServiceStatusesRequest, opts ...grpc.CallOption) (*ListServiceStatusesResponse, error) + GetNetwork(ctx context.Context, in *GetNetworkRequest, opts ...grpc.CallOption) (*GetNetworkResponse, error) + ListNetworks(ctx context.Context, in *ListNetworksRequest, opts ...grpc.CallOption) (*ListNetworksResponse, error) + CreateNetwork(ctx context.Context, in *CreateNetworkRequest, opts ...grpc.CallOption) (*CreateNetworkResponse, error) + RemoveNetwork(ctx context.Context, in *RemoveNetworkRequest, opts ...grpc.CallOption) (*RemoveNetworkResponse, error) + GetCluster(ctx context.Context, in *GetClusterRequest, opts ...grpc.CallOption) (*GetClusterResponse, error) + ListClusters(ctx context.Context, in *ListClustersRequest, opts ...grpc.CallOption) (*ListClustersResponse, error) + UpdateCluster(ctx context.Context, in *UpdateClusterRequest, opts ...grpc.CallOption) (*UpdateClusterResponse, error) + // GetSecret returns a `GetSecretResponse` with a `Secret` with the same + // id as `GetSecretRequest.SecretID` + // - Returns `NotFound` if the Secret with the given id is not found. + // - Returns `InvalidArgument` if the `GetSecretRequest.SecretID` is empty. + // - Returns an error if getting fails. + GetSecret(ctx context.Context, in *GetSecretRequest, opts ...grpc.CallOption) (*GetSecretResponse, error) + // UpdateSecret returns a `UpdateSecretResponse` with a `Secret` with the same + // id as `GetSecretRequest.SecretID` + // - Returns `NotFound` if the Secret with the given id is not found. + // - Returns `InvalidArgument` if the `GetSecretRequest.SecretID` is empty. + // - Returns an error if updating fails. + UpdateSecret(ctx context.Context, in *UpdateSecretRequest, opts ...grpc.CallOption) (*UpdateSecretResponse, error) + // ListSecrets returns a `ListSecretResponse` with a list of all non-internal `Secret`s being + // managed, or all secrets matching any name in `ListSecretsRequest.Names`, any + // name prefix in `ListSecretsRequest.NamePrefixes`, any id in + // `ListSecretsRequest.SecretIDs`, or any id prefix in `ListSecretsRequest.IDPrefixes`. + // - Returns an error if listing fails. + ListSecrets(ctx context.Context, in *ListSecretsRequest, opts ...grpc.CallOption) (*ListSecretsResponse, error) + // CreateSecret creates and return a `CreateSecretResponse` with a `Secret` based + // on the provided `CreateSecretRequest.SecretSpec`. + // - Returns `InvalidArgument` if the `CreateSecretRequest.SecretSpec` is malformed, + // or if the secret data is too long or contains invalid characters. + // - Returns an error if the creation fails. + CreateSecret(ctx context.Context, in *CreateSecretRequest, opts ...grpc.CallOption) (*CreateSecretResponse, error) + // RemoveSecret removes the secret referenced by `RemoveSecretRequest.ID`. + // - Returns `InvalidArgument` if `RemoveSecretRequest.ID` is empty. + // - Returns `NotFound` if the a secret named `RemoveSecretRequest.ID` is not found. + // - Returns an error if the deletion fails. + RemoveSecret(ctx context.Context, in *RemoveSecretRequest, opts ...grpc.CallOption) (*RemoveSecretResponse, error) + // GetConfig returns a `GetConfigResponse` with a `Config` with the same + // id as `GetConfigRequest.ConfigID` + // - Returns `NotFound` if the Config with the given id is not found. + // - Returns `InvalidArgument` if the `GetConfigRequest.ConfigID` is empty. + // - Returns an error if getting fails. + GetConfig(ctx context.Context, in *GetConfigRequest, opts ...grpc.CallOption) (*GetConfigResponse, error) + // UpdateConfig returns a `UpdateConfigResponse` with a `Config` with the same + // id as `GetConfigRequest.ConfigID` + // - Returns `NotFound` if the Config with the given id is not found. + // - Returns `InvalidArgument` if the `GetConfigRequest.ConfigID` is empty. + // - Returns an error if updating fails. + UpdateConfig(ctx context.Context, in *UpdateConfigRequest, opts ...grpc.CallOption) (*UpdateConfigResponse, error) + // ListConfigs returns a `ListConfigResponse` with a list of `Config`s being + // managed, or all configs matching any name in `ListConfigsRequest.Names`, any + // name prefix in `ListConfigsRequest.NamePrefixes`, any id in + // `ListConfigsRequest.ConfigIDs`, or any id prefix in `ListConfigsRequest.IDPrefixes`. + // - Returns an error if listing fails. + ListConfigs(ctx context.Context, in *ListConfigsRequest, opts ...grpc.CallOption) (*ListConfigsResponse, error) + // CreateConfig creates and return a `CreateConfigResponse` with a `Config` based + // on the provided `CreateConfigRequest.ConfigSpec`. + // - Returns `InvalidArgument` if the `CreateConfigRequest.ConfigSpec` is malformed, + // or if the config data is too long or contains invalid characters. + // - Returns an error if the creation fails. + CreateConfig(ctx context.Context, in *CreateConfigRequest, opts ...grpc.CallOption) (*CreateConfigResponse, error) + // RemoveConfig removes the config referenced by `RemoveConfigRequest.ID`. + // - Returns `InvalidArgument` if `RemoveConfigRequest.ID` is empty. + // - Returns `NotFound` if the a config named `RemoveConfigRequest.ID` is not found. + // - Returns an error if the deletion fails. + RemoveConfig(ctx context.Context, in *RemoveConfigRequest, opts ...grpc.CallOption) (*RemoveConfigResponse, error) + // GetExtension returns a `GetExtensionResponse` with a `Extension` with the same + // id as `GetExtensionRequest.ExtensionId` + // - Returns `NotFound` if the Extension with the given id is not found. + // - Returns `InvalidArgument` if the `GetExtensionRequest.ExtensionId` is empty. + // - Returns an error if the get fails. + GetExtension(ctx context.Context, in *GetExtensionRequest, opts ...grpc.CallOption) (*GetExtensionResponse, error) + // CreateExtension creates an `Extension` based on the provided `CreateExtensionRequest.Extension` + // and returns a `CreateExtensionResponse`. + // - Returns `InvalidArgument` if the `CreateExtensionRequest.Extension` is malformed, + // or fails validation. + // - Returns an error if the creation fails. + CreateExtension(ctx context.Context, in *CreateExtensionRequest, opts ...grpc.CallOption) (*CreateExtensionResponse, error) + // RemoveExtension removes the extension referenced by `RemoveExtensionRequest.ID`. + // - Returns `InvalidArgument` if `RemoveExtensionRequest.ExtensionId` is empty. + // - Returns `NotFound` if the an extension named `RemoveExtensionRequest.ExtensionId` is not found. + // - Returns an error if the deletion fails. + RemoveExtension(ctx context.Context, in *RemoveExtensionRequest, opts ...grpc.CallOption) (*RemoveExtensionResponse, error) + // GetResource returns a `GetResourceResponse` with a `Resource` with the same + // id as `GetResourceRequest.Resource` + // - Returns `NotFound` if the Resource with the given id is not found. + // - Returns `InvalidArgument` if the `GetResourceRequest.Resource` is empty. + // - Returns an error if getting fails. + GetResource(ctx context.Context, in *GetResourceRequest, opts ...grpc.CallOption) (*GetResourceResponse, error) + // UpdateResource updates the resource with the given `UpdateResourceRequest.Resource.Id` using the given `UpdateResourceRequest.Resource` and returns a `UpdateResourceResponse`. + // - Returns `NotFound` if the Resource with the given `UpdateResourceRequest.Resource.Id` is not found. + // - Returns `InvalidArgument` if the UpdateResourceRequest.Resource.Id` is empty. + // - Returns an error if updating fails. + UpdateResource(ctx context.Context, in *UpdateResourceRequest, opts ...grpc.CallOption) (*UpdateResourceResponse, error) + // ListResources returns a `ListResourcesResponse` with a list of `Resource`s stored in the raft store, + // or all resources matching any name in `ListConfigsRequest.Names`, any + // name prefix in `ListResourcesRequest.NamePrefixes`, any id in + // `ListResourcesRequest.ResourceIDs`, or any id prefix in `ListResourcesRequest.IDPrefixes`, + // extension name equal to `ListResourcesRequest.Extension`. + // - Returns an error if listing fails. + ListResources(ctx context.Context, in *ListResourcesRequest, opts ...grpc.CallOption) (*ListResourcesResponse, error) + // CreateResource returns a `CreateResourceResponse` after creating a `Resource` based + // on the provided `CreateResourceRequest.Resource`. + // - Returns `InvalidArgument` if the `CreateResourceRequest.Resource` is malformed, + // or if the config data is too long or contains invalid characters. + // - Returns an error if the creation fails. + CreateResource(ctx context.Context, in *CreateResourceRequest, opts ...grpc.CallOption) (*CreateResourceResponse, error) + // RemoveResource removes the `Resource` referenced by `RemoveResourceRequest.ResourceID`. + // - Returns `InvalidArgument` if `RemoveResourceRequest.ResourceID` is empty. + // - Returns `NotFound` if the a resource named `RemoveResourceRequest.ResourceID` is not found. + // - Returns an error if the deletion fails. + RemoveResource(ctx context.Context, in *RemoveResourceRequest, opts ...grpc.CallOption) (*RemoveResourceResponse, error) + // CreateVolume returns a `CreateVolumeResponse` with a `Volume` based on the + // provided `CreateVolumeRequest.VolumeSpec`. + // - Returns `InvalidArgument` if the `CreateVolumeRequest.VolumeSpec` is + // malformed. + CreateVolume(ctx context.Context, in *CreateVolumeRequest, opts ...grpc.CallOption) (*CreateVolumeResponse, error) + // GetVolume returns a `GetVolumeResponse` with a Volume with the same ID + // as `GetVolumeRequest.ID` + GetVolume(ctx context.Context, in *GetVolumeRequest, opts ...grpc.CallOption) (*GetVolumeResponse, error) + UpdateVolume(ctx context.Context, in *UpdateVolumeRequest, opts ...grpc.CallOption) (*UpdateVolumeResponse, error) + ListVolumes(ctx context.Context, in *ListVolumesRequest, opts ...grpc.CallOption) (*ListVolumesResponse, error) + RemoveVolume(ctx context.Context, in *RemoveVolumeRequest, opts ...grpc.CallOption) (*RemoveVolumeResponse, error) +} + +type controlClient struct { + cc grpc.ClientConnInterface +} + +func NewControlClient(cc grpc.ClientConnInterface) ControlClient { + return &controlClient{cc} +} + +func (c *controlClient) GetNode(ctx context.Context, in *GetNodeRequest, opts ...grpc.CallOption) (*GetNodeResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(GetNodeResponse) + err := c.cc.Invoke(ctx, Control_GetNode_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controlClient) ListNodes(ctx context.Context, in *ListNodesRequest, opts ...grpc.CallOption) (*ListNodesResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(ListNodesResponse) + err := c.cc.Invoke(ctx, Control_ListNodes_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controlClient) UpdateNode(ctx context.Context, in *UpdateNodeRequest, opts ...grpc.CallOption) (*UpdateNodeResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(UpdateNodeResponse) + err := c.cc.Invoke(ctx, Control_UpdateNode_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controlClient) RemoveNode(ctx context.Context, in *RemoveNodeRequest, opts ...grpc.CallOption) (*RemoveNodeResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(RemoveNodeResponse) + err := c.cc.Invoke(ctx, Control_RemoveNode_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controlClient) GetTask(ctx context.Context, in *GetTaskRequest, opts ...grpc.CallOption) (*GetTaskResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(GetTaskResponse) + err := c.cc.Invoke(ctx, Control_GetTask_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controlClient) ListTasks(ctx context.Context, in *ListTasksRequest, opts ...grpc.CallOption) (*ListTasksResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(ListTasksResponse) + err := c.cc.Invoke(ctx, Control_ListTasks_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controlClient) RemoveTask(ctx context.Context, in *RemoveTaskRequest, opts ...grpc.CallOption) (*RemoveTaskResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(RemoveTaskResponse) + err := c.cc.Invoke(ctx, Control_RemoveTask_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controlClient) GetService(ctx context.Context, in *GetServiceRequest, opts ...grpc.CallOption) (*GetServiceResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(GetServiceResponse) + err := c.cc.Invoke(ctx, Control_GetService_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controlClient) ListServices(ctx context.Context, in *ListServicesRequest, opts ...grpc.CallOption) (*ListServicesResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(ListServicesResponse) + err := c.cc.Invoke(ctx, Control_ListServices_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controlClient) CreateService(ctx context.Context, in *CreateServiceRequest, opts ...grpc.CallOption) (*CreateServiceResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(CreateServiceResponse) + err := c.cc.Invoke(ctx, Control_CreateService_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controlClient) UpdateService(ctx context.Context, in *UpdateServiceRequest, opts ...grpc.CallOption) (*UpdateServiceResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(UpdateServiceResponse) + err := c.cc.Invoke(ctx, Control_UpdateService_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controlClient) RemoveService(ctx context.Context, in *RemoveServiceRequest, opts ...grpc.CallOption) (*RemoveServiceResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(RemoveServiceResponse) + err := c.cc.Invoke(ctx, Control_RemoveService_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controlClient) ListServiceStatuses(ctx context.Context, in *ListServiceStatusesRequest, opts ...grpc.CallOption) (*ListServiceStatusesResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(ListServiceStatusesResponse) + err := c.cc.Invoke(ctx, Control_ListServiceStatuses_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controlClient) GetNetwork(ctx context.Context, in *GetNetworkRequest, opts ...grpc.CallOption) (*GetNetworkResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(GetNetworkResponse) + err := c.cc.Invoke(ctx, Control_GetNetwork_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controlClient) ListNetworks(ctx context.Context, in *ListNetworksRequest, opts ...grpc.CallOption) (*ListNetworksResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(ListNetworksResponse) + err := c.cc.Invoke(ctx, Control_ListNetworks_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controlClient) CreateNetwork(ctx context.Context, in *CreateNetworkRequest, opts ...grpc.CallOption) (*CreateNetworkResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(CreateNetworkResponse) + err := c.cc.Invoke(ctx, Control_CreateNetwork_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controlClient) RemoveNetwork(ctx context.Context, in *RemoveNetworkRequest, opts ...grpc.CallOption) (*RemoveNetworkResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(RemoveNetworkResponse) + err := c.cc.Invoke(ctx, Control_RemoveNetwork_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controlClient) GetCluster(ctx context.Context, in *GetClusterRequest, opts ...grpc.CallOption) (*GetClusterResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(GetClusterResponse) + err := c.cc.Invoke(ctx, Control_GetCluster_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controlClient) ListClusters(ctx context.Context, in *ListClustersRequest, opts ...grpc.CallOption) (*ListClustersResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(ListClustersResponse) + err := c.cc.Invoke(ctx, Control_ListClusters_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controlClient) UpdateCluster(ctx context.Context, in *UpdateClusterRequest, opts ...grpc.CallOption) (*UpdateClusterResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(UpdateClusterResponse) + err := c.cc.Invoke(ctx, Control_UpdateCluster_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controlClient) GetSecret(ctx context.Context, in *GetSecretRequest, opts ...grpc.CallOption) (*GetSecretResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(GetSecretResponse) + err := c.cc.Invoke(ctx, Control_GetSecret_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controlClient) UpdateSecret(ctx context.Context, in *UpdateSecretRequest, opts ...grpc.CallOption) (*UpdateSecretResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(UpdateSecretResponse) + err := c.cc.Invoke(ctx, Control_UpdateSecret_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controlClient) ListSecrets(ctx context.Context, in *ListSecretsRequest, opts ...grpc.CallOption) (*ListSecretsResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(ListSecretsResponse) + err := c.cc.Invoke(ctx, Control_ListSecrets_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controlClient) CreateSecret(ctx context.Context, in *CreateSecretRequest, opts ...grpc.CallOption) (*CreateSecretResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(CreateSecretResponse) + err := c.cc.Invoke(ctx, Control_CreateSecret_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controlClient) RemoveSecret(ctx context.Context, in *RemoveSecretRequest, opts ...grpc.CallOption) (*RemoveSecretResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(RemoveSecretResponse) + err := c.cc.Invoke(ctx, Control_RemoveSecret_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controlClient) GetConfig(ctx context.Context, in *GetConfigRequest, opts ...grpc.CallOption) (*GetConfigResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(GetConfigResponse) + err := c.cc.Invoke(ctx, Control_GetConfig_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controlClient) UpdateConfig(ctx context.Context, in *UpdateConfigRequest, opts ...grpc.CallOption) (*UpdateConfigResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(UpdateConfigResponse) + err := c.cc.Invoke(ctx, Control_UpdateConfig_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controlClient) ListConfigs(ctx context.Context, in *ListConfigsRequest, opts ...grpc.CallOption) (*ListConfigsResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(ListConfigsResponse) + err := c.cc.Invoke(ctx, Control_ListConfigs_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controlClient) CreateConfig(ctx context.Context, in *CreateConfigRequest, opts ...grpc.CallOption) (*CreateConfigResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(CreateConfigResponse) + err := c.cc.Invoke(ctx, Control_CreateConfig_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controlClient) RemoveConfig(ctx context.Context, in *RemoveConfigRequest, opts ...grpc.CallOption) (*RemoveConfigResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(RemoveConfigResponse) + err := c.cc.Invoke(ctx, Control_RemoveConfig_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controlClient) GetExtension(ctx context.Context, in *GetExtensionRequest, opts ...grpc.CallOption) (*GetExtensionResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(GetExtensionResponse) + err := c.cc.Invoke(ctx, Control_GetExtension_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controlClient) CreateExtension(ctx context.Context, in *CreateExtensionRequest, opts ...grpc.CallOption) (*CreateExtensionResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(CreateExtensionResponse) + err := c.cc.Invoke(ctx, Control_CreateExtension_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controlClient) RemoveExtension(ctx context.Context, in *RemoveExtensionRequest, opts ...grpc.CallOption) (*RemoveExtensionResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(RemoveExtensionResponse) + err := c.cc.Invoke(ctx, Control_RemoveExtension_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controlClient) GetResource(ctx context.Context, in *GetResourceRequest, opts ...grpc.CallOption) (*GetResourceResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(GetResourceResponse) + err := c.cc.Invoke(ctx, Control_GetResource_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controlClient) UpdateResource(ctx context.Context, in *UpdateResourceRequest, opts ...grpc.CallOption) (*UpdateResourceResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(UpdateResourceResponse) + err := c.cc.Invoke(ctx, Control_UpdateResource_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controlClient) ListResources(ctx context.Context, in *ListResourcesRequest, opts ...grpc.CallOption) (*ListResourcesResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(ListResourcesResponse) + err := c.cc.Invoke(ctx, Control_ListResources_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controlClient) CreateResource(ctx context.Context, in *CreateResourceRequest, opts ...grpc.CallOption) (*CreateResourceResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(CreateResourceResponse) + err := c.cc.Invoke(ctx, Control_CreateResource_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controlClient) RemoveResource(ctx context.Context, in *RemoveResourceRequest, opts ...grpc.CallOption) (*RemoveResourceResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(RemoveResourceResponse) + err := c.cc.Invoke(ctx, Control_RemoveResource_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controlClient) CreateVolume(ctx context.Context, in *CreateVolumeRequest, opts ...grpc.CallOption) (*CreateVolumeResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(CreateVolumeResponse) + err := c.cc.Invoke(ctx, Control_CreateVolume_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controlClient) GetVolume(ctx context.Context, in *GetVolumeRequest, opts ...grpc.CallOption) (*GetVolumeResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(GetVolumeResponse) + err := c.cc.Invoke(ctx, Control_GetVolume_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controlClient) UpdateVolume(ctx context.Context, in *UpdateVolumeRequest, opts ...grpc.CallOption) (*UpdateVolumeResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(UpdateVolumeResponse) + err := c.cc.Invoke(ctx, Control_UpdateVolume_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controlClient) ListVolumes(ctx context.Context, in *ListVolumesRequest, opts ...grpc.CallOption) (*ListVolumesResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(ListVolumesResponse) + err := c.cc.Invoke(ctx, Control_ListVolumes_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controlClient) RemoveVolume(ctx context.Context, in *RemoveVolumeRequest, opts ...grpc.CallOption) (*RemoveVolumeResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(RemoveVolumeResponse) + err := c.cc.Invoke(ctx, Control_RemoveVolume_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +// ControlServer is the server API for Control service. +// All implementations should embed UnimplementedControlServer +// for forward compatibility. +// +// Control defines the RPC methods for controlling a cluster. +type ControlServer interface { + GetNode(context.Context, *GetNodeRequest) (*GetNodeResponse, error) + ListNodes(context.Context, *ListNodesRequest) (*ListNodesResponse, error) + UpdateNode(context.Context, *UpdateNodeRequest) (*UpdateNodeResponse, error) + RemoveNode(context.Context, *RemoveNodeRequest) (*RemoveNodeResponse, error) + GetTask(context.Context, *GetTaskRequest) (*GetTaskResponse, error) + ListTasks(context.Context, *ListTasksRequest) (*ListTasksResponse, error) + RemoveTask(context.Context, *RemoveTaskRequest) (*RemoveTaskResponse, error) + GetService(context.Context, *GetServiceRequest) (*GetServiceResponse, error) + ListServices(context.Context, *ListServicesRequest) (*ListServicesResponse, error) + CreateService(context.Context, *CreateServiceRequest) (*CreateServiceResponse, error) + UpdateService(context.Context, *UpdateServiceRequest) (*UpdateServiceResponse, error) + RemoveService(context.Context, *RemoveServiceRequest) (*RemoveServiceResponse, error) + // ListServiceStatuses returns a `ListServiceStatusesResponse` with the + // status of the requested services, formed by computing the number of + // running vs desired tasks. It is provided as a shortcut or helper method, + // which allows a client to avoid having to calculate this value by listing + // all Tasks. If any service requested does not exist, it will be returned + // but with empty status values. + ListServiceStatuses(context.Context, *ListServiceStatusesRequest) (*ListServiceStatusesResponse, error) + GetNetwork(context.Context, *GetNetworkRequest) (*GetNetworkResponse, error) + ListNetworks(context.Context, *ListNetworksRequest) (*ListNetworksResponse, error) + CreateNetwork(context.Context, *CreateNetworkRequest) (*CreateNetworkResponse, error) + RemoveNetwork(context.Context, *RemoveNetworkRequest) (*RemoveNetworkResponse, error) + GetCluster(context.Context, *GetClusterRequest) (*GetClusterResponse, error) + ListClusters(context.Context, *ListClustersRequest) (*ListClustersResponse, error) + UpdateCluster(context.Context, *UpdateClusterRequest) (*UpdateClusterResponse, error) + // GetSecret returns a `GetSecretResponse` with a `Secret` with the same + // id as `GetSecretRequest.SecretID` + // - Returns `NotFound` if the Secret with the given id is not found. + // - Returns `InvalidArgument` if the `GetSecretRequest.SecretID` is empty. + // - Returns an error if getting fails. + GetSecret(context.Context, *GetSecretRequest) (*GetSecretResponse, error) + // UpdateSecret returns a `UpdateSecretResponse` with a `Secret` with the same + // id as `GetSecretRequest.SecretID` + // - Returns `NotFound` if the Secret with the given id is not found. + // - Returns `InvalidArgument` if the `GetSecretRequest.SecretID` is empty. + // - Returns an error if updating fails. + UpdateSecret(context.Context, *UpdateSecretRequest) (*UpdateSecretResponse, error) + // ListSecrets returns a `ListSecretResponse` with a list of all non-internal `Secret`s being + // managed, or all secrets matching any name in `ListSecretsRequest.Names`, any + // name prefix in `ListSecretsRequest.NamePrefixes`, any id in + // `ListSecretsRequest.SecretIDs`, or any id prefix in `ListSecretsRequest.IDPrefixes`. + // - Returns an error if listing fails. + ListSecrets(context.Context, *ListSecretsRequest) (*ListSecretsResponse, error) + // CreateSecret creates and return a `CreateSecretResponse` with a `Secret` based + // on the provided `CreateSecretRequest.SecretSpec`. + // - Returns `InvalidArgument` if the `CreateSecretRequest.SecretSpec` is malformed, + // or if the secret data is too long or contains invalid characters. + // - Returns an error if the creation fails. + CreateSecret(context.Context, *CreateSecretRequest) (*CreateSecretResponse, error) + // RemoveSecret removes the secret referenced by `RemoveSecretRequest.ID`. + // - Returns `InvalidArgument` if `RemoveSecretRequest.ID` is empty. + // - Returns `NotFound` if the a secret named `RemoveSecretRequest.ID` is not found. + // - Returns an error if the deletion fails. + RemoveSecret(context.Context, *RemoveSecretRequest) (*RemoveSecretResponse, error) + // GetConfig returns a `GetConfigResponse` with a `Config` with the same + // id as `GetConfigRequest.ConfigID` + // - Returns `NotFound` if the Config with the given id is not found. + // - Returns `InvalidArgument` if the `GetConfigRequest.ConfigID` is empty. + // - Returns an error if getting fails. + GetConfig(context.Context, *GetConfigRequest) (*GetConfigResponse, error) + // UpdateConfig returns a `UpdateConfigResponse` with a `Config` with the same + // id as `GetConfigRequest.ConfigID` + // - Returns `NotFound` if the Config with the given id is not found. + // - Returns `InvalidArgument` if the `GetConfigRequest.ConfigID` is empty. + // - Returns an error if updating fails. + UpdateConfig(context.Context, *UpdateConfigRequest) (*UpdateConfigResponse, error) + // ListConfigs returns a `ListConfigResponse` with a list of `Config`s being + // managed, or all configs matching any name in `ListConfigsRequest.Names`, any + // name prefix in `ListConfigsRequest.NamePrefixes`, any id in + // `ListConfigsRequest.ConfigIDs`, or any id prefix in `ListConfigsRequest.IDPrefixes`. + // - Returns an error if listing fails. + ListConfigs(context.Context, *ListConfigsRequest) (*ListConfigsResponse, error) + // CreateConfig creates and return a `CreateConfigResponse` with a `Config` based + // on the provided `CreateConfigRequest.ConfigSpec`. + // - Returns `InvalidArgument` if the `CreateConfigRequest.ConfigSpec` is malformed, + // or if the config data is too long or contains invalid characters. + // - Returns an error if the creation fails. + CreateConfig(context.Context, *CreateConfigRequest) (*CreateConfigResponse, error) + // RemoveConfig removes the config referenced by `RemoveConfigRequest.ID`. + // - Returns `InvalidArgument` if `RemoveConfigRequest.ID` is empty. + // - Returns `NotFound` if the a config named `RemoveConfigRequest.ID` is not found. + // - Returns an error if the deletion fails. + RemoveConfig(context.Context, *RemoveConfigRequest) (*RemoveConfigResponse, error) + // GetExtension returns a `GetExtensionResponse` with a `Extension` with the same + // id as `GetExtensionRequest.ExtensionId` + // - Returns `NotFound` if the Extension with the given id is not found. + // - Returns `InvalidArgument` if the `GetExtensionRequest.ExtensionId` is empty. + // - Returns an error if the get fails. + GetExtension(context.Context, *GetExtensionRequest) (*GetExtensionResponse, error) + // CreateExtension creates an `Extension` based on the provided `CreateExtensionRequest.Extension` + // and returns a `CreateExtensionResponse`. + // - Returns `InvalidArgument` if the `CreateExtensionRequest.Extension` is malformed, + // or fails validation. + // - Returns an error if the creation fails. + CreateExtension(context.Context, *CreateExtensionRequest) (*CreateExtensionResponse, error) + // RemoveExtension removes the extension referenced by `RemoveExtensionRequest.ID`. + // - Returns `InvalidArgument` if `RemoveExtensionRequest.ExtensionId` is empty. + // - Returns `NotFound` if the an extension named `RemoveExtensionRequest.ExtensionId` is not found. + // - Returns an error if the deletion fails. + RemoveExtension(context.Context, *RemoveExtensionRequest) (*RemoveExtensionResponse, error) + // GetResource returns a `GetResourceResponse` with a `Resource` with the same + // id as `GetResourceRequest.Resource` + // - Returns `NotFound` if the Resource with the given id is not found. + // - Returns `InvalidArgument` if the `GetResourceRequest.Resource` is empty. + // - Returns an error if getting fails. + GetResource(context.Context, *GetResourceRequest) (*GetResourceResponse, error) + // UpdateResource updates the resource with the given `UpdateResourceRequest.Resource.Id` using the given `UpdateResourceRequest.Resource` and returns a `UpdateResourceResponse`. + // - Returns `NotFound` if the Resource with the given `UpdateResourceRequest.Resource.Id` is not found. + // - Returns `InvalidArgument` if the UpdateResourceRequest.Resource.Id` is empty. + // - Returns an error if updating fails. + UpdateResource(context.Context, *UpdateResourceRequest) (*UpdateResourceResponse, error) + // ListResources returns a `ListResourcesResponse` with a list of `Resource`s stored in the raft store, + // or all resources matching any name in `ListConfigsRequest.Names`, any + // name prefix in `ListResourcesRequest.NamePrefixes`, any id in + // `ListResourcesRequest.ResourceIDs`, or any id prefix in `ListResourcesRequest.IDPrefixes`, + // extension name equal to `ListResourcesRequest.Extension`. + // - Returns an error if listing fails. + ListResources(context.Context, *ListResourcesRequest) (*ListResourcesResponse, error) + // CreateResource returns a `CreateResourceResponse` after creating a `Resource` based + // on the provided `CreateResourceRequest.Resource`. + // - Returns `InvalidArgument` if the `CreateResourceRequest.Resource` is malformed, + // or if the config data is too long or contains invalid characters. + // - Returns an error if the creation fails. + CreateResource(context.Context, *CreateResourceRequest) (*CreateResourceResponse, error) + // RemoveResource removes the `Resource` referenced by `RemoveResourceRequest.ResourceID`. + // - Returns `InvalidArgument` if `RemoveResourceRequest.ResourceID` is empty. + // - Returns `NotFound` if the a resource named `RemoveResourceRequest.ResourceID` is not found. + // - Returns an error if the deletion fails. + RemoveResource(context.Context, *RemoveResourceRequest) (*RemoveResourceResponse, error) + // CreateVolume returns a `CreateVolumeResponse` with a `Volume` based on the + // provided `CreateVolumeRequest.VolumeSpec`. + // - Returns `InvalidArgument` if the `CreateVolumeRequest.VolumeSpec` is + // malformed. + CreateVolume(context.Context, *CreateVolumeRequest) (*CreateVolumeResponse, error) + // GetVolume returns a `GetVolumeResponse` with a Volume with the same ID + // as `GetVolumeRequest.ID` + GetVolume(context.Context, *GetVolumeRequest) (*GetVolumeResponse, error) + UpdateVolume(context.Context, *UpdateVolumeRequest) (*UpdateVolumeResponse, error) + ListVolumes(context.Context, *ListVolumesRequest) (*ListVolumesResponse, error) + RemoveVolume(context.Context, *RemoveVolumeRequest) (*RemoveVolumeResponse, error) +} + +// UnimplementedControlServer should be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedControlServer struct{} + +func (UnimplementedControlServer) GetNode(context.Context, *GetNodeRequest) (*GetNodeResponse, error) { + return nil, status.Error(codes.Unimplemented, "method GetNode not implemented") +} +func (UnimplementedControlServer) ListNodes(context.Context, *ListNodesRequest) (*ListNodesResponse, error) { + return nil, status.Error(codes.Unimplemented, "method ListNodes not implemented") +} +func (UnimplementedControlServer) UpdateNode(context.Context, *UpdateNodeRequest) (*UpdateNodeResponse, error) { + return nil, status.Error(codes.Unimplemented, "method UpdateNode not implemented") +} +func (UnimplementedControlServer) RemoveNode(context.Context, *RemoveNodeRequest) (*RemoveNodeResponse, error) { + return nil, status.Error(codes.Unimplemented, "method RemoveNode not implemented") +} +func (UnimplementedControlServer) GetTask(context.Context, *GetTaskRequest) (*GetTaskResponse, error) { + return nil, status.Error(codes.Unimplemented, "method GetTask not implemented") +} +func (UnimplementedControlServer) ListTasks(context.Context, *ListTasksRequest) (*ListTasksResponse, error) { + return nil, status.Error(codes.Unimplemented, "method ListTasks not implemented") +} +func (UnimplementedControlServer) RemoveTask(context.Context, *RemoveTaskRequest) (*RemoveTaskResponse, error) { + return nil, status.Error(codes.Unimplemented, "method RemoveTask not implemented") +} +func (UnimplementedControlServer) GetService(context.Context, *GetServiceRequest) (*GetServiceResponse, error) { + return nil, status.Error(codes.Unimplemented, "method GetService not implemented") +} +func (UnimplementedControlServer) ListServices(context.Context, *ListServicesRequest) (*ListServicesResponse, error) { + return nil, status.Error(codes.Unimplemented, "method ListServices not implemented") +} +func (UnimplementedControlServer) CreateService(context.Context, *CreateServiceRequest) (*CreateServiceResponse, error) { + return nil, status.Error(codes.Unimplemented, "method CreateService not implemented") +} +func (UnimplementedControlServer) UpdateService(context.Context, *UpdateServiceRequest) (*UpdateServiceResponse, error) { + return nil, status.Error(codes.Unimplemented, "method UpdateService not implemented") +} +func (UnimplementedControlServer) RemoveService(context.Context, *RemoveServiceRequest) (*RemoveServiceResponse, error) { + return nil, status.Error(codes.Unimplemented, "method RemoveService not implemented") +} +func (UnimplementedControlServer) ListServiceStatuses(context.Context, *ListServiceStatusesRequest) (*ListServiceStatusesResponse, error) { + return nil, status.Error(codes.Unimplemented, "method ListServiceStatuses not implemented") +} +func (UnimplementedControlServer) GetNetwork(context.Context, *GetNetworkRequest) (*GetNetworkResponse, error) { + return nil, status.Error(codes.Unimplemented, "method GetNetwork not implemented") +} +func (UnimplementedControlServer) ListNetworks(context.Context, *ListNetworksRequest) (*ListNetworksResponse, error) { + return nil, status.Error(codes.Unimplemented, "method ListNetworks not implemented") +} +func (UnimplementedControlServer) CreateNetwork(context.Context, *CreateNetworkRequest) (*CreateNetworkResponse, error) { + return nil, status.Error(codes.Unimplemented, "method CreateNetwork not implemented") +} +func (UnimplementedControlServer) RemoveNetwork(context.Context, *RemoveNetworkRequest) (*RemoveNetworkResponse, error) { + return nil, status.Error(codes.Unimplemented, "method RemoveNetwork not implemented") +} +func (UnimplementedControlServer) GetCluster(context.Context, *GetClusterRequest) (*GetClusterResponse, error) { + return nil, status.Error(codes.Unimplemented, "method GetCluster not implemented") +} +func (UnimplementedControlServer) ListClusters(context.Context, *ListClustersRequest) (*ListClustersResponse, error) { + return nil, status.Error(codes.Unimplemented, "method ListClusters not implemented") +} +func (UnimplementedControlServer) UpdateCluster(context.Context, *UpdateClusterRequest) (*UpdateClusterResponse, error) { + return nil, status.Error(codes.Unimplemented, "method UpdateCluster not implemented") +} +func (UnimplementedControlServer) GetSecret(context.Context, *GetSecretRequest) (*GetSecretResponse, error) { + return nil, status.Error(codes.Unimplemented, "method GetSecret not implemented") +} +func (UnimplementedControlServer) UpdateSecret(context.Context, *UpdateSecretRequest) (*UpdateSecretResponse, error) { + return nil, status.Error(codes.Unimplemented, "method UpdateSecret not implemented") +} +func (UnimplementedControlServer) ListSecrets(context.Context, *ListSecretsRequest) (*ListSecretsResponse, error) { + return nil, status.Error(codes.Unimplemented, "method ListSecrets not implemented") +} +func (UnimplementedControlServer) CreateSecret(context.Context, *CreateSecretRequest) (*CreateSecretResponse, error) { + return nil, status.Error(codes.Unimplemented, "method CreateSecret not implemented") +} +func (UnimplementedControlServer) RemoveSecret(context.Context, *RemoveSecretRequest) (*RemoveSecretResponse, error) { + return nil, status.Error(codes.Unimplemented, "method RemoveSecret not implemented") +} +func (UnimplementedControlServer) GetConfig(context.Context, *GetConfigRequest) (*GetConfigResponse, error) { + return nil, status.Error(codes.Unimplemented, "method GetConfig not implemented") +} +func (UnimplementedControlServer) UpdateConfig(context.Context, *UpdateConfigRequest) (*UpdateConfigResponse, error) { + return nil, status.Error(codes.Unimplemented, "method UpdateConfig not implemented") +} +func (UnimplementedControlServer) ListConfigs(context.Context, *ListConfigsRequest) (*ListConfigsResponse, error) { + return nil, status.Error(codes.Unimplemented, "method ListConfigs not implemented") +} +func (UnimplementedControlServer) CreateConfig(context.Context, *CreateConfigRequest) (*CreateConfigResponse, error) { + return nil, status.Error(codes.Unimplemented, "method CreateConfig not implemented") +} +func (UnimplementedControlServer) RemoveConfig(context.Context, *RemoveConfigRequest) (*RemoveConfigResponse, error) { + return nil, status.Error(codes.Unimplemented, "method RemoveConfig not implemented") +} +func (UnimplementedControlServer) GetExtension(context.Context, *GetExtensionRequest) (*GetExtensionResponse, error) { + return nil, status.Error(codes.Unimplemented, "method GetExtension not implemented") +} +func (UnimplementedControlServer) CreateExtension(context.Context, *CreateExtensionRequest) (*CreateExtensionResponse, error) { + return nil, status.Error(codes.Unimplemented, "method CreateExtension not implemented") +} +func (UnimplementedControlServer) RemoveExtension(context.Context, *RemoveExtensionRequest) (*RemoveExtensionResponse, error) { + return nil, status.Error(codes.Unimplemented, "method RemoveExtension not implemented") +} +func (UnimplementedControlServer) GetResource(context.Context, *GetResourceRequest) (*GetResourceResponse, error) { + return nil, status.Error(codes.Unimplemented, "method GetResource not implemented") +} +func (UnimplementedControlServer) UpdateResource(context.Context, *UpdateResourceRequest) (*UpdateResourceResponse, error) { + return nil, status.Error(codes.Unimplemented, "method UpdateResource not implemented") +} +func (UnimplementedControlServer) ListResources(context.Context, *ListResourcesRequest) (*ListResourcesResponse, error) { + return nil, status.Error(codes.Unimplemented, "method ListResources not implemented") +} +func (UnimplementedControlServer) CreateResource(context.Context, *CreateResourceRequest) (*CreateResourceResponse, error) { + return nil, status.Error(codes.Unimplemented, "method CreateResource not implemented") +} +func (UnimplementedControlServer) RemoveResource(context.Context, *RemoveResourceRequest) (*RemoveResourceResponse, error) { + return nil, status.Error(codes.Unimplemented, "method RemoveResource not implemented") +} +func (UnimplementedControlServer) CreateVolume(context.Context, *CreateVolumeRequest) (*CreateVolumeResponse, error) { + return nil, status.Error(codes.Unimplemented, "method CreateVolume not implemented") +} +func (UnimplementedControlServer) GetVolume(context.Context, *GetVolumeRequest) (*GetVolumeResponse, error) { + return nil, status.Error(codes.Unimplemented, "method GetVolume not implemented") +} +func (UnimplementedControlServer) UpdateVolume(context.Context, *UpdateVolumeRequest) (*UpdateVolumeResponse, error) { + return nil, status.Error(codes.Unimplemented, "method UpdateVolume not implemented") +} +func (UnimplementedControlServer) ListVolumes(context.Context, *ListVolumesRequest) (*ListVolumesResponse, error) { + return nil, status.Error(codes.Unimplemented, "method ListVolumes not implemented") +} +func (UnimplementedControlServer) RemoveVolume(context.Context, *RemoveVolumeRequest) (*RemoveVolumeResponse, error) { + return nil, status.Error(codes.Unimplemented, "method RemoveVolume not implemented") +} +func (UnimplementedControlServer) testEmbeddedByValue() {} + +// UnsafeControlServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to ControlServer will +// result in compilation errors. +type UnsafeControlServer interface { + mustEmbedUnimplementedControlServer() +} + +func RegisterControlServer(s grpc.ServiceRegistrar, srv ControlServer) { + // If the following call panics, it indicates UnimplementedControlServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } + s.RegisterService(&Control_ServiceDesc, srv) +} + +func _Control_GetNode_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetNodeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControlServer).GetNode(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Control_GetNode_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControlServer).GetNode(ctx, req.(*GetNodeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Control_ListNodes_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListNodesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControlServer).ListNodes(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Control_ListNodes_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControlServer).ListNodes(ctx, req.(*ListNodesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Control_UpdateNode_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateNodeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControlServer).UpdateNode(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Control_UpdateNode_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControlServer).UpdateNode(ctx, req.(*UpdateNodeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Control_RemoveNode_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RemoveNodeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControlServer).RemoveNode(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Control_RemoveNode_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControlServer).RemoveNode(ctx, req.(*RemoveNodeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Control_GetTask_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetTaskRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControlServer).GetTask(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Control_GetTask_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControlServer).GetTask(ctx, req.(*GetTaskRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Control_ListTasks_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListTasksRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControlServer).ListTasks(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Control_ListTasks_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControlServer).ListTasks(ctx, req.(*ListTasksRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Control_RemoveTask_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RemoveTaskRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControlServer).RemoveTask(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Control_RemoveTask_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControlServer).RemoveTask(ctx, req.(*RemoveTaskRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Control_GetService_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetServiceRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControlServer).GetService(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Control_GetService_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControlServer).GetService(ctx, req.(*GetServiceRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Control_ListServices_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListServicesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControlServer).ListServices(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Control_ListServices_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControlServer).ListServices(ctx, req.(*ListServicesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Control_CreateService_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateServiceRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControlServer).CreateService(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Control_CreateService_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControlServer).CreateService(ctx, req.(*CreateServiceRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Control_UpdateService_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateServiceRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControlServer).UpdateService(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Control_UpdateService_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControlServer).UpdateService(ctx, req.(*UpdateServiceRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Control_RemoveService_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RemoveServiceRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControlServer).RemoveService(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Control_RemoveService_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControlServer).RemoveService(ctx, req.(*RemoveServiceRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Control_ListServiceStatuses_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListServiceStatusesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControlServer).ListServiceStatuses(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Control_ListServiceStatuses_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControlServer).ListServiceStatuses(ctx, req.(*ListServiceStatusesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Control_GetNetwork_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetNetworkRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControlServer).GetNetwork(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Control_GetNetwork_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControlServer).GetNetwork(ctx, req.(*GetNetworkRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Control_ListNetworks_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListNetworksRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControlServer).ListNetworks(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Control_ListNetworks_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControlServer).ListNetworks(ctx, req.(*ListNetworksRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Control_CreateNetwork_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateNetworkRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControlServer).CreateNetwork(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Control_CreateNetwork_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControlServer).CreateNetwork(ctx, req.(*CreateNetworkRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Control_RemoveNetwork_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RemoveNetworkRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControlServer).RemoveNetwork(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Control_RemoveNetwork_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControlServer).RemoveNetwork(ctx, req.(*RemoveNetworkRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Control_GetCluster_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetClusterRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControlServer).GetCluster(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Control_GetCluster_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControlServer).GetCluster(ctx, req.(*GetClusterRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Control_ListClusters_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListClustersRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControlServer).ListClusters(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Control_ListClusters_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControlServer).ListClusters(ctx, req.(*ListClustersRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Control_UpdateCluster_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateClusterRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControlServer).UpdateCluster(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Control_UpdateCluster_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControlServer).UpdateCluster(ctx, req.(*UpdateClusterRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Control_GetSecret_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetSecretRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControlServer).GetSecret(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Control_GetSecret_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControlServer).GetSecret(ctx, req.(*GetSecretRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Control_UpdateSecret_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateSecretRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControlServer).UpdateSecret(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Control_UpdateSecret_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControlServer).UpdateSecret(ctx, req.(*UpdateSecretRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Control_ListSecrets_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListSecretsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControlServer).ListSecrets(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Control_ListSecrets_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControlServer).ListSecrets(ctx, req.(*ListSecretsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Control_CreateSecret_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateSecretRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControlServer).CreateSecret(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Control_CreateSecret_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControlServer).CreateSecret(ctx, req.(*CreateSecretRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Control_RemoveSecret_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RemoveSecretRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControlServer).RemoveSecret(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Control_RemoveSecret_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControlServer).RemoveSecret(ctx, req.(*RemoveSecretRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Control_GetConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetConfigRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControlServer).GetConfig(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Control_GetConfig_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControlServer).GetConfig(ctx, req.(*GetConfigRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Control_UpdateConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateConfigRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControlServer).UpdateConfig(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Control_UpdateConfig_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControlServer).UpdateConfig(ctx, req.(*UpdateConfigRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Control_ListConfigs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListConfigsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControlServer).ListConfigs(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Control_ListConfigs_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControlServer).ListConfigs(ctx, req.(*ListConfigsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Control_CreateConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateConfigRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControlServer).CreateConfig(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Control_CreateConfig_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControlServer).CreateConfig(ctx, req.(*CreateConfigRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Control_RemoveConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RemoveConfigRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControlServer).RemoveConfig(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Control_RemoveConfig_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControlServer).RemoveConfig(ctx, req.(*RemoveConfigRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Control_GetExtension_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetExtensionRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControlServer).GetExtension(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Control_GetExtension_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControlServer).GetExtension(ctx, req.(*GetExtensionRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Control_CreateExtension_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateExtensionRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControlServer).CreateExtension(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Control_CreateExtension_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControlServer).CreateExtension(ctx, req.(*CreateExtensionRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Control_RemoveExtension_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RemoveExtensionRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControlServer).RemoveExtension(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Control_RemoveExtension_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControlServer).RemoveExtension(ctx, req.(*RemoveExtensionRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Control_GetResource_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetResourceRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControlServer).GetResource(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Control_GetResource_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControlServer).GetResource(ctx, req.(*GetResourceRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Control_UpdateResource_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateResourceRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControlServer).UpdateResource(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Control_UpdateResource_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControlServer).UpdateResource(ctx, req.(*UpdateResourceRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Control_ListResources_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListResourcesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControlServer).ListResources(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Control_ListResources_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControlServer).ListResources(ctx, req.(*ListResourcesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Control_CreateResource_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateResourceRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControlServer).CreateResource(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Control_CreateResource_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControlServer).CreateResource(ctx, req.(*CreateResourceRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Control_RemoveResource_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RemoveResourceRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControlServer).RemoveResource(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Control_RemoveResource_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControlServer).RemoveResource(ctx, req.(*RemoveResourceRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Control_CreateVolume_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateVolumeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControlServer).CreateVolume(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Control_CreateVolume_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControlServer).CreateVolume(ctx, req.(*CreateVolumeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Control_GetVolume_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetVolumeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControlServer).GetVolume(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Control_GetVolume_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControlServer).GetVolume(ctx, req.(*GetVolumeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Control_UpdateVolume_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateVolumeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControlServer).UpdateVolume(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Control_UpdateVolume_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControlServer).UpdateVolume(ctx, req.(*UpdateVolumeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Control_ListVolumes_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListVolumesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControlServer).ListVolumes(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Control_ListVolumes_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControlServer).ListVolumes(ctx, req.(*ListVolumesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Control_RemoveVolume_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RemoveVolumeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControlServer).RemoveVolume(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Control_RemoveVolume_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControlServer).RemoveVolume(ctx, req.(*RemoveVolumeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// Control_ServiceDesc is the grpc.ServiceDesc for Control service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Control_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "docker.swarmkit.v1.Control", + HandlerType: (*ControlServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "GetNode", + Handler: _Control_GetNode_Handler, + }, + { + MethodName: "ListNodes", + Handler: _Control_ListNodes_Handler, + }, + { + MethodName: "UpdateNode", + Handler: _Control_UpdateNode_Handler, + }, + { + MethodName: "RemoveNode", + Handler: _Control_RemoveNode_Handler, + }, + { + MethodName: "GetTask", + Handler: _Control_GetTask_Handler, + }, + { + MethodName: "ListTasks", + Handler: _Control_ListTasks_Handler, + }, + { + MethodName: "RemoveTask", + Handler: _Control_RemoveTask_Handler, + }, + { + MethodName: "GetService", + Handler: _Control_GetService_Handler, + }, + { + MethodName: "ListServices", + Handler: _Control_ListServices_Handler, + }, + { + MethodName: "CreateService", + Handler: _Control_CreateService_Handler, + }, + { + MethodName: "UpdateService", + Handler: _Control_UpdateService_Handler, + }, + { + MethodName: "RemoveService", + Handler: _Control_RemoveService_Handler, + }, + { + MethodName: "ListServiceStatuses", + Handler: _Control_ListServiceStatuses_Handler, + }, + { + MethodName: "GetNetwork", + Handler: _Control_GetNetwork_Handler, + }, + { + MethodName: "ListNetworks", + Handler: _Control_ListNetworks_Handler, + }, + { + MethodName: "CreateNetwork", + Handler: _Control_CreateNetwork_Handler, + }, + { + MethodName: "RemoveNetwork", + Handler: _Control_RemoveNetwork_Handler, + }, + { + MethodName: "GetCluster", + Handler: _Control_GetCluster_Handler, + }, + { + MethodName: "ListClusters", + Handler: _Control_ListClusters_Handler, + }, + { + MethodName: "UpdateCluster", + Handler: _Control_UpdateCluster_Handler, + }, + { + MethodName: "GetSecret", + Handler: _Control_GetSecret_Handler, + }, + { + MethodName: "UpdateSecret", + Handler: _Control_UpdateSecret_Handler, + }, + { + MethodName: "ListSecrets", + Handler: _Control_ListSecrets_Handler, + }, + { + MethodName: "CreateSecret", + Handler: _Control_CreateSecret_Handler, + }, + { + MethodName: "RemoveSecret", + Handler: _Control_RemoveSecret_Handler, + }, + { + MethodName: "GetConfig", + Handler: _Control_GetConfig_Handler, + }, + { + MethodName: "UpdateConfig", + Handler: _Control_UpdateConfig_Handler, + }, + { + MethodName: "ListConfigs", + Handler: _Control_ListConfigs_Handler, + }, + { + MethodName: "CreateConfig", + Handler: _Control_CreateConfig_Handler, + }, + { + MethodName: "RemoveConfig", + Handler: _Control_RemoveConfig_Handler, + }, + { + MethodName: "GetExtension", + Handler: _Control_GetExtension_Handler, + }, + { + MethodName: "CreateExtension", + Handler: _Control_CreateExtension_Handler, + }, + { + MethodName: "RemoveExtension", + Handler: _Control_RemoveExtension_Handler, + }, + { + MethodName: "GetResource", + Handler: _Control_GetResource_Handler, + }, + { + MethodName: "UpdateResource", + Handler: _Control_UpdateResource_Handler, + }, + { + MethodName: "ListResources", + Handler: _Control_ListResources_Handler, + }, + { + MethodName: "CreateResource", + Handler: _Control_CreateResource_Handler, + }, + { + MethodName: "RemoveResource", + Handler: _Control_RemoveResource_Handler, + }, + { + MethodName: "CreateVolume", + Handler: _Control_CreateVolume_Handler, + }, + { + MethodName: "GetVolume", + Handler: _Control_GetVolume_Handler, + }, + { + MethodName: "UpdateVolume", + Handler: _Control_UpdateVolume_Handler, + }, + { + MethodName: "ListVolumes", + Handler: _Control_ListVolumes_Handler, + }, + { + MethodName: "RemoveVolume", + Handler: _Control_RemoveVolume_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "api/control.proto", +} diff --git a/api/deepcopy/copy.go b/api/deepcopy/copy.go index fd44621f01..0212c49d2b 100644 --- a/api/deepcopy/copy.go +++ b/api/deepcopy/copy.go @@ -4,7 +4,10 @@ import ( "fmt" "time" - "github.com/gogo/protobuf/types" + "google.golang.org/protobuf/types/known/anypb" + "google.golang.org/protobuf/types/known/durationpb" + "google.golang.org/protobuf/types/known/timestamppb" + "google.golang.org/protobuf/types/known/wrapperspb" ) // CopierFrom can be implemented if an object knows how to copy another into itself. @@ -26,8 +29,8 @@ type CopierFrom interface { // types that use this function. func Copy(dst, src interface{}) { switch dst := dst.(type) { - case *types.Any: - src := src.(*types.Any) + case *anypb.Any: + src := src.(*anypb.Any) dst.TypeUrl = src.TypeUrl if src.Value != nil { dst.Value = make([]byte, len(src.Value)) @@ -35,25 +38,24 @@ func Copy(dst, src interface{}) { } else { dst.Value = nil } - case *types.Duration: - src := src.(*types.Duration) + case *durationpb.Duration: + src := src.(*durationpb.Duration) *dst = *src case *time.Duration: src := src.(*time.Duration) *dst = *src - case *types.Timestamp: - src := src.(*types.Timestamp) + case *timestamppb.Timestamp: + src := src.(*timestamppb.Timestamp) *dst = *src - case *types.BoolValue: - src := src.(*types.BoolValue) + case *wrapperspb.BoolValue: + src := src.(*wrapperspb.BoolValue) *dst = *src - case *types.Int64Value: - src := src.(*types.Int64Value) + case *wrapperspb.Int64Value: + src := src.(*wrapperspb.Int64Value) *dst = *src case CopierFrom: dst.CopyFrom(src) default: panic(fmt.Sprintf("Copy for %T not implemented", dst)) } - } diff --git a/api/defaults/service.go b/api/defaults/service.go index 3e40c25e99..36d9f65b6d 100644 --- a/api/defaults/service.go +++ b/api/defaults/service.go @@ -3,7 +3,8 @@ package defaults import ( "time" - gogotypes "github.com/gogo/protobuf/types" + "google.golang.org/protobuf/types/known/durationpb" + "github.com/moby/swarmkit/v2/api" "github.com/moby/swarmkit/v2/api/deepcopy" ) @@ -11,10 +12,10 @@ import ( // Service is a ServiceSpec object with all fields filled in using default // values. var Service = api.ServiceSpec{ - Task: api.TaskSpec{ + Task: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{ - StopGracePeriod: gogotypes.DurationProto(10 * time.Second), + StopGracePeriod: durationpb.New(10 * time.Second), PullOptions: &api.ContainerSpec_PullOptions{}, DNSConfig: &api.ContainerSpec_DNSConfig{}, }, @@ -22,19 +23,19 @@ var Service = api.ServiceSpec{ Resources: &api.ResourceRequirements{}, Restart: &api.RestartPolicy{ Condition: api.RestartOnAny, - Delay: gogotypes.DurationProto(5 * time.Second), + Delay: durationpb.New(5 * time.Second), }, Placement: &api.Placement{}, }, Update: &api.UpdateConfig{ FailureAction: api.UpdateConfig_PAUSE, - Monitor: gogotypes.DurationProto(5 * time.Second), + Monitor: durationpb.New(5 * time.Second), Parallelism: 1, Order: api.UpdateConfig_STOP_FIRST, }, Rollback: &api.UpdateConfig{ FailureAction: api.UpdateConfig_PAUSE, - Monitor: gogotypes.DurationProto(5 * time.Second), + Monitor: durationpb.New(5 * time.Second), Parallelism: 1, Order: api.UpdateConfig_STOP_FIRST, }, @@ -49,7 +50,7 @@ func InterpolateService(origSpec *api.ServiceSpec) *api.ServiceSpec { defaultContainer := Service.Task.GetContainer() if container != nil { if container.StopGracePeriod == nil { - container.StopGracePeriod = &gogotypes.Duration{} + container.StopGracePeriod = &durationpb.Duration{} deepcopy.Copy(container.StopGracePeriod, defaultContainer.StopGracePeriod) } if container.PullOptions == nil { @@ -68,7 +69,7 @@ func InterpolateService(origSpec *api.ServiceSpec) *api.ServiceSpec { spec.Task.Restart = Service.Task.Restart.Copy() } else { if spec.Task.Restart.Delay == nil { - spec.Task.Restart.Delay = &gogotypes.Duration{} + spec.Task.Restart.Delay = &durationpb.Duration{} deepcopy.Copy(spec.Task.Restart.Delay, Service.Task.Restart.Delay) } } @@ -81,7 +82,7 @@ func InterpolateService(origSpec *api.ServiceSpec) *api.ServiceSpec { spec.Update = Service.Update.Copy() } else { if spec.Update.Monitor == nil { - spec.Update.Monitor = &gogotypes.Duration{} + spec.Update.Monitor = &durationpb.Duration{} deepcopy.Copy(spec.Update.Monitor, Service.Update.Monitor) } } @@ -90,7 +91,7 @@ func InterpolateService(origSpec *api.ServiceSpec) *api.ServiceSpec { spec.Rollback = Service.Rollback.Copy() } else { if spec.Rollback.Monitor == nil { - spec.Rollback.Monitor = &gogotypes.Duration{} + spec.Rollback.Monitor = &durationpb.Duration{} deepcopy.Copy(spec.Rollback.Monitor, Service.Rollback.Monitor) } } diff --git a/api/dispatcher.pb.authwrapper.go b/api/dispatcher.pb.authwrapper.go new file mode 100644 index 0000000000..5e509deefe --- /dev/null +++ b/api/dispatcher.pb.authwrapper.go @@ -0,0 +1,67 @@ +// Code generated by protoc-gen-goswarm. DO NOT EDIT. + +package api + +import ( + context "context" +) + +type authenticatedWrapperDispatcherServer struct { + local DispatcherServer + authorize func(context.Context, []string) error +} + +func NewAuthenticatedWrapperDispatcherServer(local DispatcherServer, authorize func(context.Context, []string) error) DispatcherServer { + return &authenticatedWrapperDispatcherServer{ + local: local, + authorize: authorize, + } +} + +func (p *authenticatedWrapperDispatcherServer) Session(r *SessionRequest, stream Dispatcher_SessionServer) error { + + if err := p.authorize(stream.Context(), []string{"swarm-worker", "swarm-manager"}); err != nil { + return err + } + return p.local.Session(r, stream) +} + +func (p *authenticatedWrapperDispatcherServer) Heartbeat(ctx context.Context, r *HeartbeatRequest) (*HeartbeatResponse, error) { + + if err := p.authorize(ctx, []string{"swarm-worker", "swarm-manager"}); err != nil { + return nil, err + } + return p.local.Heartbeat(ctx, r) +} + +func (p *authenticatedWrapperDispatcherServer) UpdateTaskStatus(ctx context.Context, r *UpdateTaskStatusRequest) (*UpdateTaskStatusResponse, error) { + + if err := p.authorize(ctx, []string{"swarm-worker", "swarm-manager"}); err != nil { + return nil, err + } + return p.local.UpdateTaskStatus(ctx, r) +} + +func (p *authenticatedWrapperDispatcherServer) UpdateVolumeStatus(ctx context.Context, r *UpdateVolumeStatusRequest) (*UpdateVolumeStatusResponse, error) { + + if err := p.authorize(ctx, []string{"swarm-worker", "swarm-manager"}); err != nil { + return nil, err + } + return p.local.UpdateVolumeStatus(ctx, r) +} + +func (p *authenticatedWrapperDispatcherServer) Tasks(r *TasksRequest, stream Dispatcher_TasksServer) error { + + if err := p.authorize(stream.Context(), []string{"swarm-worker", "swarm-manager"}); err != nil { + return err + } + return p.local.Tasks(r, stream) +} + +func (p *authenticatedWrapperDispatcherServer) Assignments(r *AssignmentsRequest, stream Dispatcher_AssignmentsServer) error { + + if err := p.authorize(stream.Context(), []string{"swarm-worker", "swarm-manager"}); err != nil { + return err + } + return p.local.Assignments(r, stream) +} diff --git a/api/dispatcher.pb.deepcopy.go b/api/dispatcher.pb.deepcopy.go new file mode 100644 index 0000000000..46e11179b9 --- /dev/null +++ b/api/dispatcher.pb.deepcopy.go @@ -0,0 +1,347 @@ +// Code generated by protoc-gen-goswarm. DO NOT EDIT. + +package api + +import ( + deepcopy "github.com/moby/swarmkit/v2/api/deepcopy" + durationpb "google.golang.org/protobuf/types/known/durationpb" +) + +func (m *SessionRequest) Copy() *SessionRequest { + if m == nil { + return nil + } + o := &SessionRequest{} + o.CopyFrom(m) + return o +} + +func (m *SessionRequest) CopyFrom(src interface{}) { + + o := src.(*SessionRequest) + if o.Description != nil { + m.Description = &NodeDescription{} + deepcopy.Copy(m.Description, o.Description) + } + + m.SessionID = o.SessionID +} + +func (m *SessionMessage) Copy() *SessionMessage { + if m == nil { + return nil + } + o := &SessionMessage{} + o.CopyFrom(m) + return o +} + +func (m *SessionMessage) CopyFrom(src interface{}) { + + o := src.(*SessionMessage) + m.SessionID = o.SessionID + if o.Node != nil { + m.Node = &Node{} + deepcopy.Copy(m.Node, o.Node) + } + + if o.Managers != nil { + m.Managers = make([]*WeightedPeer, len(o.Managers)) + for i := range m.Managers { + m.Managers[i] = &WeightedPeer{} + deepcopy.Copy(m.Managers[i], o.Managers[i]) + } + } + + if o.NetworkBootstrapKeys != nil { + m.NetworkBootstrapKeys = make([]*EncryptionKey, len(o.NetworkBootstrapKeys)) + for i := range m.NetworkBootstrapKeys { + m.NetworkBootstrapKeys[i] = &EncryptionKey{} + deepcopy.Copy(m.NetworkBootstrapKeys[i], o.NetworkBootstrapKeys[i]) + } + } + + if o.RootCA != nil { + m.RootCA = make([]byte, len(o.RootCA)) + copy(m.RootCA, o.RootCA) + } + +} + +func (m *HeartbeatRequest) Copy() *HeartbeatRequest { + if m == nil { + return nil + } + o := &HeartbeatRequest{} + o.CopyFrom(m) + return o +} + +func (m *HeartbeatRequest) CopyFrom(src interface{}) { + + o := src.(*HeartbeatRequest) + m.SessionID = o.SessionID +} + +func (m *HeartbeatResponse) Copy() *HeartbeatResponse { + if m == nil { + return nil + } + o := &HeartbeatResponse{} + o.CopyFrom(m) + return o +} + +func (m *HeartbeatResponse) CopyFrom(src interface{}) { + + o := src.(*HeartbeatResponse) + if o.Period != nil { + m.Period = &durationpb.Duration{} + deepcopy.Copy(m.Period, o.Period) + } + +} + +func (m *UpdateTaskStatusRequest) Copy() *UpdateTaskStatusRequest { + if m == nil { + return nil + } + o := &UpdateTaskStatusRequest{} + o.CopyFrom(m) + return o +} + +func (m *UpdateTaskStatusRequest) CopyFrom(src interface{}) { + + o := src.(*UpdateTaskStatusRequest) + m.SessionID = o.SessionID + if o.Updates != nil { + m.Updates = make([]*UpdateTaskStatusRequest_TaskStatusUpdate, len(o.Updates)) + for i := range m.Updates { + m.Updates[i] = &UpdateTaskStatusRequest_TaskStatusUpdate{} + deepcopy.Copy(m.Updates[i], o.Updates[i]) + } + } + +} + +func (m *UpdateTaskStatusRequest_TaskStatusUpdate) Copy() *UpdateTaskStatusRequest_TaskStatusUpdate { + if m == nil { + return nil + } + o := &UpdateTaskStatusRequest_TaskStatusUpdate{} + o.CopyFrom(m) + return o +} + +func (m *UpdateTaskStatusRequest_TaskStatusUpdate) CopyFrom(src interface{}) { + + o := src.(*UpdateTaskStatusRequest_TaskStatusUpdate) + m.TaskID = o.TaskID + if o.Status != nil { + m.Status = &TaskStatus{} + deepcopy.Copy(m.Status, o.Status) + } + +} + +func (m *UpdateTaskStatusResponse) Copy() *UpdateTaskStatusResponse { + if m == nil { + return nil + } + o := &UpdateTaskStatusResponse{} + o.CopyFrom(m) + return o +} + +func (m *UpdateTaskStatusResponse) CopyFrom(src interface{}) {} + +func (m *UpdateVolumeStatusRequest) Copy() *UpdateVolumeStatusRequest { + if m == nil { + return nil + } + o := &UpdateVolumeStatusRequest{} + o.CopyFrom(m) + return o +} + +func (m *UpdateVolumeStatusRequest) CopyFrom(src interface{}) { + + o := src.(*UpdateVolumeStatusRequest) + m.SessionID = o.SessionID + if o.Updates != nil { + m.Updates = make([]*UpdateVolumeStatusRequest_VolumeStatusUpdate, len(o.Updates)) + for i := range m.Updates { + m.Updates[i] = &UpdateVolumeStatusRequest_VolumeStatusUpdate{} + deepcopy.Copy(m.Updates[i], o.Updates[i]) + } + } + +} + +func (m *UpdateVolumeStatusRequest_VolumeStatusUpdate) Copy() *UpdateVolumeStatusRequest_VolumeStatusUpdate { + if m == nil { + return nil + } + o := &UpdateVolumeStatusRequest_VolumeStatusUpdate{} + o.CopyFrom(m) + return o +} + +func (m *UpdateVolumeStatusRequest_VolumeStatusUpdate) CopyFrom(src interface{}) { + + o := src.(*UpdateVolumeStatusRequest_VolumeStatusUpdate) + m.ID = o.ID + m.Unpublished = o.Unpublished +} + +func (m *UpdateVolumeStatusResponse) Copy() *UpdateVolumeStatusResponse { + if m == nil { + return nil + } + o := &UpdateVolumeStatusResponse{} + o.CopyFrom(m) + return o +} + +func (m *UpdateVolumeStatusResponse) CopyFrom(src interface{}) {} + +func (m *TasksRequest) Copy() *TasksRequest { + if m == nil { + return nil + } + o := &TasksRequest{} + o.CopyFrom(m) + return o +} + +func (m *TasksRequest) CopyFrom(src interface{}) { + + o := src.(*TasksRequest) + m.SessionID = o.SessionID +} + +func (m *TasksMessage) Copy() *TasksMessage { + if m == nil { + return nil + } + o := &TasksMessage{} + o.CopyFrom(m) + return o +} + +func (m *TasksMessage) CopyFrom(src interface{}) { + + o := src.(*TasksMessage) + if o.Tasks != nil { + m.Tasks = make([]*Task, len(o.Tasks)) + for i := range m.Tasks { + m.Tasks[i] = &Task{} + deepcopy.Copy(m.Tasks[i], o.Tasks[i]) + } + } + +} + +func (m *AssignmentsRequest) Copy() *AssignmentsRequest { + if m == nil { + return nil + } + o := &AssignmentsRequest{} + o.CopyFrom(m) + return o +} + +func (m *AssignmentsRequest) CopyFrom(src interface{}) { + + o := src.(*AssignmentsRequest) + m.SessionID = o.SessionID +} + +func (m *Assignment) Copy() *Assignment { + if m == nil { + return nil + } + o := &Assignment{} + o.CopyFrom(m) + return o +} + +func (m *Assignment) CopyFrom(src interface{}) { + + o := src.(*Assignment) + if o.Item != nil { + switch o.Item.(type) { + case *Assignment_Task: + v := Assignment_Task{ + Task: &Task{}, + } + deepcopy.Copy(v.Task, o.GetTask()) + m.Item = &v + case *Assignment_Secret: + v := Assignment_Secret{ + Secret: &Secret{}, + } + deepcopy.Copy(v.Secret, o.GetSecret()) + m.Item = &v + case *Assignment_Config: + v := Assignment_Config{ + Config: &Config{}, + } + deepcopy.Copy(v.Config, o.GetConfig()) + m.Item = &v + case *Assignment_Volume: + v := Assignment_Volume{ + Volume: &VolumeAssignment{}, + } + deepcopy.Copy(v.Volume, o.GetVolume()) + m.Item = &v + } + } + +} + +func (m *AssignmentChange) Copy() *AssignmentChange { + if m == nil { + return nil + } + o := &AssignmentChange{} + o.CopyFrom(m) + return o +} + +func (m *AssignmentChange) CopyFrom(src interface{}) { + + o := src.(*AssignmentChange) + if o.Assignment != nil { + m.Assignment = &Assignment{} + deepcopy.Copy(m.Assignment, o.Assignment) + } + + m.Action = o.Action +} + +func (m *AssignmentsMessage) Copy() *AssignmentsMessage { + if m == nil { + return nil + } + o := &AssignmentsMessage{} + o.CopyFrom(m) + return o +} + +func (m *AssignmentsMessage) CopyFrom(src interface{}) { + + o := src.(*AssignmentsMessage) + m.Type = o.Type + m.AppliesTo = o.AppliesTo + m.ResultsIn = o.ResultsIn + if o.Changes != nil { + m.Changes = make([]*AssignmentChange, len(o.Changes)) + for i := range m.Changes { + m.Changes[i] = &AssignmentChange{} + deepcopy.Copy(m.Changes[i], o.Changes[i]) + } + } + +} diff --git a/api/dispatcher.pb.go b/api/dispatcher.pb.go index 00542edd9d..0a4c56387c 100644 --- a/api/dispatcher.pb.go +++ b/api/dispatcher.pb.go @@ -1,67 +1,72 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: github.com/docker/swarmkit/api/dispatcher.proto +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.11 +// protoc v3.21.12 +// source: api/dispatcher.proto package api import ( - context "context" - fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" - _ "github.com/gogo/protobuf/types" - github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" - github_com_moby_swarmkit_v2_api_deepcopy "github.com/moby/swarmkit/v2/api/deepcopy" - raftselector "github.com/moby/swarmkit/v2/manager/raftselector" _ "github.com/moby/swarmkit/v2/protobuf/plugin" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - metadata "google.golang.org/grpc/metadata" - peer "google.golang.org/grpc/peer" - status "google.golang.org/grpc/status" - io "io" - math "math" - math_bits "math/bits" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + durationpb "google.golang.org/protobuf/types/known/durationpb" reflect "reflect" - strings "strings" - rafttime "time" - time "time" + sync "sync" + unsafe "unsafe" ) -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf -var _ = time.Kitchen - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package +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 AssignmentChange_AssignmentAction int32 const ( - AssignmentChange_AssignmentActionUpdate AssignmentChange_AssignmentAction = 0 - AssignmentChange_AssignmentActionRemove AssignmentChange_AssignmentAction = 1 + AssignmentActionUpdate AssignmentChange_AssignmentAction = 0 + AssignmentActionRemove AssignmentChange_AssignmentAction = 1 ) -var AssignmentChange_AssignmentAction_name = map[int32]string{ - 0: "UPDATE", - 1: "REMOVE", -} +// Enum value maps for AssignmentChange_AssignmentAction. +var ( + AssignmentChange_AssignmentAction_name = map[int32]string{ + 0: "UPDATE", + 1: "REMOVE", + } + AssignmentChange_AssignmentAction_value = map[string]int32{ + "UPDATE": 0, + "REMOVE": 1, + } +) -var AssignmentChange_AssignmentAction_value = map[string]int32{ - "UPDATE": 0, - "REMOVE": 1, +func (x AssignmentChange_AssignmentAction) Enum() *AssignmentChange_AssignmentAction { + p := new(AssignmentChange_AssignmentAction) + *p = x + return p } func (x AssignmentChange_AssignmentAction) String() string { - return proto.EnumName(AssignmentChange_AssignmentAction_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } +func (AssignmentChange_AssignmentAction) Descriptor() protoreflect.EnumDescriptor { + return file_api_dispatcher_proto_enumTypes[0].Descriptor() +} + +func (AssignmentChange_AssignmentAction) Type() protoreflect.EnumType { + return &file_api_dispatcher_proto_enumTypes[0] +} + +func (x AssignmentChange_AssignmentAction) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use AssignmentChange_AssignmentAction.Descriptor instead. func (AssignmentChange_AssignmentAction) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_71002346457e55a8, []int{12, 0} + return file_api_dispatcher_proto_rawDescGZIP(), []int{12, 0} } // AssignmentType specifies whether this assignment message carries @@ -73,69 +78,106 @@ const ( AssignmentsMessage_INCREMENTAL AssignmentsMessage_Type = 1 ) -var AssignmentsMessage_Type_name = map[int32]string{ - 0: "COMPLETE", - 1: "INCREMENTAL", -} +// Enum value maps for AssignmentsMessage_Type. +var ( + AssignmentsMessage_Type_name = map[int32]string{ + 0: "COMPLETE", + 1: "INCREMENTAL", + } + AssignmentsMessage_Type_value = map[string]int32{ + "COMPLETE": 0, + "INCREMENTAL": 1, + } +) -var AssignmentsMessage_Type_value = map[string]int32{ - "COMPLETE": 0, - "INCREMENTAL": 1, +func (x AssignmentsMessage_Type) Enum() *AssignmentsMessage_Type { + p := new(AssignmentsMessage_Type) + *p = x + return p } func (x AssignmentsMessage_Type) String() string { - return proto.EnumName(AssignmentsMessage_Type_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (AssignmentsMessage_Type) Descriptor() protoreflect.EnumDescriptor { + return file_api_dispatcher_proto_enumTypes[1].Descriptor() +} + +func (AssignmentsMessage_Type) Type() protoreflect.EnumType { + return &file_api_dispatcher_proto_enumTypes[1] +} + +func (x AssignmentsMessage_Type) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } +// Deprecated: Use AssignmentsMessage_Type.Descriptor instead. func (AssignmentsMessage_Type) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_71002346457e55a8, []int{13, 0} + return file_api_dispatcher_proto_rawDescGZIP(), []int{13, 0} } // SessionRequest starts a session. type SessionRequest struct { - Description *NodeDescription `protobuf:"bytes,1,opt,name=description,proto3" json:"description,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Description *NodeDescription `protobuf:"bytes,1,opt,name=description,proto3" json:"description,omitempty"` // SessionID can be provided to attempt resuming an existing session. If the // SessionID is empty or invalid, a new SessionID will be assigned. // // See SessionMessage.SessionID for details. - SessionID string `protobuf:"bytes,2,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"` + SessionID string `protobuf:"bytes,2,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SessionRequest) Reset() { + *x = SessionRequest{} + mi := &file_api_dispatcher_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SessionRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *SessionRequest) Reset() { *m = SessionRequest{} } func (*SessionRequest) ProtoMessage() {} -func (*SessionRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_71002346457e55a8, []int{0} -} -func (m *SessionRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *SessionRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_SessionRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *SessionRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_dispatcher_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *SessionRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_SessionRequest.Merge(m, src) -} -func (m *SessionRequest) XXX_Size() int { - return m.Size() + +// Deprecated: Use SessionRequest.ProtoReflect.Descriptor instead. +func (*SessionRequest) Descriptor() ([]byte, []int) { + return file_api_dispatcher_proto_rawDescGZIP(), []int{0} } -func (m *SessionRequest) XXX_DiscardUnknown() { - xxx_messageInfo_SessionRequest.DiscardUnknown(m) + +func (x *SessionRequest) GetDescription() *NodeDescription { + if x != nil { + return x.Description + } + return nil } -var xxx_messageInfo_SessionRequest proto.InternalMessageInfo +func (x *SessionRequest) GetSessionID() string { + if x != nil { + return x.SessionID + } + return "" +} // SessionMessage instructs an agent on various actions as part of the current // session. An agent should act immediately on the contents. type SessionMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` // SessionID is allocated after a successful registration. It should be // used on all RPC calls after registration. A dispatcher may choose to // change the SessionID, at which time an agent must re-register and obtain @@ -188,609 +230,648 @@ type SessionMessage struct { // for securing network bootstrapping and communication. NetworkBootstrapKeys []*EncryptionKey `protobuf:"bytes,4,rep,name=network_bootstrap_keys,json=networkBootstrapKeys,proto3" json:"network_bootstrap_keys,omitempty"` // Which root certificates to trust - RootCA []byte `protobuf:"bytes,5,opt,name=RootCA,proto3" json:"RootCA,omitempty"` + RootCA []byte `protobuf:"bytes,5,opt,name=RootCA,proto3" json:"RootCA,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SessionMessage) Reset() { + *x = SessionMessage{} + mi := &file_api_dispatcher_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SessionMessage) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *SessionMessage) Reset() { *m = SessionMessage{} } func (*SessionMessage) ProtoMessage() {} -func (*SessionMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_71002346457e55a8, []int{1} -} -func (m *SessionMessage) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *SessionMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_SessionMessage.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *SessionMessage) ProtoReflect() protoreflect.Message { + mi := &file_api_dispatcher_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SessionMessage.ProtoReflect.Descriptor instead. +func (*SessionMessage) Descriptor() ([]byte, []int) { + return file_api_dispatcher_proto_rawDescGZIP(), []int{1} +} + +func (x *SessionMessage) GetSessionID() string { + if x != nil { + return x.SessionID } + return "" } -func (m *SessionMessage) XXX_Merge(src proto.Message) { - xxx_messageInfo_SessionMessage.Merge(m, src) + +func (x *SessionMessage) GetNode() *Node { + if x != nil { + return x.Node + } + return nil } -func (m *SessionMessage) XXX_Size() int { - return m.Size() + +func (x *SessionMessage) GetManagers() []*WeightedPeer { + if x != nil { + return x.Managers + } + return nil } -func (m *SessionMessage) XXX_DiscardUnknown() { - xxx_messageInfo_SessionMessage.DiscardUnknown(m) + +func (x *SessionMessage) GetNetworkBootstrapKeys() []*EncryptionKey { + if x != nil { + return x.NetworkBootstrapKeys + } + return nil } -var xxx_messageInfo_SessionMessage proto.InternalMessageInfo +func (x *SessionMessage) GetRootCA() []byte { + if x != nil { + return x.RootCA + } + return nil +} // HeartbeatRequest provides identifying properties for a single heartbeat. type HeartbeatRequest struct { - SessionID string `protobuf:"bytes,1,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + SessionID string `protobuf:"bytes,1,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *HeartbeatRequest) Reset() { + *x = HeartbeatRequest{} + mi := &file_api_dispatcher_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *HeartbeatRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *HeartbeatRequest) Reset() { *m = HeartbeatRequest{} } func (*HeartbeatRequest) ProtoMessage() {} -func (*HeartbeatRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_71002346457e55a8, []int{2} -} -func (m *HeartbeatRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *HeartbeatRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_HeartbeatRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *HeartbeatRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_dispatcher_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *HeartbeatRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_HeartbeatRequest.Merge(m, src) -} -func (m *HeartbeatRequest) XXX_Size() int { - return m.Size() -} -func (m *HeartbeatRequest) XXX_DiscardUnknown() { - xxx_messageInfo_HeartbeatRequest.DiscardUnknown(m) + +// Deprecated: Use HeartbeatRequest.ProtoReflect.Descriptor instead. +func (*HeartbeatRequest) Descriptor() ([]byte, []int) { + return file_api_dispatcher_proto_rawDescGZIP(), []int{2} } -var xxx_messageInfo_HeartbeatRequest proto.InternalMessageInfo +func (x *HeartbeatRequest) GetSessionID() string { + if x != nil { + return x.SessionID + } + return "" +} type HeartbeatResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` // Period is the duration to wait before sending the next heartbeat. // Well-behaved agents should update this on every heartbeat round trip. - Period time.Duration `protobuf:"bytes,1,opt,name=period,proto3,stdduration" json:"period"` + Period *durationpb.Duration `protobuf:"bytes,1,opt,name=period,proto3" json:"period,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *HeartbeatResponse) Reset() { + *x = HeartbeatResponse{} + mi := &file_api_dispatcher_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *HeartbeatResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *HeartbeatResponse) Reset() { *m = HeartbeatResponse{} } func (*HeartbeatResponse) ProtoMessage() {} -func (*HeartbeatResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_71002346457e55a8, []int{3} -} -func (m *HeartbeatResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *HeartbeatResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_HeartbeatResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *HeartbeatResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_dispatcher_proto_msgTypes[3] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *HeartbeatResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_HeartbeatResponse.Merge(m, src) -} -func (m *HeartbeatResponse) XXX_Size() int { - return m.Size() -} -func (m *HeartbeatResponse) XXX_DiscardUnknown() { - xxx_messageInfo_HeartbeatResponse.DiscardUnknown(m) + +// Deprecated: Use HeartbeatResponse.ProtoReflect.Descriptor instead. +func (*HeartbeatResponse) Descriptor() ([]byte, []int) { + return file_api_dispatcher_proto_rawDescGZIP(), []int{3} } -var xxx_messageInfo_HeartbeatResponse proto.InternalMessageInfo +func (x *HeartbeatResponse) GetPeriod() *durationpb.Duration { + if x != nil { + return x.Period + } + return nil +} type UpdateTaskStatusRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` // Tasks should contain all statuses for running tasks. Only the status // field must be set. The spec is not required. - SessionID string `protobuf:"bytes,1,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"` - Updates []*UpdateTaskStatusRequest_TaskStatusUpdate `protobuf:"bytes,3,rep,name=updates,proto3" json:"updates,omitempty"` + SessionID string `protobuf:"bytes,1,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"` + Updates []*UpdateTaskStatusRequest_TaskStatusUpdate `protobuf:"bytes,3,rep,name=updates,proto3" json:"updates,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *UpdateTaskStatusRequest) Reset() { *m = UpdateTaskStatusRequest{} } -func (*UpdateTaskStatusRequest) ProtoMessage() {} -func (*UpdateTaskStatusRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_71002346457e55a8, []int{4} -} -func (m *UpdateTaskStatusRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *UpdateTaskStatusRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_UpdateTaskStatusRequest.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 *UpdateTaskStatusRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_UpdateTaskStatusRequest.Merge(m, src) +func (x *UpdateTaskStatusRequest) Reset() { + *x = UpdateTaskStatusRequest{} + mi := &file_api_dispatcher_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *UpdateTaskStatusRequest) XXX_Size() int { - return m.Size() -} -func (m *UpdateTaskStatusRequest) XXX_DiscardUnknown() { - xxx_messageInfo_UpdateTaskStatusRequest.DiscardUnknown(m) + +func (x *UpdateTaskStatusRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -var xxx_messageInfo_UpdateTaskStatusRequest proto.InternalMessageInfo +func (*UpdateTaskStatusRequest) ProtoMessage() {} -type UpdateTaskStatusRequest_TaskStatusUpdate struct { - TaskID string `protobuf:"bytes,1,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"` - Status *TaskStatus `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` +func (x *UpdateTaskStatusRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_dispatcher_proto_msgTypes[4] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -func (m *UpdateTaskStatusRequest_TaskStatusUpdate) Reset() { - *m = UpdateTaskStatusRequest_TaskStatusUpdate{} +// Deprecated: Use UpdateTaskStatusRequest.ProtoReflect.Descriptor instead. +func (*UpdateTaskStatusRequest) Descriptor() ([]byte, []int) { + return file_api_dispatcher_proto_rawDescGZIP(), []int{4} } -func (*UpdateTaskStatusRequest_TaskStatusUpdate) ProtoMessage() {} -func (*UpdateTaskStatusRequest_TaskStatusUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_71002346457e55a8, []int{4, 0} -} -func (m *UpdateTaskStatusRequest_TaskStatusUpdate) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *UpdateTaskStatusRequest_TaskStatusUpdate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_UpdateTaskStatusRequest_TaskStatusUpdate.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 (x *UpdateTaskStatusRequest) GetSessionID() string { + if x != nil { + return x.SessionID } + return "" } -func (m *UpdateTaskStatusRequest_TaskStatusUpdate) XXX_Merge(src proto.Message) { - xxx_messageInfo_UpdateTaskStatusRequest_TaskStatusUpdate.Merge(m, src) -} -func (m *UpdateTaskStatusRequest_TaskStatusUpdate) XXX_Size() int { - return m.Size() + +func (x *UpdateTaskStatusRequest) GetUpdates() []*UpdateTaskStatusRequest_TaskStatusUpdate { + if x != nil { + return x.Updates + } + return nil } -func (m *UpdateTaskStatusRequest_TaskStatusUpdate) XXX_DiscardUnknown() { - xxx_messageInfo_UpdateTaskStatusRequest_TaskStatusUpdate.DiscardUnknown(m) + +type UpdateTaskStatusResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -var xxx_messageInfo_UpdateTaskStatusRequest_TaskStatusUpdate proto.InternalMessageInfo +func (x *UpdateTaskStatusResponse) Reset() { + *x = UpdateTaskStatusResponse{} + mi := &file_api_dispatcher_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} -type UpdateTaskStatusResponse struct { +func (x *UpdateTaskStatusResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *UpdateTaskStatusResponse) Reset() { *m = UpdateTaskStatusResponse{} } func (*UpdateTaskStatusResponse) ProtoMessage() {} -func (*UpdateTaskStatusResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_71002346457e55a8, []int{5} -} -func (m *UpdateTaskStatusResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *UpdateTaskStatusResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_UpdateTaskStatusResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *UpdateTaskStatusResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_dispatcher_proto_msgTypes[5] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *UpdateTaskStatusResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_UpdateTaskStatusResponse.Merge(m, src) -} -func (m *UpdateTaskStatusResponse) XXX_Size() int { - return m.Size() + +// Deprecated: Use UpdateTaskStatusResponse.ProtoReflect.Descriptor instead. +func (*UpdateTaskStatusResponse) Descriptor() ([]byte, []int) { + return file_api_dispatcher_proto_rawDescGZIP(), []int{5} } -func (m *UpdateTaskStatusResponse) XXX_DiscardUnknown() { - xxx_messageInfo_UpdateTaskStatusResponse.DiscardUnknown(m) + +type UpdateVolumeStatusRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + SessionID string `protobuf:"bytes,1,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"` + Updates []*UpdateVolumeStatusRequest_VolumeStatusUpdate `protobuf:"bytes,2,rep,name=updates,proto3" json:"updates,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -var xxx_messageInfo_UpdateTaskStatusResponse proto.InternalMessageInfo +func (x *UpdateVolumeStatusRequest) Reset() { + *x = UpdateVolumeStatusRequest{} + mi := &file_api_dispatcher_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} -type UpdateVolumeStatusRequest struct { - SessionID string `protobuf:"bytes,1,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"` - Updates []*UpdateVolumeStatusRequest_VolumeStatusUpdate `protobuf:"bytes,2,rep,name=updates,proto3" json:"updates,omitempty"` +func (x *UpdateVolumeStatusRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *UpdateVolumeStatusRequest) Reset() { *m = UpdateVolumeStatusRequest{} } func (*UpdateVolumeStatusRequest) ProtoMessage() {} -func (*UpdateVolumeStatusRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_71002346457e55a8, []int{6} -} -func (m *UpdateVolumeStatusRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *UpdateVolumeStatusRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_UpdateVolumeStatusRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *UpdateVolumeStatusRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_dispatcher_proto_msgTypes[6] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *UpdateVolumeStatusRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_UpdateVolumeStatusRequest.Merge(m, src) -} -func (m *UpdateVolumeStatusRequest) XXX_Size() int { - return m.Size() -} -func (m *UpdateVolumeStatusRequest) XXX_DiscardUnknown() { - xxx_messageInfo_UpdateVolumeStatusRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_UpdateVolumeStatusRequest proto.InternalMessageInfo -type UpdateVolumeStatusRequest_VolumeStatusUpdate struct { - // ID is the ID of the volume being updated. This is the Swarmkit ID, - // not the CSI VolumeID. - ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // Unpublished is set to true when the volume is affirmatively - // unpublished on the Node side. We don't need to report that a Volume - // is published on the the node; as soon as the Volume is assigned to - // the Node, we must assume that it has been published until informed - // otherwise. - // - // Further, the Node must not send unpublished = true unless it will - // definitely no longer attempt to call NodePublishVolume. - Unpublished bool `protobuf:"varint,2,opt,name=unpublished,proto3" json:"unpublished,omitempty"` +// Deprecated: Use UpdateVolumeStatusRequest.ProtoReflect.Descriptor instead. +func (*UpdateVolumeStatusRequest) Descriptor() ([]byte, []int) { + return file_api_dispatcher_proto_rawDescGZIP(), []int{6} } -func (m *UpdateVolumeStatusRequest_VolumeStatusUpdate) Reset() { - *m = UpdateVolumeStatusRequest_VolumeStatusUpdate{} -} -func (*UpdateVolumeStatusRequest_VolumeStatusUpdate) ProtoMessage() {} -func (*UpdateVolumeStatusRequest_VolumeStatusUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_71002346457e55a8, []int{6, 0} -} -func (m *UpdateVolumeStatusRequest_VolumeStatusUpdate) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *UpdateVolumeStatusRequest_VolumeStatusUpdate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_UpdateVolumeStatusRequest_VolumeStatusUpdate.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 (x *UpdateVolumeStatusRequest) GetSessionID() string { + if x != nil { + return x.SessionID } + return "" } -func (m *UpdateVolumeStatusRequest_VolumeStatusUpdate) XXX_Merge(src proto.Message) { - xxx_messageInfo_UpdateVolumeStatusRequest_VolumeStatusUpdate.Merge(m, src) -} -func (m *UpdateVolumeStatusRequest_VolumeStatusUpdate) XXX_Size() int { - return m.Size() + +func (x *UpdateVolumeStatusRequest) GetUpdates() []*UpdateVolumeStatusRequest_VolumeStatusUpdate { + if x != nil { + return x.Updates + } + return nil } -func (m *UpdateVolumeStatusRequest_VolumeStatusUpdate) XXX_DiscardUnknown() { - xxx_messageInfo_UpdateVolumeStatusRequest_VolumeStatusUpdate.DiscardUnknown(m) + +type UpdateVolumeStatusResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -var xxx_messageInfo_UpdateVolumeStatusRequest_VolumeStatusUpdate proto.InternalMessageInfo +func (x *UpdateVolumeStatusResponse) Reset() { + *x = UpdateVolumeStatusResponse{} + mi := &file_api_dispatcher_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} -type UpdateVolumeStatusResponse struct { +func (x *UpdateVolumeStatusResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *UpdateVolumeStatusResponse) Reset() { *m = UpdateVolumeStatusResponse{} } func (*UpdateVolumeStatusResponse) ProtoMessage() {} -func (*UpdateVolumeStatusResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_71002346457e55a8, []int{7} -} -func (m *UpdateVolumeStatusResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *UpdateVolumeStatusResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_UpdateVolumeStatusResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *UpdateVolumeStatusResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_dispatcher_proto_msgTypes[7] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *UpdateVolumeStatusResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_UpdateVolumeStatusResponse.Merge(m, src) -} -func (m *UpdateVolumeStatusResponse) XXX_Size() int { - return m.Size() + +// Deprecated: Use UpdateVolumeStatusResponse.ProtoReflect.Descriptor instead. +func (*UpdateVolumeStatusResponse) Descriptor() ([]byte, []int) { + return file_api_dispatcher_proto_rawDescGZIP(), []int{7} } -func (m *UpdateVolumeStatusResponse) XXX_DiscardUnknown() { - xxx_messageInfo_UpdateVolumeStatusResponse.DiscardUnknown(m) + +type TasksRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + SessionID string `protobuf:"bytes,1,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -var xxx_messageInfo_UpdateVolumeStatusResponse proto.InternalMessageInfo +func (x *TasksRequest) Reset() { + *x = TasksRequest{} + mi := &file_api_dispatcher_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} -type TasksRequest struct { - SessionID string `protobuf:"bytes,1,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"` +func (x *TasksRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *TasksRequest) Reset() { *m = TasksRequest{} } func (*TasksRequest) ProtoMessage() {} -func (*TasksRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_71002346457e55a8, []int{8} -} -func (m *TasksRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *TasksRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_TasksRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *TasksRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_dispatcher_proto_msgTypes[8] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *TasksRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_TasksRequest.Merge(m, src) -} -func (m *TasksRequest) XXX_Size() int { - return m.Size() -} -func (m *TasksRequest) XXX_DiscardUnknown() { - xxx_messageInfo_TasksRequest.DiscardUnknown(m) + +// Deprecated: Use TasksRequest.ProtoReflect.Descriptor instead. +func (*TasksRequest) Descriptor() ([]byte, []int) { + return file_api_dispatcher_proto_rawDescGZIP(), []int{8} } -var xxx_messageInfo_TasksRequest proto.InternalMessageInfo +func (x *TasksRequest) GetSessionID() string { + if x != nil { + return x.SessionID + } + return "" +} type TasksMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` // Tasks is the set of tasks that should be running on the node. // Tasks outside of this set running on the node should be terminated. - Tasks []*Task `protobuf:"bytes,1,rep,name=tasks,proto3" json:"tasks,omitempty"` + Tasks []*Task `protobuf:"bytes,1,rep,name=tasks,proto3" json:"tasks,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *TasksMessage) Reset() { + *x = TasksMessage{} + mi := &file_api_dispatcher_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *TasksMessage) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *TasksMessage) Reset() { *m = TasksMessage{} } func (*TasksMessage) ProtoMessage() {} -func (*TasksMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_71002346457e55a8, []int{9} -} -func (m *TasksMessage) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *TasksMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_TasksMessage.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *TasksMessage) ProtoReflect() protoreflect.Message { + mi := &file_api_dispatcher_proto_msgTypes[9] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *TasksMessage) XXX_Merge(src proto.Message) { - xxx_messageInfo_TasksMessage.Merge(m, src) + +// Deprecated: Use TasksMessage.ProtoReflect.Descriptor instead. +func (*TasksMessage) Descriptor() ([]byte, []int) { + return file_api_dispatcher_proto_rawDescGZIP(), []int{9} } -func (m *TasksMessage) XXX_Size() int { - return m.Size() + +func (x *TasksMessage) GetTasks() []*Task { + if x != nil { + return x.Tasks + } + return nil } -func (m *TasksMessage) XXX_DiscardUnknown() { - xxx_messageInfo_TasksMessage.DiscardUnknown(m) + +type AssignmentsRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + SessionID string `protobuf:"bytes,1,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -var xxx_messageInfo_TasksMessage proto.InternalMessageInfo +func (x *AssignmentsRequest) Reset() { + *x = AssignmentsRequest{} + mi := &file_api_dispatcher_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} -type AssignmentsRequest struct { - SessionID string `protobuf:"bytes,1,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"` +func (x *AssignmentsRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *AssignmentsRequest) Reset() { *m = AssignmentsRequest{} } func (*AssignmentsRequest) ProtoMessage() {} -func (*AssignmentsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_71002346457e55a8, []int{10} -} -func (m *AssignmentsRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *AssignmentsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_AssignmentsRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *AssignmentsRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_dispatcher_proto_msgTypes[10] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *AssignmentsRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_AssignmentsRequest.Merge(m, src) -} -func (m *AssignmentsRequest) XXX_Size() int { - return m.Size() -} -func (m *AssignmentsRequest) XXX_DiscardUnknown() { - xxx_messageInfo_AssignmentsRequest.DiscardUnknown(m) + +// Deprecated: Use AssignmentsRequest.ProtoReflect.Descriptor instead. +func (*AssignmentsRequest) Descriptor() ([]byte, []int) { + return file_api_dispatcher_proto_rawDescGZIP(), []int{10} } -var xxx_messageInfo_AssignmentsRequest proto.InternalMessageInfo +func (x *AssignmentsRequest) GetSessionID() string { + if x != nil { + return x.SessionID + } + return "" +} type Assignment struct { + state protoimpl.MessageState `protogen:"open.v1"` // Types that are valid to be assigned to Item: + // // *Assignment_Task // *Assignment_Secret // *Assignment_Config // *Assignment_Volume - Item isAssignment_Item `protobuf_oneof:"item"` + Item isAssignment_Item `protobuf_oneof:"item"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Assignment) Reset() { + *x = Assignment{} + mi := &file_api_dispatcher_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Assignment) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Assignment) Reset() { *m = Assignment{} } func (*Assignment) ProtoMessage() {} -func (*Assignment) Descriptor() ([]byte, []int) { - return fileDescriptor_71002346457e55a8, []int{11} -} -func (m *Assignment) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Assignment) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_Assignment.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *Assignment) ProtoReflect() protoreflect.Message { + mi := &file_api_dispatcher_proto_msgTypes[11] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Assignment.ProtoReflect.Descriptor instead. +func (*Assignment) Descriptor() ([]byte, []int) { + return file_api_dispatcher_proto_rawDescGZIP(), []int{11} +} + +func (x *Assignment) GetItem() isAssignment_Item { + if x != nil { + return x.Item } + return nil } -func (m *Assignment) XXX_Merge(src proto.Message) { - xxx_messageInfo_Assignment.Merge(m, src) + +func (x *Assignment) GetTask() *Task { + if x != nil { + if x, ok := x.Item.(*Assignment_Task); ok { + return x.Task + } + } + return nil } -func (m *Assignment) XXX_Size() int { - return m.Size() + +func (x *Assignment) GetSecret() *Secret { + if x != nil { + if x, ok := x.Item.(*Assignment_Secret); ok { + return x.Secret + } + } + return nil } -func (m *Assignment) XXX_DiscardUnknown() { - xxx_messageInfo_Assignment.DiscardUnknown(m) + +func (x *Assignment) GetConfig() *Config { + if x != nil { + if x, ok := x.Item.(*Assignment_Config); ok { + return x.Config + } + } + return nil } -var xxx_messageInfo_Assignment proto.InternalMessageInfo +func (x *Assignment) GetVolume() *VolumeAssignment { + if x != nil { + if x, ok := x.Item.(*Assignment_Volume); ok { + return x.Volume + } + } + return nil +} type isAssignment_Item interface { isAssignment_Item() - MarshalTo([]byte) (int, error) - Size() int } type Assignment_Task struct { - Task *Task `protobuf:"bytes,1,opt,name=task,proto3,oneof" json:"task,omitempty"` + Task *Task `protobuf:"bytes,1,opt,name=task,proto3,oneof"` } + type Assignment_Secret struct { - Secret *Secret `protobuf:"bytes,2,opt,name=secret,proto3,oneof" json:"secret,omitempty"` + Secret *Secret `protobuf:"bytes,2,opt,name=secret,proto3,oneof"` } + type Assignment_Config struct { - Config *Config `protobuf:"bytes,3,opt,name=config,proto3,oneof" json:"config,omitempty"` + Config *Config `protobuf:"bytes,3,opt,name=config,proto3,oneof"` } + type Assignment_Volume struct { - Volume *VolumeAssignment `protobuf:"bytes,4,opt,name=volume,proto3,oneof" json:"volume,omitempty"` + Volume *VolumeAssignment `protobuf:"bytes,4,opt,name=volume,proto3,oneof"` } -func (*Assignment_Task) isAssignment_Item() {} +func (*Assignment_Task) isAssignment_Item() {} + func (*Assignment_Secret) isAssignment_Item() {} + func (*Assignment_Config) isAssignment_Item() {} + func (*Assignment_Volume) isAssignment_Item() {} -func (m *Assignment) GetItem() isAssignment_Item { - if m != nil { - return m.Item - } - return nil +type AssignmentChange struct { + state protoimpl.MessageState `protogen:"open.v1"` + Assignment *Assignment `protobuf:"bytes,1,opt,name=assignment,proto3" json:"assignment,omitempty"` + Action AssignmentChange_AssignmentAction `protobuf:"varint,2,opt,name=action,proto3,enum=docker.swarmkit.v1.AssignmentChange_AssignmentAction" json:"action,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *Assignment) GetTask() *Task { - if x, ok := m.GetItem().(*Assignment_Task); ok { - return x.Task - } - return nil +func (x *AssignmentChange) Reset() { + *x = AssignmentChange{} + mi := &file_api_dispatcher_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *Assignment) GetSecret() *Secret { - if x, ok := m.GetItem().(*Assignment_Secret); ok { - return x.Secret - } - return nil +func (x *AssignmentChange) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Assignment) GetConfig() *Config { - if x, ok := m.GetItem().(*Assignment_Config); ok { - return x.Config - } - return nil -} +func (*AssignmentChange) ProtoMessage() {} -func (m *Assignment) GetVolume() *VolumeAssignment { - if x, ok := m.GetItem().(*Assignment_Volume); ok { - return x.Volume +func (x *AssignmentChange) ProtoReflect() protoreflect.Message { + mi := &file_api_dispatcher_proto_msgTypes[12] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -// XXX_OneofWrappers is for the internal use of the proto package. -func (*Assignment) XXX_OneofWrappers() []interface{} { - return []interface{}{ - (*Assignment_Task)(nil), - (*Assignment_Secret)(nil), - (*Assignment_Config)(nil), - (*Assignment_Volume)(nil), - } +// Deprecated: Use AssignmentChange.ProtoReflect.Descriptor instead. +func (*AssignmentChange) Descriptor() ([]byte, []int) { + return file_api_dispatcher_proto_rawDescGZIP(), []int{12} } -type AssignmentChange struct { - Assignment *Assignment `protobuf:"bytes,1,opt,name=assignment,proto3" json:"assignment,omitempty"` - Action AssignmentChange_AssignmentAction `protobuf:"varint,2,opt,name=action,proto3,enum=docker.swarmkit.v1.AssignmentChange_AssignmentAction" json:"action,omitempty"` +func (x *AssignmentChange) GetAssignment() *Assignment { + if x != nil { + return x.Assignment + } + return nil } -func (m *AssignmentChange) Reset() { *m = AssignmentChange{} } -func (*AssignmentChange) ProtoMessage() {} -func (*AssignmentChange) Descriptor() ([]byte, []int) { - return fileDescriptor_71002346457e55a8, []int{12} -} -func (m *AssignmentChange) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *AssignmentChange) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_AssignmentChange.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 (x *AssignmentChange) GetAction() AssignmentChange_AssignmentAction { + if x != nil { + return x.Action } + return AssignmentActionUpdate } -func (m *AssignmentChange) XXX_Merge(src proto.Message) { - xxx_messageInfo_AssignmentChange.Merge(m, src) -} -func (m *AssignmentChange) XXX_Size() int { - return m.Size() -} -func (m *AssignmentChange) XXX_DiscardUnknown() { - xxx_messageInfo_AssignmentChange.DiscardUnknown(m) -} - -var xxx_messageInfo_AssignmentChange proto.InternalMessageInfo type AssignmentsMessage struct { - Type AssignmentsMessage_Type `protobuf:"varint,1,opt,name=type,proto3,enum=docker.swarmkit.v1.AssignmentsMessage_Type" json:"type,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Type AssignmentsMessage_Type `protobuf:"varint,1,opt,name=type,proto3,enum=docker.swarmkit.v1.AssignmentsMessage_Type" json:"type,omitempty"` // AppliesTo references the previous ResultsIn value, to chain // incremental updates together. For the first update in a stream, // AppliesTo is empty. If AppliesTo does not match the previously @@ -802,4381 +883,384 @@ type AssignmentsMessage struct { // against missed messages. ResultsIn string `protobuf:"bytes,3,opt,name=results_in,json=resultsIn,proto3" json:"results_in,omitempty"` // AssignmentChange is a set of changes to apply on this node. - Changes []*AssignmentChange `protobuf:"bytes,4,rep,name=changes,proto3" json:"changes,omitempty"` -} - -func (m *AssignmentsMessage) Reset() { *m = AssignmentsMessage{} } -func (*AssignmentsMessage) ProtoMessage() {} -func (*AssignmentsMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_71002346457e55a8, []int{13} -} -func (m *AssignmentsMessage) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *AssignmentsMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_AssignmentsMessage.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 *AssignmentsMessage) XXX_Merge(src proto.Message) { - xxx_messageInfo_AssignmentsMessage.Merge(m, src) -} -func (m *AssignmentsMessage) XXX_Size() int { - return m.Size() -} -func (m *AssignmentsMessage) XXX_DiscardUnknown() { - xxx_messageInfo_AssignmentsMessage.DiscardUnknown(m) -} - -var xxx_messageInfo_AssignmentsMessage proto.InternalMessageInfo - -func init() { - proto.RegisterEnum("docker.swarmkit.v1.AssignmentChange_AssignmentAction", AssignmentChange_AssignmentAction_name, AssignmentChange_AssignmentAction_value) - proto.RegisterEnum("docker.swarmkit.v1.AssignmentsMessage_Type", AssignmentsMessage_Type_name, AssignmentsMessage_Type_value) - proto.RegisterType((*SessionRequest)(nil), "docker.swarmkit.v1.SessionRequest") - proto.RegisterType((*SessionMessage)(nil), "docker.swarmkit.v1.SessionMessage") - proto.RegisterType((*HeartbeatRequest)(nil), "docker.swarmkit.v1.HeartbeatRequest") - proto.RegisterType((*HeartbeatResponse)(nil), "docker.swarmkit.v1.HeartbeatResponse") - proto.RegisterType((*UpdateTaskStatusRequest)(nil), "docker.swarmkit.v1.UpdateTaskStatusRequest") - proto.RegisterType((*UpdateTaskStatusRequest_TaskStatusUpdate)(nil), "docker.swarmkit.v1.UpdateTaskStatusRequest.TaskStatusUpdate") - proto.RegisterType((*UpdateTaskStatusResponse)(nil), "docker.swarmkit.v1.UpdateTaskStatusResponse") - proto.RegisterType((*UpdateVolumeStatusRequest)(nil), "docker.swarmkit.v1.UpdateVolumeStatusRequest") - proto.RegisterType((*UpdateVolumeStatusRequest_VolumeStatusUpdate)(nil), "docker.swarmkit.v1.UpdateVolumeStatusRequest.VolumeStatusUpdate") - proto.RegisterType((*UpdateVolumeStatusResponse)(nil), "docker.swarmkit.v1.UpdateVolumeStatusResponse") - proto.RegisterType((*TasksRequest)(nil), "docker.swarmkit.v1.TasksRequest") - proto.RegisterType((*TasksMessage)(nil), "docker.swarmkit.v1.TasksMessage") - proto.RegisterType((*AssignmentsRequest)(nil), "docker.swarmkit.v1.AssignmentsRequest") - proto.RegisterType((*Assignment)(nil), "docker.swarmkit.v1.Assignment") - proto.RegisterType((*AssignmentChange)(nil), "docker.swarmkit.v1.AssignmentChange") - proto.RegisterType((*AssignmentsMessage)(nil), "docker.swarmkit.v1.AssignmentsMessage") -} - -func init() { - proto.RegisterFile("github.com/docker/swarmkit/api/dispatcher.proto", fileDescriptor_71002346457e55a8) -} - -var fileDescriptor_71002346457e55a8 = []byte{ - // 1138 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x56, 0xbf, 0x6f, 0xdb, 0x46, - 0x14, 0x16, 0x15, 0x85, 0xb6, 0x9e, 0x9c, 0x54, 0x3d, 0x04, 0xae, 0x42, 0x34, 0xb2, 0xca, 0x24, - 0x86, 0xd1, 0x38, 0x54, 0xaa, 0xfe, 0x1a, 0x1a, 0xb8, 0xb1, 0x2c, 0x01, 0x11, 0x12, 0x3b, 0xc6, - 0xc5, 0x71, 0x80, 0x2e, 0x06, 0x25, 0x5e, 0x68, 0x56, 0x12, 0x8f, 0xe5, 0x1d, 0x9d, 0x6a, 0x28, - 0xd0, 0xa1, 0x01, 0x8a, 0x4e, 0x41, 0x27, 0x03, 0x45, 0xff, 0x85, 0x2e, 0xfd, 0x27, 0x8c, 0x4e, - 0x19, 0x33, 0xb9, 0x8d, 0xbc, 0x17, 0x5d, 0xba, 0x74, 0x2a, 0x78, 0x3c, 0x4a, 0xaa, 0x4c, 0xd9, - 0xb2, 0x3b, 0x49, 0x7c, 0xf7, 0x7d, 0xef, 0x3e, 0x7e, 0xf7, 0xde, 0x3d, 0x42, 0xd9, 0x76, 0xf8, - 0x6e, 0xd0, 0x34, 0x5a, 0xb4, 0x5b, 0xb6, 0x68, 0xab, 0x4d, 0xfc, 0x32, 0x7b, 0x6e, 0xfa, 0xdd, - 0xb6, 0xc3, 0xcb, 0xa6, 0xe7, 0x94, 0x2d, 0x87, 0x79, 0x26, 0x6f, 0xed, 0x12, 0xdf, 0xf0, 0x7c, - 0xca, 0x29, 0x42, 0x11, 0xca, 0x88, 0x51, 0xc6, 0xde, 0x07, 0xda, 0xfb, 0xa7, 0x24, 0xe1, 0x3d, - 0x8f, 0xb0, 0x88, 0xaf, 0x2d, 0x9f, 0x82, 0xa5, 0xcd, 0x2f, 0x49, 0x8b, 0xc7, 0xe8, 0x2b, 0x36, - 0xb5, 0xa9, 0xf8, 0x5b, 0x0e, 0xff, 0xc9, 0xe8, 0xa7, 0x27, 0xe4, 0x10, 0x88, 0x66, 0xf0, 0xac, - 0xec, 0x75, 0x02, 0xdb, 0x71, 0xe5, 0x8f, 0x24, 0x16, 0x6d, 0x4a, 0xed, 0x0e, 0x19, 0x82, 0xac, - 0xc0, 0x37, 0xb9, 0x43, 0xe5, 0xba, 0xfe, 0x42, 0x81, 0xcb, 0x8f, 0x09, 0x63, 0x0e, 0x75, 0x31, - 0xf9, 0x2a, 0x20, 0x8c, 0xa3, 0x3a, 0xe4, 0x2c, 0xc2, 0x5a, 0xbe, 0xe3, 0x85, 0xb8, 0x82, 0x52, - 0x52, 0x96, 0x72, 0x95, 0xeb, 0xc6, 0x71, 0x17, 0x8c, 0x0d, 0x6a, 0x91, 0xda, 0x10, 0x8a, 0x47, - 0x79, 0x68, 0x19, 0x80, 0x45, 0x89, 0x77, 0x1c, 0xab, 0x90, 0x2e, 0x29, 0x4b, 0xd9, 0xea, 0xa5, - 0xfe, 0xe1, 0x42, 0x56, 0x6e, 0xd7, 0xa8, 0xe1, 0xac, 0x04, 0x34, 0x2c, 0xfd, 0xa7, 0xf4, 0x40, - 0xc7, 0x3a, 0x61, 0xcc, 0xb4, 0xc9, 0x58, 0x02, 0xe5, 0xe4, 0x04, 0x68, 0x19, 0x32, 0x2e, 0xb5, - 0x88, 0xd8, 0x28, 0x57, 0x29, 0x4c, 0x92, 0x8b, 0x05, 0x0a, 0xdd, 0x85, 0xd9, 0xae, 0xe9, 0x9a, - 0x36, 0xf1, 0x59, 0xe1, 0x42, 0xe9, 0xc2, 0x52, 0xae, 0x52, 0x4a, 0x62, 0x3c, 0x25, 0x8e, 0xbd, - 0xcb, 0x89, 0xb5, 0x49, 0x88, 0x8f, 0x07, 0x0c, 0xf4, 0x14, 0xe6, 0x5d, 0xc2, 0x9f, 0x53, 0xbf, - 0xbd, 0xd3, 0xa4, 0x94, 0x33, 0xee, 0x9b, 0xde, 0x4e, 0x9b, 0xf4, 0x58, 0x21, 0x23, 0x72, 0xbd, - 0x97, 0x94, 0xab, 0xee, 0xb6, 0xfc, 0x9e, 0xb0, 0xe6, 0x01, 0xe9, 0xe1, 0x2b, 0x32, 0x41, 0x35, - 0xe6, 0x3f, 0x20, 0x3d, 0x86, 0xe6, 0x41, 0xc5, 0x94, 0xf2, 0xb5, 0xd5, 0xc2, 0xc5, 0x92, 0xb2, - 0x34, 0x87, 0xe5, 0x93, 0x7e, 0x0f, 0xf2, 0xf7, 0x89, 0xe9, 0xf3, 0x26, 0x31, 0x79, 0x7c, 0x4c, - 0x67, 0xb2, 0x47, 0xdf, 0x84, 0xb7, 0x47, 0x32, 0x30, 0x8f, 0xba, 0x8c, 0xa0, 0xcf, 0x40, 0xf5, - 0x88, 0xef, 0x50, 0x4b, 0x1e, 0xf2, 0x55, 0x23, 0xaa, 0x16, 0x23, 0xae, 0x16, 0xa3, 0x26, 0xab, - 0xa5, 0x3a, 0x7b, 0x70, 0xb8, 0x90, 0xda, 0xff, 0x7d, 0x41, 0xc1, 0x92, 0xa2, 0xbf, 0x4c, 0xc3, - 0x3b, 0x4f, 0x3c, 0xcb, 0xe4, 0x64, 0xcb, 0x64, 0xed, 0xc7, 0xdc, 0xe4, 0x01, 0x3b, 0x97, 0x36, - 0xb4, 0x0d, 0x33, 0x81, 0x48, 0x14, 0x9f, 0xc5, 0xdd, 0x24, 0xff, 0x26, 0xec, 0x65, 0x0c, 0x23, - 0x11, 0x02, 0xc7, 0xc9, 0x34, 0x0a, 0xf9, 0xf1, 0x45, 0x74, 0x1d, 0x66, 0xb8, 0xc9, 0xda, 0x43, - 0x59, 0xd0, 0x3f, 0x5c, 0x50, 0x43, 0x58, 0xa3, 0x86, 0xd5, 0x70, 0xa9, 0x61, 0xa1, 0x4f, 0x40, - 0x65, 0x82, 0x24, 0xab, 0xa9, 0x98, 0xa4, 0x67, 0x44, 0x89, 0x44, 0xeb, 0x1a, 0x14, 0x8e, 0xab, - 0x8c, 0xbc, 0xd6, 0xff, 0x56, 0xe0, 0x6a, 0xb4, 0xb8, 0x4d, 0x3b, 0x41, 0x97, 0xfc, 0x1f, 0xc3, - 0xbe, 0x18, 0x1a, 0x96, 0x16, 0x86, 0xdd, 0x9b, 0x6c, 0x58, 0xc2, 0x6e, 0xc6, 0x68, 0x6c, 0xdc, - 0xb4, 0x0d, 0x40, 0xc7, 0x97, 0xd1, 0x3c, 0xa4, 0x07, 0xba, 0xd4, 0xfe, 0xe1, 0x42, 0xba, 0x51, - 0xc3, 0x69, 0xc7, 0x42, 0x25, 0xc8, 0x05, 0xae, 0x17, 0x34, 0x3b, 0x0e, 0xdb, 0x25, 0x51, 0x97, - 0xcf, 0xe2, 0xd1, 0x90, 0xfe, 0x2e, 0x68, 0x49, 0x42, 0xa4, 0x2b, 0x77, 0x61, 0x2e, 0xf4, 0xea, - 0x7c, 0x3e, 0xe8, 0x2b, 0x92, 0x1d, 0xdf, 0x18, 0x06, 0x5c, 0x0c, 0x4f, 0x90, 0x15, 0x14, 0xe1, - 0x4a, 0x61, 0xd2, 0xb1, 0xe1, 0x08, 0xa6, 0x57, 0x01, 0xad, 0x32, 0xe6, 0xd8, 0x6e, 0x97, 0xb8, - 0xfc, 0x9c, 0x1a, 0xfe, 0x52, 0x00, 0x86, 0x49, 0x90, 0x01, 0x99, 0x30, 0xb7, 0x6c, 0xa8, 0x89, - 0x0a, 0xee, 0xa7, 0xb0, 0xc0, 0xa1, 0x8f, 0x40, 0x65, 0xa4, 0xe5, 0x13, 0x2e, 0x4b, 0x4d, 0x4b, - 0x62, 0x3c, 0x16, 0x88, 0xfb, 0x29, 0x2c, 0xb1, 0x21, 0xab, 0x45, 0xdd, 0x67, 0x8e, 0x5d, 0xb8, - 0x30, 0x99, 0xb5, 0x26, 0x10, 0x21, 0x2b, 0xc2, 0xa2, 0x15, 0x50, 0xf7, 0xc4, 0x21, 0x14, 0x32, - 0x82, 0x75, 0x23, 0x89, 0x15, 0x1d, 0xd3, 0xf0, 0x8d, 0x42, 0x7e, 0xc4, 0xaa, 0xaa, 0x90, 0x71, - 0x38, 0xe9, 0xea, 0x2f, 0xd2, 0x90, 0x1f, 0x02, 0xd6, 0x76, 0x4d, 0xd7, 0x26, 0x68, 0x05, 0xc0, - 0x1c, 0xc4, 0xe4, 0xeb, 0x27, 0xf6, 0xcd, 0x90, 0x89, 0x47, 0x18, 0x68, 0x1d, 0x54, 0xb3, 0x25, - 0x06, 0x4e, 0x68, 0xc4, 0xe5, 0xca, 0xc7, 0x27, 0x73, 0xa3, 0x5d, 0x47, 0x02, 0xab, 0x82, 0x8c, - 0x65, 0x12, 0xbd, 0x39, 0x2a, 0x31, 0x5a, 0x43, 0x8b, 0xa0, 0x3e, 0xd9, 0xac, 0xad, 0x6e, 0xd5, - 0xf3, 0x29, 0x4d, 0xfb, 0xe1, 0xe7, 0xd2, 0xfc, 0x38, 0x42, 0x16, 0xfb, 0x22, 0xa8, 0xb8, 0xbe, - 0xfe, 0x68, 0xbb, 0x9e, 0x57, 0x92, 0x71, 0x98, 0x74, 0xe9, 0x1e, 0xd1, 0xff, 0x51, 0xfe, 0x53, - 0x3f, 0x71, 0x15, 0x7e, 0x0e, 0x99, 0x70, 0xfc, 0x0b, 0x0f, 0x2e, 0x57, 0x6e, 0x9d, 0xfc, 0x1e, - 0x31, 0xcb, 0xd8, 0xea, 0x79, 0x04, 0x0b, 0x22, 0xba, 0x06, 0x60, 0x7a, 0x5e, 0xc7, 0x21, 0x6c, - 0x87, 0xd3, 0x68, 0x72, 0xe2, 0xac, 0x8c, 0x6c, 0xd1, 0x70, 0xd9, 0x27, 0x2c, 0xe8, 0x70, 0xb6, - 0xe3, 0xb8, 0xa2, 0x00, 0xb2, 0x38, 0x2b, 0x23, 0x0d, 0x17, 0xad, 0xc0, 0x4c, 0x4b, 0x98, 0x13, - 0x4f, 0xa3, 0x1b, 0xd3, 0x38, 0x89, 0x63, 0x92, 0x7e, 0x13, 0x32, 0xa1, 0x16, 0x34, 0x07, 0xb3, - 0x6b, 0x8f, 0xd6, 0x37, 0x1f, 0xd6, 0x43, 0xbf, 0xd0, 0x5b, 0x90, 0x6b, 0x6c, 0xac, 0xe1, 0xfa, - 0x7a, 0x7d, 0x63, 0x6b, 0xf5, 0x61, 0x5e, 0xa9, 0xfc, 0xaa, 0x02, 0xd4, 0x06, 0x9f, 0x4a, 0xe8, - 0x6b, 0x98, 0x91, 0xed, 0x81, 0xf4, 0xe4, 0x12, 0x1e, 0xfd, 0xc6, 0xd0, 0x4e, 0xc2, 0x48, 0x47, - 0xf4, 0xeb, 0xbf, 0xfd, 0xf2, 0xe7, 0x7e, 0xfa, 0x1a, 0xcc, 0x09, 0xcc, 0xed, 0x70, 0x5a, 0x12, - 0x1f, 0x2e, 0x45, 0x4f, 0x72, 0x16, 0xdf, 0x51, 0xd0, 0x37, 0x90, 0x1d, 0x4c, 0x36, 0x94, 0xf8, - 0xae, 0xe3, 0xa3, 0x53, 0xbb, 0x79, 0x0a, 0x4a, 0x5e, 0x4e, 0xd3, 0x08, 0x40, 0x3f, 0x2a, 0x90, - 0x1f, 0xbf, 0xf4, 0xd1, 0xad, 0x33, 0x0c, 0x30, 0x6d, 0x79, 0x3a, 0xf0, 0x59, 0x44, 0xed, 0x2b, - 0x80, 0x8e, 0xdf, 0xba, 0xe8, 0xf6, 0x99, 0xc6, 0x84, 0x66, 0x4c, 0x0b, 0x3f, 0x8b, 0xb4, 0x00, - 0x2e, 0x8a, 0x3b, 0x1b, 0x95, 0x26, 0xdd, 0x8d, 0x83, 0xfd, 0x27, 0x23, 0xe2, 0x12, 0x59, 0x9c, - 0x62, 0xc7, 0xef, 0xd3, 0xca, 0x1d, 0x05, 0x7d, 0xa7, 0x40, 0x6e, 0xa4, 0xeb, 0xd0, 0xe2, 0x29, - 0x6d, 0x19, 0x6b, 0x58, 0x9c, 0xae, 0x7d, 0xa7, 0x2c, 0xd6, 0xea, 0x8d, 0x83, 0x37, 0xc5, 0xd4, - 0xeb, 0x37, 0xc5, 0xd4, 0xb7, 0xfd, 0xa2, 0x72, 0xd0, 0x2f, 0x2a, 0xaf, 0xfa, 0x45, 0xe5, 0x8f, - 0x7e, 0x51, 0x79, 0x79, 0x54, 0x4c, 0xbd, 0x3a, 0x2a, 0xa6, 0x5e, 0x1f, 0x15, 0x53, 0x4d, 0x55, - 0x7c, 0x7f, 0x7d, 0xf8, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x3b, 0xe2, 0x0b, 0xab, 0x0c, - 0x00, 0x00, -} - -type authenticatedWrapperDispatcherServer struct { - local DispatcherServer - authorize func(context.Context, []string) error -} - -func NewAuthenticatedWrapperDispatcherServer(local DispatcherServer, authorize func(context.Context, []string) error) DispatcherServer { - return &authenticatedWrapperDispatcherServer{ - local: local, - authorize: authorize, - } -} - -func (p *authenticatedWrapperDispatcherServer) Session(r *SessionRequest, stream Dispatcher_SessionServer) error { - - if err := p.authorize(stream.Context(), []string{"swarm-worker", "swarm-manager"}); err != nil { - return err - } - return p.local.Session(r, stream) -} - -func (p *authenticatedWrapperDispatcherServer) Heartbeat(ctx context.Context, r *HeartbeatRequest) (*HeartbeatResponse, error) { - - if err := p.authorize(ctx, []string{"swarm-worker", "swarm-manager"}); err != nil { - return nil, err - } - return p.local.Heartbeat(ctx, r) -} - -func (p *authenticatedWrapperDispatcherServer) UpdateTaskStatus(ctx context.Context, r *UpdateTaskStatusRequest) (*UpdateTaskStatusResponse, error) { - - if err := p.authorize(ctx, []string{"swarm-worker", "swarm-manager"}); err != nil { - return nil, err - } - return p.local.UpdateTaskStatus(ctx, r) -} - -func (p *authenticatedWrapperDispatcherServer) UpdateVolumeStatus(ctx context.Context, r *UpdateVolumeStatusRequest) (*UpdateVolumeStatusResponse, error) { - - if err := p.authorize(ctx, []string{"swarm-worker", "swarm-manager"}); err != nil { - return nil, err - } - return p.local.UpdateVolumeStatus(ctx, r) -} - -func (p *authenticatedWrapperDispatcherServer) Tasks(r *TasksRequest, stream Dispatcher_TasksServer) error { - - if err := p.authorize(stream.Context(), []string{"swarm-worker", "swarm-manager"}); err != nil { - return err - } - return p.local.Tasks(r, stream) -} - -func (p *authenticatedWrapperDispatcherServer) Assignments(r *AssignmentsRequest, stream Dispatcher_AssignmentsServer) error { - - if err := p.authorize(stream.Context(), []string{"swarm-worker", "swarm-manager"}); err != nil { - return err - } - return p.local.Assignments(r, stream) -} - -func (m *SessionRequest) Copy() *SessionRequest { - if m == nil { - return nil - } - o := &SessionRequest{} - o.CopyFrom(m) - return o -} - -func (m *SessionRequest) CopyFrom(src interface{}) { - - o := src.(*SessionRequest) - *m = *o - if o.Description != nil { - m.Description = &NodeDescription{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Description, o.Description) - } -} - -func (m *SessionMessage) Copy() *SessionMessage { - if m == nil { - return nil - } - o := &SessionMessage{} - o.CopyFrom(m) - return o -} - -func (m *SessionMessage) CopyFrom(src interface{}) { - - o := src.(*SessionMessage) - *m = *o - if o.Node != nil { - m.Node = &Node{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Node, o.Node) - } - if o.Managers != nil { - m.Managers = make([]*WeightedPeer, len(o.Managers)) - for i := range m.Managers { - m.Managers[i] = &WeightedPeer{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Managers[i], o.Managers[i]) - } - } - - if o.NetworkBootstrapKeys != nil { - m.NetworkBootstrapKeys = make([]*EncryptionKey, len(o.NetworkBootstrapKeys)) - for i := range m.NetworkBootstrapKeys { - m.NetworkBootstrapKeys[i] = &EncryptionKey{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.NetworkBootstrapKeys[i], o.NetworkBootstrapKeys[i]) - } - } - - if o.RootCA != nil { - m.RootCA = make([]byte, len(o.RootCA)) - copy(m.RootCA, o.RootCA) - } -} - -func (m *HeartbeatRequest) Copy() *HeartbeatRequest { - if m == nil { - return nil - } - o := &HeartbeatRequest{} - o.CopyFrom(m) - return o -} - -func (m *HeartbeatRequest) CopyFrom(src interface{}) { - - o := src.(*HeartbeatRequest) - *m = *o -} - -func (m *HeartbeatResponse) Copy() *HeartbeatResponse { - if m == nil { - return nil - } - o := &HeartbeatResponse{} - o.CopyFrom(m) - return o -} - -func (m *HeartbeatResponse) CopyFrom(src interface{}) { - - o := src.(*HeartbeatResponse) - *m = *o - github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Period, &o.Period) -} - -func (m *UpdateTaskStatusRequest) Copy() *UpdateTaskStatusRequest { - if m == nil { - return nil - } - o := &UpdateTaskStatusRequest{} - o.CopyFrom(m) - return o -} - -func (m *UpdateTaskStatusRequest) CopyFrom(src interface{}) { - - o := src.(*UpdateTaskStatusRequest) - *m = *o - if o.Updates != nil { - m.Updates = make([]*UpdateTaskStatusRequest_TaskStatusUpdate, len(o.Updates)) - for i := range m.Updates { - m.Updates[i] = &UpdateTaskStatusRequest_TaskStatusUpdate{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Updates[i], o.Updates[i]) - } - } - -} - -func (m *UpdateTaskStatusRequest_TaskStatusUpdate) Copy() *UpdateTaskStatusRequest_TaskStatusUpdate { - if m == nil { - return nil - } - o := &UpdateTaskStatusRequest_TaskStatusUpdate{} - o.CopyFrom(m) - return o -} - -func (m *UpdateTaskStatusRequest_TaskStatusUpdate) CopyFrom(src interface{}) { - - o := src.(*UpdateTaskStatusRequest_TaskStatusUpdate) - *m = *o - if o.Status != nil { - m.Status = &TaskStatus{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Status, o.Status) - } + Changes []*AssignmentChange `protobuf:"bytes,4,rep,name=changes,proto3" json:"changes,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *UpdateTaskStatusResponse) Copy() *UpdateTaskStatusResponse { - if m == nil { - return nil - } - o := &UpdateTaskStatusResponse{} - o.CopyFrom(m) - return o +func (x *AssignmentsMessage) Reset() { + *x = AssignmentsMessage{} + mi := &file_api_dispatcher_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *UpdateTaskStatusResponse) CopyFrom(src interface{}) {} -func (m *UpdateVolumeStatusRequest) Copy() *UpdateVolumeStatusRequest { - if m == nil { - return nil - } - o := &UpdateVolumeStatusRequest{} - o.CopyFrom(m) - return o +func (x *AssignmentsMessage) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *UpdateVolumeStatusRequest) CopyFrom(src interface{}) { +func (*AssignmentsMessage) ProtoMessage() {} - o := src.(*UpdateVolumeStatusRequest) - *m = *o - if o.Updates != nil { - m.Updates = make([]*UpdateVolumeStatusRequest_VolumeStatusUpdate, len(o.Updates)) - for i := range m.Updates { - m.Updates[i] = &UpdateVolumeStatusRequest_VolumeStatusUpdate{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Updates[i], o.Updates[i]) +func (x *AssignmentsMessage) ProtoReflect() protoreflect.Message { + mi := &file_api_dispatcher_proto_msgTypes[13] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } + return ms } - -} - -func (m *UpdateVolumeStatusRequest_VolumeStatusUpdate) Copy() *UpdateVolumeStatusRequest_VolumeStatusUpdate { - if m == nil { - return nil - } - o := &UpdateVolumeStatusRequest_VolumeStatusUpdate{} - o.CopyFrom(m) - return o -} - -func (m *UpdateVolumeStatusRequest_VolumeStatusUpdate) CopyFrom(src interface{}) { - - o := src.(*UpdateVolumeStatusRequest_VolumeStatusUpdate) - *m = *o -} - -func (m *UpdateVolumeStatusResponse) Copy() *UpdateVolumeStatusResponse { - if m == nil { - return nil - } - o := &UpdateVolumeStatusResponse{} - o.CopyFrom(m) - return o -} - -func (m *UpdateVolumeStatusResponse) CopyFrom(src interface{}) {} -func (m *TasksRequest) Copy() *TasksRequest { - if m == nil { - return nil - } - o := &TasksRequest{} - o.CopyFrom(m) - return o + return mi.MessageOf(x) } -func (m *TasksRequest) CopyFrom(src interface{}) { - - o := src.(*TasksRequest) - *m = *o +// Deprecated: Use AssignmentsMessage.ProtoReflect.Descriptor instead. +func (*AssignmentsMessage) Descriptor() ([]byte, []int) { + return file_api_dispatcher_proto_rawDescGZIP(), []int{13} } -func (m *TasksMessage) Copy() *TasksMessage { - if m == nil { - return nil +func (x *AssignmentsMessage) GetType() AssignmentsMessage_Type { + if x != nil { + return x.Type } - o := &TasksMessage{} - o.CopyFrom(m) - return o + return AssignmentsMessage_COMPLETE } -func (m *TasksMessage) CopyFrom(src interface{}) { - - o := src.(*TasksMessage) - *m = *o - if o.Tasks != nil { - m.Tasks = make([]*Task, len(o.Tasks)) - for i := range m.Tasks { - m.Tasks[i] = &Task{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Tasks[i], o.Tasks[i]) - } +func (x *AssignmentsMessage) GetAppliesTo() string { + if x != nil { + return x.AppliesTo } - + return "" } -func (m *AssignmentsRequest) Copy() *AssignmentsRequest { - if m == nil { - return nil +func (x *AssignmentsMessage) GetResultsIn() string { + if x != nil { + return x.ResultsIn } - o := &AssignmentsRequest{} - o.CopyFrom(m) - return o -} - -func (m *AssignmentsRequest) CopyFrom(src interface{}) { - - o := src.(*AssignmentsRequest) - *m = *o + return "" } -func (m *Assignment) Copy() *Assignment { - if m == nil { - return nil - } - o := &Assignment{} - o.CopyFrom(m) - return o -} - -func (m *Assignment) CopyFrom(src interface{}) { - - o := src.(*Assignment) - *m = *o - if o.Item != nil { - switch o.Item.(type) { - case *Assignment_Task: - v := Assignment_Task{ - Task: &Task{}, - } - github_com_moby_swarmkit_v2_api_deepcopy.Copy(v.Task, o.GetTask()) - m.Item = &v - case *Assignment_Secret: - v := Assignment_Secret{ - Secret: &Secret{}, - } - github_com_moby_swarmkit_v2_api_deepcopy.Copy(v.Secret, o.GetSecret()) - m.Item = &v - case *Assignment_Config: - v := Assignment_Config{ - Config: &Config{}, - } - github_com_moby_swarmkit_v2_api_deepcopy.Copy(v.Config, o.GetConfig()) - m.Item = &v - case *Assignment_Volume: - v := Assignment_Volume{ - Volume: &VolumeAssignment{}, - } - github_com_moby_swarmkit_v2_api_deepcopy.Copy(v.Volume, o.GetVolume()) - m.Item = &v - } +func (x *AssignmentsMessage) GetChanges() []*AssignmentChange { + if x != nil { + return x.Changes } - + return nil } -func (m *AssignmentChange) Copy() *AssignmentChange { - if m == nil { - return nil - } - o := &AssignmentChange{} - o.CopyFrom(m) - return o +type UpdateTaskStatusRequest_TaskStatusUpdate struct { + state protoimpl.MessageState `protogen:"open.v1"` + TaskID string `protobuf:"bytes,1,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"` + Status *TaskStatus `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *AssignmentChange) CopyFrom(src interface{}) { - - o := src.(*AssignmentChange) - *m = *o - if o.Assignment != nil { - m.Assignment = &Assignment{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Assignment, o.Assignment) - } +func (x *UpdateTaskStatusRequest_TaskStatusUpdate) Reset() { + *x = UpdateTaskStatusRequest_TaskStatusUpdate{} + mi := &file_api_dispatcher_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *AssignmentsMessage) Copy() *AssignmentsMessage { - if m == nil { - return nil - } - o := &AssignmentsMessage{} - o.CopyFrom(m) - return o +func (x *UpdateTaskStatusRequest_TaskStatusUpdate) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *AssignmentsMessage) CopyFrom(src interface{}) { +func (*UpdateTaskStatusRequest_TaskStatusUpdate) ProtoMessage() {} - o := src.(*AssignmentsMessage) - *m = *o - if o.Changes != nil { - m.Changes = make([]*AssignmentChange, len(o.Changes)) - for i := range m.Changes { - m.Changes[i] = &AssignmentChange{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Changes[i], o.Changes[i]) +func (x *UpdateTaskStatusRequest_TaskStatusUpdate) ProtoReflect() protoreflect.Message { + mi := &file_api_dispatcher_proto_msgTypes[14] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } + return ms } - -} - -// Reference imports to suppress errors if they are not otherwise used. -var _ context.Context -var _ grpc.ClientConn - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 - -// DispatcherClient is the client API for Dispatcher service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. -type DispatcherClient interface { - // Session starts an agent session with the dispatcher. The session is - // started after the first SessionMessage is received. - // - // Once started, the agent is controlled with a stream of SessionMessage. - // Agents should list on the stream at all times for instructions. - Session(ctx context.Context, in *SessionRequest, opts ...grpc.CallOption) (Dispatcher_SessionClient, error) - // Heartbeat is heartbeat method for nodes. It returns new TTL in response. - // Node should send new heartbeat earlier than now + TTL, otherwise it will - // be deregistered from dispatcher and its status will be updated to NodeStatus_DOWN - Heartbeat(ctx context.Context, in *HeartbeatRequest, opts ...grpc.CallOption) (*HeartbeatResponse, error) - // UpdateTaskStatus updates status of task. Node should send such updates - // on every status change of its tasks. - // - // Whether receiving batch updates or single status updates, this method - // should be accepting. Errors should only be returned if the entire update - // should be retried, due to data loss or other problems. - // - // If a task is unknown the dispatcher, the status update should be - // accepted regardless. - UpdateTaskStatus(ctx context.Context, in *UpdateTaskStatusRequest, opts ...grpc.CallOption) (*UpdateTaskStatusResponse, error) - // UpdateVolumeStatus updates the status of a Volume. Like - // UpdateTaskStatus, the node should send such updates on every status - // change of its volumes. - UpdateVolumeStatus(ctx context.Context, in *UpdateVolumeStatusRequest, opts ...grpc.CallOption) (*UpdateVolumeStatusResponse, error) - // Tasks is a stream of tasks state for node. Each message contains full list - // of tasks which should be run on node, if task is not present in that list, - // it should be terminated. - Tasks(ctx context.Context, in *TasksRequest, opts ...grpc.CallOption) (Dispatcher_TasksClient, error) - // Assignments is a stream of assignments such as tasks and secrets for node. - // The first message in the stream contains all of the tasks and secrets - // that are relevant to the node. Future messages in the stream are updates to - // the set of assignments. - Assignments(ctx context.Context, in *AssignmentsRequest, opts ...grpc.CallOption) (Dispatcher_AssignmentsClient, error) -} - -type dispatcherClient struct { - cc *grpc.ClientConn -} - -func NewDispatcherClient(cc *grpc.ClientConn) DispatcherClient { - return &dispatcherClient{cc} -} - -func (c *dispatcherClient) Session(ctx context.Context, in *SessionRequest, opts ...grpc.CallOption) (Dispatcher_SessionClient, error) { - stream, err := c.cc.NewStream(ctx, &_Dispatcher_serviceDesc.Streams[0], "/docker.swarmkit.v1.Dispatcher/Session", opts...) - if err != nil { - return nil, err - } - x := &dispatcherSessionClient{stream} - if err := x.ClientStream.SendMsg(in); err != nil { - return nil, err - } - if err := x.ClientStream.CloseSend(); err != nil { - return nil, err - } - return x, nil -} - -type Dispatcher_SessionClient interface { - Recv() (*SessionMessage, error) - grpc.ClientStream -} - -type dispatcherSessionClient struct { - grpc.ClientStream -} - -func (x *dispatcherSessionClient) Recv() (*SessionMessage, error) { - m := new(SessionMessage) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} - -func (c *dispatcherClient) Heartbeat(ctx context.Context, in *HeartbeatRequest, opts ...grpc.CallOption) (*HeartbeatResponse, error) { - out := new(HeartbeatResponse) - err := c.cc.Invoke(ctx, "/docker.swarmkit.v1.Dispatcher/Heartbeat", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *dispatcherClient) UpdateTaskStatus(ctx context.Context, in *UpdateTaskStatusRequest, opts ...grpc.CallOption) (*UpdateTaskStatusResponse, error) { - out := new(UpdateTaskStatusResponse) - err := c.cc.Invoke(ctx, "/docker.swarmkit.v1.Dispatcher/UpdateTaskStatus", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *dispatcherClient) UpdateVolumeStatus(ctx context.Context, in *UpdateVolumeStatusRequest, opts ...grpc.CallOption) (*UpdateVolumeStatusResponse, error) { - out := new(UpdateVolumeStatusResponse) - err := c.cc.Invoke(ctx, "/docker.swarmkit.v1.Dispatcher/UpdateVolumeStatus", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// Deprecated: Do not use. -func (c *dispatcherClient) Tasks(ctx context.Context, in *TasksRequest, opts ...grpc.CallOption) (Dispatcher_TasksClient, error) { - stream, err := c.cc.NewStream(ctx, &_Dispatcher_serviceDesc.Streams[1], "/docker.swarmkit.v1.Dispatcher/Tasks", opts...) - if err != nil { - return nil, err - } - x := &dispatcherTasksClient{stream} - if err := x.ClientStream.SendMsg(in); err != nil { - return nil, err - } - if err := x.ClientStream.CloseSend(); err != nil { - return nil, err - } - return x, nil -} - -type Dispatcher_TasksClient interface { - Recv() (*TasksMessage, error) - grpc.ClientStream -} - -type dispatcherTasksClient struct { - grpc.ClientStream + return mi.MessageOf(x) } -func (x *dispatcherTasksClient) Recv() (*TasksMessage, error) { - m := new(TasksMessage) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil +// Deprecated: Use UpdateTaskStatusRequest_TaskStatusUpdate.ProtoReflect.Descriptor instead. +func (*UpdateTaskStatusRequest_TaskStatusUpdate) Descriptor() ([]byte, []int) { + return file_api_dispatcher_proto_rawDescGZIP(), []int{4, 0} } -func (c *dispatcherClient) Assignments(ctx context.Context, in *AssignmentsRequest, opts ...grpc.CallOption) (Dispatcher_AssignmentsClient, error) { - stream, err := c.cc.NewStream(ctx, &_Dispatcher_serviceDesc.Streams[2], "/docker.swarmkit.v1.Dispatcher/Assignments", opts...) - if err != nil { - return nil, err - } - x := &dispatcherAssignmentsClient{stream} - if err := x.ClientStream.SendMsg(in); err != nil { - return nil, err +func (x *UpdateTaskStatusRequest_TaskStatusUpdate) GetTaskID() string { + if x != nil { + return x.TaskID } - if err := x.ClientStream.CloseSend(); err != nil { - return nil, err - } - return x, nil -} - -type Dispatcher_AssignmentsClient interface { - Recv() (*AssignmentsMessage, error) - grpc.ClientStream -} - -type dispatcherAssignmentsClient struct { - grpc.ClientStream + return "" } -func (x *dispatcherAssignmentsClient) Recv() (*AssignmentsMessage, error) { - m := new(AssignmentsMessage) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err +func (x *UpdateTaskStatusRequest_TaskStatusUpdate) GetStatus() *TaskStatus { + if x != nil { + return x.Status } - return m, nil + return nil } -// DispatcherServer is the server API for Dispatcher service. -type DispatcherServer interface { - // Session starts an agent session with the dispatcher. The session is - // started after the first SessionMessage is received. - // - // Once started, the agent is controlled with a stream of SessionMessage. - // Agents should list on the stream at all times for instructions. - Session(*SessionRequest, Dispatcher_SessionServer) error - // Heartbeat is heartbeat method for nodes. It returns new TTL in response. - // Node should send new heartbeat earlier than now + TTL, otherwise it will - // be deregistered from dispatcher and its status will be updated to NodeStatus_DOWN - Heartbeat(context.Context, *HeartbeatRequest) (*HeartbeatResponse, error) - // UpdateTaskStatus updates status of task. Node should send such updates - // on every status change of its tasks. - // - // Whether receiving batch updates or single status updates, this method - // should be accepting. Errors should only be returned if the entire update - // should be retried, due to data loss or other problems. +type UpdateVolumeStatusRequest_VolumeStatusUpdate struct { + state protoimpl.MessageState `protogen:"open.v1"` + // ID is the ID of the volume being updated. This is the Swarmkit ID, + // not the CSI VolumeID. + ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // Unpublished is set to true when the volume is affirmatively + // unpublished on the Node side. We don't need to report that a Volume + // is published on the the node; as soon as the Volume is assigned to + // the Node, we must assume that it has been published until informed + // otherwise. // - // If a task is unknown the dispatcher, the status update should be - // accepted regardless. - UpdateTaskStatus(context.Context, *UpdateTaskStatusRequest) (*UpdateTaskStatusResponse, error) - // UpdateVolumeStatus updates the status of a Volume. Like - // UpdateTaskStatus, the node should send such updates on every status - // change of its volumes. - UpdateVolumeStatus(context.Context, *UpdateVolumeStatusRequest) (*UpdateVolumeStatusResponse, error) - // Tasks is a stream of tasks state for node. Each message contains full list - // of tasks which should be run on node, if task is not present in that list, - // it should be terminated. - Tasks(*TasksRequest, Dispatcher_TasksServer) error - // Assignments is a stream of assignments such as tasks and secrets for node. - // The first message in the stream contains all of the tasks and secrets - // that are relevant to the node. Future messages in the stream are updates to - // the set of assignments. - Assignments(*AssignmentsRequest, Dispatcher_AssignmentsServer) error -} - -// UnimplementedDispatcherServer can be embedded to have forward compatible implementations. -type UnimplementedDispatcherServer struct { -} - -func (*UnimplementedDispatcherServer) Session(req *SessionRequest, srv Dispatcher_SessionServer) error { - return status.Errorf(codes.Unimplemented, "method Session not implemented") -} -func (*UnimplementedDispatcherServer) Heartbeat(ctx context.Context, req *HeartbeatRequest) (*HeartbeatResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Heartbeat not implemented") -} -func (*UnimplementedDispatcherServer) UpdateTaskStatus(ctx context.Context, req *UpdateTaskStatusRequest) (*UpdateTaskStatusResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateTaskStatus not implemented") -} -func (*UnimplementedDispatcherServer) UpdateVolumeStatus(ctx context.Context, req *UpdateVolumeStatusRequest) (*UpdateVolumeStatusResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateVolumeStatus not implemented") -} -func (*UnimplementedDispatcherServer) Tasks(req *TasksRequest, srv Dispatcher_TasksServer) error { - return status.Errorf(codes.Unimplemented, "method Tasks not implemented") -} -func (*UnimplementedDispatcherServer) Assignments(req *AssignmentsRequest, srv Dispatcher_AssignmentsServer) error { - return status.Errorf(codes.Unimplemented, "method Assignments not implemented") -} - -func RegisterDispatcherServer(s *grpc.Server, srv DispatcherServer) { - s.RegisterService(&_Dispatcher_serviceDesc, srv) -} - -func _Dispatcher_Session_Handler(srv interface{}, stream grpc.ServerStream) error { - m := new(SessionRequest) - if err := stream.RecvMsg(m); err != nil { - return err - } - return srv.(DispatcherServer).Session(m, &dispatcherSessionServer{stream}) -} - -type Dispatcher_SessionServer interface { - Send(*SessionMessage) error - grpc.ServerStream -} - -type dispatcherSessionServer struct { - grpc.ServerStream -} - -func (x *dispatcherSessionServer) Send(m *SessionMessage) error { - return x.ServerStream.SendMsg(m) + // Further, the Node must not send unpublished = true unless it will + // definitely no longer attempt to call NodePublishVolume. + Unpublished bool `protobuf:"varint,2,opt,name=unpublished,proto3" json:"unpublished,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func _Dispatcher_Heartbeat_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(HeartbeatRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(DispatcherServer).Heartbeat(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/docker.swarmkit.v1.Dispatcher/Heartbeat", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(DispatcherServer).Heartbeat(ctx, req.(*HeartbeatRequest)) - } - return interceptor(ctx, in, info, handler) +func (x *UpdateVolumeStatusRequest_VolumeStatusUpdate) Reset() { + *x = UpdateVolumeStatusRequest_VolumeStatusUpdate{} + mi := &file_api_dispatcher_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func _Dispatcher_UpdateTaskStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(UpdateTaskStatusRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(DispatcherServer).UpdateTaskStatus(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/docker.swarmkit.v1.Dispatcher/UpdateTaskStatus", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(DispatcherServer).UpdateTaskStatus(ctx, req.(*UpdateTaskStatusRequest)) - } - return interceptor(ctx, in, info, handler) +func (x *UpdateVolumeStatusRequest_VolumeStatusUpdate) String() string { + return protoimpl.X.MessageStringOf(x) } -func _Dispatcher_UpdateVolumeStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(UpdateVolumeStatusRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(DispatcherServer).UpdateVolumeStatus(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/docker.swarmkit.v1.Dispatcher/UpdateVolumeStatus", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(DispatcherServer).UpdateVolumeStatus(ctx, req.(*UpdateVolumeStatusRequest)) - } - return interceptor(ctx, in, info, handler) -} +func (*UpdateVolumeStatusRequest_VolumeStatusUpdate) ProtoMessage() {} -func _Dispatcher_Tasks_Handler(srv interface{}, stream grpc.ServerStream) error { - m := new(TasksRequest) - if err := stream.RecvMsg(m); err != nil { - return err +func (x *UpdateVolumeStatusRequest_VolumeStatusUpdate) ProtoReflect() protoreflect.Message { + mi := &file_api_dispatcher_proto_msgTypes[15] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return srv.(DispatcherServer).Tasks(m, &dispatcherTasksServer{stream}) + return mi.MessageOf(x) } -type Dispatcher_TasksServer interface { - Send(*TasksMessage) error - grpc.ServerStream -} - -type dispatcherTasksServer struct { - grpc.ServerStream -} +// Deprecated: Use UpdateVolumeStatusRequest_VolumeStatusUpdate.ProtoReflect.Descriptor instead. +func (*UpdateVolumeStatusRequest_VolumeStatusUpdate) Descriptor() ([]byte, []int) { + return file_api_dispatcher_proto_rawDescGZIP(), []int{6, 0} +} + +func (x *UpdateVolumeStatusRequest_VolumeStatusUpdate) GetID() string { + if x != nil { + return x.ID + } + return "" +} + +func (x *UpdateVolumeStatusRequest_VolumeStatusUpdate) GetUnpublished() bool { + if x != nil { + return x.Unpublished + } + return false +} + +var File_api_dispatcher_proto protoreflect.FileDescriptor + +const file_api_dispatcher_proto_rawDesc = "" + + "\n" + + "\x14api/dispatcher.proto\x12\x12docker.swarmkit.v1\x1a\x0fapi/types.proto\x1a\x11api/objects.proto\x1a\x1cprotobuf/plugin/plugin.proto\x1a\x1egoogle/protobuf/duration.proto\"v\n" + + "\x0eSessionRequest\x12E\n" + + "\vdescription\x18\x01 \x01(\v2#.docker.swarmkit.v1.NodeDescriptionR\vdescription\x12\x1d\n" + + "\n" + + "session_id\x18\x02 \x01(\tR\tsessionId\"\x8c\x02\n" + + "\x0eSessionMessage\x12\x1d\n" + + "\n" + + "session_id\x18\x01 \x01(\tR\tsessionId\x12,\n" + + "\x04node\x18\x02 \x01(\v2\x18.docker.swarmkit.v1.NodeR\x04node\x12<\n" + + "\bmanagers\x18\x03 \x03(\v2 .docker.swarmkit.v1.WeightedPeerR\bmanagers\x12W\n" + + "\x16network_bootstrap_keys\x18\x04 \x03(\v2!.docker.swarmkit.v1.EncryptionKeyR\x14networkBootstrapKeys\x12\x16\n" + + "\x06RootCA\x18\x05 \x01(\fR\x06RootCA\"1\n" + + "\x10HeartbeatRequest\x12\x1d\n" + + "\n" + + "session_id\x18\x01 \x01(\tR\tsessionId\"F\n" + + "\x11HeartbeatResponse\x121\n" + + "\x06period\x18\x01 \x01(\v2\x19.google.protobuf.DurationR\x06period\"\xf5\x01\n" + + "\x17UpdateTaskStatusRequest\x12\x1d\n" + + "\n" + + "session_id\x18\x01 \x01(\tR\tsessionId\x12V\n" + + "\aupdates\x18\x03 \x03(\v2<.docker.swarmkit.v1.UpdateTaskStatusRequest.TaskStatusUpdateR\aupdates\x1ac\n" + + "\x10TaskStatusUpdate\x12\x17\n" + + "\atask_id\x18\x01 \x01(\tR\x06taskId\x126\n" + + "\x06status\x18\x02 \x01(\v2\x1e.docker.swarmkit.v1.TaskStatusR\x06status\"\x1a\n" + + "\x18UpdateTaskStatusResponse\"\xde\x01\n" + + "\x19UpdateVolumeStatusRequest\x12\x1d\n" + + "\n" + + "session_id\x18\x01 \x01(\tR\tsessionId\x12Z\n" + + "\aupdates\x18\x02 \x03(\v2@.docker.swarmkit.v1.UpdateVolumeStatusRequest.VolumeStatusUpdateR\aupdates\x1aF\n" + + "\x12VolumeStatusUpdate\x12\x0e\n" + + "\x02id\x18\x01 \x01(\tR\x02id\x12 \n" + + "\vunpublished\x18\x02 \x01(\bR\vunpublished\"\x1c\n" + + "\x1aUpdateVolumeStatusResponse\"-\n" + + "\fTasksRequest\x12\x1d\n" + + "\n" + + "session_id\x18\x01 \x01(\tR\tsessionId\">\n" + + "\fTasksMessage\x12.\n" + + "\x05tasks\x18\x01 \x03(\v2\x18.docker.swarmkit.v1.TaskR\x05tasks\"3\n" + + "\x12AssignmentsRequest\x12\x1d\n" + + "\n" + + "session_id\x18\x01 \x01(\tR\tsessionId\"\xf0\x01\n" + + "\n" + + "Assignment\x12.\n" + + "\x04task\x18\x01 \x01(\v2\x18.docker.swarmkit.v1.TaskH\x00R\x04task\x124\n" + + "\x06secret\x18\x02 \x01(\v2\x1a.docker.swarmkit.v1.SecretH\x00R\x06secret\x124\n" + + "\x06config\x18\x03 \x01(\v2\x1a.docker.swarmkit.v1.ConfigH\x00R\x06config\x12>\n" + + "\x06volume\x18\x04 \x01(\v2$.docker.swarmkit.v1.VolumeAssignmentH\x00R\x06volumeB\x06\n" + + "\x04item\"\x85\x02\n" + + "\x10AssignmentChange\x12>\n" + + "\n" + + "assignment\x18\x01 \x01(\v2\x1e.docker.swarmkit.v1.AssignmentR\n" + + "assignment\x12M\n" + + "\x06action\x18\x02 \x01(\x0e25.docker.swarmkit.v1.AssignmentChange.AssignmentActionR\x06action\"b\n" + + "\x10AssignmentAction\x12&\n" + + "\x06UPDATE\x10\x00\x1a\x1a\xa2\x97\"\x16AssignmentActionUpdate\x12&\n" + + "\x06REMOVE\x10\x01\x1a\x1a\xa2\x97\"\x16AssignmentActionRemove\"\xfa\x01\n" + + "\x12AssignmentsMessage\x12?\n" + + "\x04type\x18\x01 \x01(\x0e2+.docker.swarmkit.v1.AssignmentsMessage.TypeR\x04type\x12\x1d\n" + + "\n" + + "applies_to\x18\x02 \x01(\tR\tappliesTo\x12\x1d\n" + + "\n" + + "results_in\x18\x03 \x01(\tR\tresultsIn\x12>\n" + + "\achanges\x18\x04 \x03(\v2$.docker.swarmkit.v1.AssignmentChangeR\achanges\"%\n" + + "\x04Type\x12\f\n" + + "\bCOMPLETE\x10\x00\x12\x0f\n" + + "\vINCREMENTAL\x10\x012\xb3\x06\n" + + "\n" + + "Dispatcher\x12x\n" + + "\aSession\x12\".docker.swarmkit.v1.SessionRequest\x1a\".docker.swarmkit.v1.SessionMessage\"#ʮ\xee\x98\x02\x1d\n" + + "\fswarm-worker\n" + + "\rswarm-manager0\x01\x12}\n" + + "\tHeartbeat\x12$.docker.swarmkit.v1.HeartbeatRequest\x1a%.docker.swarmkit.v1.HeartbeatResponse\"#ʮ\xee\x98\x02\x1d\n" + + "\fswarm-worker\n" + + "\rswarm-manager\x12\x92\x01\n" + + "\x10UpdateTaskStatus\x12+.docker.swarmkit.v1.UpdateTaskStatusRequest\x1a,.docker.swarmkit.v1.UpdateTaskStatusResponse\"#ʮ\xee\x98\x02\x1d\n" + + "\fswarm-worker\n" + + "\rswarm-manager\x12\x98\x01\n" + + "\x12UpdateVolumeStatus\x12-.docker.swarmkit.v1.UpdateVolumeStatusRequest\x1a..docker.swarmkit.v1.UpdateVolumeStatusResponse\"#ʮ\xee\x98\x02\x1d\n" + + "\fswarm-worker\n" + + "\rswarm-manager\x12u\n" + + "\x05Tasks\x12 .docker.swarmkit.v1.TasksRequest\x1a .docker.swarmkit.v1.TasksMessage\"&ʮ\xee\x98\x02\x1d\n" + + "\fswarm-worker\n" + + "\rswarm-manager\x88\x02\x010\x01\x12\x84\x01\n" + + "\vAssignments\x12&.docker.swarmkit.v1.AssignmentsRequest\x1a&.docker.swarmkit.v1.AssignmentsMessage\"#ʮ\xee\x98\x02\x1d\n" + + "\fswarm-worker\n" + + "\rswarm-manager0\x01B!Z\x1fgithub.com/moby/swarmkit/v2/apib\x06proto3" -func (x *dispatcherTasksServer) Send(m *TasksMessage) error { - return x.ServerStream.SendMsg(m) -} +var ( + file_api_dispatcher_proto_rawDescOnce sync.Once + file_api_dispatcher_proto_rawDescData []byte +) -func _Dispatcher_Assignments_Handler(srv interface{}, stream grpc.ServerStream) error { - m := new(AssignmentsRequest) - if err := stream.RecvMsg(m); err != nil { - return err +func file_api_dispatcher_proto_rawDescGZIP() []byte { + file_api_dispatcher_proto_rawDescOnce.Do(func() { + file_api_dispatcher_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_api_dispatcher_proto_rawDesc), len(file_api_dispatcher_proto_rawDesc))) + }) + return file_api_dispatcher_proto_rawDescData +} + +var file_api_dispatcher_proto_enumTypes = make([]protoimpl.EnumInfo, 2) +var file_api_dispatcher_proto_msgTypes = make([]protoimpl.MessageInfo, 16) +var file_api_dispatcher_proto_goTypes = []any{ + (AssignmentChange_AssignmentAction)(0), // 0: docker.swarmkit.v1.AssignmentChange.AssignmentAction + (AssignmentsMessage_Type)(0), // 1: docker.swarmkit.v1.AssignmentsMessage.Type + (*SessionRequest)(nil), // 2: docker.swarmkit.v1.SessionRequest + (*SessionMessage)(nil), // 3: docker.swarmkit.v1.SessionMessage + (*HeartbeatRequest)(nil), // 4: docker.swarmkit.v1.HeartbeatRequest + (*HeartbeatResponse)(nil), // 5: docker.swarmkit.v1.HeartbeatResponse + (*UpdateTaskStatusRequest)(nil), // 6: docker.swarmkit.v1.UpdateTaskStatusRequest + (*UpdateTaskStatusResponse)(nil), // 7: docker.swarmkit.v1.UpdateTaskStatusResponse + (*UpdateVolumeStatusRequest)(nil), // 8: docker.swarmkit.v1.UpdateVolumeStatusRequest + (*UpdateVolumeStatusResponse)(nil), // 9: docker.swarmkit.v1.UpdateVolumeStatusResponse + (*TasksRequest)(nil), // 10: docker.swarmkit.v1.TasksRequest + (*TasksMessage)(nil), // 11: docker.swarmkit.v1.TasksMessage + (*AssignmentsRequest)(nil), // 12: docker.swarmkit.v1.AssignmentsRequest + (*Assignment)(nil), // 13: docker.swarmkit.v1.Assignment + (*AssignmentChange)(nil), // 14: docker.swarmkit.v1.AssignmentChange + (*AssignmentsMessage)(nil), // 15: docker.swarmkit.v1.AssignmentsMessage + (*UpdateTaskStatusRequest_TaskStatusUpdate)(nil), // 16: docker.swarmkit.v1.UpdateTaskStatusRequest.TaskStatusUpdate + (*UpdateVolumeStatusRequest_VolumeStatusUpdate)(nil), // 17: docker.swarmkit.v1.UpdateVolumeStatusRequest.VolumeStatusUpdate + (*NodeDescription)(nil), // 18: docker.swarmkit.v1.NodeDescription + (*Node)(nil), // 19: docker.swarmkit.v1.Node + (*WeightedPeer)(nil), // 20: docker.swarmkit.v1.WeightedPeer + (*EncryptionKey)(nil), // 21: docker.swarmkit.v1.EncryptionKey + (*durationpb.Duration)(nil), // 22: google.protobuf.Duration + (*Task)(nil), // 23: docker.swarmkit.v1.Task + (*Secret)(nil), // 24: docker.swarmkit.v1.Secret + (*Config)(nil), // 25: docker.swarmkit.v1.Config + (*VolumeAssignment)(nil), // 26: docker.swarmkit.v1.VolumeAssignment + (*TaskStatus)(nil), // 27: docker.swarmkit.v1.TaskStatus +} +var file_api_dispatcher_proto_depIdxs = []int32{ + 18, // 0: docker.swarmkit.v1.SessionRequest.description:type_name -> docker.swarmkit.v1.NodeDescription + 19, // 1: docker.swarmkit.v1.SessionMessage.node:type_name -> docker.swarmkit.v1.Node + 20, // 2: docker.swarmkit.v1.SessionMessage.managers:type_name -> docker.swarmkit.v1.WeightedPeer + 21, // 3: docker.swarmkit.v1.SessionMessage.network_bootstrap_keys:type_name -> docker.swarmkit.v1.EncryptionKey + 22, // 4: docker.swarmkit.v1.HeartbeatResponse.period:type_name -> google.protobuf.Duration + 16, // 5: docker.swarmkit.v1.UpdateTaskStatusRequest.updates:type_name -> docker.swarmkit.v1.UpdateTaskStatusRequest.TaskStatusUpdate + 17, // 6: docker.swarmkit.v1.UpdateVolumeStatusRequest.updates:type_name -> docker.swarmkit.v1.UpdateVolumeStatusRequest.VolumeStatusUpdate + 23, // 7: docker.swarmkit.v1.TasksMessage.tasks:type_name -> docker.swarmkit.v1.Task + 23, // 8: docker.swarmkit.v1.Assignment.task:type_name -> docker.swarmkit.v1.Task + 24, // 9: docker.swarmkit.v1.Assignment.secret:type_name -> docker.swarmkit.v1.Secret + 25, // 10: docker.swarmkit.v1.Assignment.config:type_name -> docker.swarmkit.v1.Config + 26, // 11: docker.swarmkit.v1.Assignment.volume:type_name -> docker.swarmkit.v1.VolumeAssignment + 13, // 12: docker.swarmkit.v1.AssignmentChange.assignment:type_name -> docker.swarmkit.v1.Assignment + 0, // 13: docker.swarmkit.v1.AssignmentChange.action:type_name -> docker.swarmkit.v1.AssignmentChange.AssignmentAction + 1, // 14: docker.swarmkit.v1.AssignmentsMessage.type:type_name -> docker.swarmkit.v1.AssignmentsMessage.Type + 14, // 15: docker.swarmkit.v1.AssignmentsMessage.changes:type_name -> docker.swarmkit.v1.AssignmentChange + 27, // 16: docker.swarmkit.v1.UpdateTaskStatusRequest.TaskStatusUpdate.status:type_name -> docker.swarmkit.v1.TaskStatus + 2, // 17: docker.swarmkit.v1.Dispatcher.Session:input_type -> docker.swarmkit.v1.SessionRequest + 4, // 18: docker.swarmkit.v1.Dispatcher.Heartbeat:input_type -> docker.swarmkit.v1.HeartbeatRequest + 6, // 19: docker.swarmkit.v1.Dispatcher.UpdateTaskStatus:input_type -> docker.swarmkit.v1.UpdateTaskStatusRequest + 8, // 20: docker.swarmkit.v1.Dispatcher.UpdateVolumeStatus:input_type -> docker.swarmkit.v1.UpdateVolumeStatusRequest + 10, // 21: docker.swarmkit.v1.Dispatcher.Tasks:input_type -> docker.swarmkit.v1.TasksRequest + 12, // 22: docker.swarmkit.v1.Dispatcher.Assignments:input_type -> docker.swarmkit.v1.AssignmentsRequest + 3, // 23: docker.swarmkit.v1.Dispatcher.Session:output_type -> docker.swarmkit.v1.SessionMessage + 5, // 24: docker.swarmkit.v1.Dispatcher.Heartbeat:output_type -> docker.swarmkit.v1.HeartbeatResponse + 7, // 25: docker.swarmkit.v1.Dispatcher.UpdateTaskStatus:output_type -> docker.swarmkit.v1.UpdateTaskStatusResponse + 9, // 26: docker.swarmkit.v1.Dispatcher.UpdateVolumeStatus:output_type -> docker.swarmkit.v1.UpdateVolumeStatusResponse + 11, // 27: docker.swarmkit.v1.Dispatcher.Tasks:output_type -> docker.swarmkit.v1.TasksMessage + 15, // 28: docker.swarmkit.v1.Dispatcher.Assignments:output_type -> docker.swarmkit.v1.AssignmentsMessage + 23, // [23:29] is the sub-list for method output_type + 17, // [17:23] 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 +} + +func init() { file_api_dispatcher_proto_init() } +func file_api_dispatcher_proto_init() { + if File_api_dispatcher_proto != nil { + return + } + file_api_types_proto_init() + file_api_objects_proto_init() + file_api_dispatcher_proto_msgTypes[11].OneofWrappers = []any{ + (*Assignment_Task)(nil), + (*Assignment_Secret)(nil), + (*Assignment_Config)(nil), + (*Assignment_Volume)(nil), } - return srv.(DispatcherServer).Assignments(m, &dispatcherAssignmentsServer{stream}) -} - -type Dispatcher_AssignmentsServer interface { - Send(*AssignmentsMessage) error - grpc.ServerStream -} - -type dispatcherAssignmentsServer struct { - grpc.ServerStream -} - -func (x *dispatcherAssignmentsServer) Send(m *AssignmentsMessage) error { - return x.ServerStream.SendMsg(m) -} - -var _Dispatcher_serviceDesc = grpc.ServiceDesc{ - ServiceName: "docker.swarmkit.v1.Dispatcher", - HandlerType: (*DispatcherServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "Heartbeat", - Handler: _Dispatcher_Heartbeat_Handler, - }, - { - MethodName: "UpdateTaskStatus", - Handler: _Dispatcher_UpdateTaskStatus_Handler, + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_api_dispatcher_proto_rawDesc), len(file_api_dispatcher_proto_rawDesc)), + NumEnums: 2, + NumMessages: 16, + NumExtensions: 0, + NumServices: 1, }, - { - MethodName: "UpdateVolumeStatus", - Handler: _Dispatcher_UpdateVolumeStatus_Handler, - }, - }, - Streams: []grpc.StreamDesc{ - { - StreamName: "Session", - Handler: _Dispatcher_Session_Handler, - ServerStreams: true, - }, - { - StreamName: "Tasks", - Handler: _Dispatcher_Tasks_Handler, - ServerStreams: true, - }, - { - StreamName: "Assignments", - Handler: _Dispatcher_Assignments_Handler, - ServerStreams: true, - }, - }, - Metadata: "github.com/docker/swarmkit/api/dispatcher.proto", -} - -func (m *SessionRequest) 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 *SessionRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *SessionRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.SessionID) > 0 { - i -= len(m.SessionID) - copy(dAtA[i:], m.SessionID) - i = encodeVarintDispatcher(dAtA, i, uint64(len(m.SessionID))) - i-- - dAtA[i] = 0x12 - } - if m.Description != nil { - { - size, err := m.Description.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintDispatcher(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *SessionMessage) 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 *SessionMessage) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) + GoTypes: file_api_dispatcher_proto_goTypes, + DependencyIndexes: file_api_dispatcher_proto_depIdxs, + EnumInfos: file_api_dispatcher_proto_enumTypes, + MessageInfos: file_api_dispatcher_proto_msgTypes, + }.Build() + File_api_dispatcher_proto = out.File + file_api_dispatcher_proto_goTypes = nil + file_api_dispatcher_proto_depIdxs = nil } - -func (m *SessionMessage) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.RootCA) > 0 { - i -= len(m.RootCA) - copy(dAtA[i:], m.RootCA) - i = encodeVarintDispatcher(dAtA, i, uint64(len(m.RootCA))) - i-- - dAtA[i] = 0x2a - } - if len(m.NetworkBootstrapKeys) > 0 { - for iNdEx := len(m.NetworkBootstrapKeys) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.NetworkBootstrapKeys[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintDispatcher(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - } - } - if len(m.Managers) > 0 { - for iNdEx := len(m.Managers) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Managers[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintDispatcher(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - } - } - if m.Node != nil { - { - size, err := m.Node.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintDispatcher(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - if len(m.SessionID) > 0 { - i -= len(m.SessionID) - copy(dAtA[i:], m.SessionID) - i = encodeVarintDispatcher(dAtA, i, uint64(len(m.SessionID))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *HeartbeatRequest) 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 *HeartbeatRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *HeartbeatRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.SessionID) > 0 { - i -= len(m.SessionID) - copy(dAtA[i:], m.SessionID) - i = encodeVarintDispatcher(dAtA, i, uint64(len(m.SessionID))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *HeartbeatResponse) 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 *HeartbeatResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *HeartbeatResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - n3, err3 := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.Period, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdDuration(m.Period):]) - if err3 != nil { - return 0, err3 - } - i -= n3 - i = encodeVarintDispatcher(dAtA, i, uint64(n3)) - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *UpdateTaskStatusRequest) 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 *UpdateTaskStatusRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *UpdateTaskStatusRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Updates) > 0 { - for iNdEx := len(m.Updates) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Updates[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintDispatcher(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - } - } - if len(m.SessionID) > 0 { - i -= len(m.SessionID) - copy(dAtA[i:], m.SessionID) - i = encodeVarintDispatcher(dAtA, i, uint64(len(m.SessionID))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *UpdateTaskStatusRequest_TaskStatusUpdate) 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 *UpdateTaskStatusRequest_TaskStatusUpdate) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *UpdateTaskStatusRequest_TaskStatusUpdate) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Status != nil { - { - size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintDispatcher(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - if len(m.TaskID) > 0 { - i -= len(m.TaskID) - copy(dAtA[i:], m.TaskID) - i = encodeVarintDispatcher(dAtA, i, uint64(len(m.TaskID))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *UpdateTaskStatusResponse) 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 *UpdateTaskStatusResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *UpdateTaskStatusResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil -} - -func (m *UpdateVolumeStatusRequest) 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 *UpdateVolumeStatusRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *UpdateVolumeStatusRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Updates) > 0 { - for iNdEx := len(m.Updates) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Updates[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintDispatcher(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - } - if len(m.SessionID) > 0 { - i -= len(m.SessionID) - copy(dAtA[i:], m.SessionID) - i = encodeVarintDispatcher(dAtA, i, uint64(len(m.SessionID))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *UpdateVolumeStatusRequest_VolumeStatusUpdate) 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 *UpdateVolumeStatusRequest_VolumeStatusUpdate) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *UpdateVolumeStatusRequest_VolumeStatusUpdate) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Unpublished { - i-- - if m.Unpublished { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x10 - } - if len(m.ID) > 0 { - i -= len(m.ID) - copy(dAtA[i:], m.ID) - i = encodeVarintDispatcher(dAtA, i, uint64(len(m.ID))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *UpdateVolumeStatusResponse) 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 *UpdateVolumeStatusResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *UpdateVolumeStatusResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil -} - -func (m *TasksRequest) 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 *TasksRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *TasksRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.SessionID) > 0 { - i -= len(m.SessionID) - copy(dAtA[i:], m.SessionID) - i = encodeVarintDispatcher(dAtA, i, uint64(len(m.SessionID))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *TasksMessage) 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 *TasksMessage) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *TasksMessage) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Tasks) > 0 { - for iNdEx := len(m.Tasks) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Tasks[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintDispatcher(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func (m *AssignmentsRequest) 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 *AssignmentsRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *AssignmentsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.SessionID) > 0 { - i -= len(m.SessionID) - copy(dAtA[i:], m.SessionID) - i = encodeVarintDispatcher(dAtA, i, uint64(len(m.SessionID))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *Assignment) 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 *Assignment) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *Assignment) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Item != nil { - { - size := m.Item.Size() - i -= size - if _, err := m.Item.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - } - } - return len(dAtA) - i, nil -} - -func (m *Assignment_Task) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *Assignment_Task) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - if m.Task != nil { - { - size, err := m.Task.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintDispatcher(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} -func (m *Assignment_Secret) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *Assignment_Secret) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - if m.Secret != nil { - { - size, err := m.Secret.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintDispatcher(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - return len(dAtA) - i, nil -} -func (m *Assignment_Config) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *Assignment_Config) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - if m.Config != nil { - { - size, err := m.Config.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintDispatcher(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - } - return len(dAtA) - i, nil -} -func (m *Assignment_Volume) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *Assignment_Volume) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - if m.Volume != nil { - { - size, err := m.Volume.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintDispatcher(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - } - return len(dAtA) - i, nil -} -func (m *AssignmentChange) 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 *AssignmentChange) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *AssignmentChange) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Action != 0 { - i = encodeVarintDispatcher(dAtA, i, uint64(m.Action)) - i-- - dAtA[i] = 0x10 - } - if m.Assignment != nil { - { - size, err := m.Assignment.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintDispatcher(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *AssignmentsMessage) 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 *AssignmentsMessage) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *AssignmentsMessage) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Changes) > 0 { - for iNdEx := len(m.Changes) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Changes[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintDispatcher(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - } - } - if len(m.ResultsIn) > 0 { - i -= len(m.ResultsIn) - copy(dAtA[i:], m.ResultsIn) - i = encodeVarintDispatcher(dAtA, i, uint64(len(m.ResultsIn))) - i-- - dAtA[i] = 0x1a - } - if len(m.AppliesTo) > 0 { - i -= len(m.AppliesTo) - copy(dAtA[i:], m.AppliesTo) - i = encodeVarintDispatcher(dAtA, i, uint64(len(m.AppliesTo))) - i-- - dAtA[i] = 0x12 - } - if m.Type != 0 { - i = encodeVarintDispatcher(dAtA, i, uint64(m.Type)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func encodeVarintDispatcher(dAtA []byte, offset int, v uint64) int { - offset -= sovDispatcher(v) - base := offset - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return base -} - -type raftProxyDispatcherServer struct { - local DispatcherServer - connSelector raftselector.ConnProvider - localCtxMods, remoteCtxMods []func(context.Context) (context.Context, error) -} - -func NewRaftProxyDispatcherServer(local DispatcherServer, connSelector raftselector.ConnProvider, localCtxMod, remoteCtxMod func(context.Context) (context.Context, error)) DispatcherServer { - redirectChecker := func(ctx context.Context) (context.Context, error) { - p, ok := peer.FromContext(ctx) - if !ok { - return ctx, status.Errorf(codes.InvalidArgument, "remote addr is not found in context") - } - addr := p.Addr.String() - md, ok := metadata.FromIncomingContext(ctx) - if ok && len(md["redirect"]) != 0 { - return ctx, status.Errorf(codes.ResourceExhausted, "more than one redirect to leader from: %s", md["redirect"]) - } - if !ok { - md = metadata.New(map[string]string{}) - } - md["redirect"] = append(md["redirect"], addr) - return metadata.NewOutgoingContext(ctx, md), nil - } - remoteMods := []func(context.Context) (context.Context, error){redirectChecker} - remoteMods = append(remoteMods, remoteCtxMod) - - var localMods []func(context.Context) (context.Context, error) - if localCtxMod != nil { - localMods = []func(context.Context) (context.Context, error){localCtxMod} - } - - return &raftProxyDispatcherServer{ - local: local, - connSelector: connSelector, - localCtxMods: localMods, - remoteCtxMods: remoteMods, - } -} -func (p *raftProxyDispatcherServer) runCtxMods(ctx context.Context, ctxMods []func(context.Context) (context.Context, error)) (context.Context, error) { - var err error - for _, mod := range ctxMods { - ctx, err = mod(ctx) - if err != nil { - return ctx, err - } - } - return ctx, nil -} -func (p *raftProxyDispatcherServer) pollNewLeaderConn(ctx context.Context) (*grpc.ClientConn, error) { - ticker := rafttime.NewTicker(500 * rafttime.Millisecond) - defer ticker.Stop() - for { - select { - case <-ticker.C: - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - return nil, err - } - - client := NewHealthClient(conn) - - resp, err := client.Check(ctx, &HealthCheckRequest{Service: "Raft"}) - if err != nil || resp.Status != HealthCheckResponse_SERVING { - continue - } - return conn, nil - case <-ctx.Done(): - return nil, ctx.Err() - } - } -} - -type Dispatcher_SessionServerWrapper struct { - Dispatcher_SessionServer - ctx context.Context -} - -func (s Dispatcher_SessionServerWrapper) Context() context.Context { - return s.ctx -} - -func (p *raftProxyDispatcherServer) Session(r *SessionRequest, stream Dispatcher_SessionServer) error { - ctx := stream.Context() - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return err - } - streamWrapper := Dispatcher_SessionServerWrapper{ - Dispatcher_SessionServer: stream, - ctx: ctx, - } - return p.local.Session(r, streamWrapper) - } - return err - } - ctx, err = p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return err - } - clientStream, err := NewDispatcherClient(conn).Session(ctx, r) - - if err != nil { - return err - } - - for { - msg, err := clientStream.Recv() - if err == io.EOF { - break - } - if err != nil { - return err - } - if err := stream.Send(msg); err != nil { - return err - } - } - return nil -} - -func (p *raftProxyDispatcherServer) Heartbeat(ctx context.Context, r *HeartbeatRequest) (*HeartbeatResponse, error) { - - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return nil, err - } - return p.local.Heartbeat(ctx, r) - } - return nil, err - } - modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return nil, err - } - - resp, err := NewDispatcherClient(conn).Heartbeat(modCtx, r) - if err != nil { - if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { - return resp, err - } - conn, err := p.pollNewLeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - return p.local.Heartbeat(ctx, r) - } - return nil, err - } - return NewDispatcherClient(conn).Heartbeat(modCtx, r) - } - return resp, err -} - -func (p *raftProxyDispatcherServer) UpdateTaskStatus(ctx context.Context, r *UpdateTaskStatusRequest) (*UpdateTaskStatusResponse, error) { - - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return nil, err - } - return p.local.UpdateTaskStatus(ctx, r) - } - return nil, err - } - modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return nil, err - } - - resp, err := NewDispatcherClient(conn).UpdateTaskStatus(modCtx, r) - if err != nil { - if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { - return resp, err - } - conn, err := p.pollNewLeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - return p.local.UpdateTaskStatus(ctx, r) - } - return nil, err - } - return NewDispatcherClient(conn).UpdateTaskStatus(modCtx, r) - } - return resp, err -} - -func (p *raftProxyDispatcherServer) UpdateVolumeStatus(ctx context.Context, r *UpdateVolumeStatusRequest) (*UpdateVolumeStatusResponse, error) { - - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return nil, err - } - return p.local.UpdateVolumeStatus(ctx, r) - } - return nil, err - } - modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return nil, err - } - - resp, err := NewDispatcherClient(conn).UpdateVolumeStatus(modCtx, r) - if err != nil { - if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { - return resp, err - } - conn, err := p.pollNewLeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - return p.local.UpdateVolumeStatus(ctx, r) - } - return nil, err - } - return NewDispatcherClient(conn).UpdateVolumeStatus(modCtx, r) - } - return resp, err -} - -type Dispatcher_TasksServerWrapper struct { - Dispatcher_TasksServer - ctx context.Context -} - -func (s Dispatcher_TasksServerWrapper) Context() context.Context { - return s.ctx -} - -func (p *raftProxyDispatcherServer) Tasks(r *TasksRequest, stream Dispatcher_TasksServer) error { - ctx := stream.Context() - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return err - } - streamWrapper := Dispatcher_TasksServerWrapper{ - Dispatcher_TasksServer: stream, - ctx: ctx, - } - return p.local.Tasks(r, streamWrapper) - } - return err - } - ctx, err = p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return err - } - clientStream, err := NewDispatcherClient(conn).Tasks(ctx, r) - - if err != nil { - return err - } - - for { - msg, err := clientStream.Recv() - if err == io.EOF { - break - } - if err != nil { - return err - } - if err := stream.Send(msg); err != nil { - return err - } - } - return nil -} - -type Dispatcher_AssignmentsServerWrapper struct { - Dispatcher_AssignmentsServer - ctx context.Context -} - -func (s Dispatcher_AssignmentsServerWrapper) Context() context.Context { - return s.ctx -} - -func (p *raftProxyDispatcherServer) Assignments(r *AssignmentsRequest, stream Dispatcher_AssignmentsServer) error { - ctx := stream.Context() - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return err - } - streamWrapper := Dispatcher_AssignmentsServerWrapper{ - Dispatcher_AssignmentsServer: stream, - ctx: ctx, - } - return p.local.Assignments(r, streamWrapper) - } - return err - } - ctx, err = p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return err - } - clientStream, err := NewDispatcherClient(conn).Assignments(ctx, r) - - if err != nil { - return err - } - - for { - msg, err := clientStream.Recv() - if err == io.EOF { - break - } - if err != nil { - return err - } - if err := stream.Send(msg); err != nil { - return err - } - } - return nil -} - -func (m *SessionRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Description != nil { - l = m.Description.Size() - n += 1 + l + sovDispatcher(uint64(l)) - } - l = len(m.SessionID) - if l > 0 { - n += 1 + l + sovDispatcher(uint64(l)) - } - return n -} - -func (m *SessionMessage) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.SessionID) - if l > 0 { - n += 1 + l + sovDispatcher(uint64(l)) - } - if m.Node != nil { - l = m.Node.Size() - n += 1 + l + sovDispatcher(uint64(l)) - } - if len(m.Managers) > 0 { - for _, e := range m.Managers { - l = e.Size() - n += 1 + l + sovDispatcher(uint64(l)) - } - } - if len(m.NetworkBootstrapKeys) > 0 { - for _, e := range m.NetworkBootstrapKeys { - l = e.Size() - n += 1 + l + sovDispatcher(uint64(l)) - } - } - l = len(m.RootCA) - if l > 0 { - n += 1 + l + sovDispatcher(uint64(l)) - } - return n -} - -func (m *HeartbeatRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.SessionID) - if l > 0 { - n += 1 + l + sovDispatcher(uint64(l)) - } - return n -} - -func (m *HeartbeatResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = github_com_gogo_protobuf_types.SizeOfStdDuration(m.Period) - n += 1 + l + sovDispatcher(uint64(l)) - return n -} - -func (m *UpdateTaskStatusRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.SessionID) - if l > 0 { - n += 1 + l + sovDispatcher(uint64(l)) - } - if len(m.Updates) > 0 { - for _, e := range m.Updates { - l = e.Size() - n += 1 + l + sovDispatcher(uint64(l)) - } - } - return n -} - -func (m *UpdateTaskStatusRequest_TaskStatusUpdate) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.TaskID) - if l > 0 { - n += 1 + l + sovDispatcher(uint64(l)) - } - if m.Status != nil { - l = m.Status.Size() - n += 1 + l + sovDispatcher(uint64(l)) - } - return n -} - -func (m *UpdateTaskStatusResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - return n -} - -func (m *UpdateVolumeStatusRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.SessionID) - if l > 0 { - n += 1 + l + sovDispatcher(uint64(l)) - } - if len(m.Updates) > 0 { - for _, e := range m.Updates { - l = e.Size() - n += 1 + l + sovDispatcher(uint64(l)) - } - } - return n -} - -func (m *UpdateVolumeStatusRequest_VolumeStatusUpdate) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.ID) - if l > 0 { - n += 1 + l + sovDispatcher(uint64(l)) - } - if m.Unpublished { - n += 2 - } - return n -} - -func (m *UpdateVolumeStatusResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - return n -} - -func (m *TasksRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.SessionID) - if l > 0 { - n += 1 + l + sovDispatcher(uint64(l)) - } - return n -} - -func (m *TasksMessage) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Tasks) > 0 { - for _, e := range m.Tasks { - l = e.Size() - n += 1 + l + sovDispatcher(uint64(l)) - } - } - return n -} - -func (m *AssignmentsRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.SessionID) - if l > 0 { - n += 1 + l + sovDispatcher(uint64(l)) - } - return n -} - -func (m *Assignment) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Item != nil { - n += m.Item.Size() - } - return n -} - -func (m *Assignment_Task) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Task != nil { - l = m.Task.Size() - n += 1 + l + sovDispatcher(uint64(l)) - } - return n -} -func (m *Assignment_Secret) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Secret != nil { - l = m.Secret.Size() - n += 1 + l + sovDispatcher(uint64(l)) - } - return n -} -func (m *Assignment_Config) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Config != nil { - l = m.Config.Size() - n += 1 + l + sovDispatcher(uint64(l)) - } - return n -} -func (m *Assignment_Volume) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Volume != nil { - l = m.Volume.Size() - n += 1 + l + sovDispatcher(uint64(l)) - } - return n -} -func (m *AssignmentChange) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Assignment != nil { - l = m.Assignment.Size() - n += 1 + l + sovDispatcher(uint64(l)) - } - if m.Action != 0 { - n += 1 + sovDispatcher(uint64(m.Action)) - } - return n -} - -func (m *AssignmentsMessage) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Type != 0 { - n += 1 + sovDispatcher(uint64(m.Type)) - } - l = len(m.AppliesTo) - if l > 0 { - n += 1 + l + sovDispatcher(uint64(l)) - } - l = len(m.ResultsIn) - if l > 0 { - n += 1 + l + sovDispatcher(uint64(l)) - } - if len(m.Changes) > 0 { - for _, e := range m.Changes { - l = e.Size() - n += 1 + l + sovDispatcher(uint64(l)) - } - } - return n -} - -func sovDispatcher(x uint64) (n int) { - return (math_bits.Len64(x|1) + 6) / 7 -} -func sozDispatcher(x uint64) (n int) { - return sovDispatcher(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (this *SessionRequest) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&SessionRequest{`, - `Description:` + strings.Replace(fmt.Sprintf("%v", this.Description), "NodeDescription", "NodeDescription", 1) + `,`, - `SessionID:` + fmt.Sprintf("%v", this.SessionID) + `,`, - `}`, - }, "") - return s -} -func (this *SessionMessage) String() string { - if this == nil { - return "nil" - } - repeatedStringForManagers := "[]*WeightedPeer{" - for _, f := range this.Managers { - repeatedStringForManagers += strings.Replace(fmt.Sprintf("%v", f), "WeightedPeer", "WeightedPeer", 1) + "," - } - repeatedStringForManagers += "}" - repeatedStringForNetworkBootstrapKeys := "[]*EncryptionKey{" - for _, f := range this.NetworkBootstrapKeys { - repeatedStringForNetworkBootstrapKeys += strings.Replace(fmt.Sprintf("%v", f), "EncryptionKey", "EncryptionKey", 1) + "," - } - repeatedStringForNetworkBootstrapKeys += "}" - s := strings.Join([]string{`&SessionMessage{`, - `SessionID:` + fmt.Sprintf("%v", this.SessionID) + `,`, - `Node:` + strings.Replace(fmt.Sprintf("%v", this.Node), "Node", "Node", 1) + `,`, - `Managers:` + repeatedStringForManagers + `,`, - `NetworkBootstrapKeys:` + repeatedStringForNetworkBootstrapKeys + `,`, - `RootCA:` + fmt.Sprintf("%v", this.RootCA) + `,`, - `}`, - }, "") - return s -} -func (this *HeartbeatRequest) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&HeartbeatRequest{`, - `SessionID:` + fmt.Sprintf("%v", this.SessionID) + `,`, - `}`, - }, "") - return s -} -func (this *HeartbeatResponse) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&HeartbeatResponse{`, - `Period:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Period), "Duration", "types.Duration", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s -} -func (this *UpdateTaskStatusRequest) String() string { - if this == nil { - return "nil" - } - repeatedStringForUpdates := "[]*UpdateTaskStatusRequest_TaskStatusUpdate{" - for _, f := range this.Updates { - repeatedStringForUpdates += strings.Replace(fmt.Sprintf("%v", f), "UpdateTaskStatusRequest_TaskStatusUpdate", "UpdateTaskStatusRequest_TaskStatusUpdate", 1) + "," - } - repeatedStringForUpdates += "}" - s := strings.Join([]string{`&UpdateTaskStatusRequest{`, - `SessionID:` + fmt.Sprintf("%v", this.SessionID) + `,`, - `Updates:` + repeatedStringForUpdates + `,`, - `}`, - }, "") - return s -} -func (this *UpdateTaskStatusRequest_TaskStatusUpdate) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&UpdateTaskStatusRequest_TaskStatusUpdate{`, - `TaskID:` + fmt.Sprintf("%v", this.TaskID) + `,`, - `Status:` + strings.Replace(fmt.Sprintf("%v", this.Status), "TaskStatus", "TaskStatus", 1) + `,`, - `}`, - }, "") - return s -} -func (this *UpdateTaskStatusResponse) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&UpdateTaskStatusResponse{`, - `}`, - }, "") - return s -} -func (this *UpdateVolumeStatusRequest) String() string { - if this == nil { - return "nil" - } - repeatedStringForUpdates := "[]*UpdateVolumeStatusRequest_VolumeStatusUpdate{" - for _, f := range this.Updates { - repeatedStringForUpdates += strings.Replace(fmt.Sprintf("%v", f), "UpdateVolumeStatusRequest_VolumeStatusUpdate", "UpdateVolumeStatusRequest_VolumeStatusUpdate", 1) + "," - } - repeatedStringForUpdates += "}" - s := strings.Join([]string{`&UpdateVolumeStatusRequest{`, - `SessionID:` + fmt.Sprintf("%v", this.SessionID) + `,`, - `Updates:` + repeatedStringForUpdates + `,`, - `}`, - }, "") - return s -} -func (this *UpdateVolumeStatusRequest_VolumeStatusUpdate) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&UpdateVolumeStatusRequest_VolumeStatusUpdate{`, - `ID:` + fmt.Sprintf("%v", this.ID) + `,`, - `Unpublished:` + fmt.Sprintf("%v", this.Unpublished) + `,`, - `}`, - }, "") - return s -} -func (this *UpdateVolumeStatusResponse) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&UpdateVolumeStatusResponse{`, - `}`, - }, "") - return s -} -func (this *TasksRequest) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&TasksRequest{`, - `SessionID:` + fmt.Sprintf("%v", this.SessionID) + `,`, - `}`, - }, "") - return s -} -func (this *TasksMessage) String() string { - if this == nil { - return "nil" - } - repeatedStringForTasks := "[]*Task{" - for _, f := range this.Tasks { - repeatedStringForTasks += strings.Replace(fmt.Sprintf("%v", f), "Task", "Task", 1) + "," - } - repeatedStringForTasks += "}" - s := strings.Join([]string{`&TasksMessage{`, - `Tasks:` + repeatedStringForTasks + `,`, - `}`, - }, "") - return s -} -func (this *AssignmentsRequest) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&AssignmentsRequest{`, - `SessionID:` + fmt.Sprintf("%v", this.SessionID) + `,`, - `}`, - }, "") - return s -} -func (this *Assignment) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&Assignment{`, - `Item:` + fmt.Sprintf("%v", this.Item) + `,`, - `}`, - }, "") - return s -} -func (this *Assignment_Task) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&Assignment_Task{`, - `Task:` + strings.Replace(fmt.Sprintf("%v", this.Task), "Task", "Task", 1) + `,`, - `}`, - }, "") - return s -} -func (this *Assignment_Secret) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&Assignment_Secret{`, - `Secret:` + strings.Replace(fmt.Sprintf("%v", this.Secret), "Secret", "Secret", 1) + `,`, - `}`, - }, "") - return s -} -func (this *Assignment_Config) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&Assignment_Config{`, - `Config:` + strings.Replace(fmt.Sprintf("%v", this.Config), "Config", "Config", 1) + `,`, - `}`, - }, "") - return s -} -func (this *Assignment_Volume) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&Assignment_Volume{`, - `Volume:` + strings.Replace(fmt.Sprintf("%v", this.Volume), "VolumeAssignment", "VolumeAssignment", 1) + `,`, - `}`, - }, "") - return s -} -func (this *AssignmentChange) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&AssignmentChange{`, - `Assignment:` + strings.Replace(this.Assignment.String(), "Assignment", "Assignment", 1) + `,`, - `Action:` + fmt.Sprintf("%v", this.Action) + `,`, - `}`, - }, "") - return s -} -func (this *AssignmentsMessage) String() string { - if this == nil { - return "nil" - } - repeatedStringForChanges := "[]*AssignmentChange{" - for _, f := range this.Changes { - repeatedStringForChanges += strings.Replace(f.String(), "AssignmentChange", "AssignmentChange", 1) + "," - } - repeatedStringForChanges += "}" - s := strings.Join([]string{`&AssignmentsMessage{`, - `Type:` + fmt.Sprintf("%v", this.Type) + `,`, - `AppliesTo:` + fmt.Sprintf("%v", this.AppliesTo) + `,`, - `ResultsIn:` + fmt.Sprintf("%v", this.ResultsIn) + `,`, - `Changes:` + repeatedStringForChanges + `,`, - `}`, - }, "") - return s -} -func valueToStringDispatcher(v interface{}) string { - rv := reflect.ValueOf(v) - if rv.IsNil() { - return "nil" - } - pv := reflect.Indirect(rv).Interface() - return fmt.Sprintf("*%v", pv) -} -func (m *SessionRequest) 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 ErrIntOverflowDispatcher - } - 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: SessionRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: SessionRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Description", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDispatcher - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthDispatcher - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthDispatcher - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Description == nil { - m.Description = &NodeDescription{} - } - if err := m.Description.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SessionID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDispatcher - } - 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 ErrInvalidLengthDispatcher - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthDispatcher - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.SessionID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipDispatcher(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthDispatcher - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *SessionMessage) 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 ErrIntOverflowDispatcher - } - 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: SessionMessage: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: SessionMessage: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SessionID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDispatcher - } - 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 ErrInvalidLengthDispatcher - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthDispatcher - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.SessionID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Node", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDispatcher - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthDispatcher - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthDispatcher - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Node == nil { - m.Node = &Node{} - } - if err := m.Node.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Managers", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDispatcher - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthDispatcher - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthDispatcher - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Managers = append(m.Managers, &WeightedPeer{}) - if err := m.Managers[len(m.Managers)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NetworkBootstrapKeys", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDispatcher - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthDispatcher - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthDispatcher - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.NetworkBootstrapKeys = append(m.NetworkBootstrapKeys, &EncryptionKey{}) - if err := m.NetworkBootstrapKeys[len(m.NetworkBootstrapKeys)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RootCA", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDispatcher - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthDispatcher - } - postIndex := iNdEx + byteLen - if postIndex < 0 { - return ErrInvalidLengthDispatcher - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.RootCA = append(m.RootCA[:0], dAtA[iNdEx:postIndex]...) - if m.RootCA == nil { - m.RootCA = []byte{} - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipDispatcher(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthDispatcher - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *HeartbeatRequest) 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 ErrIntOverflowDispatcher - } - 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: HeartbeatRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: HeartbeatRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SessionID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDispatcher - } - 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 ErrInvalidLengthDispatcher - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthDispatcher - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.SessionID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipDispatcher(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthDispatcher - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *HeartbeatResponse) 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 ErrIntOverflowDispatcher - } - 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: HeartbeatResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: HeartbeatResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Period", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDispatcher - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthDispatcher - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthDispatcher - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(&m.Period, dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipDispatcher(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthDispatcher - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *UpdateTaskStatusRequest) 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 ErrIntOverflowDispatcher - } - 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: UpdateTaskStatusRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: UpdateTaskStatusRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SessionID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDispatcher - } - 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 ErrInvalidLengthDispatcher - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthDispatcher - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.SessionID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Updates", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDispatcher - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthDispatcher - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthDispatcher - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Updates = append(m.Updates, &UpdateTaskStatusRequest_TaskStatusUpdate{}) - if err := m.Updates[len(m.Updates)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipDispatcher(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthDispatcher - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *UpdateTaskStatusRequest_TaskStatusUpdate) 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 ErrIntOverflowDispatcher - } - 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: TaskStatusUpdate: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: TaskStatusUpdate: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TaskID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDispatcher - } - 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 ErrInvalidLengthDispatcher - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthDispatcher - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.TaskID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDispatcher - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthDispatcher - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthDispatcher - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Status == nil { - m.Status = &TaskStatus{} - } - if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipDispatcher(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthDispatcher - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *UpdateTaskStatusResponse) 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 ErrIntOverflowDispatcher - } - 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: UpdateTaskStatusResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: UpdateTaskStatusResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipDispatcher(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthDispatcher - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *UpdateVolumeStatusRequest) 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 ErrIntOverflowDispatcher - } - 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: UpdateVolumeStatusRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: UpdateVolumeStatusRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SessionID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDispatcher - } - 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 ErrInvalidLengthDispatcher - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthDispatcher - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.SessionID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Updates", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDispatcher - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthDispatcher - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthDispatcher - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Updates = append(m.Updates, &UpdateVolumeStatusRequest_VolumeStatusUpdate{}) - if err := m.Updates[len(m.Updates)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipDispatcher(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthDispatcher - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *UpdateVolumeStatusRequest_VolumeStatusUpdate) 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 ErrIntOverflowDispatcher - } - 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: VolumeStatusUpdate: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: VolumeStatusUpdate: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDispatcher - } - 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 ErrInvalidLengthDispatcher - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthDispatcher - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Unpublished", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDispatcher - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.Unpublished = bool(v != 0) - default: - iNdEx = preIndex - skippy, err := skipDispatcher(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthDispatcher - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *UpdateVolumeStatusResponse) 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 ErrIntOverflowDispatcher - } - 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: UpdateVolumeStatusResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: UpdateVolumeStatusResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipDispatcher(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthDispatcher - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *TasksRequest) 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 ErrIntOverflowDispatcher - } - 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: TasksRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: TasksRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SessionID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDispatcher - } - 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 ErrInvalidLengthDispatcher - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthDispatcher - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.SessionID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipDispatcher(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthDispatcher - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *TasksMessage) 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 ErrIntOverflowDispatcher - } - 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: TasksMessage: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: TasksMessage: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Tasks", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDispatcher - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthDispatcher - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthDispatcher - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Tasks = append(m.Tasks, &Task{}) - if err := m.Tasks[len(m.Tasks)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipDispatcher(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthDispatcher - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *AssignmentsRequest) 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 ErrIntOverflowDispatcher - } - 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: AssignmentsRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: AssignmentsRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SessionID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDispatcher - } - 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 ErrInvalidLengthDispatcher - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthDispatcher - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.SessionID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipDispatcher(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthDispatcher - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Assignment) 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 ErrIntOverflowDispatcher - } - 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: Assignment: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Assignment: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Task", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDispatcher - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthDispatcher - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthDispatcher - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &Task{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.Item = &Assignment_Task{v} - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Secret", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDispatcher - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthDispatcher - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthDispatcher - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &Secret{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.Item = &Assignment_Secret{v} - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Config", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDispatcher - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthDispatcher - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthDispatcher - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &Config{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.Item = &Assignment_Config{v} - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Volume", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDispatcher - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthDispatcher - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthDispatcher - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &VolumeAssignment{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.Item = &Assignment_Volume{v} - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipDispatcher(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthDispatcher - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *AssignmentChange) 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 ErrIntOverflowDispatcher - } - 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: AssignmentChange: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: AssignmentChange: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Assignment", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDispatcher - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthDispatcher - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthDispatcher - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Assignment == nil { - m.Assignment = &Assignment{} - } - if err := m.Assignment.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Action", wireType) - } - m.Action = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDispatcher - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Action |= AssignmentChange_AssignmentAction(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipDispatcher(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthDispatcher - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *AssignmentsMessage) 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 ErrIntOverflowDispatcher - } - 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: AssignmentsMessage: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: AssignmentsMessage: 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 ErrIntOverflowDispatcher - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Type |= AssignmentsMessage_Type(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AppliesTo", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDispatcher - } - 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 ErrInvalidLengthDispatcher - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthDispatcher - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.AppliesTo = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ResultsIn", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDispatcher - } - 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 ErrInvalidLengthDispatcher - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthDispatcher - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ResultsIn = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Changes", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDispatcher - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthDispatcher - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthDispatcher - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Changes = append(m.Changes, &AssignmentChange{}) - if err := m.Changes[len(m.Changes)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipDispatcher(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthDispatcher - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipDispatcher(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - depth := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowDispatcher - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowDispatcher - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - case 1: - iNdEx += 8 - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowDispatcher - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLengthDispatcher - } - iNdEx += length - case 3: - depth++ - case 4: - if depth == 0 { - return 0, ErrUnexpectedEndOfGroupDispatcher - } - depth-- - case 5: - iNdEx += 4 - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - if iNdEx < 0 { - return 0, ErrInvalidLengthDispatcher - } - if depth == 0 { - return iNdEx, nil - } - } - return 0, io.ErrUnexpectedEOF -} - -var ( - ErrInvalidLengthDispatcher = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowDispatcher = fmt.Errorf("proto: integer overflow") - ErrUnexpectedEndOfGroupDispatcher = fmt.Errorf("proto: unexpected end of group") -) diff --git a/api/dispatcher.pb.raftproxy.go b/api/dispatcher.pb.raftproxy.go new file mode 100644 index 0000000000..bea9d2da1e --- /dev/null +++ b/api/dispatcher.pb.raftproxy.go @@ -0,0 +1,346 @@ +// Code generated by protoc-gen-goswarm. DO NOT EDIT. + +package api + +import ( + context "context" + raftselector "github.com/moby/swarmkit/v2/manager/raftselector" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + metadata "google.golang.org/grpc/metadata" + peer "google.golang.org/grpc/peer" + status "google.golang.org/grpc/status" + io "io" + strings "strings" + time "time" +) + +type raftProxyDispatcherServer struct { + local DispatcherServer + connSelector raftselector.ConnProvider + localCtxMods, remoteCtxMods []func(context.Context) (context.Context, error) +} + +func NewRaftProxyDispatcherServer(local DispatcherServer, connSelector raftselector.ConnProvider, localCtxMod, remoteCtxMod func(context.Context) (context.Context, error)) DispatcherServer { + redirectChecker := func(ctx context.Context) (context.Context, error) { + p, ok := peer.FromContext(ctx) + if !ok { + return ctx, status.Errorf(codes.InvalidArgument, "remote addr is not found in context") + } + addr := p.Addr.String() + md, ok := metadata.FromIncomingContext(ctx) + if ok && len(md["redirect"]) != 0 { + return ctx, status.Errorf(codes.ResourceExhausted, "more than one redirect to leader from: %s", md["redirect"]) + } + if !ok { + md = metadata.New(map[string]string{}) + } + md["redirect"] = append(md["redirect"], addr) + return metadata.NewOutgoingContext(ctx, md), nil + } + remoteMods := []func(context.Context) (context.Context, error){redirectChecker} + remoteMods = append(remoteMods, remoteCtxMod) + + var localMods []func(context.Context) (context.Context, error) + if localCtxMod != nil { + localMods = []func(context.Context) (context.Context, error){localCtxMod} + } + + return &raftProxyDispatcherServer{ + local: local, + connSelector: connSelector, + localCtxMods: localMods, + remoteCtxMods: remoteMods, + } +} +func (p *raftProxyDispatcherServer) runCtxMods(ctx context.Context, ctxMods []func(context.Context) (context.Context, error)) (context.Context, error) { + var err error + for _, mod := range ctxMods { + ctx, err = mod(ctx) + if err != nil { + return ctx, err + } + } + return ctx, nil +} +func (p *raftProxyDispatcherServer) pollNewLeaderConn(ctx context.Context) (*grpc.ClientConn, error) { + ticker := time.NewTicker(500 * time.Millisecond) + defer ticker.Stop() + for { + select { + case <-ticker.C: + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + return nil, err + } + + client := NewHealthClient(conn) + + resp, err := client.Check(ctx, &HealthCheckRequest{Service: "Raft"}) + if err != nil || resp.Status != HealthCheckResponse_SERVING { + continue + } + return conn, nil + case <-ctx.Done(): + return nil, ctx.Err() + } + } +} + +type Dispatcher_SessionServerWrapper struct { + Dispatcher_SessionServer + ctx context.Context +} + +func (s Dispatcher_SessionServerWrapper) Context() context.Context { + return s.ctx +} + +func (p *raftProxyDispatcherServer) Session(r *SessionRequest, stream Dispatcher_SessionServer) error { + ctx := stream.Context() + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return err + } + streamWrapper := Dispatcher_SessionServerWrapper{ + Dispatcher_SessionServer: stream, + ctx: ctx, + } + return p.local.Session(r, streamWrapper) + } + return err + } + ctx, err = p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return err + } + clientStream, err := NewDispatcherClient(conn).Session(ctx, r) + + if err != nil { + return err + } + + for { + msg, err := clientStream.Recv() + if err == io.EOF { + break + } + if err != nil { + return err + } + if err := stream.Send(msg); err != nil { + return err + } + } + return nil +} + +func (p *raftProxyDispatcherServer) Heartbeat(ctx context.Context, r *HeartbeatRequest) (*HeartbeatResponse, error) { + + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return nil, err + } + return p.local.Heartbeat(ctx, r) + } + return nil, err + } + modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return nil, err + } + + resp, err := NewDispatcherClient(conn).Heartbeat(modCtx, r) + if err != nil { + if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { + return resp, err + } + conn, err := p.pollNewLeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + return p.local.Heartbeat(ctx, r) + } + return nil, err + } + return NewDispatcherClient(conn).Heartbeat(modCtx, r) + } + return resp, err +} + +func (p *raftProxyDispatcherServer) UpdateTaskStatus(ctx context.Context, r *UpdateTaskStatusRequest) (*UpdateTaskStatusResponse, error) { + + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return nil, err + } + return p.local.UpdateTaskStatus(ctx, r) + } + return nil, err + } + modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return nil, err + } + + resp, err := NewDispatcherClient(conn).UpdateTaskStatus(modCtx, r) + if err != nil { + if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { + return resp, err + } + conn, err := p.pollNewLeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + return p.local.UpdateTaskStatus(ctx, r) + } + return nil, err + } + return NewDispatcherClient(conn).UpdateTaskStatus(modCtx, r) + } + return resp, err +} + +func (p *raftProxyDispatcherServer) UpdateVolumeStatus(ctx context.Context, r *UpdateVolumeStatusRequest) (*UpdateVolumeStatusResponse, error) { + + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return nil, err + } + return p.local.UpdateVolumeStatus(ctx, r) + } + return nil, err + } + modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return nil, err + } + + resp, err := NewDispatcherClient(conn).UpdateVolumeStatus(modCtx, r) + if err != nil { + if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { + return resp, err + } + conn, err := p.pollNewLeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + return p.local.UpdateVolumeStatus(ctx, r) + } + return nil, err + } + return NewDispatcherClient(conn).UpdateVolumeStatus(modCtx, r) + } + return resp, err +} + +type Dispatcher_TasksServerWrapper struct { + Dispatcher_TasksServer + ctx context.Context +} + +func (s Dispatcher_TasksServerWrapper) Context() context.Context { + return s.ctx +} + +func (p *raftProxyDispatcherServer) Tasks(r *TasksRequest, stream Dispatcher_TasksServer) error { + ctx := stream.Context() + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return err + } + streamWrapper := Dispatcher_TasksServerWrapper{ + Dispatcher_TasksServer: stream, + ctx: ctx, + } + return p.local.Tasks(r, streamWrapper) + } + return err + } + ctx, err = p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return err + } + clientStream, err := NewDispatcherClient(conn).Tasks(ctx, r) + + if err != nil { + return err + } + + for { + msg, err := clientStream.Recv() + if err == io.EOF { + break + } + if err != nil { + return err + } + if err := stream.Send(msg); err != nil { + return err + } + } + return nil +} + +type Dispatcher_AssignmentsServerWrapper struct { + Dispatcher_AssignmentsServer + ctx context.Context +} + +func (s Dispatcher_AssignmentsServerWrapper) Context() context.Context { + return s.ctx +} + +func (p *raftProxyDispatcherServer) Assignments(r *AssignmentsRequest, stream Dispatcher_AssignmentsServer) error { + ctx := stream.Context() + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return err + } + streamWrapper := Dispatcher_AssignmentsServerWrapper{ + Dispatcher_AssignmentsServer: stream, + ctx: ctx, + } + return p.local.Assignments(r, streamWrapper) + } + return err + } + ctx, err = p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return err + } + clientStream, err := NewDispatcherClient(conn).Assignments(ctx, r) + + if err != nil { + return err + } + + for { + msg, err := clientStream.Recv() + if err == io.EOF { + break + } + if err != nil { + return err + } + if err := stream.Send(msg); err != nil { + return err + } + } + return nil +} diff --git a/api/dispatcher.proto b/api/dispatcher.proto index fa2d5c32b0..a407217b57 100644 --- a/api/dispatcher.proto +++ b/api/dispatcher.proto @@ -2,10 +2,11 @@ syntax = "proto3"; package docker.swarmkit.v1; -import "github.com/docker/swarmkit/api/types.proto"; -import "github.com/docker/swarmkit/api/objects.proto"; -import "gogoproto/gogo.proto"; -import "github.com/docker/swarmkit/protobuf/plugin/plugin.proto"; +option go_package = "github.com/moby/swarmkit/v2/api"; + +import "api/types.proto"; +import "api/objects.proto"; +import "protobuf/plugin/plugin.proto"; import "google/protobuf/duration.proto"; // Dispatcher is the API provided by a manager group for agents to connect to. Agents @@ -146,7 +147,7 @@ message HeartbeatRequest { message HeartbeatResponse { // Period is the duration to wait before sending the next heartbeat. // Well-behaved agents should update this on every heartbeat round trip. - google.protobuf.Duration period = 1 [(gogoproto.stdduration) = true, (gogoproto.nullable) = false]; + google.protobuf.Duration period = 1 ; } message UpdateTaskStatusRequest { @@ -216,8 +217,8 @@ message Assignment { message AssignmentChange { enum AssignmentAction { - UPDATE = 0 [(gogoproto.enumvalue_customname) = "AssignmentActionUpdate"]; - REMOVE = 1 [(gogoproto.enumvalue_customname) = "AssignmentActionRemove"]; + UPDATE = 0 [(docker.protobuf.plugin.go_enum_value_name) = "AssignmentActionUpdate"]; + REMOVE = 1 [(docker.protobuf.plugin.go_enum_value_name) = "AssignmentActionRemove"]; } Assignment assignment = 1; diff --git a/api/dispatcher_grpc.pb.go b/api/dispatcher_grpc.pb.go new file mode 100644 index 0000000000..58152605c0 --- /dev/null +++ b/api/dispatcher_grpc.pb.go @@ -0,0 +1,386 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.6.2 +// - protoc v3.21.12 +// source: api/dispatcher.proto + +package api + +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.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 + +const ( + Dispatcher_Session_FullMethodName = "/docker.swarmkit.v1.Dispatcher/Session" + Dispatcher_Heartbeat_FullMethodName = "/docker.swarmkit.v1.Dispatcher/Heartbeat" + Dispatcher_UpdateTaskStatus_FullMethodName = "/docker.swarmkit.v1.Dispatcher/UpdateTaskStatus" + Dispatcher_UpdateVolumeStatus_FullMethodName = "/docker.swarmkit.v1.Dispatcher/UpdateVolumeStatus" + Dispatcher_Tasks_FullMethodName = "/docker.swarmkit.v1.Dispatcher/Tasks" + Dispatcher_Assignments_FullMethodName = "/docker.swarmkit.v1.Dispatcher/Assignments" +) + +// DispatcherClient is the client API for Dispatcher 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. +// +// Dispatcher is the API provided by a manager group for agents to connect to. Agents +// connect to this service to receive task assignments and report status. +// +// API methods on this service are used only by agent nodes. +type DispatcherClient interface { + // Session starts an agent session with the dispatcher. The session is + // started after the first SessionMessage is received. + // + // Once started, the agent is controlled with a stream of SessionMessage. + // Agents should list on the stream at all times for instructions. + Session(ctx context.Context, in *SessionRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[SessionMessage], error) + // Heartbeat is heartbeat method for nodes. It returns new TTL in response. + // Node should send new heartbeat earlier than now + TTL, otherwise it will + // be deregistered from dispatcher and its status will be updated to NodeStatus_DOWN + Heartbeat(ctx context.Context, in *HeartbeatRequest, opts ...grpc.CallOption) (*HeartbeatResponse, error) + // UpdateTaskStatus updates status of task. Node should send such updates + // on every status change of its tasks. + // + // Whether receiving batch updates or single status updates, this method + // should be accepting. Errors should only be returned if the entire update + // should be retried, due to data loss or other problems. + // + // If a task is unknown the dispatcher, the status update should be + // accepted regardless. + UpdateTaskStatus(ctx context.Context, in *UpdateTaskStatusRequest, opts ...grpc.CallOption) (*UpdateTaskStatusResponse, error) + // UpdateVolumeStatus updates the status of a Volume. Like + // UpdateTaskStatus, the node should send such updates on every status + // change of its volumes. + UpdateVolumeStatus(ctx context.Context, in *UpdateVolumeStatusRequest, opts ...grpc.CallOption) (*UpdateVolumeStatusResponse, error) + // Deprecated: Do not use. + // Tasks is a stream of tasks state for node. Each message contains full list + // of tasks which should be run on node, if task is not present in that list, + // it should be terminated. + Tasks(ctx context.Context, in *TasksRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[TasksMessage], error) + // Assignments is a stream of assignments such as tasks and secrets for node. + // The first message in the stream contains all of the tasks and secrets + // that are relevant to the node. Future messages in the stream are updates to + // the set of assignments. + Assignments(ctx context.Context, in *AssignmentsRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[AssignmentsMessage], error) +} + +type dispatcherClient struct { + cc grpc.ClientConnInterface +} + +func NewDispatcherClient(cc grpc.ClientConnInterface) DispatcherClient { + return &dispatcherClient{cc} +} + +func (c *dispatcherClient) Session(ctx context.Context, in *SessionRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[SessionMessage], error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + stream, err := c.cc.NewStream(ctx, &Dispatcher_ServiceDesc.Streams[0], Dispatcher_Session_FullMethodName, cOpts...) + if err != nil { + return nil, err + } + x := &grpc.GenericClientStream[SessionRequest, SessionMessage]{ClientStream: stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type Dispatcher_SessionClient = grpc.ServerStreamingClient[SessionMessage] + +func (c *dispatcherClient) Heartbeat(ctx context.Context, in *HeartbeatRequest, opts ...grpc.CallOption) (*HeartbeatResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(HeartbeatResponse) + err := c.cc.Invoke(ctx, Dispatcher_Heartbeat_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dispatcherClient) UpdateTaskStatus(ctx context.Context, in *UpdateTaskStatusRequest, opts ...grpc.CallOption) (*UpdateTaskStatusResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(UpdateTaskStatusResponse) + err := c.cc.Invoke(ctx, Dispatcher_UpdateTaskStatus_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dispatcherClient) UpdateVolumeStatus(ctx context.Context, in *UpdateVolumeStatusRequest, opts ...grpc.CallOption) (*UpdateVolumeStatusResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(UpdateVolumeStatusResponse) + err := c.cc.Invoke(ctx, Dispatcher_UpdateVolumeStatus_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Deprecated: Do not use. +func (c *dispatcherClient) Tasks(ctx context.Context, in *TasksRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[TasksMessage], error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + stream, err := c.cc.NewStream(ctx, &Dispatcher_ServiceDesc.Streams[1], Dispatcher_Tasks_FullMethodName, cOpts...) + if err != nil { + return nil, err + } + x := &grpc.GenericClientStream[TasksRequest, TasksMessage]{ClientStream: stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type Dispatcher_TasksClient = grpc.ServerStreamingClient[TasksMessage] + +func (c *dispatcherClient) Assignments(ctx context.Context, in *AssignmentsRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[AssignmentsMessage], error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + stream, err := c.cc.NewStream(ctx, &Dispatcher_ServiceDesc.Streams[2], Dispatcher_Assignments_FullMethodName, cOpts...) + if err != nil { + return nil, err + } + x := &grpc.GenericClientStream[AssignmentsRequest, AssignmentsMessage]{ClientStream: stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type Dispatcher_AssignmentsClient = grpc.ServerStreamingClient[AssignmentsMessage] + +// DispatcherServer is the server API for Dispatcher service. +// All implementations should embed UnimplementedDispatcherServer +// for forward compatibility. +// +// Dispatcher is the API provided by a manager group for agents to connect to. Agents +// connect to this service to receive task assignments and report status. +// +// API methods on this service are used only by agent nodes. +type DispatcherServer interface { + // Session starts an agent session with the dispatcher. The session is + // started after the first SessionMessage is received. + // + // Once started, the agent is controlled with a stream of SessionMessage. + // Agents should list on the stream at all times for instructions. + Session(*SessionRequest, grpc.ServerStreamingServer[SessionMessage]) error + // Heartbeat is heartbeat method for nodes. It returns new TTL in response. + // Node should send new heartbeat earlier than now + TTL, otherwise it will + // be deregistered from dispatcher and its status will be updated to NodeStatus_DOWN + Heartbeat(context.Context, *HeartbeatRequest) (*HeartbeatResponse, error) + // UpdateTaskStatus updates status of task. Node should send such updates + // on every status change of its tasks. + // + // Whether receiving batch updates or single status updates, this method + // should be accepting. Errors should only be returned if the entire update + // should be retried, due to data loss or other problems. + // + // If a task is unknown the dispatcher, the status update should be + // accepted regardless. + UpdateTaskStatus(context.Context, *UpdateTaskStatusRequest) (*UpdateTaskStatusResponse, error) + // UpdateVolumeStatus updates the status of a Volume. Like + // UpdateTaskStatus, the node should send such updates on every status + // change of its volumes. + UpdateVolumeStatus(context.Context, *UpdateVolumeStatusRequest) (*UpdateVolumeStatusResponse, error) + // Deprecated: Do not use. + // Tasks is a stream of tasks state for node. Each message contains full list + // of tasks which should be run on node, if task is not present in that list, + // it should be terminated. + Tasks(*TasksRequest, grpc.ServerStreamingServer[TasksMessage]) error + // Assignments is a stream of assignments such as tasks and secrets for node. + // The first message in the stream contains all of the tasks and secrets + // that are relevant to the node. Future messages in the stream are updates to + // the set of assignments. + Assignments(*AssignmentsRequest, grpc.ServerStreamingServer[AssignmentsMessage]) error +} + +// UnimplementedDispatcherServer should be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedDispatcherServer struct{} + +func (UnimplementedDispatcherServer) Session(*SessionRequest, grpc.ServerStreamingServer[SessionMessage]) error { + return status.Error(codes.Unimplemented, "method Session not implemented") +} +func (UnimplementedDispatcherServer) Heartbeat(context.Context, *HeartbeatRequest) (*HeartbeatResponse, error) { + return nil, status.Error(codes.Unimplemented, "method Heartbeat not implemented") +} +func (UnimplementedDispatcherServer) UpdateTaskStatus(context.Context, *UpdateTaskStatusRequest) (*UpdateTaskStatusResponse, error) { + return nil, status.Error(codes.Unimplemented, "method UpdateTaskStatus not implemented") +} +func (UnimplementedDispatcherServer) UpdateVolumeStatus(context.Context, *UpdateVolumeStatusRequest) (*UpdateVolumeStatusResponse, error) { + return nil, status.Error(codes.Unimplemented, "method UpdateVolumeStatus not implemented") +} +func (UnimplementedDispatcherServer) Tasks(*TasksRequest, grpc.ServerStreamingServer[TasksMessage]) error { + return status.Error(codes.Unimplemented, "method Tasks not implemented") +} +func (UnimplementedDispatcherServer) Assignments(*AssignmentsRequest, grpc.ServerStreamingServer[AssignmentsMessage]) error { + return status.Error(codes.Unimplemented, "method Assignments not implemented") +} +func (UnimplementedDispatcherServer) testEmbeddedByValue() {} + +// UnsafeDispatcherServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to DispatcherServer will +// result in compilation errors. +type UnsafeDispatcherServer interface { + mustEmbedUnimplementedDispatcherServer() +} + +func RegisterDispatcherServer(s grpc.ServiceRegistrar, srv DispatcherServer) { + // If the following call panics, it indicates UnimplementedDispatcherServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } + s.RegisterService(&Dispatcher_ServiceDesc, srv) +} + +func _Dispatcher_Session_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(SessionRequest) + if err := stream.RecvMsg(m); err != nil { + return err + } + return srv.(DispatcherServer).Session(m, &grpc.GenericServerStream[SessionRequest, SessionMessage]{ServerStream: stream}) +} + +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type Dispatcher_SessionServer = grpc.ServerStreamingServer[SessionMessage] + +func _Dispatcher_Heartbeat_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(HeartbeatRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DispatcherServer).Heartbeat(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Dispatcher_Heartbeat_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DispatcherServer).Heartbeat(ctx, req.(*HeartbeatRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Dispatcher_UpdateTaskStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateTaskStatusRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DispatcherServer).UpdateTaskStatus(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Dispatcher_UpdateTaskStatus_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DispatcherServer).UpdateTaskStatus(ctx, req.(*UpdateTaskStatusRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Dispatcher_UpdateVolumeStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateVolumeStatusRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DispatcherServer).UpdateVolumeStatus(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Dispatcher_UpdateVolumeStatus_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DispatcherServer).UpdateVolumeStatus(ctx, req.(*UpdateVolumeStatusRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Dispatcher_Tasks_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(TasksRequest) + if err := stream.RecvMsg(m); err != nil { + return err + } + return srv.(DispatcherServer).Tasks(m, &grpc.GenericServerStream[TasksRequest, TasksMessage]{ServerStream: stream}) +} + +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type Dispatcher_TasksServer = grpc.ServerStreamingServer[TasksMessage] + +func _Dispatcher_Assignments_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(AssignmentsRequest) + if err := stream.RecvMsg(m); err != nil { + return err + } + return srv.(DispatcherServer).Assignments(m, &grpc.GenericServerStream[AssignmentsRequest, AssignmentsMessage]{ServerStream: stream}) +} + +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type Dispatcher_AssignmentsServer = grpc.ServerStreamingServer[AssignmentsMessage] + +// Dispatcher_ServiceDesc is the grpc.ServiceDesc for Dispatcher service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Dispatcher_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "docker.swarmkit.v1.Dispatcher", + HandlerType: (*DispatcherServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Heartbeat", + Handler: _Dispatcher_Heartbeat_Handler, + }, + { + MethodName: "UpdateTaskStatus", + Handler: _Dispatcher_UpdateTaskStatus_Handler, + }, + { + MethodName: "UpdateVolumeStatus", + Handler: _Dispatcher_UpdateVolumeStatus_Handler, + }, + }, + Streams: []grpc.StreamDesc{ + { + StreamName: "Session", + Handler: _Dispatcher_Session_Handler, + ServerStreams: true, + }, + { + StreamName: "Tasks", + Handler: _Dispatcher_Tasks_Handler, + ServerStreams: true, + }, + { + StreamName: "Assignments", + Handler: _Dispatcher_Assignments_Handler, + ServerStreams: true, + }, + }, + Metadata: "api/dispatcher.proto", +} diff --git a/api/equality/equality.go b/api/equality/equality.go index 97eea64252..4290e830cc 100644 --- a/api/equality/equality.go +++ b/api/equality/equality.go @@ -2,7 +2,8 @@ package equality import ( "crypto/subtle" - "reflect" + + "google.golang.org/protobuf/proto" "github.com/moby/swarmkit/v2/api" ) @@ -12,21 +13,27 @@ import ( // // This used to decide whether or not to propagate a task update to a controller. func TasksEqualStable(a, b *api.Task) bool { - // shallow copy - copyA, copyB := *a, *b + copyA, copyB := a.Copy(), b.Copy() - copyA.Status, copyB.Status = api.TaskStatus{}, api.TaskStatus{} - copyA.Meta, copyB.Meta = api.Meta{}, api.Meta{} + copyA.Status, copyB.Status = nil, nil + copyA.Meta, copyB.Meta = nil, nil - return reflect.DeepEqual(©A, ©B) + return proto.Equal(copyA, copyB) } // TaskStatusesEqualStable compares the task status excluding timestamp fields. func TaskStatusesEqualStable(a, b *api.TaskStatus) bool { - copyA, copyB := *a, *b + if a == nil && b == nil { + return true + } + if a == nil || b == nil { + return false + } + copyA, copyB := a.Copy(), b.Copy() copyA.Timestamp, copyB.Timestamp = nil, nil - return reflect.DeepEqual(©A, ©B) + copyA.AppliedAt, copyB.AppliedAt = nil, nil + return proto.Equal(copyA, copyB) } // RootCAEqualStable compares RootCAs, excluding join tokens, which are randomly generated @@ -49,19 +56,24 @@ func RootCAEqualStable(a, b *api.RootCA) bool { return false } - copyA, copyB := *a, *b - copyA.JoinTokens, copyB.JoinTokens = api.JoinTokens{}, api.JoinTokens{} - return reflect.DeepEqual(copyA, copyB) + copyA, copyB := a.Copy(), b.Copy() + copyA.JoinTokens, copyB.JoinTokens = nil, nil + return proto.Equal(copyA, copyB) } // ExternalCAsEqualStable compares lists of external CAs and determines whether they are equal. func ExternalCAsEqualStable(a, b []*api.ExternalCA) bool { - // because DeepEqual will treat an empty list and a nil list differently, we want to manually check this first + // because proto.Equal handles nil lists and empty lists differently, check lengths first if len(a) == 0 && len(b) == 0 { return true } - // The assumption is that each individual api.ExternalCA within both lists are created from deserializing from a - // protobuf, so no special affordances are made to treat a nil map and empty map in the Options field of an - // api.ExternalCA as equivalent. - return reflect.DeepEqual(a, b) + if len(a) != len(b) { + return false + } + for i := range a { + if !proto.Equal(a[i], b[i]) { + return false + } + } + return true } diff --git a/api/equality/equality_test.go b/api/equality/equality_test.go index f3e9ee129f..8b207c011a 100644 --- a/api/equality/equality_test.go +++ b/api/equality/equality_test.go @@ -15,8 +15,8 @@ func TestTasksEqualStable(t *testing.T) { for i := 0; i < taskCount; i++ { tasks[i] = &api.Task{ ID: "task-id", - Meta: api.Meta{Version: api.Version{Index: 6}}, - Spec: api.TaskSpec{ + Meta: &api.Meta{Version: &api.Version{Index: 6}}, + Spec: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{ Image: "redis:3.0.7", @@ -26,7 +26,7 @@ func TestTasksEqualStable(t *testing.T) { ServiceID: "service-id", Slot: 3, NodeID: "node-id", - Status: api.TaskStatus{State: api.TaskStateAssigned}, + Status: &api.TaskStatus{State: api.TaskStateAssigned}, DesiredState: api.TaskStateReady, } } @@ -56,17 +56,17 @@ func TestTasksEqualStable(t *testing.T) { } func TestRootCAEqualStable(t *testing.T) { - root1 := api.RootCA{ + root1 := &api.RootCA{ CACert: []byte("1"), CAKey: []byte("2"), CACertHash: "hash", } - root2 := root1 - root2.JoinTokens = api.JoinTokens{ + root2 := root1.Copy() + root2.JoinTokens = &api.JoinTokens{ Worker: "worker", Manager: "manager", } - root3 := root1 + root3 := root1.Copy() root3.RootRotation = &api.RootRotation{ CACert: []byte("3"), CAKey: []byte("4"), @@ -75,34 +75,34 @@ func TestRootCAEqualStable(t *testing.T) { for _, v := range []struct{ a, b *api.RootCA }{ {a: nil, b: nil}, - {a: &root1, b: &root1}, - {a: &root1, b: &root2}, - {a: &root3, b: &root3}, + {a: root1, b: root1}, + {a: root1, b: root2}, + {a: root3, b: root3}, } { require.True(t, RootCAEqualStable(v.a, v.b), "should be equal:\n%v\n%v\n", v.a, v.b) } - root1Permutations := []api.RootCA{root1, root1, root1} - root3Permutations := []api.RootCA{root3, root3, root3} - for _, r := range root3Permutations { - copy := *r.RootRotation - root3.RootRotation = © - } - root1Permutations[0].CACert = []byte("nope") - root1Permutations[1].CAKey = []byte("nope") - root1Permutations[2].CACertHash = "nope" - root3Permutations[0].RootRotation.CACert = []byte("nope") - root3Permutations[1].RootRotation.CAKey = []byte("nope") - root3Permutations[2].RootRotation.CrossSignedCACert = []byte("nope") + root1Perm0 := root1.Copy() + root1Perm1 := root1.Copy() + root1Perm2 := root1.Copy() + root3Perm0 := root3.Copy() + root3Perm1 := root3.Copy() + root3Perm2 := root3.Copy() + root1Perm0.CACert = []byte("nope") + root1Perm1.CAKey = []byte("nope") + root1Perm2.CACertHash = "nope" + root3Perm0.RootRotation.CACert = []byte("nope") + root3Perm1.RootRotation.CAKey = []byte("nope") + root3Perm2.RootRotation.CrossSignedCACert = []byte("nope") for _, v := range []struct{ a, b *api.RootCA }{ - {a: &root1, b: &root3}, - {a: &root1, b: &root1Permutations[0]}, - {a: &root1, b: &root1Permutations[1]}, - {a: &root1, b: &root1Permutations[2]}, - {a: &root3, b: &root3Permutations[0]}, - {a: &root3, b: &root3Permutations[1]}, - {a: &root3, b: &root3Permutations[2]}, + {a: root1, b: root3}, + {a: root1, b: root1Perm0}, + {a: root1, b: root1Perm1}, + {a: root1, b: root1Perm2}, + {a: root3, b: root3Perm0}, + {a: root3, b: root3Perm1}, + {a: root3, b: root3Perm2}, } { require.False(t, RootCAEqualStable(v.a, v.b), "should not be equal:\n%v\n%v\n", v.a, v.b) } diff --git a/api/health.pb.authwrapper.go b/api/health.pb.authwrapper.go new file mode 100644 index 0000000000..09e64d8781 --- /dev/null +++ b/api/health.pb.authwrapper.go @@ -0,0 +1,27 @@ +// Code generated by protoc-gen-goswarm. DO NOT EDIT. + +package api + +import ( + context "context" +) + +type authenticatedWrapperHealthServer struct { + local HealthServer + authorize func(context.Context, []string) error +} + +func NewAuthenticatedWrapperHealthServer(local HealthServer, authorize func(context.Context, []string) error) HealthServer { + return &authenticatedWrapperHealthServer{ + local: local, + authorize: authorize, + } +} + +func (p *authenticatedWrapperHealthServer) Check(ctx context.Context, r *HealthCheckRequest) (*HealthCheckResponse, error) { + + if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { + return nil, err + } + return p.local.Check(ctx, r) +} diff --git a/api/health.pb.deepcopy.go b/api/health.pb.deepcopy.go new file mode 100644 index 0000000000..a181b6bd69 --- /dev/null +++ b/api/health.pb.deepcopy.go @@ -0,0 +1,33 @@ +// Code generated by protoc-gen-goswarm. DO NOT EDIT. + +package api + +func (m *HealthCheckRequest) Copy() *HealthCheckRequest { + if m == nil { + return nil + } + o := &HealthCheckRequest{} + o.CopyFrom(m) + return o +} + +func (m *HealthCheckRequest) CopyFrom(src interface{}) { + + o := src.(*HealthCheckRequest) + m.Service = o.Service +} + +func (m *HealthCheckResponse) Copy() *HealthCheckResponse { + if m == nil { + return nil + } + o := &HealthCheckResponse{} + o.CopyFrom(m) + return o +} + +func (m *HealthCheckResponse) CopyFrom(src interface{}) { + + o := src.(*HealthCheckResponse) + m.Status = o.Status +} diff --git a/api/health.pb.go b/api/health.pb.go index b5795d4da0..21e08d9d37 100644 --- a/api/health.pb.go +++ b/api/health.pb.go @@ -1,38 +1,35 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: github.com/docker/swarmkit/api/health.proto +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.11 +// protoc v3.21.12 +// source: api/health.proto + +// See: https://github.com/grpc/grpc-go/blob/master/health/grpc_health_v1/health.proto +// +// We use the same health check service proto description defined in the gRPC documentation, +// including the authorization check. This requires our own implementation of the health +// package located in `manager/health`. +// +// For more infos, refer to: +// https://github.com/grpc/grpc/blob/master/doc/health-checking.md package api import ( - context "context" - fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" - raftselector "github.com/moby/swarmkit/v2/manager/raftselector" _ "github.com/moby/swarmkit/v2/protobuf/plugin" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - metadata "google.golang.org/grpc/metadata" - peer "google.golang.org/grpc/peer" - status "google.golang.org/grpc/status" - io "io" - math "math" - math_bits "math/bits" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" - strings "strings" - rafttime "time" + sync "sync" + unsafe "unsafe" ) -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package +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 HealthCheckResponse_ServingStatus int32 @@ -42,731 +39,203 @@ const ( HealthCheckResponse_NOT_SERVING HealthCheckResponse_ServingStatus = 2 ) -var HealthCheckResponse_ServingStatus_name = map[int32]string{ - 0: "UNKNOWN", - 1: "SERVING", - 2: "NOT_SERVING", -} - -var HealthCheckResponse_ServingStatus_value = map[string]int32{ - "UNKNOWN": 0, - "SERVING": 1, - "NOT_SERVING": 2, -} - -func (x HealthCheckResponse_ServingStatus) String() string { - return proto.EnumName(HealthCheckResponse_ServingStatus_name, int32(x)) -} - -func (HealthCheckResponse_ServingStatus) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_288522a148aed5ad, []int{1, 0} -} - -type HealthCheckRequest struct { - Service string `protobuf:"bytes,1,opt,name=service,proto3" json:"service,omitempty"` -} - -func (m *HealthCheckRequest) Reset() { *m = HealthCheckRequest{} } -func (*HealthCheckRequest) ProtoMessage() {} -func (*HealthCheckRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_288522a148aed5ad, []int{0} -} -func (m *HealthCheckRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *HealthCheckRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_HealthCheckRequest.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 *HealthCheckRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_HealthCheckRequest.Merge(m, src) -} -func (m *HealthCheckRequest) XXX_Size() int { - return m.Size() -} -func (m *HealthCheckRequest) XXX_DiscardUnknown() { - xxx_messageInfo_HealthCheckRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_HealthCheckRequest proto.InternalMessageInfo - -type HealthCheckResponse struct { - Status HealthCheckResponse_ServingStatus `protobuf:"varint,1,opt,name=status,proto3,enum=docker.swarmkit.v1.HealthCheckResponse_ServingStatus" json:"status,omitempty"` -} - -func (m *HealthCheckResponse) Reset() { *m = HealthCheckResponse{} } -func (*HealthCheckResponse) ProtoMessage() {} -func (*HealthCheckResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_288522a148aed5ad, []int{1} -} -func (m *HealthCheckResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *HealthCheckResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_HealthCheckResponse.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 *HealthCheckResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_HealthCheckResponse.Merge(m, src) -} -func (m *HealthCheckResponse) XXX_Size() int { - return m.Size() -} -func (m *HealthCheckResponse) XXX_DiscardUnknown() { - xxx_messageInfo_HealthCheckResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_HealthCheckResponse proto.InternalMessageInfo - -func init() { - proto.RegisterEnum("docker.swarmkit.v1.HealthCheckResponse_ServingStatus", HealthCheckResponse_ServingStatus_name, HealthCheckResponse_ServingStatus_value) - proto.RegisterType((*HealthCheckRequest)(nil), "docker.swarmkit.v1.HealthCheckRequest") - proto.RegisterType((*HealthCheckResponse)(nil), "docker.swarmkit.v1.HealthCheckResponse") -} - -func init() { - proto.RegisterFile("github.com/docker/swarmkit/api/health.proto", fileDescriptor_288522a148aed5ad) -} - -var fileDescriptor_288522a148aed5ad = []byte{ - // 328 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0x4e, 0xcf, 0x2c, 0xc9, - 0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0x4f, 0xc9, 0x4f, 0xce, 0x4e, 0x2d, 0xd2, 0x2f, 0x2e, - 0x4f, 0x2c, 0xca, 0xcd, 0xce, 0x2c, 0xd1, 0x4f, 0x2c, 0xc8, 0xd4, 0xcf, 0x48, 0x4d, 0xcc, 0x29, - 0xc9, 0xd0, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x82, 0xa8, 0xd0, 0x83, 0xa9, 0xd0, 0x2b, - 0x33, 0x94, 0x12, 0x49, 0xcf, 0x4f, 0xcf, 0x07, 0x4b, 0xeb, 0x83, 0x58, 0x10, 0x95, 0x52, 0xe6, - 0x78, 0x8c, 0x05, 0xab, 0x48, 0x2a, 0x4d, 0xd3, 0x2f, 0xc8, 0x29, 0x4d, 0xcf, 0xcc, 0x83, 0x52, - 0x10, 0x8d, 0x4a, 0x7a, 0x5c, 0x42, 0x1e, 0x60, 0x2b, 0x9d, 0x33, 0x52, 0x93, 0xb3, 0x83, 0x52, - 0x0b, 0x4b, 0x53, 0x8b, 0x4b, 0x84, 0x24, 0xb8, 0xd8, 0x8b, 0x53, 0x8b, 0xca, 0x32, 0x93, 0x53, - 0x25, 0x18, 0x15, 0x18, 0x35, 0x38, 0x83, 0x60, 0x5c, 0xa5, 0x05, 0x8c, 0x5c, 0xc2, 0x28, 0x1a, - 0x8a, 0x0b, 0xf2, 0xf3, 0x8a, 0x53, 0x85, 0x7c, 0xb9, 0xd8, 0x8a, 0x4b, 0x12, 0x4b, 0x4a, 0x8b, - 0xc1, 0x1a, 0xf8, 0x8c, 0x4c, 0xf5, 0x30, 0xdd, 0xae, 0x87, 0x45, 0xa3, 0x5e, 0x30, 0xc8, 0xe0, - 0xbc, 0xf4, 0x60, 0xb0, 0xe6, 0x20, 0xa8, 0x21, 0x4a, 0x56, 0x5c, 0xbc, 0x28, 0x12, 0x42, 0xdc, - 0x5c, 0xec, 0xa1, 0x7e, 0xde, 0x7e, 0xfe, 0xe1, 0x7e, 0x02, 0x0c, 0x20, 0x4e, 0xb0, 0x6b, 0x50, - 0x98, 0xa7, 0x9f, 0xbb, 0x00, 0xa3, 0x10, 0x3f, 0x17, 0xb7, 0x9f, 0x7f, 0x48, 0x3c, 0x4c, 0x80, - 0xc9, 0xa8, 0x92, 0x8b, 0x0d, 0x62, 0x91, 0x50, 0x3e, 0x17, 0x2b, 0xd8, 0x32, 0x21, 0x35, 0x82, - 0xae, 0x01, 0xfb, 0x5b, 0x4a, 0x9d, 0x48, 0x57, 0x2b, 0x89, 0x9e, 0x5a, 0xf7, 0x6e, 0x06, 0x13, - 0x3f, 0x17, 0x2f, 0x58, 0xa1, 0x6e, 0x6e, 0x62, 0x5e, 0x62, 0x7a, 0x6a, 0x91, 0x93, 0xca, 0x89, - 0x87, 0x72, 0x0c, 0x37, 0x1e, 0xca, 0x31, 0x34, 0x3c, 0x92, 0x63, 0x3c, 0xf1, 0x48, 0x8e, 0xf1, - 0xc2, 0x23, 0x39, 0xc6, 0x07, 0x8f, 0xe4, 0x18, 0x27, 0x3c, 0x96, 0x63, 0xb8, 0xf0, 0x58, 0x8e, - 0xe1, 0xc6, 0x63, 0x39, 0x86, 0x24, 0x36, 0x70, 0xd0, 0x1b, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, - 0xc9, 0xe8, 0xd3, 0x02, 0x0c, 0x02, 0x00, 0x00, -} - -type authenticatedWrapperHealthServer struct { - local HealthServer - authorize func(context.Context, []string) error -} - -func NewAuthenticatedWrapperHealthServer(local HealthServer, authorize func(context.Context, []string) error) HealthServer { - return &authenticatedWrapperHealthServer{ - local: local, - authorize: authorize, - } -} - -func (p *authenticatedWrapperHealthServer) Check(ctx context.Context, r *HealthCheckRequest) (*HealthCheckResponse, error) { - - if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { - return nil, err - } - return p.local.Check(ctx, r) -} - -func (m *HealthCheckRequest) Copy() *HealthCheckRequest { - if m == nil { - return nil +// Enum value maps for HealthCheckResponse_ServingStatus. +var ( + HealthCheckResponse_ServingStatus_name = map[int32]string{ + 0: "UNKNOWN", + 1: "SERVING", + 2: "NOT_SERVING", } - o := &HealthCheckRequest{} - o.CopyFrom(m) - return o -} - -func (m *HealthCheckRequest) CopyFrom(src interface{}) { - - o := src.(*HealthCheckRequest) - *m = *o -} - -func (m *HealthCheckResponse) Copy() *HealthCheckResponse { - if m == nil { - return nil + HealthCheckResponse_ServingStatus_value = map[string]int32{ + "UNKNOWN": 0, + "SERVING": 1, + "NOT_SERVING": 2, } - o := &HealthCheckResponse{} - o.CopyFrom(m) - return o -} - -func (m *HealthCheckResponse) CopyFrom(src interface{}) { - - o := src.(*HealthCheckResponse) - *m = *o -} - -// Reference imports to suppress errors if they are not otherwise used. -var _ context.Context -var _ grpc.ClientConn - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 - -// HealthClient is the client API for Health service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. -type HealthClient interface { - Check(ctx context.Context, in *HealthCheckRequest, opts ...grpc.CallOption) (*HealthCheckResponse, error) -} - -type healthClient struct { - cc *grpc.ClientConn -} - -func NewHealthClient(cc *grpc.ClientConn) HealthClient { - return &healthClient{cc} -} +) -func (c *healthClient) Check(ctx context.Context, in *HealthCheckRequest, opts ...grpc.CallOption) (*HealthCheckResponse, error) { - out := new(HealthCheckResponse) - err := c.cc.Invoke(ctx, "/docker.swarmkit.v1.Health/Check", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil +func (x HealthCheckResponse_ServingStatus) Enum() *HealthCheckResponse_ServingStatus { + p := new(HealthCheckResponse_ServingStatus) + *p = x + return p } -// HealthServer is the server API for Health service. -type HealthServer interface { - Check(context.Context, *HealthCheckRequest) (*HealthCheckResponse, error) +func (x HealthCheckResponse_ServingStatus) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } -// UnimplementedHealthServer can be embedded to have forward compatible implementations. -type UnimplementedHealthServer struct { +func (HealthCheckResponse_ServingStatus) Descriptor() protoreflect.EnumDescriptor { + return file_api_health_proto_enumTypes[0].Descriptor() } -func (*UnimplementedHealthServer) Check(ctx context.Context, req *HealthCheckRequest) (*HealthCheckResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Check not implemented") +func (HealthCheckResponse_ServingStatus) Type() protoreflect.EnumType { + return &file_api_health_proto_enumTypes[0] } -func RegisterHealthServer(s *grpc.Server, srv HealthServer) { - s.RegisterService(&_Health_serviceDesc, srv) +func (x HealthCheckResponse_ServingStatus) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } -func _Health_Check_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(HealthCheckRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(HealthServer).Check(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/docker.swarmkit.v1.Health/Check", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(HealthServer).Check(ctx, req.(*HealthCheckRequest)) - } - return interceptor(ctx, in, info, handler) +// Deprecated: Use HealthCheckResponse_ServingStatus.Descriptor instead. +func (HealthCheckResponse_ServingStatus) EnumDescriptor() ([]byte, []int) { + return file_api_health_proto_rawDescGZIP(), []int{1, 0} } -var _Health_serviceDesc = grpc.ServiceDesc{ - ServiceName: "docker.swarmkit.v1.Health", - HandlerType: (*HealthServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "Check", - Handler: _Health_Check_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "github.com/docker/swarmkit/api/health.proto", +type HealthCheckRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Service string `protobuf:"bytes,1,opt,name=service,proto3" json:"service,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *HealthCheckRequest) 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 (x *HealthCheckRequest) Reset() { + *x = HealthCheckRequest{} + mi := &file_api_health_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *HealthCheckRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) +func (x *HealthCheckRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *HealthCheckRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Service) > 0 { - i -= len(m.Service) - copy(dAtA[i:], m.Service) - i = encodeVarintHealth(dAtA, i, uint64(len(m.Service))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} +func (*HealthCheckRequest) ProtoMessage() {} -func (m *HealthCheckResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err +func (x *HealthCheckRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_health_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return dAtA[:n], nil + return mi.MessageOf(x) } -func (m *HealthCheckResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) +// Deprecated: Use HealthCheckRequest.ProtoReflect.Descriptor instead. +func (*HealthCheckRequest) Descriptor() ([]byte, []int) { + return file_api_health_proto_rawDescGZIP(), []int{0} } -func (m *HealthCheckResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Status != 0 { - i = encodeVarintHealth(dAtA, i, uint64(m.Status)) - i-- - dAtA[i] = 0x8 +func (x *HealthCheckRequest) GetService() string { + if x != nil { + return x.Service } - return len(dAtA) - i, nil + return "" } -func encodeVarintHealth(dAtA []byte, offset int, v uint64) int { - offset -= sovHealth(v) - base := offset - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return base +type HealthCheckResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Status HealthCheckResponse_ServingStatus `protobuf:"varint,1,opt,name=status,proto3,enum=docker.swarmkit.v1.HealthCheckResponse_ServingStatus" json:"status,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -type raftProxyHealthServer struct { - local HealthServer - connSelector raftselector.ConnProvider - localCtxMods, remoteCtxMods []func(context.Context) (context.Context, error) +func (x *HealthCheckResponse) Reset() { + *x = HealthCheckResponse{} + mi := &file_api_health_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func NewRaftProxyHealthServer(local HealthServer, connSelector raftselector.ConnProvider, localCtxMod, remoteCtxMod func(context.Context) (context.Context, error)) HealthServer { - redirectChecker := func(ctx context.Context) (context.Context, error) { - p, ok := peer.FromContext(ctx) - if !ok { - return ctx, status.Errorf(codes.InvalidArgument, "remote addr is not found in context") - } - addr := p.Addr.String() - md, ok := metadata.FromIncomingContext(ctx) - if ok && len(md["redirect"]) != 0 { - return ctx, status.Errorf(codes.ResourceExhausted, "more than one redirect to leader from: %s", md["redirect"]) - } - if !ok { - md = metadata.New(map[string]string{}) - } - md["redirect"] = append(md["redirect"], addr) - return metadata.NewOutgoingContext(ctx, md), nil - } - remoteMods := []func(context.Context) (context.Context, error){redirectChecker} - remoteMods = append(remoteMods, remoteCtxMod) - - var localMods []func(context.Context) (context.Context, error) - if localCtxMod != nil { - localMods = []func(context.Context) (context.Context, error){localCtxMod} - } - - return &raftProxyHealthServer{ - local: local, - connSelector: connSelector, - localCtxMods: localMods, - remoteCtxMods: remoteMods, - } -} -func (p *raftProxyHealthServer) runCtxMods(ctx context.Context, ctxMods []func(context.Context) (context.Context, error)) (context.Context, error) { - var err error - for _, mod := range ctxMods { - ctx, err = mod(ctx) - if err != nil { - return ctx, err - } - } - return ctx, nil -} -func (p *raftProxyHealthServer) pollNewLeaderConn(ctx context.Context) (*grpc.ClientConn, error) { - ticker := rafttime.NewTicker(500 * rafttime.Millisecond) - defer ticker.Stop() - for { - select { - case <-ticker.C: - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - return nil, err - } - - client := NewHealthClient(conn) - - resp, err := client.Check(ctx, &HealthCheckRequest{Service: "Raft"}) - if err != nil || resp.Status != HealthCheckResponse_SERVING { - continue - } - return conn, nil - case <-ctx.Done(): - return nil, ctx.Err() - } - } +func (x *HealthCheckResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (p *raftProxyHealthServer) Check(ctx context.Context, r *HealthCheckRequest) (*HealthCheckResponse, error) { - - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return nil, err - } - return p.local.Check(ctx, r) - } - return nil, err - } - modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return nil, err - } +func (*HealthCheckResponse) ProtoMessage() {} - resp, err := NewHealthClient(conn).Check(modCtx, r) - if err != nil { - if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { - return resp, err - } - conn, err := p.pollNewLeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - return p.local.Check(ctx, r) - } - return nil, err +func (x *HealthCheckResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_health_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return NewHealthClient(conn).Check(modCtx, r) + return ms } - return resp, err + return mi.MessageOf(x) } -func (m *HealthCheckRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Service) - if l > 0 { - n += 1 + l + sovHealth(uint64(l)) - } - return n +// Deprecated: Use HealthCheckResponse.ProtoReflect.Descriptor instead. +func (*HealthCheckResponse) Descriptor() ([]byte, []int) { + return file_api_health_proto_rawDescGZIP(), []int{1} } -func (m *HealthCheckResponse) Size() (n int) { - if m == nil { - return 0 +func (x *HealthCheckResponse) GetStatus() HealthCheckResponse_ServingStatus { + if x != nil { + return x.Status } - var l int - _ = l - if m.Status != 0 { - n += 1 + sovHealth(uint64(m.Status)) - } - return n -} - -func sovHealth(x uint64) (n int) { - return (math_bits.Len64(x|1) + 6) / 7 + return HealthCheckResponse_UNKNOWN } -func sozHealth(x uint64) (n int) { - return sovHealth(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (this *HealthCheckRequest) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&HealthCheckRequest{`, - `Service:` + fmt.Sprintf("%v", this.Service) + `,`, - `}`, - }, "") - return s -} -func (this *HealthCheckResponse) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&HealthCheckResponse{`, - `Status:` + fmt.Sprintf("%v", this.Status) + `,`, - `}`, - }, "") - return s -} -func valueToStringHealth(v interface{}) string { - rv := reflect.ValueOf(v) - if rv.IsNil() { - return "nil" - } - pv := reflect.Indirect(rv).Interface() - return fmt.Sprintf("*%v", pv) -} -func (m *HealthCheckRequest) 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 ErrIntOverflowHealth - } - 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: HealthCheckRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: HealthCheckRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Service", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHealth - } - 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 ErrInvalidLengthHealth - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthHealth - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Service = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipHealth(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthHealth - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *HealthCheckResponse) 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 ErrIntOverflowHealth - } - 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: HealthCheckResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: HealthCheckResponse: 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 ErrIntOverflowHealth - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Status |= HealthCheckResponse_ServingStatus(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipHealth(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthHealth - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } +var File_api_health_proto protoreflect.FileDescriptor - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipHealth(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - depth := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowHealth - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowHealth - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - case 1: - iNdEx += 8 - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowHealth - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLengthHealth - } - iNdEx += length - case 3: - depth++ - case 4: - if depth == 0 { - return 0, ErrUnexpectedEndOfGroupHealth - } - depth-- - case 5: - iNdEx += 4 - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - if iNdEx < 0 { - return 0, ErrInvalidLengthHealth - } - if depth == 0 { - return iNdEx, nil - } - } - return 0, io.ErrUnexpectedEOF -} +const file_api_health_proto_rawDesc = "" + + "\n" + + "\x10api/health.proto\x12\x12docker.swarmkit.v1\x1a\x1cprotobuf/plugin/plugin.proto\".\n" + + "\x12HealthCheckRequest\x12\x18\n" + + "\aservice\x18\x01 \x01(\tR\aservice\"\xa0\x01\n" + + "\x13HealthCheckResponse\x12M\n" + + "\x06status\x18\x01 \x01(\x0e25.docker.swarmkit.v1.HealthCheckResponse.ServingStatusR\x06status\":\n" + + "\rServingStatus\x12\v\n" + + "\aUNKNOWN\x10\x00\x12\v\n" + + "\aSERVING\x10\x01\x12\x0f\n" + + "\vNOT_SERVING\x10\x022y\n" + + "\x06Health\x12o\n" + + "\x05Check\x12&.docker.swarmkit.v1.HealthCheckRequest\x1a'.docker.swarmkit.v1.HealthCheckResponse\"\x15ʮ\xee\x98\x02\x0f\n" + + "\rswarm-managerB!Z\x1fgithub.com/moby/swarmkit/v2/apib\x06proto3" var ( - ErrInvalidLengthHealth = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowHealth = fmt.Errorf("proto: integer overflow") - ErrUnexpectedEndOfGroupHealth = fmt.Errorf("proto: unexpected end of group") + file_api_health_proto_rawDescOnce sync.Once + file_api_health_proto_rawDescData []byte ) + +func file_api_health_proto_rawDescGZIP() []byte { + file_api_health_proto_rawDescOnce.Do(func() { + file_api_health_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_api_health_proto_rawDesc), len(file_api_health_proto_rawDesc))) + }) + return file_api_health_proto_rawDescData +} + +var file_api_health_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_api_health_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_api_health_proto_goTypes = []any{ + (HealthCheckResponse_ServingStatus)(0), // 0: docker.swarmkit.v1.HealthCheckResponse.ServingStatus + (*HealthCheckRequest)(nil), // 1: docker.swarmkit.v1.HealthCheckRequest + (*HealthCheckResponse)(nil), // 2: docker.swarmkit.v1.HealthCheckResponse +} +var file_api_health_proto_depIdxs = []int32{ + 0, // 0: docker.swarmkit.v1.HealthCheckResponse.status:type_name -> docker.swarmkit.v1.HealthCheckResponse.ServingStatus + 1, // 1: docker.swarmkit.v1.Health.Check:input_type -> docker.swarmkit.v1.HealthCheckRequest + 2, // 2: docker.swarmkit.v1.Health.Check:output_type -> docker.swarmkit.v1.HealthCheckResponse + 2, // [2:3] is the sub-list for method output_type + 1, // [1:2] 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 +} + +func init() { file_api_health_proto_init() } +func file_api_health_proto_init() { + if File_api_health_proto != nil { + return + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_api_health_proto_rawDesc), len(file_api_health_proto_rawDesc)), + NumEnums: 1, + NumMessages: 2, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_api_health_proto_goTypes, + DependencyIndexes: file_api_health_proto_depIdxs, + EnumInfos: file_api_health_proto_enumTypes, + MessageInfos: file_api_health_proto_msgTypes, + }.Build() + File_api_health_proto = out.File + file_api_health_proto_goTypes = nil + file_api_health_proto_depIdxs = nil +} diff --git a/api/health.pb.raftproxy.go b/api/health.pb.raftproxy.go new file mode 100644 index 0000000000..e1248cfde8 --- /dev/null +++ b/api/health.pb.raftproxy.go @@ -0,0 +1,122 @@ +// Code generated by protoc-gen-goswarm. DO NOT EDIT. + +package api + +import ( + context "context" + raftselector "github.com/moby/swarmkit/v2/manager/raftselector" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + metadata "google.golang.org/grpc/metadata" + peer "google.golang.org/grpc/peer" + status "google.golang.org/grpc/status" + strings "strings" + time "time" +) + +type raftProxyHealthServer struct { + local HealthServer + connSelector raftselector.ConnProvider + localCtxMods, remoteCtxMods []func(context.Context) (context.Context, error) +} + +func NewRaftProxyHealthServer(local HealthServer, connSelector raftselector.ConnProvider, localCtxMod, remoteCtxMod func(context.Context) (context.Context, error)) HealthServer { + redirectChecker := func(ctx context.Context) (context.Context, error) { + p, ok := peer.FromContext(ctx) + if !ok { + return ctx, status.Errorf(codes.InvalidArgument, "remote addr is not found in context") + } + addr := p.Addr.String() + md, ok := metadata.FromIncomingContext(ctx) + if ok && len(md["redirect"]) != 0 { + return ctx, status.Errorf(codes.ResourceExhausted, "more than one redirect to leader from: %s", md["redirect"]) + } + if !ok { + md = metadata.New(map[string]string{}) + } + md["redirect"] = append(md["redirect"], addr) + return metadata.NewOutgoingContext(ctx, md), nil + } + remoteMods := []func(context.Context) (context.Context, error){redirectChecker} + remoteMods = append(remoteMods, remoteCtxMod) + + var localMods []func(context.Context) (context.Context, error) + if localCtxMod != nil { + localMods = []func(context.Context) (context.Context, error){localCtxMod} + } + + return &raftProxyHealthServer{ + local: local, + connSelector: connSelector, + localCtxMods: localMods, + remoteCtxMods: remoteMods, + } +} +func (p *raftProxyHealthServer) runCtxMods(ctx context.Context, ctxMods []func(context.Context) (context.Context, error)) (context.Context, error) { + var err error + for _, mod := range ctxMods { + ctx, err = mod(ctx) + if err != nil { + return ctx, err + } + } + return ctx, nil +} +func (p *raftProxyHealthServer) pollNewLeaderConn(ctx context.Context) (*grpc.ClientConn, error) { + ticker := time.NewTicker(500 * time.Millisecond) + defer ticker.Stop() + for { + select { + case <-ticker.C: + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + return nil, err + } + + client := NewHealthClient(conn) + + resp, err := client.Check(ctx, &HealthCheckRequest{Service: "Raft"}) + if err != nil || resp.Status != HealthCheckResponse_SERVING { + continue + } + return conn, nil + case <-ctx.Done(): + return nil, ctx.Err() + } + } +} + +func (p *raftProxyHealthServer) Check(ctx context.Context, r *HealthCheckRequest) (*HealthCheckResponse, error) { + + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return nil, err + } + return p.local.Check(ctx, r) + } + return nil, err + } + modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return nil, err + } + + resp, err := NewHealthClient(conn).Check(modCtx, r) + if err != nil { + if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { + return resp, err + } + conn, err := p.pollNewLeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + return p.local.Check(ctx, r) + } + return nil, err + } + return NewHealthClient(conn).Check(modCtx, r) + } + return resp, err +} diff --git a/api/health.proto b/api/health.proto index 8e066c0f85..c430d6dfda 100644 --- a/api/health.proto +++ b/api/health.proto @@ -11,8 +11,9 @@ syntax = "proto3"; package docker.swarmkit.v1; -import "gogoproto/gogo.proto"; -import "github.com/docker/swarmkit/protobuf/plugin/plugin.proto"; +option go_package = "github.com/moby/swarmkit/v2/api"; + +import "protobuf/plugin/plugin.proto"; service Health { rpc Check(HealthCheckRequest) returns (HealthCheckResponse) { diff --git a/api/health_grpc.pb.go b/api/health_grpc.pb.go new file mode 100644 index 0000000000..221fb95790 --- /dev/null +++ b/api/health_grpc.pb.go @@ -0,0 +1,128 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.6.2 +// - protoc v3.21.12 +// source: api/health.proto + +// See: https://github.com/grpc/grpc-go/blob/master/health/grpc_health_v1/health.proto +// +// We use the same health check service proto description defined in the gRPC documentation, +// including the authorization check. This requires our own implementation of the health +// package located in `manager/health`. +// +// For more infos, refer to: +// https://github.com/grpc/grpc/blob/master/doc/health-checking.md + +package api + +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.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 + +const ( + Health_Check_FullMethodName = "/docker.swarmkit.v1.Health/Check" +) + +// HealthClient is the client API for Health 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 HealthClient interface { + Check(ctx context.Context, in *HealthCheckRequest, opts ...grpc.CallOption) (*HealthCheckResponse, error) +} + +type healthClient struct { + cc grpc.ClientConnInterface +} + +func NewHealthClient(cc grpc.ClientConnInterface) HealthClient { + return &healthClient{cc} +} + +func (c *healthClient) Check(ctx context.Context, in *HealthCheckRequest, opts ...grpc.CallOption) (*HealthCheckResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(HealthCheckResponse) + err := c.cc.Invoke(ctx, Health_Check_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +// HealthServer is the server API for Health service. +// All implementations should embed UnimplementedHealthServer +// for forward compatibility. +type HealthServer interface { + Check(context.Context, *HealthCheckRequest) (*HealthCheckResponse, error) +} + +// UnimplementedHealthServer should be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedHealthServer struct{} + +func (UnimplementedHealthServer) Check(context.Context, *HealthCheckRequest) (*HealthCheckResponse, error) { + return nil, status.Error(codes.Unimplemented, "method Check not implemented") +} +func (UnimplementedHealthServer) testEmbeddedByValue() {} + +// UnsafeHealthServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to HealthServer will +// result in compilation errors. +type UnsafeHealthServer interface { + mustEmbedUnimplementedHealthServer() +} + +func RegisterHealthServer(s grpc.ServiceRegistrar, srv HealthServer) { + // If the following call panics, it indicates UnimplementedHealthServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } + s.RegisterService(&Health_ServiceDesc, srv) +} + +func _Health_Check_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(HealthCheckRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(HealthServer).Check(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Health_Check_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(HealthServer).Check(ctx, req.(*HealthCheckRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// Health_ServiceDesc is the grpc.ServiceDesc for Health service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Health_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "docker.swarmkit.v1.Health", + HandlerType: (*HealthServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Check", + Handler: _Health_Check_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "api/health.proto", +} diff --git a/api/logbroker.pb.authwrapper.go b/api/logbroker.pb.authwrapper.go new file mode 100644 index 0000000000..dab38c6653 --- /dev/null +++ b/api/logbroker.pb.authwrapper.go @@ -0,0 +1,55 @@ +// Code generated by protoc-gen-goswarm. DO NOT EDIT. + +package api + +import ( + context "context" +) + +type authenticatedWrapperLogsServer struct { + local LogsServer + authorize func(context.Context, []string) error +} + +func NewAuthenticatedWrapperLogsServer(local LogsServer, authorize func(context.Context, []string) error) LogsServer { + return &authenticatedWrapperLogsServer{ + local: local, + authorize: authorize, + } +} + +func (p *authenticatedWrapperLogsServer) SubscribeLogs(r *SubscribeLogsRequest, stream Logs_SubscribeLogsServer) error { + + if err := p.authorize(stream.Context(), []string{"swarm-manager"}); err != nil { + return err + } + return p.local.SubscribeLogs(r, stream) +} + +type authenticatedWrapperLogBrokerServer struct { + local LogBrokerServer + authorize func(context.Context, []string) error +} + +func NewAuthenticatedWrapperLogBrokerServer(local LogBrokerServer, authorize func(context.Context, []string) error) LogBrokerServer { + return &authenticatedWrapperLogBrokerServer{ + local: local, + authorize: authorize, + } +} + +func (p *authenticatedWrapperLogBrokerServer) ListenSubscriptions(r *ListenSubscriptionsRequest, stream LogBroker_ListenSubscriptionsServer) error { + + if err := p.authorize(stream.Context(), []string{"swarm-worker", "swarm-manager"}); err != nil { + return err + } + return p.local.ListenSubscriptions(r, stream) +} + +func (p *authenticatedWrapperLogBrokerServer) PublishLogs(stream LogBroker_PublishLogsServer) error { + + if err := p.authorize(stream.Context(), []string{"swarm-worker", "swarm-manager"}); err != nil { + return err + } + return p.local.PublishLogs(stream) +} diff --git a/api/logbroker.pb.deepcopy.go b/api/logbroker.pb.deepcopy.go new file mode 100644 index 0000000000..2e27121572 --- /dev/null +++ b/api/logbroker.pb.deepcopy.go @@ -0,0 +1,252 @@ +// Code generated by protoc-gen-goswarm. DO NOT EDIT. + +package api + +import ( + deepcopy "github.com/moby/swarmkit/v2/api/deepcopy" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" +) + +func (m *LogSubscriptionOptions) Copy() *LogSubscriptionOptions { + if m == nil { + return nil + } + o := &LogSubscriptionOptions{} + o.CopyFrom(m) + return o +} + +func (m *LogSubscriptionOptions) CopyFrom(src interface{}) { + + o := src.(*LogSubscriptionOptions) + if o.Streams != nil { + m.Streams = make([]LogStream, len(o.Streams)) + copy(m.Streams, o.Streams) + } + + m.Follow = o.Follow + m.Tail = o.Tail + if o.Since != nil { + m.Since = ×tamppb.Timestamp{} + deepcopy.Copy(m.Since, o.Since) + } + +} + +func (m *LogSelector) Copy() *LogSelector { + if m == nil { + return nil + } + o := &LogSelector{} + o.CopyFrom(m) + return o +} + +func (m *LogSelector) CopyFrom(src interface{}) { + + o := src.(*LogSelector) + if o.ServiceIDs != nil { + m.ServiceIDs = make([]string, len(o.ServiceIDs)) + copy(m.ServiceIDs, o.ServiceIDs) + } + + if o.NodeIDs != nil { + m.NodeIDs = make([]string, len(o.NodeIDs)) + copy(m.NodeIDs, o.NodeIDs) + } + + if o.TaskIDs != nil { + m.TaskIDs = make([]string, len(o.TaskIDs)) + copy(m.TaskIDs, o.TaskIDs) + } + +} + +func (m *LogContext) Copy() *LogContext { + if m == nil { + return nil + } + o := &LogContext{} + o.CopyFrom(m) + return o +} + +func (m *LogContext) CopyFrom(src interface{}) { + + o := src.(*LogContext) + m.ServiceID = o.ServiceID + m.NodeID = o.NodeID + m.TaskID = o.TaskID +} + +func (m *LogAttr) Copy() *LogAttr { + if m == nil { + return nil + } + o := &LogAttr{} + o.CopyFrom(m) + return o +} + +func (m *LogAttr) CopyFrom(src interface{}) { + + o := src.(*LogAttr) + m.Key = o.Key + m.Value = o.Value +} + +func (m *LogMessage) Copy() *LogMessage { + if m == nil { + return nil + } + o := &LogMessage{} + o.CopyFrom(m) + return o +} + +func (m *LogMessage) CopyFrom(src interface{}) { + + o := src.(*LogMessage) + if o.Context != nil { + m.Context = &LogContext{} + deepcopy.Copy(m.Context, o.Context) + } + + if o.Timestamp != nil { + m.Timestamp = ×tamppb.Timestamp{} + deepcopy.Copy(m.Timestamp, o.Timestamp) + } + + m.Stream = o.Stream + if o.Data != nil { + m.Data = make([]byte, len(o.Data)) + copy(m.Data, o.Data) + } + + if o.Attrs != nil { + m.Attrs = make([]*LogAttr, len(o.Attrs)) + for i := range m.Attrs { + m.Attrs[i] = &LogAttr{} + deepcopy.Copy(m.Attrs[i], o.Attrs[i]) + } + } + +} + +func (m *SubscribeLogsRequest) Copy() *SubscribeLogsRequest { + if m == nil { + return nil + } + o := &SubscribeLogsRequest{} + o.CopyFrom(m) + return o +} + +func (m *SubscribeLogsRequest) CopyFrom(src interface{}) { + + o := src.(*SubscribeLogsRequest) + if o.Selector != nil { + m.Selector = &LogSelector{} + deepcopy.Copy(m.Selector, o.Selector) + } + + if o.Options != nil { + m.Options = &LogSubscriptionOptions{} + deepcopy.Copy(m.Options, o.Options) + } + +} + +func (m *SubscribeLogsMessage) Copy() *SubscribeLogsMessage { + if m == nil { + return nil + } + o := &SubscribeLogsMessage{} + o.CopyFrom(m) + return o +} + +func (m *SubscribeLogsMessage) CopyFrom(src interface{}) { + + o := src.(*SubscribeLogsMessage) + if o.Messages != nil { + m.Messages = make([]*LogMessage, len(o.Messages)) + for i := range m.Messages { + m.Messages[i] = &LogMessage{} + deepcopy.Copy(m.Messages[i], o.Messages[i]) + } + } + +} + +func (m *ListenSubscriptionsRequest) Copy() *ListenSubscriptionsRequest { + if m == nil { + return nil + } + o := &ListenSubscriptionsRequest{} + o.CopyFrom(m) + return o +} + +func (m *ListenSubscriptionsRequest) CopyFrom(src interface{}) {} + +func (m *SubscriptionMessage) Copy() *SubscriptionMessage { + if m == nil { + return nil + } + o := &SubscriptionMessage{} + o.CopyFrom(m) + return o +} + +func (m *SubscriptionMessage) CopyFrom(src interface{}) { + + o := src.(*SubscriptionMessage) + m.ID = o.ID + if o.Selector != nil { + m.Selector = &LogSelector{} + deepcopy.Copy(m.Selector, o.Selector) + } + + if o.Options != nil { + m.Options = &LogSubscriptionOptions{} + deepcopy.Copy(m.Options, o.Options) + } + + m.Close = o.Close +} + +func (m *PublishLogsMessage) Copy() *PublishLogsMessage { + if m == nil { + return nil + } + o := &PublishLogsMessage{} + o.CopyFrom(m) + return o +} + +func (m *PublishLogsMessage) CopyFrom(src interface{}) { + + o := src.(*PublishLogsMessage) + m.SubscriptionID = o.SubscriptionID + if o.Messages != nil { + m.Messages = make([]*LogMessage, len(o.Messages)) + for i := range m.Messages { + m.Messages[i] = &LogMessage{} + deepcopy.Copy(m.Messages[i], o.Messages[i]) + } + } + + m.Close = o.Close +} + +func (m *PublishLogsResponse) Copy() *PublishLogsResponse { + if m == nil { + return nil + } + o := &PublishLogsResponse{} + o.CopyFrom(m) + return o +} + +func (m *PublishLogsResponse) CopyFrom(src interface{}) {} diff --git a/api/logbroker.pb.go b/api/logbroker.pb.go index 05cacafd78..c07aecf883 100644 --- a/api/logbroker.pb.go +++ b/api/logbroker.pb.go @@ -1,40 +1,27 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: github.com/docker/swarmkit/api/logbroker.proto +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.11 +// protoc v3.21.12 +// source: api/logbroker.proto package api import ( - context "context" - fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" - types "github.com/gogo/protobuf/types" - github_com_moby_swarmkit_v2_api_deepcopy "github.com/moby/swarmkit/v2/api/deepcopy" - raftselector "github.com/moby/swarmkit/v2/manager/raftselector" _ "github.com/moby/swarmkit/v2/protobuf/plugin" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - metadata "google.golang.org/grpc/metadata" - peer "google.golang.org/grpc/peer" - status "google.golang.org/grpc/status" - io "io" - math "math" - math_bits "math/bits" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" reflect "reflect" - strings "strings" - rafttime "time" + sync "sync" + unsafe "unsafe" ) -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package +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) +) // LogStream defines the stream from which the log message came. type LogStream int32 @@ -45,27 +32,49 @@ const ( LogStreamStderr LogStream = 2 ) -var LogStream_name = map[int32]string{ - 0: "LOG_STREAM_UNKNOWN", - 1: "LOG_STREAM_STDOUT", - 2: "LOG_STREAM_STDERR", -} +// Enum value maps for LogStream. +var ( + LogStream_name = map[int32]string{ + 0: "LOG_STREAM_UNKNOWN", + 1: "LOG_STREAM_STDOUT", + 2: "LOG_STREAM_STDERR", + } + LogStream_value = map[string]int32{ + "LOG_STREAM_UNKNOWN": 0, + "LOG_STREAM_STDOUT": 1, + "LOG_STREAM_STDERR": 2, + } +) -var LogStream_value = map[string]int32{ - "LOG_STREAM_UNKNOWN": 0, - "LOG_STREAM_STDOUT": 1, - "LOG_STREAM_STDERR": 2, +func (x LogStream) Enum() *LogStream { + p := new(LogStream) + *p = x + return p } func (x LogStream) String() string { - return proto.EnumName(LogStream_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } +func (LogStream) Descriptor() protoreflect.EnumDescriptor { + return file_api_logbroker_proto_enumTypes[0].Descriptor() +} + +func (LogStream) Type() protoreflect.EnumType { + return &file_api_logbroker_proto_enumTypes[0] +} + +func (x LogStream) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use LogStream.Descriptor instead. func (LogStream) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_d5aa8d24ac30376c, []int{0} + return file_api_logbroker_proto_rawDescGZIP(), []int{0} } type LogSubscriptionOptions struct { + state protoimpl.MessageState `protogen:"open.v1"` // Streams defines which log streams should be sent from the task source. // Empty means send all the messages. Streams []LogStream `protobuf:"varint,1,rep,name=streams,proto3,enum=docker.swarmkit.v1.LogStream" json:"streams,omitempty"` @@ -91,40 +100,68 @@ type LogSubscriptionOptions struct { // Since indicates that only log messages produced after this timestamp // should be sent. // Note: can't use stdtime because this field is nullable. - Since *types.Timestamp `protobuf:"bytes,4,opt,name=since,proto3" json:"since,omitempty"` + Since *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=since,proto3" json:"since,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *LogSubscriptionOptions) Reset() { + *x = LogSubscriptionOptions{} + mi := &file_api_logbroker_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *LogSubscriptionOptions) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *LogSubscriptionOptions) Reset() { *m = LogSubscriptionOptions{} } func (*LogSubscriptionOptions) ProtoMessage() {} -func (*LogSubscriptionOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_d5aa8d24ac30376c, []int{0} -} -func (m *LogSubscriptionOptions) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *LogSubscriptionOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_LogSubscriptionOptions.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *LogSubscriptionOptions) ProtoReflect() protoreflect.Message { + mi := &file_api_logbroker_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *LogSubscriptionOptions) XXX_Merge(src proto.Message) { - xxx_messageInfo_LogSubscriptionOptions.Merge(m, src) + +// Deprecated: Use LogSubscriptionOptions.ProtoReflect.Descriptor instead. +func (*LogSubscriptionOptions) Descriptor() ([]byte, []int) { + return file_api_logbroker_proto_rawDescGZIP(), []int{0} +} + +func (x *LogSubscriptionOptions) GetStreams() []LogStream { + if x != nil { + return x.Streams + } + return nil } -func (m *LogSubscriptionOptions) XXX_Size() int { - return m.Size() + +func (x *LogSubscriptionOptions) GetFollow() bool { + if x != nil { + return x.Follow + } + return false } -func (m *LogSubscriptionOptions) XXX_DiscardUnknown() { - xxx_messageInfo_LogSubscriptionOptions.DiscardUnknown(m) + +func (x *LogSubscriptionOptions) GetTail() int64 { + if x != nil { + return x.Tail + } + return 0 } -var xxx_messageInfo_LogSubscriptionOptions proto.InternalMessageInfo +func (x *LogSubscriptionOptions) GetSince() *timestamppb.Timestamp { + if x != nil { + return x.Since + } + return nil +} // LogSelector will match logs from ANY of the defined parameters. // @@ -132,284 +169,404 @@ var xxx_messageInfo_LogSubscriptionOptions proto.InternalMessageInfo // possible. For example, if they want to listen to all the tasks of a service, // they should use the service id, rather than specifying the individual tasks. type LogSelector struct { - ServiceIDs []string `protobuf:"bytes,1,rep,name=service_ids,json=serviceIds,proto3" json:"service_ids,omitempty"` - NodeIDs []string `protobuf:"bytes,2,rep,name=node_ids,json=nodeIds,proto3" json:"node_ids,omitempty"` - TaskIDs []string `protobuf:"bytes,3,rep,name=task_ids,json=taskIds,proto3" json:"task_ids,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + ServiceIDs []string `protobuf:"bytes,1,rep,name=service_ids,json=serviceIds,proto3" json:"service_ids,omitempty"` + NodeIDs []string `protobuf:"bytes,2,rep,name=node_ids,json=nodeIds,proto3" json:"node_ids,omitempty"` + TaskIDs []string `protobuf:"bytes,3,rep,name=task_ids,json=taskIds,proto3" json:"task_ids,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *LogSelector) Reset() { + *x = LogSelector{} + mi := &file_api_logbroker_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *LogSelector) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *LogSelector) Reset() { *m = LogSelector{} } func (*LogSelector) ProtoMessage() {} -func (*LogSelector) Descriptor() ([]byte, []int) { - return fileDescriptor_d5aa8d24ac30376c, []int{1} -} -func (m *LogSelector) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *LogSelector) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_LogSelector.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *LogSelector) ProtoReflect() protoreflect.Message { + mi := &file_api_logbroker_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *LogSelector) XXX_Merge(src proto.Message) { - xxx_messageInfo_LogSelector.Merge(m, src) + +// Deprecated: Use LogSelector.ProtoReflect.Descriptor instead. +func (*LogSelector) Descriptor() ([]byte, []int) { + return file_api_logbroker_proto_rawDescGZIP(), []int{1} } -func (m *LogSelector) XXX_Size() int { - return m.Size() + +func (x *LogSelector) GetServiceIDs() []string { + if x != nil { + return x.ServiceIDs + } + return nil } -func (m *LogSelector) XXX_DiscardUnknown() { - xxx_messageInfo_LogSelector.DiscardUnknown(m) + +func (x *LogSelector) GetNodeIDs() []string { + if x != nil { + return x.NodeIDs + } + return nil } -var xxx_messageInfo_LogSelector proto.InternalMessageInfo +func (x *LogSelector) GetTaskIDs() []string { + if x != nil { + return x.TaskIDs + } + return nil +} // LogContext marks the context from which a log message was generated. type LogContext struct { - ServiceID string `protobuf:"bytes,1,opt,name=service_id,json=serviceId,proto3" json:"service_id,omitempty"` - NodeID string `protobuf:"bytes,2,opt,name=node_id,json=nodeId,proto3" json:"node_id,omitempty"` - TaskID string `protobuf:"bytes,3,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + ServiceID string `protobuf:"bytes,1,opt,name=service_id,json=serviceId,proto3" json:"service_id,omitempty"` + NodeID string `protobuf:"bytes,2,opt,name=node_id,json=nodeId,proto3" json:"node_id,omitempty"` + TaskID string `protobuf:"bytes,3,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *LogContext) Reset() { + *x = LogContext{} + mi := &file_api_logbroker_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *LogContext) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *LogContext) Reset() { *m = LogContext{} } func (*LogContext) ProtoMessage() {} -func (*LogContext) Descriptor() ([]byte, []int) { - return fileDescriptor_d5aa8d24ac30376c, []int{2} -} -func (m *LogContext) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *LogContext) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_LogContext.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *LogContext) ProtoReflect() protoreflect.Message { + mi := &file_api_logbroker_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *LogContext) XXX_Merge(src proto.Message) { - xxx_messageInfo_LogContext.Merge(m, src) + +// Deprecated: Use LogContext.ProtoReflect.Descriptor instead. +func (*LogContext) Descriptor() ([]byte, []int) { + return file_api_logbroker_proto_rawDescGZIP(), []int{2} } -func (m *LogContext) XXX_Size() int { - return m.Size() + +func (x *LogContext) GetServiceID() string { + if x != nil { + return x.ServiceID + } + return "" } -func (m *LogContext) XXX_DiscardUnknown() { - xxx_messageInfo_LogContext.DiscardUnknown(m) + +func (x *LogContext) GetNodeID() string { + if x != nil { + return x.NodeID + } + return "" } -var xxx_messageInfo_LogContext proto.InternalMessageInfo +func (x *LogContext) GetTaskID() string { + if x != nil { + return x.TaskID + } + return "" +} // LogAttr is an extra key/value pair that may be have been set by users type LogAttr struct { - Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` - Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *LogAttr) Reset() { + *x = LogAttr{} + mi := &file_api_logbroker_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *LogAttr) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *LogAttr) Reset() { *m = LogAttr{} } func (*LogAttr) ProtoMessage() {} -func (*LogAttr) Descriptor() ([]byte, []int) { - return fileDescriptor_d5aa8d24ac30376c, []int{3} -} -func (m *LogAttr) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *LogAttr) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_LogAttr.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *LogAttr) ProtoReflect() protoreflect.Message { + mi := &file_api_logbroker_proto_msgTypes[3] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *LogAttr) XXX_Merge(src proto.Message) { - xxx_messageInfo_LogAttr.Merge(m, src) -} -func (m *LogAttr) XXX_Size() int { - return m.Size() + +// Deprecated: Use LogAttr.ProtoReflect.Descriptor instead. +func (*LogAttr) Descriptor() ([]byte, []int) { + return file_api_logbroker_proto_rawDescGZIP(), []int{3} } -func (m *LogAttr) XXX_DiscardUnknown() { - xxx_messageInfo_LogAttr.DiscardUnknown(m) + +func (x *LogAttr) GetKey() string { + if x != nil { + return x.Key + } + return "" } -var xxx_messageInfo_LogAttr proto.InternalMessageInfo +func (x *LogAttr) GetValue() string { + if x != nil { + return x.Value + } + return "" +} // LogMessage type LogMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` // Context identifies the source of the log message. - Context LogContext `protobuf:"bytes,1,opt,name=context,proto3" json:"context"` + Context *LogContext `protobuf:"bytes,1,opt,name=context,proto3" json:"context,omitempty"` // Timestamp is the time at which the message was generated. // Note: can't use stdtime because this field is nullable. - Timestamp *types.Timestamp `protobuf:"bytes,2,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + Timestamp *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Stream identifies the stream of the log message, stdout or stderr. Stream LogStream `protobuf:"varint,3,opt,name=stream,proto3,enum=docker.swarmkit.v1.LogStream" json:"stream,omitempty"` // Data is the raw log message, as generated by the application. Data []byte `protobuf:"bytes,4,opt,name=data,proto3" json:"data,omitempty"` // Attrs is a list of key value pairs representing additional log details // that may have been returned from the logger - Attrs []LogAttr `protobuf:"bytes,5,rep,name=attrs,proto3" json:"attrs"` + Attrs []*LogAttr `protobuf:"bytes,5,rep,name=attrs,proto3" json:"attrs,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *LogMessage) Reset() { + *x = LogMessage{} + mi := &file_api_logbroker_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *LogMessage) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *LogMessage) Reset() { *m = LogMessage{} } func (*LogMessage) ProtoMessage() {} -func (*LogMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_d5aa8d24ac30376c, []int{4} -} -func (m *LogMessage) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *LogMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_LogMessage.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *LogMessage) ProtoReflect() protoreflect.Message { + mi := &file_api_logbroker_proto_msgTypes[4] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LogMessage.ProtoReflect.Descriptor instead. +func (*LogMessage) Descriptor() ([]byte, []int) { + return file_api_logbroker_proto_rawDescGZIP(), []int{4} +} + +func (x *LogMessage) GetContext() *LogContext { + if x != nil { + return x.Context } + return nil } -func (m *LogMessage) XXX_Merge(src proto.Message) { - xxx_messageInfo_LogMessage.Merge(m, src) + +func (x *LogMessage) GetTimestamp() *timestamppb.Timestamp { + if x != nil { + return x.Timestamp + } + return nil } -func (m *LogMessage) XXX_Size() int { - return m.Size() + +func (x *LogMessage) GetStream() LogStream { + if x != nil { + return x.Stream + } + return LogStreamUnknown } -func (m *LogMessage) XXX_DiscardUnknown() { - xxx_messageInfo_LogMessage.DiscardUnknown(m) + +func (x *LogMessage) GetData() []byte { + if x != nil { + return x.Data + } + return nil } -var xxx_messageInfo_LogMessage proto.InternalMessageInfo +func (x *LogMessage) GetAttrs() []*LogAttr { + if x != nil { + return x.Attrs + } + return nil +} type SubscribeLogsRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` // LogSelector describes the logs to which the subscriber is - Selector *LogSelector `protobuf:"bytes,1,opt,name=selector,proto3" json:"selector,omitempty"` - Options *LogSubscriptionOptions `protobuf:"bytes,2,opt,name=options,proto3" json:"options,omitempty"` + Selector *LogSelector `protobuf:"bytes,1,opt,name=selector,proto3" json:"selector,omitempty"` + Options *LogSubscriptionOptions `protobuf:"bytes,2,opt,name=options,proto3" json:"options,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SubscribeLogsRequest) Reset() { + *x = SubscribeLogsRequest{} + mi := &file_api_logbroker_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SubscribeLogsRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *SubscribeLogsRequest) Reset() { *m = SubscribeLogsRequest{} } func (*SubscribeLogsRequest) ProtoMessage() {} -func (*SubscribeLogsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d5aa8d24ac30376c, []int{5} -} -func (m *SubscribeLogsRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *SubscribeLogsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_SubscribeLogsRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *SubscribeLogsRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_logbroker_proto_msgTypes[5] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *SubscribeLogsRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_SubscribeLogsRequest.Merge(m, src) -} -func (m *SubscribeLogsRequest) XXX_Size() int { - return m.Size() + +// Deprecated: Use SubscribeLogsRequest.ProtoReflect.Descriptor instead. +func (*SubscribeLogsRequest) Descriptor() ([]byte, []int) { + return file_api_logbroker_proto_rawDescGZIP(), []int{5} } -func (m *SubscribeLogsRequest) XXX_DiscardUnknown() { - xxx_messageInfo_SubscribeLogsRequest.DiscardUnknown(m) + +func (x *SubscribeLogsRequest) GetSelector() *LogSelector { + if x != nil { + return x.Selector + } + return nil } -var xxx_messageInfo_SubscribeLogsRequest proto.InternalMessageInfo +func (x *SubscribeLogsRequest) GetOptions() *LogSubscriptionOptions { + if x != nil { + return x.Options + } + return nil +} type SubscribeLogsMessage struct { - Messages []LogMessage `protobuf:"bytes,1,rep,name=messages,proto3" json:"messages"` + state protoimpl.MessageState `protogen:"open.v1"` + Messages []*LogMessage `protobuf:"bytes,1,rep,name=messages,proto3" json:"messages,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SubscribeLogsMessage) Reset() { + *x = SubscribeLogsMessage{} + mi := &file_api_logbroker_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SubscribeLogsMessage) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *SubscribeLogsMessage) Reset() { *m = SubscribeLogsMessage{} } func (*SubscribeLogsMessage) ProtoMessage() {} -func (*SubscribeLogsMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_d5aa8d24ac30376c, []int{6} -} -func (m *SubscribeLogsMessage) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *SubscribeLogsMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_SubscribeLogsMessage.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *SubscribeLogsMessage) ProtoReflect() protoreflect.Message { + mi := &file_api_logbroker_proto_msgTypes[6] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *SubscribeLogsMessage) XXX_Merge(src proto.Message) { - xxx_messageInfo_SubscribeLogsMessage.Merge(m, src) -} -func (m *SubscribeLogsMessage) XXX_Size() int { - return m.Size() -} -func (m *SubscribeLogsMessage) XXX_DiscardUnknown() { - xxx_messageInfo_SubscribeLogsMessage.DiscardUnknown(m) + +// Deprecated: Use SubscribeLogsMessage.ProtoReflect.Descriptor instead. +func (*SubscribeLogsMessage) Descriptor() ([]byte, []int) { + return file_api_logbroker_proto_rawDescGZIP(), []int{6} } -var xxx_messageInfo_SubscribeLogsMessage proto.InternalMessageInfo +func (x *SubscribeLogsMessage) GetMessages() []*LogMessage { + if x != nil { + return x.Messages + } + return nil +} // ListenSubscriptionsRequest is a placeholder to begin listening for // subscriptions. type ListenSubscriptionsRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ListenSubscriptionsRequest) Reset() { + *x = ListenSubscriptionsRequest{} + mi := &file_api_logbroker_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ListenSubscriptionsRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ListenSubscriptionsRequest) Reset() { *m = ListenSubscriptionsRequest{} } func (*ListenSubscriptionsRequest) ProtoMessage() {} -func (*ListenSubscriptionsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d5aa8d24ac30376c, []int{7} -} -func (m *ListenSubscriptionsRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ListenSubscriptionsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ListenSubscriptionsRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *ListenSubscriptionsRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_logbroker_proto_msgTypes[7] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } -} -func (m *ListenSubscriptionsRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_ListenSubscriptionsRequest.Merge(m, src) -} -func (m *ListenSubscriptionsRequest) XXX_Size() int { - return m.Size() -} -func (m *ListenSubscriptionsRequest) XXX_DiscardUnknown() { - xxx_messageInfo_ListenSubscriptionsRequest.DiscardUnknown(m) + return mi.MessageOf(x) } -var xxx_messageInfo_ListenSubscriptionsRequest proto.InternalMessageInfo +// Deprecated: Use ListenSubscriptionsRequest.ProtoReflect.Descriptor instead. +func (*ListenSubscriptionsRequest) Descriptor() ([]byte, []int) { + return file_api_logbroker_proto_rawDescGZIP(), []int{7} +} // SubscriptionMessage instructs the listener to start publishing messages for // the stream or end a subscription. // // If Options.Follow == false, the worker should end the subscription on its own. type SubscriptionMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` // ID identifies the subscription. ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // Selector defines which sources should be sent for the subscription. @@ -418,3475 +575,310 @@ type SubscriptionMessage struct { Options *LogSubscriptionOptions `protobuf:"bytes,3,opt,name=options,proto3" json:"options,omitempty"` // Close will be true if the node should shutdown the subscription with the // provided identifier. - Close bool `protobuf:"varint,4,opt,name=close,proto3" json:"close,omitempty"` -} - -func (m *SubscriptionMessage) Reset() { *m = SubscriptionMessage{} } -func (*SubscriptionMessage) ProtoMessage() {} -func (*SubscriptionMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_d5aa8d24ac30376c, []int{8} -} -func (m *SubscriptionMessage) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *SubscriptionMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_SubscriptionMessage.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 *SubscriptionMessage) XXX_Merge(src proto.Message) { - xxx_messageInfo_SubscriptionMessage.Merge(m, src) -} -func (m *SubscriptionMessage) XXX_Size() int { - return m.Size() + Close bool `protobuf:"varint,4,opt,name=close,proto3" json:"close,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *SubscriptionMessage) XXX_DiscardUnknown() { - xxx_messageInfo_SubscriptionMessage.DiscardUnknown(m) -} - -var xxx_messageInfo_SubscriptionMessage proto.InternalMessageInfo -type PublishLogsMessage struct { - // SubscriptionID identifies which subscription the set of messages should - // be sent to. We can think of this as a "mail box" for the subscription. - SubscriptionID string `protobuf:"bytes,1,opt,name=subscription_id,json=subscriptionId,proto3" json:"subscription_id,omitempty"` - // Messages is the log message for publishing. - Messages []LogMessage `protobuf:"bytes,2,rep,name=messages,proto3" json:"messages"` - // Close is a boolean for whether or not the client has completed its log - // stream. When close is called, the manager can hang up the subscription. - // Any further logs from this subscription are an error condition. Any - // messages included when close is set can be discarded - Close bool `protobuf:"varint,3,opt,name=close,proto3" json:"close,omitempty"` +func (x *SubscriptionMessage) Reset() { + *x = SubscriptionMessage{} + mi := &file_api_logbroker_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *PublishLogsMessage) Reset() { *m = PublishLogsMessage{} } -func (*PublishLogsMessage) ProtoMessage() {} -func (*PublishLogsMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_d5aa8d24ac30376c, []int{9} -} -func (m *PublishLogsMessage) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *PublishLogsMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_PublishLogsMessage.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 *PublishLogsMessage) XXX_Merge(src proto.Message) { - xxx_messageInfo_PublishLogsMessage.Merge(m, src) -} -func (m *PublishLogsMessage) XXX_Size() int { - return m.Size() -} -func (m *PublishLogsMessage) XXX_DiscardUnknown() { - xxx_messageInfo_PublishLogsMessage.DiscardUnknown(m) +func (x *SubscriptionMessage) String() string { + return protoimpl.X.MessageStringOf(x) } -var xxx_messageInfo_PublishLogsMessage proto.InternalMessageInfo - -type PublishLogsResponse struct { -} +func (*SubscriptionMessage) ProtoMessage() {} -func (m *PublishLogsResponse) Reset() { *m = PublishLogsResponse{} } -func (*PublishLogsResponse) ProtoMessage() {} -func (*PublishLogsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d5aa8d24ac30376c, []int{10} -} -func (m *PublishLogsResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *PublishLogsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_PublishLogsResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err +func (x *SubscriptionMessage) ProtoReflect() protoreflect.Message { + mi := &file_api_logbroker_proto_msgTypes[8] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil - } -} -func (m *PublishLogsResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_PublishLogsResponse.Merge(m, src) -} -func (m *PublishLogsResponse) XXX_Size() int { - return m.Size() -} -func (m *PublishLogsResponse) XXX_DiscardUnknown() { - xxx_messageInfo_PublishLogsResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_PublishLogsResponse proto.InternalMessageInfo - -func init() { - proto.RegisterEnum("docker.swarmkit.v1.LogStream", LogStream_name, LogStream_value) - proto.RegisterType((*LogSubscriptionOptions)(nil), "docker.swarmkit.v1.LogSubscriptionOptions") - proto.RegisterType((*LogSelector)(nil), "docker.swarmkit.v1.LogSelector") - proto.RegisterType((*LogContext)(nil), "docker.swarmkit.v1.LogContext") - proto.RegisterType((*LogAttr)(nil), "docker.swarmkit.v1.LogAttr") - proto.RegisterType((*LogMessage)(nil), "docker.swarmkit.v1.LogMessage") - proto.RegisterType((*SubscribeLogsRequest)(nil), "docker.swarmkit.v1.SubscribeLogsRequest") - proto.RegisterType((*SubscribeLogsMessage)(nil), "docker.swarmkit.v1.SubscribeLogsMessage") - proto.RegisterType((*ListenSubscriptionsRequest)(nil), "docker.swarmkit.v1.ListenSubscriptionsRequest") - proto.RegisterType((*SubscriptionMessage)(nil), "docker.swarmkit.v1.SubscriptionMessage") - proto.RegisterType((*PublishLogsMessage)(nil), "docker.swarmkit.v1.PublishLogsMessage") - proto.RegisterType((*PublishLogsResponse)(nil), "docker.swarmkit.v1.PublishLogsResponse") -} - -func init() { - proto.RegisterFile("github.com/docker/swarmkit/api/logbroker.proto", fileDescriptor_d5aa8d24ac30376c) -} - -var fileDescriptor_d5aa8d24ac30376c = []byte{ - // 979 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x95, 0x41, 0x6f, 0x1b, 0x45, - 0x14, 0xc7, 0x3d, 0xeb, 0xc4, 0x8e, 0x9f, 0x9b, 0xc4, 0x9d, 0xa4, 0x91, 0x65, 0xe8, 0xda, 0xda, - 0xa2, 0x62, 0x45, 0x65, 0xdd, 0x1a, 0xa1, 0x22, 0x45, 0x42, 0xd4, 0xa4, 0x42, 0x16, 0x6e, 0x82, - 0x26, 0x8e, 0xe0, 0x16, 0xad, 0xed, 0xe9, 0x76, 0xe5, 0xf5, 0x8e, 0xd9, 0x19, 0x27, 0x20, 0x71, - 0xe0, 0x50, 0x24, 0x94, 0x03, 0xe2, 0x82, 0x04, 0x87, 0x9e, 0xe8, 0x05, 0x21, 0x71, 0xe1, 0xc6, - 0x07, 0x40, 0x11, 0xa7, 0x1e, 0x7b, 0xb2, 0xe8, 0xe6, 0xce, 0x67, 0x40, 0x3b, 0xb3, 0x5e, 0x6f, - 0xb0, 0x9d, 0xa2, 0x72, 0xb1, 0x67, 0x3c, 0xbf, 0xb7, 0xef, 0xff, 0xfe, 0xf3, 0xde, 0x1a, 0x4c, - 0xdb, 0x11, 0x8f, 0x46, 0x1d, 0xb3, 0xcb, 0x06, 0xb5, 0x1e, 0xeb, 0xf6, 0xa9, 0x5f, 0xe3, 0x27, - 0x96, 0x3f, 0xe8, 0x3b, 0xa2, 0x66, 0x0d, 0x9d, 0x9a, 0xcb, 0xec, 0x8e, 0xcf, 0xfa, 0xd4, 0x37, - 0x87, 0x3e, 0x13, 0x0c, 0x63, 0x05, 0x99, 0x13, 0xc8, 0x3c, 0xbe, 0x53, 0xda, 0xb4, 0x99, 0xcd, - 0xe4, 0x71, 0x2d, 0x5c, 0x29, 0xb2, 0x54, 0xb6, 0x19, 0xb3, 0x5d, 0x5a, 0x93, 0xbb, 0xce, 0xe8, - 0x61, 0x4d, 0x38, 0x03, 0xca, 0x85, 0x35, 0x18, 0x46, 0xc0, 0xdd, 0x4b, 0x52, 0xc7, 0x41, 0x43, - 0x77, 0x64, 0x3b, 0x5e, 0xf4, 0xa5, 0x02, 0x8d, 0xdf, 0x10, 0x6c, 0xb5, 0x98, 0x7d, 0x30, 0xea, - 0xf0, 0xae, 0xef, 0x0c, 0x85, 0xc3, 0xbc, 0x7d, 0xf9, 0xc9, 0xf1, 0x0e, 0x64, 0xb9, 0xf0, 0xa9, - 0x35, 0xe0, 0x45, 0x54, 0x49, 0x57, 0xd7, 0xea, 0xd7, 0xcd, 0x59, 0xc1, 0x66, 0x18, 0x2c, 0xa9, - 0x86, 0x56, 0x48, 0x91, 0x49, 0x04, 0xde, 0x82, 0xcc, 0x43, 0xe6, 0xba, 0xec, 0xa4, 0xa8, 0x55, - 0x50, 0x75, 0x85, 0x44, 0x3b, 0x8c, 0x61, 0x49, 0x58, 0x8e, 0x5b, 0x4c, 0x57, 0x50, 0x35, 0x4d, - 0xe4, 0x1a, 0xdf, 0x86, 0x65, 0xee, 0x78, 0x5d, 0x5a, 0x5c, 0xaa, 0xa0, 0x6a, 0xbe, 0x5e, 0x32, - 0x55, 0xb5, 0xe6, 0x44, 0xb8, 0xd9, 0x9e, 0x54, 0x4b, 0x14, 0x68, 0x7c, 0x8b, 0x20, 0x1f, 0x26, - 0xa6, 0x2e, 0xed, 0x0a, 0xe6, 0xe3, 0x1a, 0xe4, 0x39, 0xf5, 0x8f, 0x9d, 0x2e, 0x3d, 0x72, 0x7a, - 0x4a, 0x6e, 0xae, 0xb1, 0x16, 0x8c, 0xcb, 0x70, 0xa0, 0x7e, 0x6e, 0xee, 0x72, 0x02, 0x11, 0xd2, - 0xec, 0x71, 0x7c, 0x13, 0x56, 0x3c, 0xd6, 0x53, 0xb4, 0x26, 0xe9, 0x7c, 0x30, 0x2e, 0x67, 0xf7, - 0x58, 0x4f, 0xa2, 0xd9, 0xf0, 0x30, 0xe2, 0x84, 0xc5, 0xfb, 0x92, 0x4b, 0x4f, 0xb9, 0xb6, 0xc5, - 0xfb, 0x92, 0x0b, 0x0f, 0x9b, 0x3d, 0x6e, 0x3c, 0x46, 0x00, 0x2d, 0x66, 0x7f, 0xc0, 0x3c, 0x41, - 0x3f, 0x17, 0xf8, 0x16, 0xc0, 0x54, 0x4f, 0x11, 0x55, 0x50, 0x35, 0xd7, 0x58, 0x0d, 0xc6, 0xe5, - 0x5c, 0x2c, 0x87, 0xe4, 0x62, 0x35, 0xf8, 0x06, 0x64, 0x23, 0x31, 0xd2, 0xac, 0x5c, 0x03, 0x82, - 0x71, 0x39, 0xa3, 0xb4, 0x90, 0x8c, 0x92, 0x12, 0x42, 0x91, 0x12, 0xe9, 0x5d, 0x04, 0x29, 0x21, - 0x24, 0xa3, 0x74, 0x18, 0x77, 0x20, 0xdb, 0x62, 0xf6, 0x3d, 0x21, 0x7c, 0x5c, 0x80, 0x74, 0x9f, - 0x7e, 0xa1, 0x72, 0x93, 0x70, 0x89, 0x37, 0x61, 0xf9, 0xd8, 0x72, 0x47, 0x54, 0x25, 0x21, 0x6a, - 0x63, 0x9c, 0x6a, 0x52, 0xf9, 0x03, 0xca, 0xb9, 0x65, 0x53, 0xfc, 0x1e, 0x64, 0xbb, 0xaa, 0x08, - 0x19, 0x9a, 0xaf, 0xeb, 0x0b, 0x2e, 0x3d, 0x2a, 0xb5, 0xb1, 0x74, 0x36, 0x2e, 0xa7, 0xc8, 0x24, - 0x08, 0xbf, 0x0b, 0xb9, 0xb8, 0x37, 0x65, 0xa2, 0xcb, 0xef, 0x73, 0x0a, 0xe3, 0x77, 0x20, 0xa3, - 0x9a, 0x47, 0xd6, 0xf7, 0xb2, 0x6e, 0x23, 0x11, 0x1c, 0x36, 0x54, 0xcf, 0x12, 0x96, 0xec, 0x9d, - 0x2b, 0x44, 0xae, 0xf1, 0x5d, 0x58, 0xb6, 0x84, 0xf0, 0x79, 0x71, 0xb9, 0x92, 0xae, 0xe6, 0xeb, - 0xaf, 0x2d, 0x78, 0x52, 0xe8, 0x53, 0xa4, 0x5f, 0xf1, 0xc6, 0x8f, 0x08, 0x36, 0xa3, 0x51, 0xe8, - 0xd0, 0x16, 0xb3, 0x39, 0xa1, 0x9f, 0x8d, 0x28, 0x17, 0x78, 0x07, 0x56, 0x78, 0xd4, 0x6c, 0x91, - 0x2f, 0xe5, 0x45, 0xf2, 0x22, 0x8c, 0xc4, 0x01, 0x78, 0x17, 0xb2, 0x4c, 0xcd, 0x54, 0xe4, 0xc8, - 0xf6, 0xa2, 0xd8, 0xd9, 0x29, 0x24, 0x93, 0x50, 0xe3, 0xd3, 0x7f, 0x49, 0x9b, 0xdc, 0xd8, 0xfb, - 0xb0, 0x32, 0x50, 0x4b, 0xd5, 0xf8, 0x8b, 0xaf, 0x2c, 0x8a, 0x88, 0x4a, 0x8e, 0xa3, 0x8c, 0xd7, - 0xa1, 0xd4, 0x72, 0xb8, 0xa0, 0x5e, 0x32, 0xff, 0xa4, 0x74, 0xe3, 0x0f, 0x04, 0x1b, 0xc9, 0x83, - 0x49, 0xde, 0x2d, 0xd0, 0xe2, 0xde, 0xce, 0x04, 0xe3, 0xb2, 0xd6, 0xdc, 0x25, 0x9a, 0xd3, 0xbb, - 0x60, 0x95, 0xf6, 0x3f, 0xac, 0x4a, 0xbf, 0xb2, 0x55, 0x61, 0xa7, 0x77, 0x5d, 0xc6, 0xd5, 0x0b, - 0x65, 0x85, 0xa8, 0x8d, 0xf1, 0x33, 0x02, 0xfc, 0xf1, 0xa8, 0xe3, 0x3a, 0xfc, 0x51, 0xd2, 0xbf, - 0x1d, 0x58, 0xe7, 0x89, 0x87, 0x4d, 0x07, 0x16, 0x07, 0xe3, 0xf2, 0x5a, 0x32, 0x4f, 0x73, 0x97, - 0xac, 0x25, 0xd1, 0x66, 0xef, 0x82, 0xf9, 0xda, 0xab, 0x98, 0x3f, 0xd5, 0x9a, 0x4e, 0x6a, 0xbd, - 0x06, 0x1b, 0x09, 0xa9, 0x84, 0xf2, 0x21, 0xf3, 0x38, 0xdd, 0x7e, 0x8a, 0x20, 0x17, 0x8f, 0x00, - 0xbe, 0x05, 0xb8, 0xb5, 0xff, 0xe1, 0xd1, 0x41, 0x9b, 0xdc, 0xbf, 0xf7, 0xe0, 0xe8, 0x70, 0xef, - 0xa3, 0xbd, 0xfd, 0x4f, 0xf6, 0x0a, 0xa9, 0xd2, 0xe6, 0xe9, 0x93, 0x4a, 0x21, 0xc6, 0x0e, 0xbd, - 0xbe, 0xc7, 0x4e, 0x3c, 0xbc, 0x0d, 0x57, 0x13, 0xf4, 0x41, 0x7b, 0x77, 0xff, 0xb0, 0x5d, 0x40, - 0xa5, 0x8d, 0xd3, 0x27, 0x95, 0xf5, 0x18, 0x3e, 0x10, 0x3d, 0x36, 0x12, 0xb3, 0xec, 0x7d, 0x42, - 0x0a, 0xda, 0x2c, 0x4b, 0x7d, 0xbf, 0x74, 0xf5, 0x9b, 0x9f, 0xf4, 0xd4, 0xef, 0x4f, 0xf5, 0xa9, - 0xb0, 0xfa, 0x63, 0x04, 0x4b, 0xa1, 0x6e, 0xfc, 0x25, 0xac, 0x5e, 0xe8, 0x59, 0x5c, 0x9d, 0xe7, - 0xce, 0xbc, 0x89, 0x2b, 0xbd, 0x9c, 0x8c, 0x1c, 0x35, 0xae, 0xfd, 0xf9, 0xeb, 0xdf, 0x3f, 0x68, - 0xeb, 0xb0, 0x2a, 0xc9, 0xb7, 0x06, 0x96, 0x67, 0xd9, 0xd4, 0xbf, 0x8d, 0xea, 0xbf, 0x68, 0xd2, - 0xad, 0x86, 0xfc, 0xcf, 0xc5, 0xdf, 0x23, 0xd8, 0x98, 0xd3, 0xe6, 0xd8, 0x9c, 0x7b, 0x61, 0x0b, - 0xe7, 0xa1, 0xf4, 0xe6, 0x25, 0xc2, 0x92, 0x03, 0x62, 0xdc, 0x90, 0xba, 0xae, 0xc3, 0x15, 0xa5, - 0xeb, 0x84, 0xf9, 0x7d, 0xea, 0xcf, 0xa8, 0xc4, 0x5f, 0x23, 0xc8, 0x27, 0xee, 0x1a, 0xdf, 0x9c, - 0xf7, 0xfc, 0xd9, 0xbe, 0x9d, 0xaf, 0x63, 0x4e, 0xd3, 0xfc, 0x27, 0x1d, 0x55, 0xd4, 0x78, 0xe3, - 0xec, 0x85, 0x9e, 0x7a, 0xfe, 0x42, 0x4f, 0x7d, 0x15, 0xe8, 0xe8, 0x2c, 0xd0, 0xd1, 0xb3, 0x40, - 0x47, 0x7f, 0x05, 0x3a, 0xfa, 0xee, 0x5c, 0x4f, 0x3d, 0x3b, 0xd7, 0x53, 0xcf, 0xcf, 0xf5, 0x54, - 0x27, 0x23, 0x5f, 0xe2, 0x6f, 0xff, 0x13, 0x00, 0x00, 0xff, 0xff, 0x00, 0xba, 0x6b, 0x91, 0xec, - 0x08, 0x00, 0x00, -} - -type authenticatedWrapperLogsServer struct { - local LogsServer - authorize func(context.Context, []string) error -} - -func NewAuthenticatedWrapperLogsServer(local LogsServer, authorize func(context.Context, []string) error) LogsServer { - return &authenticatedWrapperLogsServer{ - local: local, - authorize: authorize, - } -} - -func (p *authenticatedWrapperLogsServer) SubscribeLogs(r *SubscribeLogsRequest, stream Logs_SubscribeLogsServer) error { - - if err := p.authorize(stream.Context(), []string{"swarm-manager"}); err != nil { - return err - } - return p.local.SubscribeLogs(r, stream) -} - -type authenticatedWrapperLogBrokerServer struct { - local LogBrokerServer - authorize func(context.Context, []string) error -} - -func NewAuthenticatedWrapperLogBrokerServer(local LogBrokerServer, authorize func(context.Context, []string) error) LogBrokerServer { - return &authenticatedWrapperLogBrokerServer{ - local: local, - authorize: authorize, - } -} - -func (p *authenticatedWrapperLogBrokerServer) ListenSubscriptions(r *ListenSubscriptionsRequest, stream LogBroker_ListenSubscriptionsServer) error { - - if err := p.authorize(stream.Context(), []string{"swarm-worker", "swarm-manager"}); err != nil { - return err - } - return p.local.ListenSubscriptions(r, stream) -} - -func (p *authenticatedWrapperLogBrokerServer) PublishLogs(stream LogBroker_PublishLogsServer) error { - - if err := p.authorize(stream.Context(), []string{"swarm-worker", "swarm-manager"}); err != nil { - return err + return ms } - return p.local.PublishLogs(stream) + return mi.MessageOf(x) } -func (m *LogSubscriptionOptions) Copy() *LogSubscriptionOptions { - if m == nil { - return nil - } - o := &LogSubscriptionOptions{} - o.CopyFrom(m) - return o +// Deprecated: Use SubscriptionMessage.ProtoReflect.Descriptor instead. +func (*SubscriptionMessage) Descriptor() ([]byte, []int) { + return file_api_logbroker_proto_rawDescGZIP(), []int{8} } -func (m *LogSubscriptionOptions) CopyFrom(src interface{}) { - - o := src.(*LogSubscriptionOptions) - *m = *o - if o.Streams != nil { - m.Streams = make([]LogStream, len(o.Streams)) - copy(m.Streams, o.Streams) - } - - if o.Since != nil { - m.Since = &types.Timestamp{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Since, o.Since) +func (x *SubscriptionMessage) GetID() string { + if x != nil { + return x.ID } + return "" } -func (m *LogSelector) Copy() *LogSelector { - if m == nil { - return nil +func (x *SubscriptionMessage) GetSelector() *LogSelector { + if x != nil { + return x.Selector } - o := &LogSelector{} - o.CopyFrom(m) - return o + return nil } -func (m *LogSelector) CopyFrom(src interface{}) { - - o := src.(*LogSelector) - *m = *o - if o.ServiceIDs != nil { - m.ServiceIDs = make([]string, len(o.ServiceIDs)) - copy(m.ServiceIDs, o.ServiceIDs) - } - - if o.NodeIDs != nil { - m.NodeIDs = make([]string, len(o.NodeIDs)) - copy(m.NodeIDs, o.NodeIDs) +func (x *SubscriptionMessage) GetOptions() *LogSubscriptionOptions { + if x != nil { + return x.Options } - - if o.TaskIDs != nil { - m.TaskIDs = make([]string, len(o.TaskIDs)) - copy(m.TaskIDs, o.TaskIDs) - } - + return nil } -func (m *LogContext) Copy() *LogContext { - if m == nil { - return nil +func (x *SubscriptionMessage) GetClose() bool { + if x != nil { + return x.Close } - o := &LogContext{} - o.CopyFrom(m) - return o + return false } -func (m *LogContext) CopyFrom(src interface{}) { - - o := src.(*LogContext) - *m = *o -} - -func (m *LogAttr) Copy() *LogAttr { - if m == nil { - return nil - } - o := &LogAttr{} - o.CopyFrom(m) - return o +type PublishLogsMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + // SubscriptionID identifies which subscription the set of messages should + // be sent to. We can think of this as a "mail box" for the subscription. + SubscriptionID string `protobuf:"bytes,1,opt,name=subscription_id,json=subscriptionId,proto3" json:"subscription_id,omitempty"` + // Messages is the log message for publishing. + Messages []*LogMessage `protobuf:"bytes,2,rep,name=messages,proto3" json:"messages,omitempty"` + // Close is a boolean for whether or not the client has completed its log + // stream. When close is called, the manager can hang up the subscription. + // Any further logs from this subscription are an error condition. Any + // messages included when close is set can be discarded + Close bool `protobuf:"varint,3,opt,name=close,proto3" json:"close,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *LogAttr) CopyFrom(src interface{}) { - - o := src.(*LogAttr) - *m = *o +func (x *PublishLogsMessage) Reset() { + *x = PublishLogsMessage{} + mi := &file_api_logbroker_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *LogMessage) Copy() *LogMessage { - if m == nil { - return nil - } - o := &LogMessage{} - o.CopyFrom(m) - return o +func (x *PublishLogsMessage) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *LogMessage) CopyFrom(src interface{}) { +func (*PublishLogsMessage) ProtoMessage() {} - o := src.(*LogMessage) - *m = *o - github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Context, &o.Context) - if o.Timestamp != nil { - m.Timestamp = &types.Timestamp{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Timestamp, o.Timestamp) - } - if o.Data != nil { - m.Data = make([]byte, len(o.Data)) - copy(m.Data, o.Data) - } - if o.Attrs != nil { - m.Attrs = make([]LogAttr, len(o.Attrs)) - for i := range m.Attrs { - github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Attrs[i], &o.Attrs[i]) +func (x *PublishLogsMessage) ProtoReflect() protoreflect.Message { + mi := &file_api_logbroker_proto_msgTypes[9] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } + return ms } - -} - -func (m *SubscribeLogsRequest) Copy() *SubscribeLogsRequest { - if m == nil { - return nil - } - o := &SubscribeLogsRequest{} - o.CopyFrom(m) - return o + return mi.MessageOf(x) } -func (m *SubscribeLogsRequest) CopyFrom(src interface{}) { - - o := src.(*SubscribeLogsRequest) - *m = *o - if o.Selector != nil { - m.Selector = &LogSelector{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Selector, o.Selector) - } - if o.Options != nil { - m.Options = &LogSubscriptionOptions{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Options, o.Options) - } +// Deprecated: Use PublishLogsMessage.ProtoReflect.Descriptor instead. +func (*PublishLogsMessage) Descriptor() ([]byte, []int) { + return file_api_logbroker_proto_rawDescGZIP(), []int{9} } -func (m *SubscribeLogsMessage) Copy() *SubscribeLogsMessage { - if m == nil { - return nil +func (x *PublishLogsMessage) GetSubscriptionID() string { + if x != nil { + return x.SubscriptionID } - o := &SubscribeLogsMessage{} - o.CopyFrom(m) - return o + return "" } -func (m *SubscribeLogsMessage) CopyFrom(src interface{}) { - - o := src.(*SubscribeLogsMessage) - *m = *o - if o.Messages != nil { - m.Messages = make([]LogMessage, len(o.Messages)) - for i := range m.Messages { - github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Messages[i], &o.Messages[i]) - } +func (x *PublishLogsMessage) GetMessages() []*LogMessage { + if x != nil { + return x.Messages } - + return nil } -func (m *ListenSubscriptionsRequest) Copy() *ListenSubscriptionsRequest { - if m == nil { - return nil +func (x *PublishLogsMessage) GetClose() bool { + if x != nil { + return x.Close } - o := &ListenSubscriptionsRequest{} - o.CopyFrom(m) - return o + return false } -func (m *ListenSubscriptionsRequest) CopyFrom(src interface{}) {} -func (m *SubscriptionMessage) Copy() *SubscriptionMessage { - if m == nil { - return nil - } - o := &SubscriptionMessage{} - o.CopyFrom(m) - return o +type PublishLogsResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *SubscriptionMessage) CopyFrom(src interface{}) { - - o := src.(*SubscriptionMessage) - *m = *o - if o.Selector != nil { - m.Selector = &LogSelector{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Selector, o.Selector) - } - if o.Options != nil { - m.Options = &LogSubscriptionOptions{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Options, o.Options) - } +func (x *PublishLogsResponse) Reset() { + *x = PublishLogsResponse{} + mi := &file_api_logbroker_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *PublishLogsMessage) Copy() *PublishLogsMessage { - if m == nil { - return nil - } - o := &PublishLogsMessage{} - o.CopyFrom(m) - return o +func (x *PublishLogsResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *PublishLogsMessage) CopyFrom(src interface{}) { +func (*PublishLogsResponse) ProtoMessage() {} - o := src.(*PublishLogsMessage) - *m = *o - if o.Messages != nil { - m.Messages = make([]LogMessage, len(o.Messages)) - for i := range m.Messages { - github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Messages[i], &o.Messages[i]) +func (x *PublishLogsResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_logbroker_proto_msgTypes[10] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } + return ms } - -} - -func (m *PublishLogsResponse) Copy() *PublishLogsResponse { - if m == nil { - return nil - } - o := &PublishLogsResponse{} - o.CopyFrom(m) - return o + return mi.MessageOf(x) } -func (m *PublishLogsResponse) CopyFrom(src interface{}) {} - -// Reference imports to suppress errors if they are not otherwise used. -var _ context.Context -var _ grpc.ClientConn - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 +// Deprecated: Use PublishLogsResponse.ProtoReflect.Descriptor instead. +func (*PublishLogsResponse) Descriptor() ([]byte, []int) { + return file_api_logbroker_proto_rawDescGZIP(), []int{10} +} + +var File_api_logbroker_proto protoreflect.FileDescriptor + +const file_api_logbroker_proto_rawDesc = "" + + "\n" + + "\x13api/logbroker.proto\x12\x12docker.swarmkit.v1\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1cprotobuf/plugin/plugin.proto\"\xb3\x01\n" + + "\x16LogSubscriptionOptions\x12;\n" + + "\astreams\x18\x01 \x03(\x0e2\x1d.docker.swarmkit.v1.LogStreamB\x02\x10\x00R\astreams\x12\x16\n" + + "\x06follow\x18\x02 \x01(\bR\x06follow\x12\x12\n" + + "\x04tail\x18\x03 \x01(\x03R\x04tail\x120\n" + + "\x05since\x18\x04 \x01(\v2\x1a.google.protobuf.TimestampR\x05since\"d\n" + + "\vLogSelector\x12\x1f\n" + + "\vservice_ids\x18\x01 \x03(\tR\n" + + "serviceIds\x12\x19\n" + + "\bnode_ids\x18\x02 \x03(\tR\anodeIds\x12\x19\n" + + "\btask_ids\x18\x03 \x03(\tR\ataskIds\"]\n" + + "\n" + + "LogContext\x12\x1d\n" + + "\n" + + "service_id\x18\x01 \x01(\tR\tserviceId\x12\x17\n" + + "\anode_id\x18\x02 \x01(\tR\x06nodeId\x12\x17\n" + + "\atask_id\x18\x03 \x01(\tR\x06taskId\"1\n" + + "\aLogAttr\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value\"\xfe\x01\n" + + "\n" + + "LogMessage\x128\n" + + "\acontext\x18\x01 \x01(\v2\x1e.docker.swarmkit.v1.LogContextR\acontext\x128\n" + + "\ttimestamp\x18\x02 \x01(\v2\x1a.google.protobuf.TimestampR\ttimestamp\x125\n" + + "\x06stream\x18\x03 \x01(\x0e2\x1d.docker.swarmkit.v1.LogStreamR\x06stream\x12\x12\n" + + "\x04data\x18\x04 \x01(\fR\x04data\x121\n" + + "\x05attrs\x18\x05 \x03(\v2\x1b.docker.swarmkit.v1.LogAttrR\x05attrs\"\x99\x01\n" + + "\x14SubscribeLogsRequest\x12;\n" + + "\bselector\x18\x01 \x01(\v2\x1f.docker.swarmkit.v1.LogSelectorR\bselector\x12D\n" + + "\aoptions\x18\x02 \x01(\v2*.docker.swarmkit.v1.LogSubscriptionOptionsR\aoptions\"R\n" + + "\x14SubscribeLogsMessage\x12:\n" + + "\bmessages\x18\x01 \x03(\v2\x1e.docker.swarmkit.v1.LogMessageR\bmessages\"\x1c\n" + + "\x1aListenSubscriptionsRequest\"\xbe\x01\n" + + "\x13SubscriptionMessage\x12\x0e\n" + + "\x02id\x18\x01 \x01(\tR\x02id\x12;\n" + + "\bselector\x18\x02 \x01(\v2\x1f.docker.swarmkit.v1.LogSelectorR\bselector\x12D\n" + + "\aoptions\x18\x03 \x01(\v2*.docker.swarmkit.v1.LogSubscriptionOptionsR\aoptions\x12\x14\n" + + "\x05close\x18\x04 \x01(\bR\x05close\"\x8f\x01\n" + + "\x12PublishLogsMessage\x12'\n" + + "\x0fsubscription_id\x18\x01 \x01(\tR\x0esubscriptionId\x12:\n" + + "\bmessages\x18\x02 \x03(\v2\x1e.docker.swarmkit.v1.LogMessageR\bmessages\x12\x14\n" + + "\x05close\x18\x03 \x01(\bR\x05close\"\x15\n" + + "\x13PublishLogsResponse*\xa0\x01\n" + + "\tLogStream\x12,\n" + + "\x12LOG_STREAM_UNKNOWN\x10\x00\x1a\x14\xa2\x97\"\x10LogStreamUnknown\x12*\n" + + "\x11LOG_STREAM_STDOUT\x10\x01\x1a\x13\xa2\x97\"\x0fLogStreamStdout\x12*\n" + + "\x11LOG_STREAM_STDERR\x10\x02\x1a\x13\xa2\x97\"\x0fLogStreamStderr\x1a\r\x9a\x97\"\tLogStream2\x84\x01\n" + + "\x04Logs\x12|\n" + + "\rSubscribeLogs\x12(.docker.swarmkit.v1.SubscribeLogsRequest\x1a(.docker.swarmkit.v1.SubscribeLogsMessage\"\x15ʮ\xee\x98\x02\x0f\n" + + "\rswarm-manager0\x012\xab\x02\n" + + "\tLogBroker\x12\x95\x01\n" + + "\x13ListenSubscriptions\x12..docker.swarmkit.v1.ListenSubscriptionsRequest\x1a'.docker.swarmkit.v1.SubscriptionMessage\"#ʮ\xee\x98\x02\x1d\n" + + "\fswarm-worker\n" + + "\rswarm-manager0\x01\x12\x85\x01\n" + + "\vPublishLogs\x12&.docker.swarmkit.v1.PublishLogsMessage\x1a'.docker.swarmkit.v1.PublishLogsResponse\"#ʮ\xee\x98\x02\x1d\n" + + "\fswarm-worker\n" + + "\rswarm-manager(\x01B!Z\x1fgithub.com/moby/swarmkit/v2/apib\x06proto3" -// LogsClient is the client API for Logs service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. -type LogsClient interface { - // SubscribeLogs starts a subscription with the specified selector and options. - // - // The subscription will be distributed to relevant nodes and messages will - // be collected and sent via the returned stream. - // - // The subscription will end with an EOF. - SubscribeLogs(ctx context.Context, in *SubscribeLogsRequest, opts ...grpc.CallOption) (Logs_SubscribeLogsClient, error) -} +var ( + file_api_logbroker_proto_rawDescOnce sync.Once + file_api_logbroker_proto_rawDescData []byte +) -type logsClient struct { - cc *grpc.ClientConn +func file_api_logbroker_proto_rawDescGZIP() []byte { + file_api_logbroker_proto_rawDescOnce.Do(func() { + file_api_logbroker_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_api_logbroker_proto_rawDesc), len(file_api_logbroker_proto_rawDesc))) + }) + return file_api_logbroker_proto_rawDescData +} + +var file_api_logbroker_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_api_logbroker_proto_msgTypes = make([]protoimpl.MessageInfo, 11) +var file_api_logbroker_proto_goTypes = []any{ + (LogStream)(0), // 0: docker.swarmkit.v1.LogStream + (*LogSubscriptionOptions)(nil), // 1: docker.swarmkit.v1.LogSubscriptionOptions + (*LogSelector)(nil), // 2: docker.swarmkit.v1.LogSelector + (*LogContext)(nil), // 3: docker.swarmkit.v1.LogContext + (*LogAttr)(nil), // 4: docker.swarmkit.v1.LogAttr + (*LogMessage)(nil), // 5: docker.swarmkit.v1.LogMessage + (*SubscribeLogsRequest)(nil), // 6: docker.swarmkit.v1.SubscribeLogsRequest + (*SubscribeLogsMessage)(nil), // 7: docker.swarmkit.v1.SubscribeLogsMessage + (*ListenSubscriptionsRequest)(nil), // 8: docker.swarmkit.v1.ListenSubscriptionsRequest + (*SubscriptionMessage)(nil), // 9: docker.swarmkit.v1.SubscriptionMessage + (*PublishLogsMessage)(nil), // 10: docker.swarmkit.v1.PublishLogsMessage + (*PublishLogsResponse)(nil), // 11: docker.swarmkit.v1.PublishLogsResponse + (*timestamppb.Timestamp)(nil), // 12: google.protobuf.Timestamp +} +var file_api_logbroker_proto_depIdxs = []int32{ + 0, // 0: docker.swarmkit.v1.LogSubscriptionOptions.streams:type_name -> docker.swarmkit.v1.LogStream + 12, // 1: docker.swarmkit.v1.LogSubscriptionOptions.since:type_name -> google.protobuf.Timestamp + 3, // 2: docker.swarmkit.v1.LogMessage.context:type_name -> docker.swarmkit.v1.LogContext + 12, // 3: docker.swarmkit.v1.LogMessage.timestamp:type_name -> google.protobuf.Timestamp + 0, // 4: docker.swarmkit.v1.LogMessage.stream:type_name -> docker.swarmkit.v1.LogStream + 4, // 5: docker.swarmkit.v1.LogMessage.attrs:type_name -> docker.swarmkit.v1.LogAttr + 2, // 6: docker.swarmkit.v1.SubscribeLogsRequest.selector:type_name -> docker.swarmkit.v1.LogSelector + 1, // 7: docker.swarmkit.v1.SubscribeLogsRequest.options:type_name -> docker.swarmkit.v1.LogSubscriptionOptions + 5, // 8: docker.swarmkit.v1.SubscribeLogsMessage.messages:type_name -> docker.swarmkit.v1.LogMessage + 2, // 9: docker.swarmkit.v1.SubscriptionMessage.selector:type_name -> docker.swarmkit.v1.LogSelector + 1, // 10: docker.swarmkit.v1.SubscriptionMessage.options:type_name -> docker.swarmkit.v1.LogSubscriptionOptions + 5, // 11: docker.swarmkit.v1.PublishLogsMessage.messages:type_name -> docker.swarmkit.v1.LogMessage + 6, // 12: docker.swarmkit.v1.Logs.SubscribeLogs:input_type -> docker.swarmkit.v1.SubscribeLogsRequest + 8, // 13: docker.swarmkit.v1.LogBroker.ListenSubscriptions:input_type -> docker.swarmkit.v1.ListenSubscriptionsRequest + 10, // 14: docker.swarmkit.v1.LogBroker.PublishLogs:input_type -> docker.swarmkit.v1.PublishLogsMessage + 7, // 15: docker.swarmkit.v1.Logs.SubscribeLogs:output_type -> docker.swarmkit.v1.SubscribeLogsMessage + 9, // 16: docker.swarmkit.v1.LogBroker.ListenSubscriptions:output_type -> docker.swarmkit.v1.SubscriptionMessage + 11, // 17: docker.swarmkit.v1.LogBroker.PublishLogs:output_type -> docker.swarmkit.v1.PublishLogsResponse + 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_api_logbroker_proto_init() } +func file_api_logbroker_proto_init() { + if File_api_logbroker_proto != nil { + return + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_api_logbroker_proto_rawDesc), len(file_api_logbroker_proto_rawDesc)), + NumEnums: 1, + NumMessages: 11, + NumExtensions: 0, + NumServices: 2, + }, + GoTypes: file_api_logbroker_proto_goTypes, + DependencyIndexes: file_api_logbroker_proto_depIdxs, + EnumInfos: file_api_logbroker_proto_enumTypes, + MessageInfos: file_api_logbroker_proto_msgTypes, + }.Build() + File_api_logbroker_proto = out.File + file_api_logbroker_proto_goTypes = nil + file_api_logbroker_proto_depIdxs = nil } - -func NewLogsClient(cc *grpc.ClientConn) LogsClient { - return &logsClient{cc} -} - -func (c *logsClient) SubscribeLogs(ctx context.Context, in *SubscribeLogsRequest, opts ...grpc.CallOption) (Logs_SubscribeLogsClient, error) { - stream, err := c.cc.NewStream(ctx, &_Logs_serviceDesc.Streams[0], "/docker.swarmkit.v1.Logs/SubscribeLogs", opts...) - if err != nil { - return nil, err - } - x := &logsSubscribeLogsClient{stream} - if err := x.ClientStream.SendMsg(in); err != nil { - return nil, err - } - if err := x.ClientStream.CloseSend(); err != nil { - return nil, err - } - return x, nil -} - -type Logs_SubscribeLogsClient interface { - Recv() (*SubscribeLogsMessage, error) - grpc.ClientStream -} - -type logsSubscribeLogsClient struct { - grpc.ClientStream -} - -func (x *logsSubscribeLogsClient) Recv() (*SubscribeLogsMessage, error) { - m := new(SubscribeLogsMessage) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} - -// LogsServer is the server API for Logs service. -type LogsServer interface { - // SubscribeLogs starts a subscription with the specified selector and options. - // - // The subscription will be distributed to relevant nodes and messages will - // be collected and sent via the returned stream. - // - // The subscription will end with an EOF. - SubscribeLogs(*SubscribeLogsRequest, Logs_SubscribeLogsServer) error -} - -// UnimplementedLogsServer can be embedded to have forward compatible implementations. -type UnimplementedLogsServer struct { -} - -func (*UnimplementedLogsServer) SubscribeLogs(req *SubscribeLogsRequest, srv Logs_SubscribeLogsServer) error { - return status.Errorf(codes.Unimplemented, "method SubscribeLogs not implemented") -} - -func RegisterLogsServer(s *grpc.Server, srv LogsServer) { - s.RegisterService(&_Logs_serviceDesc, srv) -} - -func _Logs_SubscribeLogs_Handler(srv interface{}, stream grpc.ServerStream) error { - m := new(SubscribeLogsRequest) - if err := stream.RecvMsg(m); err != nil { - return err - } - return srv.(LogsServer).SubscribeLogs(m, &logsSubscribeLogsServer{stream}) -} - -type Logs_SubscribeLogsServer interface { - Send(*SubscribeLogsMessage) error - grpc.ServerStream -} - -type logsSubscribeLogsServer struct { - grpc.ServerStream -} - -func (x *logsSubscribeLogsServer) Send(m *SubscribeLogsMessage) error { - return x.ServerStream.SendMsg(m) -} - -var _Logs_serviceDesc = grpc.ServiceDesc{ - ServiceName: "docker.swarmkit.v1.Logs", - HandlerType: (*LogsServer)(nil), - Methods: []grpc.MethodDesc{}, - Streams: []grpc.StreamDesc{ - { - StreamName: "SubscribeLogs", - Handler: _Logs_SubscribeLogs_Handler, - ServerStreams: true, - }, - }, - Metadata: "github.com/docker/swarmkit/api/logbroker.proto", -} - -// LogBrokerClient is the client API for LogBroker service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. -type LogBrokerClient interface { - // ListenSubscriptions starts a subscription stream for the node. For each - // message received, the node should attempt to satisfy the subscription. - // - // Log messages that match the provided subscription should be sent via - // PublishLogs. - ListenSubscriptions(ctx context.Context, in *ListenSubscriptionsRequest, opts ...grpc.CallOption) (LogBroker_ListenSubscriptionsClient, error) - // PublishLogs receives sets of log messages destined for a single - // subscription identifier. - PublishLogs(ctx context.Context, opts ...grpc.CallOption) (LogBroker_PublishLogsClient, error) -} - -type logBrokerClient struct { - cc *grpc.ClientConn -} - -func NewLogBrokerClient(cc *grpc.ClientConn) LogBrokerClient { - return &logBrokerClient{cc} -} - -func (c *logBrokerClient) ListenSubscriptions(ctx context.Context, in *ListenSubscriptionsRequest, opts ...grpc.CallOption) (LogBroker_ListenSubscriptionsClient, error) { - stream, err := c.cc.NewStream(ctx, &_LogBroker_serviceDesc.Streams[0], "/docker.swarmkit.v1.LogBroker/ListenSubscriptions", opts...) - if err != nil { - return nil, err - } - x := &logBrokerListenSubscriptionsClient{stream} - if err := x.ClientStream.SendMsg(in); err != nil { - return nil, err - } - if err := x.ClientStream.CloseSend(); err != nil { - return nil, err - } - return x, nil -} - -type LogBroker_ListenSubscriptionsClient interface { - Recv() (*SubscriptionMessage, error) - grpc.ClientStream -} - -type logBrokerListenSubscriptionsClient struct { - grpc.ClientStream -} - -func (x *logBrokerListenSubscriptionsClient) Recv() (*SubscriptionMessage, error) { - m := new(SubscriptionMessage) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} - -func (c *logBrokerClient) PublishLogs(ctx context.Context, opts ...grpc.CallOption) (LogBroker_PublishLogsClient, error) { - stream, err := c.cc.NewStream(ctx, &_LogBroker_serviceDesc.Streams[1], "/docker.swarmkit.v1.LogBroker/PublishLogs", opts...) - if err != nil { - return nil, err - } - x := &logBrokerPublishLogsClient{stream} - return x, nil -} - -type LogBroker_PublishLogsClient interface { - Send(*PublishLogsMessage) error - CloseAndRecv() (*PublishLogsResponse, error) - grpc.ClientStream -} - -type logBrokerPublishLogsClient struct { - grpc.ClientStream -} - -func (x *logBrokerPublishLogsClient) Send(m *PublishLogsMessage) error { - return x.ClientStream.SendMsg(m) -} - -func (x *logBrokerPublishLogsClient) CloseAndRecv() (*PublishLogsResponse, error) { - if err := x.ClientStream.CloseSend(); err != nil { - return nil, err - } - m := new(PublishLogsResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} - -// LogBrokerServer is the server API for LogBroker service. -type LogBrokerServer interface { - // ListenSubscriptions starts a subscription stream for the node. For each - // message received, the node should attempt to satisfy the subscription. - // - // Log messages that match the provided subscription should be sent via - // PublishLogs. - ListenSubscriptions(*ListenSubscriptionsRequest, LogBroker_ListenSubscriptionsServer) error - // PublishLogs receives sets of log messages destined for a single - // subscription identifier. - PublishLogs(LogBroker_PublishLogsServer) error -} - -// UnimplementedLogBrokerServer can be embedded to have forward compatible implementations. -type UnimplementedLogBrokerServer struct { -} - -func (*UnimplementedLogBrokerServer) ListenSubscriptions(req *ListenSubscriptionsRequest, srv LogBroker_ListenSubscriptionsServer) error { - return status.Errorf(codes.Unimplemented, "method ListenSubscriptions not implemented") -} -func (*UnimplementedLogBrokerServer) PublishLogs(srv LogBroker_PublishLogsServer) error { - return status.Errorf(codes.Unimplemented, "method PublishLogs not implemented") -} - -func RegisterLogBrokerServer(s *grpc.Server, srv LogBrokerServer) { - s.RegisterService(&_LogBroker_serviceDesc, srv) -} - -func _LogBroker_ListenSubscriptions_Handler(srv interface{}, stream grpc.ServerStream) error { - m := new(ListenSubscriptionsRequest) - if err := stream.RecvMsg(m); err != nil { - return err - } - return srv.(LogBrokerServer).ListenSubscriptions(m, &logBrokerListenSubscriptionsServer{stream}) -} - -type LogBroker_ListenSubscriptionsServer interface { - Send(*SubscriptionMessage) error - grpc.ServerStream -} - -type logBrokerListenSubscriptionsServer struct { - grpc.ServerStream -} - -func (x *logBrokerListenSubscriptionsServer) Send(m *SubscriptionMessage) error { - return x.ServerStream.SendMsg(m) -} - -func _LogBroker_PublishLogs_Handler(srv interface{}, stream grpc.ServerStream) error { - return srv.(LogBrokerServer).PublishLogs(&logBrokerPublishLogsServer{stream}) -} - -type LogBroker_PublishLogsServer interface { - SendAndClose(*PublishLogsResponse) error - Recv() (*PublishLogsMessage, error) - grpc.ServerStream -} - -type logBrokerPublishLogsServer struct { - grpc.ServerStream -} - -func (x *logBrokerPublishLogsServer) SendAndClose(m *PublishLogsResponse) error { - return x.ServerStream.SendMsg(m) -} - -func (x *logBrokerPublishLogsServer) Recv() (*PublishLogsMessage, error) { - m := new(PublishLogsMessage) - if err := x.ServerStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} - -var _LogBroker_serviceDesc = grpc.ServiceDesc{ - ServiceName: "docker.swarmkit.v1.LogBroker", - HandlerType: (*LogBrokerServer)(nil), - Methods: []grpc.MethodDesc{}, - Streams: []grpc.StreamDesc{ - { - StreamName: "ListenSubscriptions", - Handler: _LogBroker_ListenSubscriptions_Handler, - ServerStreams: true, - }, - { - StreamName: "PublishLogs", - Handler: _LogBroker_PublishLogs_Handler, - ClientStreams: true, - }, - }, - Metadata: "github.com/docker/swarmkit/api/logbroker.proto", -} - -func (m *LogSubscriptionOptions) 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 *LogSubscriptionOptions) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *LogSubscriptionOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Since != nil { - { - size, err := m.Since.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintLogbroker(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - } - if m.Tail != 0 { - i = encodeVarintLogbroker(dAtA, i, uint64(m.Tail)) - i-- - dAtA[i] = 0x18 - } - if m.Follow { - i-- - if m.Follow { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x10 - } - if len(m.Streams) > 0 { - for iNdEx := len(m.Streams) - 1; iNdEx >= 0; iNdEx-- { - i = encodeVarintLogbroker(dAtA, i, uint64(m.Streams[iNdEx])) - i-- - dAtA[i] = 0x8 - } - } - return len(dAtA) - i, nil -} - -func (m *LogSelector) 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 *LogSelector) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *LogSelector) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.TaskIDs) > 0 { - for iNdEx := len(m.TaskIDs) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.TaskIDs[iNdEx]) - copy(dAtA[i:], m.TaskIDs[iNdEx]) - i = encodeVarintLogbroker(dAtA, i, uint64(len(m.TaskIDs[iNdEx]))) - i-- - dAtA[i] = 0x1a - } - } - if len(m.NodeIDs) > 0 { - for iNdEx := len(m.NodeIDs) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.NodeIDs[iNdEx]) - copy(dAtA[i:], m.NodeIDs[iNdEx]) - i = encodeVarintLogbroker(dAtA, i, uint64(len(m.NodeIDs[iNdEx]))) - i-- - dAtA[i] = 0x12 - } - } - if len(m.ServiceIDs) > 0 { - for iNdEx := len(m.ServiceIDs) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.ServiceIDs[iNdEx]) - copy(dAtA[i:], m.ServiceIDs[iNdEx]) - i = encodeVarintLogbroker(dAtA, i, uint64(len(m.ServiceIDs[iNdEx]))) - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func (m *LogContext) 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 *LogContext) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *LogContext) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.TaskID) > 0 { - i -= len(m.TaskID) - copy(dAtA[i:], m.TaskID) - i = encodeVarintLogbroker(dAtA, i, uint64(len(m.TaskID))) - i-- - dAtA[i] = 0x1a - } - if len(m.NodeID) > 0 { - i -= len(m.NodeID) - copy(dAtA[i:], m.NodeID) - i = encodeVarintLogbroker(dAtA, i, uint64(len(m.NodeID))) - i-- - dAtA[i] = 0x12 - } - if len(m.ServiceID) > 0 { - i -= len(m.ServiceID) - copy(dAtA[i:], m.ServiceID) - i = encodeVarintLogbroker(dAtA, i, uint64(len(m.ServiceID))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *LogAttr) 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 *LogAttr) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *LogAttr) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Value) > 0 { - i -= len(m.Value) - copy(dAtA[i:], m.Value) - i = encodeVarintLogbroker(dAtA, i, uint64(len(m.Value))) - i-- - dAtA[i] = 0x12 - } - if len(m.Key) > 0 { - i -= len(m.Key) - copy(dAtA[i:], m.Key) - i = encodeVarintLogbroker(dAtA, i, uint64(len(m.Key))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *LogMessage) 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 *LogMessage) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *LogMessage) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Attrs) > 0 { - for iNdEx := len(m.Attrs) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Attrs[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintLogbroker(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x2a - } - } - if len(m.Data) > 0 { - i -= len(m.Data) - copy(dAtA[i:], m.Data) - i = encodeVarintLogbroker(dAtA, i, uint64(len(m.Data))) - i-- - dAtA[i] = 0x22 - } - if m.Stream != 0 { - i = encodeVarintLogbroker(dAtA, i, uint64(m.Stream)) - i-- - dAtA[i] = 0x18 - } - if m.Timestamp != nil { - { - size, err := m.Timestamp.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintLogbroker(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - { - size, err := m.Context.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintLogbroker(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *SubscribeLogsRequest) 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 *SubscribeLogsRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *SubscribeLogsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Options != nil { - { - size, err := m.Options.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintLogbroker(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - if m.Selector != nil { - { - size, err := m.Selector.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintLogbroker(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *SubscribeLogsMessage) 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 *SubscribeLogsMessage) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *SubscribeLogsMessage) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Messages) > 0 { - for iNdEx := len(m.Messages) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Messages[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintLogbroker(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func (m *ListenSubscriptionsRequest) 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 *ListenSubscriptionsRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ListenSubscriptionsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil -} - -func (m *SubscriptionMessage) 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 *SubscriptionMessage) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *SubscriptionMessage) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Close { - i-- - if m.Close { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x20 - } - if m.Options != nil { - { - size, err := m.Options.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintLogbroker(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - } - if m.Selector != nil { - { - size, err := m.Selector.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintLogbroker(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - if len(m.ID) > 0 { - i -= len(m.ID) - copy(dAtA[i:], m.ID) - i = encodeVarintLogbroker(dAtA, i, uint64(len(m.ID))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *PublishLogsMessage) 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 *PublishLogsMessage) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *PublishLogsMessage) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Close { - i-- - if m.Close { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x18 - } - if len(m.Messages) > 0 { - for iNdEx := len(m.Messages) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Messages[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintLogbroker(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - } - if len(m.SubscriptionID) > 0 { - i -= len(m.SubscriptionID) - copy(dAtA[i:], m.SubscriptionID) - i = encodeVarintLogbroker(dAtA, i, uint64(len(m.SubscriptionID))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *PublishLogsResponse) 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 *PublishLogsResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *PublishLogsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil -} - -func encodeVarintLogbroker(dAtA []byte, offset int, v uint64) int { - offset -= sovLogbroker(v) - base := offset - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return base -} - -type raftProxyLogsServer struct { - local LogsServer - connSelector raftselector.ConnProvider - localCtxMods, remoteCtxMods []func(context.Context) (context.Context, error) -} - -func NewRaftProxyLogsServer(local LogsServer, connSelector raftselector.ConnProvider, localCtxMod, remoteCtxMod func(context.Context) (context.Context, error)) LogsServer { - redirectChecker := func(ctx context.Context) (context.Context, error) { - p, ok := peer.FromContext(ctx) - if !ok { - return ctx, status.Errorf(codes.InvalidArgument, "remote addr is not found in context") - } - addr := p.Addr.String() - md, ok := metadata.FromIncomingContext(ctx) - if ok && len(md["redirect"]) != 0 { - return ctx, status.Errorf(codes.ResourceExhausted, "more than one redirect to leader from: %s", md["redirect"]) - } - if !ok { - md = metadata.New(map[string]string{}) - } - md["redirect"] = append(md["redirect"], addr) - return metadata.NewOutgoingContext(ctx, md), nil - } - remoteMods := []func(context.Context) (context.Context, error){redirectChecker} - remoteMods = append(remoteMods, remoteCtxMod) - - var localMods []func(context.Context) (context.Context, error) - if localCtxMod != nil { - localMods = []func(context.Context) (context.Context, error){localCtxMod} - } - - return &raftProxyLogsServer{ - local: local, - connSelector: connSelector, - localCtxMods: localMods, - remoteCtxMods: remoteMods, - } -} -func (p *raftProxyLogsServer) runCtxMods(ctx context.Context, ctxMods []func(context.Context) (context.Context, error)) (context.Context, error) { - var err error - for _, mod := range ctxMods { - ctx, err = mod(ctx) - if err != nil { - return ctx, err - } - } - return ctx, nil -} -func (p *raftProxyLogsServer) pollNewLeaderConn(ctx context.Context) (*grpc.ClientConn, error) { - ticker := rafttime.NewTicker(500 * rafttime.Millisecond) - defer ticker.Stop() - for { - select { - case <-ticker.C: - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - return nil, err - } - - client := NewHealthClient(conn) - - resp, err := client.Check(ctx, &HealthCheckRequest{Service: "Raft"}) - if err != nil || resp.Status != HealthCheckResponse_SERVING { - continue - } - return conn, nil - case <-ctx.Done(): - return nil, ctx.Err() - } - } -} - -type Logs_SubscribeLogsServerWrapper struct { - Logs_SubscribeLogsServer - ctx context.Context -} - -func (s Logs_SubscribeLogsServerWrapper) Context() context.Context { - return s.ctx -} - -func (p *raftProxyLogsServer) SubscribeLogs(r *SubscribeLogsRequest, stream Logs_SubscribeLogsServer) error { - ctx := stream.Context() - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return err - } - streamWrapper := Logs_SubscribeLogsServerWrapper{ - Logs_SubscribeLogsServer: stream, - ctx: ctx, - } - return p.local.SubscribeLogs(r, streamWrapper) - } - return err - } - ctx, err = p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return err - } - clientStream, err := NewLogsClient(conn).SubscribeLogs(ctx, r) - - if err != nil { - return err - } - - for { - msg, err := clientStream.Recv() - if err == io.EOF { - break - } - if err != nil { - return err - } - if err := stream.Send(msg); err != nil { - return err - } - } - return nil -} - -type raftProxyLogBrokerServer struct { - local LogBrokerServer - connSelector raftselector.ConnProvider - localCtxMods, remoteCtxMods []func(context.Context) (context.Context, error) -} - -func NewRaftProxyLogBrokerServer(local LogBrokerServer, connSelector raftselector.ConnProvider, localCtxMod, remoteCtxMod func(context.Context) (context.Context, error)) LogBrokerServer { - redirectChecker := func(ctx context.Context) (context.Context, error) { - p, ok := peer.FromContext(ctx) - if !ok { - return ctx, status.Errorf(codes.InvalidArgument, "remote addr is not found in context") - } - addr := p.Addr.String() - md, ok := metadata.FromIncomingContext(ctx) - if ok && len(md["redirect"]) != 0 { - return ctx, status.Errorf(codes.ResourceExhausted, "more than one redirect to leader from: %s", md["redirect"]) - } - if !ok { - md = metadata.New(map[string]string{}) - } - md["redirect"] = append(md["redirect"], addr) - return metadata.NewOutgoingContext(ctx, md), nil - } - remoteMods := []func(context.Context) (context.Context, error){redirectChecker} - remoteMods = append(remoteMods, remoteCtxMod) - - var localMods []func(context.Context) (context.Context, error) - if localCtxMod != nil { - localMods = []func(context.Context) (context.Context, error){localCtxMod} - } - - return &raftProxyLogBrokerServer{ - local: local, - connSelector: connSelector, - localCtxMods: localMods, - remoteCtxMods: remoteMods, - } -} -func (p *raftProxyLogBrokerServer) runCtxMods(ctx context.Context, ctxMods []func(context.Context) (context.Context, error)) (context.Context, error) { - var err error - for _, mod := range ctxMods { - ctx, err = mod(ctx) - if err != nil { - return ctx, err - } - } - return ctx, nil -} -func (p *raftProxyLogBrokerServer) pollNewLeaderConn(ctx context.Context) (*grpc.ClientConn, error) { - ticker := rafttime.NewTicker(500 * rafttime.Millisecond) - defer ticker.Stop() - for { - select { - case <-ticker.C: - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - return nil, err - } - - client := NewHealthClient(conn) - - resp, err := client.Check(ctx, &HealthCheckRequest{Service: "Raft"}) - if err != nil || resp.Status != HealthCheckResponse_SERVING { - continue - } - return conn, nil - case <-ctx.Done(): - return nil, ctx.Err() - } - } -} - -type LogBroker_ListenSubscriptionsServerWrapper struct { - LogBroker_ListenSubscriptionsServer - ctx context.Context -} - -func (s LogBroker_ListenSubscriptionsServerWrapper) Context() context.Context { - return s.ctx -} - -func (p *raftProxyLogBrokerServer) ListenSubscriptions(r *ListenSubscriptionsRequest, stream LogBroker_ListenSubscriptionsServer) error { - ctx := stream.Context() - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return err - } - streamWrapper := LogBroker_ListenSubscriptionsServerWrapper{ - LogBroker_ListenSubscriptionsServer: stream, - ctx: ctx, - } - return p.local.ListenSubscriptions(r, streamWrapper) - } - return err - } - ctx, err = p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return err - } - clientStream, err := NewLogBrokerClient(conn).ListenSubscriptions(ctx, r) - - if err != nil { - return err - } - - for { - msg, err := clientStream.Recv() - if err == io.EOF { - break - } - if err != nil { - return err - } - if err := stream.Send(msg); err != nil { - return err - } - } - return nil -} - -type LogBroker_PublishLogsServerWrapper struct { - LogBroker_PublishLogsServer - ctx context.Context -} - -func (s LogBroker_PublishLogsServerWrapper) Context() context.Context { - return s.ctx -} - -func (p *raftProxyLogBrokerServer) PublishLogs(stream LogBroker_PublishLogsServer) error { - ctx := stream.Context() - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return err - } - streamWrapper := LogBroker_PublishLogsServerWrapper{ - LogBroker_PublishLogsServer: stream, - ctx: ctx, - } - return p.local.PublishLogs(streamWrapper) - } - return err - } - ctx, err = p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return err - } - clientStream, err := NewLogBrokerClient(conn).PublishLogs(ctx) - - if err != nil { - return err - } - - for { - msg, err := stream.Recv() - if err == io.EOF { - break - } - if err != nil { - return err - } - if err := clientStream.Send(msg); err != nil { - return err - } - } - - reply, err := clientStream.CloseAndRecv() - if err != nil { - return err - } - - return stream.SendAndClose(reply) -} - -func (m *LogSubscriptionOptions) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Streams) > 0 { - for _, e := range m.Streams { - n += 1 + sovLogbroker(uint64(e)) - } - } - if m.Follow { - n += 2 - } - if m.Tail != 0 { - n += 1 + sovLogbroker(uint64(m.Tail)) - } - if m.Since != nil { - l = m.Since.Size() - n += 1 + l + sovLogbroker(uint64(l)) - } - return n -} - -func (m *LogSelector) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.ServiceIDs) > 0 { - for _, s := range m.ServiceIDs { - l = len(s) - n += 1 + l + sovLogbroker(uint64(l)) - } - } - if len(m.NodeIDs) > 0 { - for _, s := range m.NodeIDs { - l = len(s) - n += 1 + l + sovLogbroker(uint64(l)) - } - } - if len(m.TaskIDs) > 0 { - for _, s := range m.TaskIDs { - l = len(s) - n += 1 + l + sovLogbroker(uint64(l)) - } - } - return n -} - -func (m *LogContext) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.ServiceID) - if l > 0 { - n += 1 + l + sovLogbroker(uint64(l)) - } - l = len(m.NodeID) - if l > 0 { - n += 1 + l + sovLogbroker(uint64(l)) - } - l = len(m.TaskID) - if l > 0 { - n += 1 + l + sovLogbroker(uint64(l)) - } - return n -} - -func (m *LogAttr) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Key) - if l > 0 { - n += 1 + l + sovLogbroker(uint64(l)) - } - l = len(m.Value) - if l > 0 { - n += 1 + l + sovLogbroker(uint64(l)) - } - return n -} - -func (m *LogMessage) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.Context.Size() - n += 1 + l + sovLogbroker(uint64(l)) - if m.Timestamp != nil { - l = m.Timestamp.Size() - n += 1 + l + sovLogbroker(uint64(l)) - } - if m.Stream != 0 { - n += 1 + sovLogbroker(uint64(m.Stream)) - } - l = len(m.Data) - if l > 0 { - n += 1 + l + sovLogbroker(uint64(l)) - } - if len(m.Attrs) > 0 { - for _, e := range m.Attrs { - l = e.Size() - n += 1 + l + sovLogbroker(uint64(l)) - } - } - return n -} - -func (m *SubscribeLogsRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Selector != nil { - l = m.Selector.Size() - n += 1 + l + sovLogbroker(uint64(l)) - } - if m.Options != nil { - l = m.Options.Size() - n += 1 + l + sovLogbroker(uint64(l)) - } - return n -} - -func (m *SubscribeLogsMessage) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Messages) > 0 { - for _, e := range m.Messages { - l = e.Size() - n += 1 + l + sovLogbroker(uint64(l)) - } - } - return n -} - -func (m *ListenSubscriptionsRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - return n -} - -func (m *SubscriptionMessage) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.ID) - if l > 0 { - n += 1 + l + sovLogbroker(uint64(l)) - } - if m.Selector != nil { - l = m.Selector.Size() - n += 1 + l + sovLogbroker(uint64(l)) - } - if m.Options != nil { - l = m.Options.Size() - n += 1 + l + sovLogbroker(uint64(l)) - } - if m.Close { - n += 2 - } - return n -} - -func (m *PublishLogsMessage) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.SubscriptionID) - if l > 0 { - n += 1 + l + sovLogbroker(uint64(l)) - } - if len(m.Messages) > 0 { - for _, e := range m.Messages { - l = e.Size() - n += 1 + l + sovLogbroker(uint64(l)) - } - } - if m.Close { - n += 2 - } - return n -} - -func (m *PublishLogsResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - return n -} - -func sovLogbroker(x uint64) (n int) { - return (math_bits.Len64(x|1) + 6) / 7 -} -func sozLogbroker(x uint64) (n int) { - return sovLogbroker(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (this *LogSubscriptionOptions) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&LogSubscriptionOptions{`, - `Streams:` + fmt.Sprintf("%v", this.Streams) + `,`, - `Follow:` + fmt.Sprintf("%v", this.Follow) + `,`, - `Tail:` + fmt.Sprintf("%v", this.Tail) + `,`, - `Since:` + strings.Replace(fmt.Sprintf("%v", this.Since), "Timestamp", "types.Timestamp", 1) + `,`, - `}`, - }, "") - return s -} -func (this *LogSelector) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&LogSelector{`, - `ServiceIDs:` + fmt.Sprintf("%v", this.ServiceIDs) + `,`, - `NodeIDs:` + fmt.Sprintf("%v", this.NodeIDs) + `,`, - `TaskIDs:` + fmt.Sprintf("%v", this.TaskIDs) + `,`, - `}`, - }, "") - return s -} -func (this *LogContext) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&LogContext{`, - `ServiceID:` + fmt.Sprintf("%v", this.ServiceID) + `,`, - `NodeID:` + fmt.Sprintf("%v", this.NodeID) + `,`, - `TaskID:` + fmt.Sprintf("%v", this.TaskID) + `,`, - `}`, - }, "") - return s -} -func (this *LogAttr) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&LogAttr{`, - `Key:` + fmt.Sprintf("%v", this.Key) + `,`, - `Value:` + fmt.Sprintf("%v", this.Value) + `,`, - `}`, - }, "") - return s -} -func (this *LogMessage) String() string { - if this == nil { - return "nil" - } - repeatedStringForAttrs := "[]LogAttr{" - for _, f := range this.Attrs { - repeatedStringForAttrs += strings.Replace(strings.Replace(f.String(), "LogAttr", "LogAttr", 1), `&`, ``, 1) + "," - } - repeatedStringForAttrs += "}" - s := strings.Join([]string{`&LogMessage{`, - `Context:` + strings.Replace(strings.Replace(this.Context.String(), "LogContext", "LogContext", 1), `&`, ``, 1) + `,`, - `Timestamp:` + strings.Replace(fmt.Sprintf("%v", this.Timestamp), "Timestamp", "types.Timestamp", 1) + `,`, - `Stream:` + fmt.Sprintf("%v", this.Stream) + `,`, - `Data:` + fmt.Sprintf("%v", this.Data) + `,`, - `Attrs:` + repeatedStringForAttrs + `,`, - `}`, - }, "") - return s -} -func (this *SubscribeLogsRequest) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&SubscribeLogsRequest{`, - `Selector:` + strings.Replace(this.Selector.String(), "LogSelector", "LogSelector", 1) + `,`, - `Options:` + strings.Replace(this.Options.String(), "LogSubscriptionOptions", "LogSubscriptionOptions", 1) + `,`, - `}`, - }, "") - return s -} -func (this *SubscribeLogsMessage) String() string { - if this == nil { - return "nil" - } - repeatedStringForMessages := "[]LogMessage{" - for _, f := range this.Messages { - repeatedStringForMessages += strings.Replace(strings.Replace(f.String(), "LogMessage", "LogMessage", 1), `&`, ``, 1) + "," - } - repeatedStringForMessages += "}" - s := strings.Join([]string{`&SubscribeLogsMessage{`, - `Messages:` + repeatedStringForMessages + `,`, - `}`, - }, "") - return s -} -func (this *ListenSubscriptionsRequest) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&ListenSubscriptionsRequest{`, - `}`, - }, "") - return s -} -func (this *SubscriptionMessage) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&SubscriptionMessage{`, - `ID:` + fmt.Sprintf("%v", this.ID) + `,`, - `Selector:` + strings.Replace(this.Selector.String(), "LogSelector", "LogSelector", 1) + `,`, - `Options:` + strings.Replace(this.Options.String(), "LogSubscriptionOptions", "LogSubscriptionOptions", 1) + `,`, - `Close:` + fmt.Sprintf("%v", this.Close) + `,`, - `}`, - }, "") - return s -} -func (this *PublishLogsMessage) String() string { - if this == nil { - return "nil" - } - repeatedStringForMessages := "[]LogMessage{" - for _, f := range this.Messages { - repeatedStringForMessages += strings.Replace(strings.Replace(f.String(), "LogMessage", "LogMessage", 1), `&`, ``, 1) + "," - } - repeatedStringForMessages += "}" - s := strings.Join([]string{`&PublishLogsMessage{`, - `SubscriptionID:` + fmt.Sprintf("%v", this.SubscriptionID) + `,`, - `Messages:` + repeatedStringForMessages + `,`, - `Close:` + fmt.Sprintf("%v", this.Close) + `,`, - `}`, - }, "") - return s -} -func (this *PublishLogsResponse) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&PublishLogsResponse{`, - `}`, - }, "") - return s -} -func valueToStringLogbroker(v interface{}) string { - rv := reflect.ValueOf(v) - if rv.IsNil() { - return "nil" - } - pv := reflect.Indirect(rv).Interface() - return fmt.Sprintf("*%v", pv) -} -func (m *LogSubscriptionOptions) 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 ErrIntOverflowLogbroker - } - 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: LogSubscriptionOptions: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: LogSubscriptionOptions: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType == 0 { - var v LogStream - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLogbroker - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= LogStream(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.Streams = append(m.Streams, v) - } else if wireType == 2 { - var packedLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLogbroker - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - packedLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if packedLen < 0 { - return ErrInvalidLengthLogbroker - } - postIndex := iNdEx + packedLen - if postIndex < 0 { - return ErrInvalidLengthLogbroker - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - var elementCount int - if elementCount != 0 && len(m.Streams) == 0 { - m.Streams = make([]LogStream, 0, elementCount) - } - for iNdEx < postIndex { - var v LogStream - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLogbroker - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= LogStream(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.Streams = append(m.Streams, v) - } - } else { - return fmt.Errorf("proto: wrong wireType = %d for field Streams", wireType) - } - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Follow", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLogbroker - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.Follow = bool(v != 0) - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Tail", wireType) - } - m.Tail = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLogbroker - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Tail |= int64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Since", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLogbroker - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthLogbroker - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthLogbroker - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Since == nil { - m.Since = &types.Timestamp{} - } - if err := m.Since.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipLogbroker(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthLogbroker - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *LogSelector) 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 ErrIntOverflowLogbroker - } - 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: LogSelector: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: LogSelector: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ServiceIDs", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLogbroker - } - 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 ErrInvalidLengthLogbroker - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthLogbroker - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ServiceIDs = append(m.ServiceIDs, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NodeIDs", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLogbroker - } - 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 ErrInvalidLengthLogbroker - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthLogbroker - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.NodeIDs = append(m.NodeIDs, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TaskIDs", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLogbroker - } - 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 ErrInvalidLengthLogbroker - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthLogbroker - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.TaskIDs = append(m.TaskIDs, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipLogbroker(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthLogbroker - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *LogContext) 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 ErrIntOverflowLogbroker - } - 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: LogContext: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: LogContext: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ServiceID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLogbroker - } - 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 ErrInvalidLengthLogbroker - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthLogbroker - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ServiceID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NodeID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLogbroker - } - 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 ErrInvalidLengthLogbroker - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthLogbroker - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.NodeID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TaskID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLogbroker - } - 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 ErrInvalidLengthLogbroker - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthLogbroker - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.TaskID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipLogbroker(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthLogbroker - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *LogAttr) 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 ErrIntOverflowLogbroker - } - 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: LogAttr: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: LogAttr: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLogbroker - } - 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 ErrInvalidLengthLogbroker - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthLogbroker - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Key = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLogbroker - } - 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 ErrInvalidLengthLogbroker - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthLogbroker - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Value = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipLogbroker(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthLogbroker - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *LogMessage) 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 ErrIntOverflowLogbroker - } - 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: LogMessage: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: LogMessage: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Context", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLogbroker - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthLogbroker - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthLogbroker - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Context.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Timestamp", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLogbroker - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthLogbroker - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthLogbroker - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Timestamp == nil { - m.Timestamp = &types.Timestamp{} - } - if err := m.Timestamp.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Stream", wireType) - } - m.Stream = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLogbroker - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Stream |= LogStream(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Data", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLogbroker - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthLogbroker - } - postIndex := iNdEx + byteLen - if postIndex < 0 { - return ErrInvalidLengthLogbroker - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Data = append(m.Data[:0], dAtA[iNdEx:postIndex]...) - if m.Data == nil { - m.Data = []byte{} - } - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Attrs", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLogbroker - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthLogbroker - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthLogbroker - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Attrs = append(m.Attrs, LogAttr{}) - if err := m.Attrs[len(m.Attrs)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipLogbroker(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthLogbroker - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *SubscribeLogsRequest) 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 ErrIntOverflowLogbroker - } - 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: SubscribeLogsRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: SubscribeLogsRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Selector", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLogbroker - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthLogbroker - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthLogbroker - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Selector == nil { - m.Selector = &LogSelector{} - } - if err := m.Selector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Options", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLogbroker - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthLogbroker - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthLogbroker - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Options == nil { - m.Options = &LogSubscriptionOptions{} - } - if err := m.Options.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipLogbroker(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthLogbroker - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *SubscribeLogsMessage) 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 ErrIntOverflowLogbroker - } - 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: SubscribeLogsMessage: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: SubscribeLogsMessage: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Messages", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLogbroker - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthLogbroker - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthLogbroker - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Messages = append(m.Messages, LogMessage{}) - if err := m.Messages[len(m.Messages)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipLogbroker(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthLogbroker - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ListenSubscriptionsRequest) 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 ErrIntOverflowLogbroker - } - 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: ListenSubscriptionsRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ListenSubscriptionsRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipLogbroker(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthLogbroker - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *SubscriptionMessage) 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 ErrIntOverflowLogbroker - } - 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: SubscriptionMessage: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: SubscriptionMessage: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLogbroker - } - 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 ErrInvalidLengthLogbroker - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthLogbroker - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Selector", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLogbroker - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthLogbroker - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthLogbroker - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Selector == nil { - m.Selector = &LogSelector{} - } - if err := m.Selector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Options", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLogbroker - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthLogbroker - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthLogbroker - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Options == nil { - m.Options = &LogSubscriptionOptions{} - } - if err := m.Options.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Close", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLogbroker - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.Close = bool(v != 0) - default: - iNdEx = preIndex - skippy, err := skipLogbroker(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthLogbroker - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *PublishLogsMessage) 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 ErrIntOverflowLogbroker - } - 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: PublishLogsMessage: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: PublishLogsMessage: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SubscriptionID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLogbroker - } - 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 ErrInvalidLengthLogbroker - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthLogbroker - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.SubscriptionID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Messages", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLogbroker - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthLogbroker - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthLogbroker - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Messages = append(m.Messages, LogMessage{}) - if err := m.Messages[len(m.Messages)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Close", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLogbroker - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.Close = bool(v != 0) - default: - iNdEx = preIndex - skippy, err := skipLogbroker(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthLogbroker - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *PublishLogsResponse) 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 ErrIntOverflowLogbroker - } - 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: PublishLogsResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: PublishLogsResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipLogbroker(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthLogbroker - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipLogbroker(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - depth := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowLogbroker - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowLogbroker - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - case 1: - iNdEx += 8 - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowLogbroker - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLengthLogbroker - } - iNdEx += length - case 3: - depth++ - case 4: - if depth == 0 { - return 0, ErrUnexpectedEndOfGroupLogbroker - } - depth-- - case 5: - iNdEx += 4 - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - if iNdEx < 0 { - return 0, ErrInvalidLengthLogbroker - } - if depth == 0 { - return iNdEx, nil - } - } - return 0, io.ErrUnexpectedEOF -} - -var ( - ErrInvalidLengthLogbroker = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowLogbroker = fmt.Errorf("proto: integer overflow") - ErrUnexpectedEndOfGroupLogbroker = fmt.Errorf("proto: unexpected end of group") -) diff --git a/api/logbroker.pb.raftproxy.go b/api/logbroker.pb.raftproxy.go new file mode 100644 index 0000000000..7940bdafcd --- /dev/null +++ b/api/logbroker.pb.raftproxy.go @@ -0,0 +1,318 @@ +// Code generated by protoc-gen-goswarm. DO NOT EDIT. + +package api + +import ( + context "context" + raftselector "github.com/moby/swarmkit/v2/manager/raftselector" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + metadata "google.golang.org/grpc/metadata" + peer "google.golang.org/grpc/peer" + status "google.golang.org/grpc/status" + io "io" + time "time" +) + +type raftProxyLogsServer struct { + local LogsServer + connSelector raftselector.ConnProvider + localCtxMods, remoteCtxMods []func(context.Context) (context.Context, error) +} + +func NewRaftProxyLogsServer(local LogsServer, connSelector raftselector.ConnProvider, localCtxMod, remoteCtxMod func(context.Context) (context.Context, error)) LogsServer { + redirectChecker := func(ctx context.Context) (context.Context, error) { + p, ok := peer.FromContext(ctx) + if !ok { + return ctx, status.Errorf(codes.InvalidArgument, "remote addr is not found in context") + } + addr := p.Addr.String() + md, ok := metadata.FromIncomingContext(ctx) + if ok && len(md["redirect"]) != 0 { + return ctx, status.Errorf(codes.ResourceExhausted, "more than one redirect to leader from: %s", md["redirect"]) + } + if !ok { + md = metadata.New(map[string]string{}) + } + md["redirect"] = append(md["redirect"], addr) + return metadata.NewOutgoingContext(ctx, md), nil + } + remoteMods := []func(context.Context) (context.Context, error){redirectChecker} + remoteMods = append(remoteMods, remoteCtxMod) + + var localMods []func(context.Context) (context.Context, error) + if localCtxMod != nil { + localMods = []func(context.Context) (context.Context, error){localCtxMod} + } + + return &raftProxyLogsServer{ + local: local, + connSelector: connSelector, + localCtxMods: localMods, + remoteCtxMods: remoteMods, + } +} +func (p *raftProxyLogsServer) runCtxMods(ctx context.Context, ctxMods []func(context.Context) (context.Context, error)) (context.Context, error) { + var err error + for _, mod := range ctxMods { + ctx, err = mod(ctx) + if err != nil { + return ctx, err + } + } + return ctx, nil +} +func (p *raftProxyLogsServer) pollNewLeaderConn(ctx context.Context) (*grpc.ClientConn, error) { + ticker := time.NewTicker(500 * time.Millisecond) + defer ticker.Stop() + for { + select { + case <-ticker.C: + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + return nil, err + } + + client := NewHealthClient(conn) + + resp, err := client.Check(ctx, &HealthCheckRequest{Service: "Raft"}) + if err != nil || resp.Status != HealthCheckResponse_SERVING { + continue + } + return conn, nil + case <-ctx.Done(): + return nil, ctx.Err() + } + } +} + +type Logs_SubscribeLogsServerWrapper struct { + Logs_SubscribeLogsServer + ctx context.Context +} + +func (s Logs_SubscribeLogsServerWrapper) Context() context.Context { + return s.ctx +} + +func (p *raftProxyLogsServer) SubscribeLogs(r *SubscribeLogsRequest, stream Logs_SubscribeLogsServer) error { + ctx := stream.Context() + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return err + } + streamWrapper := Logs_SubscribeLogsServerWrapper{ + Logs_SubscribeLogsServer: stream, + ctx: ctx, + } + return p.local.SubscribeLogs(r, streamWrapper) + } + return err + } + ctx, err = p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return err + } + clientStream, err := NewLogsClient(conn).SubscribeLogs(ctx, r) + + if err != nil { + return err + } + + for { + msg, err := clientStream.Recv() + if err == io.EOF { + break + } + if err != nil { + return err + } + if err := stream.Send(msg); err != nil { + return err + } + } + return nil +} + +type raftProxyLogBrokerServer struct { + local LogBrokerServer + connSelector raftselector.ConnProvider + localCtxMods, remoteCtxMods []func(context.Context) (context.Context, error) +} + +func NewRaftProxyLogBrokerServer(local LogBrokerServer, connSelector raftselector.ConnProvider, localCtxMod, remoteCtxMod func(context.Context) (context.Context, error)) LogBrokerServer { + redirectChecker := func(ctx context.Context) (context.Context, error) { + p, ok := peer.FromContext(ctx) + if !ok { + return ctx, status.Errorf(codes.InvalidArgument, "remote addr is not found in context") + } + addr := p.Addr.String() + md, ok := metadata.FromIncomingContext(ctx) + if ok && len(md["redirect"]) != 0 { + return ctx, status.Errorf(codes.ResourceExhausted, "more than one redirect to leader from: %s", md["redirect"]) + } + if !ok { + md = metadata.New(map[string]string{}) + } + md["redirect"] = append(md["redirect"], addr) + return metadata.NewOutgoingContext(ctx, md), nil + } + remoteMods := []func(context.Context) (context.Context, error){redirectChecker} + remoteMods = append(remoteMods, remoteCtxMod) + + var localMods []func(context.Context) (context.Context, error) + if localCtxMod != nil { + localMods = []func(context.Context) (context.Context, error){localCtxMod} + } + + return &raftProxyLogBrokerServer{ + local: local, + connSelector: connSelector, + localCtxMods: localMods, + remoteCtxMods: remoteMods, + } +} +func (p *raftProxyLogBrokerServer) runCtxMods(ctx context.Context, ctxMods []func(context.Context) (context.Context, error)) (context.Context, error) { + var err error + for _, mod := range ctxMods { + ctx, err = mod(ctx) + if err != nil { + return ctx, err + } + } + return ctx, nil +} +func (p *raftProxyLogBrokerServer) pollNewLeaderConn(ctx context.Context) (*grpc.ClientConn, error) { + ticker := time.NewTicker(500 * time.Millisecond) + defer ticker.Stop() + for { + select { + case <-ticker.C: + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + return nil, err + } + + client := NewHealthClient(conn) + + resp, err := client.Check(ctx, &HealthCheckRequest{Service: "Raft"}) + if err != nil || resp.Status != HealthCheckResponse_SERVING { + continue + } + return conn, nil + case <-ctx.Done(): + return nil, ctx.Err() + } + } +} + +type LogBroker_ListenSubscriptionsServerWrapper struct { + LogBroker_ListenSubscriptionsServer + ctx context.Context +} + +func (s LogBroker_ListenSubscriptionsServerWrapper) Context() context.Context { + return s.ctx +} + +func (p *raftProxyLogBrokerServer) ListenSubscriptions(r *ListenSubscriptionsRequest, stream LogBroker_ListenSubscriptionsServer) error { + ctx := stream.Context() + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return err + } + streamWrapper := LogBroker_ListenSubscriptionsServerWrapper{ + LogBroker_ListenSubscriptionsServer: stream, + ctx: ctx, + } + return p.local.ListenSubscriptions(r, streamWrapper) + } + return err + } + ctx, err = p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return err + } + clientStream, err := NewLogBrokerClient(conn).ListenSubscriptions(ctx, r) + + if err != nil { + return err + } + + for { + msg, err := clientStream.Recv() + if err == io.EOF { + break + } + if err != nil { + return err + } + if err := stream.Send(msg); err != nil { + return err + } + } + return nil +} + +type LogBroker_PublishLogsServerWrapper struct { + LogBroker_PublishLogsServer + ctx context.Context +} + +func (s LogBroker_PublishLogsServerWrapper) Context() context.Context { + return s.ctx +} + +func (p *raftProxyLogBrokerServer) PublishLogs(stream LogBroker_PublishLogsServer) error { + ctx := stream.Context() + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return err + } + streamWrapper := LogBroker_PublishLogsServerWrapper{ + LogBroker_PublishLogsServer: stream, + ctx: ctx, + } + return p.local.PublishLogs(streamWrapper) + } + return err + } + ctx, err = p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return err + } + clientStream, err := NewLogBrokerClient(conn).PublishLogs(ctx) + + if err != nil { + return err + } + + for { + msg, err := stream.Recv() + if err == io.EOF { + break + } + if err != nil { + return err + } + if err := clientStream.Send(msg); err != nil { + return err + } + } + + reply, err := clientStream.CloseAndRecv() + if err != nil { + return err + } + + return stream.SendAndClose(reply) +} diff --git a/api/logbroker.proto b/api/logbroker.proto index 1549640d4b..abe255b783 100644 --- a/api/logbroker.proto +++ b/api/logbroker.proto @@ -2,18 +2,18 @@ syntax = "proto3"; package docker.swarmkit.v1; -import "gogoproto/gogo.proto"; +option go_package = "github.com/moby/swarmkit/v2/api"; + import "google/protobuf/timestamp.proto"; -import "github.com/docker/swarmkit/protobuf/plugin/plugin.proto"; +import "protobuf/plugin/plugin.proto"; // LogStream defines the stream from which the log message came. enum LogStream { - option (gogoproto.goproto_enum_prefix) = false; - option (gogoproto.enum_customname) = "LogStream"; + option (docker.protobuf.plugin.go_enum_name) = "LogStream"; - LOG_STREAM_UNKNOWN = 0 [(gogoproto.enumvalue_customname) = "LogStreamUnknown"]; - LOG_STREAM_STDOUT = 1 [(gogoproto.enumvalue_customname) = "LogStreamStdout"]; - LOG_STREAM_STDERR = 2 [(gogoproto.enumvalue_customname) = "LogStreamStderr"]; + LOG_STREAM_UNKNOWN = 0 [(docker.protobuf.plugin.go_enum_value_name) = "LogStreamUnknown"]; + LOG_STREAM_STDOUT = 1 [(docker.protobuf.plugin.go_enum_value_name) = "LogStreamStdout"]; + LOG_STREAM_STDERR = 2 [(docker.protobuf.plugin.go_enum_value_name) = "LogStreamStderr"]; } message LogSubscriptionOptions { @@ -75,7 +75,7 @@ message LogAttr { // LogMessage message LogMessage { // Context identifies the source of the log message. - LogContext context = 1 [(gogoproto.nullable) = false]; + LogContext context = 1; // Timestamp is the time at which the message was generated. // Note: can't use stdtime because this field is nullable. @@ -89,7 +89,7 @@ message LogMessage { // Attrs is a list of key value pairs representing additional log details // that may have been returned from the logger - repeated LogAttr attrs = 5 [(gogoproto.nullable) = false]; + repeated LogAttr attrs = 5; } // Logs defines the methods for retrieving task logs messages from a cluster. @@ -113,7 +113,7 @@ message SubscribeLogsRequest { } message SubscribeLogsMessage { - repeated LogMessage messages = 1 [(gogoproto.nullable) = false]; + repeated LogMessage messages = 1; } // LogBroker defines the API used by the worker to send task logs back to a @@ -176,7 +176,7 @@ message PublishLogsMessage { string subscription_id = 1; // Messages is the log message for publishing. - repeated LogMessage messages = 2 [(gogoproto.nullable) = false]; + repeated LogMessage messages = 2; // Close is a boolean for whether or not the client has completed its log // stream. When close is called, the manager can hang up the subscription. diff --git a/api/logbroker_grpc.pb.go b/api/logbroker_grpc.pb.go new file mode 100644 index 0000000000..2e8af3d9cd --- /dev/null +++ b/api/logbroker_grpc.pb.go @@ -0,0 +1,304 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.6.2 +// - protoc v3.21.12 +// source: api/logbroker.proto + +package api + +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.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 + +const ( + Logs_SubscribeLogs_FullMethodName = "/docker.swarmkit.v1.Logs/SubscribeLogs" +) + +// LogsClient is the client API for Logs 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. +// +// Logs defines the methods for retrieving task logs messages from a cluster. +type LogsClient interface { + // SubscribeLogs starts a subscription with the specified selector and options. + // + // The subscription will be distributed to relevant nodes and messages will + // be collected and sent via the returned stream. + // + // The subscription will end with an EOF. + SubscribeLogs(ctx context.Context, in *SubscribeLogsRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[SubscribeLogsMessage], error) +} + +type logsClient struct { + cc grpc.ClientConnInterface +} + +func NewLogsClient(cc grpc.ClientConnInterface) LogsClient { + return &logsClient{cc} +} + +func (c *logsClient) SubscribeLogs(ctx context.Context, in *SubscribeLogsRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[SubscribeLogsMessage], error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + stream, err := c.cc.NewStream(ctx, &Logs_ServiceDesc.Streams[0], Logs_SubscribeLogs_FullMethodName, cOpts...) + if err != nil { + return nil, err + } + x := &grpc.GenericClientStream[SubscribeLogsRequest, SubscribeLogsMessage]{ClientStream: stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type Logs_SubscribeLogsClient = grpc.ServerStreamingClient[SubscribeLogsMessage] + +// LogsServer is the server API for Logs service. +// All implementations should embed UnimplementedLogsServer +// for forward compatibility. +// +// Logs defines the methods for retrieving task logs messages from a cluster. +type LogsServer interface { + // SubscribeLogs starts a subscription with the specified selector and options. + // + // The subscription will be distributed to relevant nodes and messages will + // be collected and sent via the returned stream. + // + // The subscription will end with an EOF. + SubscribeLogs(*SubscribeLogsRequest, grpc.ServerStreamingServer[SubscribeLogsMessage]) error +} + +// UnimplementedLogsServer should be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedLogsServer struct{} + +func (UnimplementedLogsServer) SubscribeLogs(*SubscribeLogsRequest, grpc.ServerStreamingServer[SubscribeLogsMessage]) error { + return status.Error(codes.Unimplemented, "method SubscribeLogs not implemented") +} +func (UnimplementedLogsServer) testEmbeddedByValue() {} + +// UnsafeLogsServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to LogsServer will +// result in compilation errors. +type UnsafeLogsServer interface { + mustEmbedUnimplementedLogsServer() +} + +func RegisterLogsServer(s grpc.ServiceRegistrar, srv LogsServer) { + // If the following call panics, it indicates UnimplementedLogsServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } + s.RegisterService(&Logs_ServiceDesc, srv) +} + +func _Logs_SubscribeLogs_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(SubscribeLogsRequest) + if err := stream.RecvMsg(m); err != nil { + return err + } + return srv.(LogsServer).SubscribeLogs(m, &grpc.GenericServerStream[SubscribeLogsRequest, SubscribeLogsMessage]{ServerStream: stream}) +} + +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type Logs_SubscribeLogsServer = grpc.ServerStreamingServer[SubscribeLogsMessage] + +// Logs_ServiceDesc is the grpc.ServiceDesc for Logs service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Logs_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "docker.swarmkit.v1.Logs", + HandlerType: (*LogsServer)(nil), + Methods: []grpc.MethodDesc{}, + Streams: []grpc.StreamDesc{ + { + StreamName: "SubscribeLogs", + Handler: _Logs_SubscribeLogs_Handler, + ServerStreams: true, + }, + }, + Metadata: "api/logbroker.proto", +} + +const ( + LogBroker_ListenSubscriptions_FullMethodName = "/docker.swarmkit.v1.LogBroker/ListenSubscriptions" + LogBroker_PublishLogs_FullMethodName = "/docker.swarmkit.v1.LogBroker/PublishLogs" +) + +// LogBrokerClient is the client API for LogBroker 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. +// +// LogBroker defines the API used by the worker to send task logs back to a +// manager. A client listens for subscriptions then optimistically retrieves +// logs satisfying said subscriptions, calling PublishLogs for results that are +// relevant. +// +// The structure of ListenSubscriptions is similar to the Dispatcher API but +// decoupled to allow log distribution to work outside of the regular task +// flow. +type LogBrokerClient interface { + // ListenSubscriptions starts a subscription stream for the node. For each + // message received, the node should attempt to satisfy the subscription. + // + // Log messages that match the provided subscription should be sent via + // PublishLogs. + ListenSubscriptions(ctx context.Context, in *ListenSubscriptionsRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[SubscriptionMessage], error) + // PublishLogs receives sets of log messages destined for a single + // subscription identifier. + PublishLogs(ctx context.Context, opts ...grpc.CallOption) (grpc.ClientStreamingClient[PublishLogsMessage, PublishLogsResponse], error) +} + +type logBrokerClient struct { + cc grpc.ClientConnInterface +} + +func NewLogBrokerClient(cc grpc.ClientConnInterface) LogBrokerClient { + return &logBrokerClient{cc} +} + +func (c *logBrokerClient) ListenSubscriptions(ctx context.Context, in *ListenSubscriptionsRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[SubscriptionMessage], error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + stream, err := c.cc.NewStream(ctx, &LogBroker_ServiceDesc.Streams[0], LogBroker_ListenSubscriptions_FullMethodName, cOpts...) + if err != nil { + return nil, err + } + x := &grpc.GenericClientStream[ListenSubscriptionsRequest, SubscriptionMessage]{ClientStream: stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type LogBroker_ListenSubscriptionsClient = grpc.ServerStreamingClient[SubscriptionMessage] + +func (c *logBrokerClient) PublishLogs(ctx context.Context, opts ...grpc.CallOption) (grpc.ClientStreamingClient[PublishLogsMessage, PublishLogsResponse], error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + stream, err := c.cc.NewStream(ctx, &LogBroker_ServiceDesc.Streams[1], LogBroker_PublishLogs_FullMethodName, cOpts...) + if err != nil { + return nil, err + } + x := &grpc.GenericClientStream[PublishLogsMessage, PublishLogsResponse]{ClientStream: stream} + return x, nil +} + +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type LogBroker_PublishLogsClient = grpc.ClientStreamingClient[PublishLogsMessage, PublishLogsResponse] + +// LogBrokerServer is the server API for LogBroker service. +// All implementations should embed UnimplementedLogBrokerServer +// for forward compatibility. +// +// LogBroker defines the API used by the worker to send task logs back to a +// manager. A client listens for subscriptions then optimistically retrieves +// logs satisfying said subscriptions, calling PublishLogs for results that are +// relevant. +// +// The structure of ListenSubscriptions is similar to the Dispatcher API but +// decoupled to allow log distribution to work outside of the regular task +// flow. +type LogBrokerServer interface { + // ListenSubscriptions starts a subscription stream for the node. For each + // message received, the node should attempt to satisfy the subscription. + // + // Log messages that match the provided subscription should be sent via + // PublishLogs. + ListenSubscriptions(*ListenSubscriptionsRequest, grpc.ServerStreamingServer[SubscriptionMessage]) error + // PublishLogs receives sets of log messages destined for a single + // subscription identifier. + PublishLogs(grpc.ClientStreamingServer[PublishLogsMessage, PublishLogsResponse]) error +} + +// UnimplementedLogBrokerServer should be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedLogBrokerServer struct{} + +func (UnimplementedLogBrokerServer) ListenSubscriptions(*ListenSubscriptionsRequest, grpc.ServerStreamingServer[SubscriptionMessage]) error { + return status.Error(codes.Unimplemented, "method ListenSubscriptions not implemented") +} +func (UnimplementedLogBrokerServer) PublishLogs(grpc.ClientStreamingServer[PublishLogsMessage, PublishLogsResponse]) error { + return status.Error(codes.Unimplemented, "method PublishLogs not implemented") +} +func (UnimplementedLogBrokerServer) testEmbeddedByValue() {} + +// UnsafeLogBrokerServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to LogBrokerServer will +// result in compilation errors. +type UnsafeLogBrokerServer interface { + mustEmbedUnimplementedLogBrokerServer() +} + +func RegisterLogBrokerServer(s grpc.ServiceRegistrar, srv LogBrokerServer) { + // If the following call panics, it indicates UnimplementedLogBrokerServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } + s.RegisterService(&LogBroker_ServiceDesc, srv) +} + +func _LogBroker_ListenSubscriptions_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(ListenSubscriptionsRequest) + if err := stream.RecvMsg(m); err != nil { + return err + } + return srv.(LogBrokerServer).ListenSubscriptions(m, &grpc.GenericServerStream[ListenSubscriptionsRequest, SubscriptionMessage]{ServerStream: stream}) +} + +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type LogBroker_ListenSubscriptionsServer = grpc.ServerStreamingServer[SubscriptionMessage] + +func _LogBroker_PublishLogs_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(LogBrokerServer).PublishLogs(&grpc.GenericServerStream[PublishLogsMessage, PublishLogsResponse]{ServerStream: stream}) +} + +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type LogBroker_PublishLogsServer = grpc.ClientStreamingServer[PublishLogsMessage, PublishLogsResponse] + +// LogBroker_ServiceDesc is the grpc.ServiceDesc for LogBroker service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var LogBroker_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "docker.swarmkit.v1.LogBroker", + HandlerType: (*LogBrokerServer)(nil), + Methods: []grpc.MethodDesc{}, + Streams: []grpc.StreamDesc{ + { + StreamName: "ListenSubscriptions", + Handler: _LogBroker_ListenSubscriptions_Handler, + ServerStreams: true, + }, + { + StreamName: "PublishLogs", + Handler: _LogBroker_PublishLogs_Handler, + ClientStreams: true, + }, + }, + Metadata: "api/logbroker.proto", +} diff --git a/api/naming/naming.go b/api/naming/naming.go index 05edcdadfe..46afebcaa6 100644 --- a/api/naming/naming.go +++ b/api/naming/naming.go @@ -17,9 +17,9 @@ var ( // and, in case Annotations.Name is missing, fallback // to construct the name from other information. func Task(t *api.Task) string { - if t.Annotations.Name != "" { + if t.GetAnnotations().GetName() != "" { // if set, use the container Annotations.Name field, set in the orchestrator. - return t.Annotations.Name + return t.GetAnnotations().GetName() } slot := fmt.Sprint(t.Slot) @@ -29,13 +29,16 @@ func Task(t *api.Task) string { } // fallback to service.instance.id. - return fmt.Sprintf("%s.%s.%s", t.ServiceAnnotations.Name, slot, t.ID) + return fmt.Sprintf("%s.%s.%s", t.GetServiceAnnotations().GetName(), slot, t.ID) } // TODO(stevvooe): Consolidate "Hostname" style validation here. // Runtime returns the runtime name from a given spec. -func Runtime(t api.TaskSpec) (string, error) { +func Runtime(t *api.TaskSpec) (string, error) { + if t == nil { + return "", errUnknownRuntime + } switch r := t.GetRuntime().(type) { case *api.TaskSpec_Attachment: return "attachment", nil diff --git a/api/naming/naming_test.go b/api/naming/naming_test.go index 5549f61f82..5af63e370b 100644 --- a/api/naming/naming_test.go +++ b/api/naming/naming_test.go @@ -19,7 +19,7 @@ func TestTaskNaming(t *testing.T) { ID: "taskID", Slot: 10, NodeID: "thenodeID", - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "theservice", }, }, @@ -30,10 +30,10 @@ func TestTaskNaming(t *testing.T) { Task: &api.Task{ ID: "taskID", NodeID: "thenodeID", - Annotations: api.Annotations{ + Annotations: &api.Annotations{ Name: "thisisthetaskname", }, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "theservice", }, }, @@ -44,7 +44,7 @@ func TestTaskNaming(t *testing.T) { Task: &api.Task{ ID: "taskID", NodeID: "thenodeID", - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "theservice", }, }, diff --git a/api/objects.pb.deepcopy.go b/api/objects.pb.deepcopy.go new file mode 100644 index 0000000000..3cac4f96e1 --- /dev/null +++ b/api/objects.pb.deepcopy.go @@ -0,0 +1,580 @@ +// Code generated by protoc-gen-goswarm. DO NOT EDIT. + +package api + +import ( + deepcopy "github.com/moby/swarmkit/v2/api/deepcopy" + anypb "google.golang.org/protobuf/types/known/anypb" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" +) + +func (m *Meta) Copy() *Meta { + if m == nil { + return nil + } + o := &Meta{} + o.CopyFrom(m) + return o +} + +func (m *Meta) CopyFrom(src interface{}) { + + o := src.(*Meta) + if o.Version != nil { + m.Version = &Version{} + deepcopy.Copy(m.Version, o.Version) + } + + if o.CreatedAt != nil { + m.CreatedAt = ×tamppb.Timestamp{} + deepcopy.Copy(m.CreatedAt, o.CreatedAt) + } + + if o.UpdatedAt != nil { + m.UpdatedAt = ×tamppb.Timestamp{} + deepcopy.Copy(m.UpdatedAt, o.UpdatedAt) + } + +} + +func (m *Node) Copy() *Node { + if m == nil { + return nil + } + o := &Node{} + o.CopyFrom(m) + return o +} + +func (m *Node) CopyFrom(src interface{}) { + + o := src.(*Node) + m.ID = o.ID + if o.Meta != nil { + m.Meta = &Meta{} + deepcopy.Copy(m.Meta, o.Meta) + } + + if o.Spec != nil { + m.Spec = &NodeSpec{} + deepcopy.Copy(m.Spec, o.Spec) + } + + if o.Description != nil { + m.Description = &NodeDescription{} + deepcopy.Copy(m.Description, o.Description) + } + + if o.Status != nil { + m.Status = &NodeStatus{} + deepcopy.Copy(m.Status, o.Status) + } + + if o.ManagerStatus != nil { + m.ManagerStatus = &ManagerStatus{} + deepcopy.Copy(m.ManagerStatus, o.ManagerStatus) + } + + if o.Attachment != nil { + m.Attachment = &NetworkAttachment{} + deepcopy.Copy(m.Attachment, o.Attachment) + } + + if o.Certificate != nil { + m.Certificate = &Certificate{} + deepcopy.Copy(m.Certificate, o.Certificate) + } + + m.Role = o.Role + if o.Attachments != nil { + m.Attachments = make([]*NetworkAttachment, len(o.Attachments)) + for i := range m.Attachments { + m.Attachments[i] = &NetworkAttachment{} + deepcopy.Copy(m.Attachments[i], o.Attachments[i]) + } + } + + m.VXLANUDPPort = o.VXLANUDPPort +} + +func (m *Service) Copy() *Service { + if m == nil { + return nil + } + o := &Service{} + o.CopyFrom(m) + return o +} + +func (m *Service) CopyFrom(src interface{}) { + + o := src.(*Service) + m.ID = o.ID + if o.Meta != nil { + m.Meta = &Meta{} + deepcopy.Copy(m.Meta, o.Meta) + } + + if o.Spec != nil { + m.Spec = &ServiceSpec{} + deepcopy.Copy(m.Spec, o.Spec) + } + + if o.SpecVersion != nil { + m.SpecVersion = &Version{} + deepcopy.Copy(m.SpecVersion, o.SpecVersion) + } + + if o.PreviousSpec != nil { + m.PreviousSpec = &ServiceSpec{} + deepcopy.Copy(m.PreviousSpec, o.PreviousSpec) + } + + if o.PreviousSpecVersion != nil { + m.PreviousSpecVersion = &Version{} + deepcopy.Copy(m.PreviousSpecVersion, o.PreviousSpecVersion) + } + + if o.Endpoint != nil { + m.Endpoint = &Endpoint{} + deepcopy.Copy(m.Endpoint, o.Endpoint) + } + + if o.UpdateStatus != nil { + m.UpdateStatus = &UpdateStatus{} + deepcopy.Copy(m.UpdateStatus, o.UpdateStatus) + } + + if o.JobStatus != nil { + m.JobStatus = &JobStatus{} + deepcopy.Copy(m.JobStatus, o.JobStatus) + } + + m.PendingDelete = o.PendingDelete +} + +func (m *Endpoint) Copy() *Endpoint { + if m == nil { + return nil + } + o := &Endpoint{} + o.CopyFrom(m) + return o +} + +func (m *Endpoint) CopyFrom(src interface{}) { + + o := src.(*Endpoint) + if o.Spec != nil { + m.Spec = &EndpointSpec{} + deepcopy.Copy(m.Spec, o.Spec) + } + + if o.Ports != nil { + m.Ports = make([]*PortConfig, len(o.Ports)) + for i := range m.Ports { + m.Ports[i] = &PortConfig{} + deepcopy.Copy(m.Ports[i], o.Ports[i]) + } + } + + if o.VirtualIPs != nil { + m.VirtualIPs = make([]*Endpoint_VirtualIP, len(o.VirtualIPs)) + for i := range m.VirtualIPs { + m.VirtualIPs[i] = &Endpoint_VirtualIP{} + deepcopy.Copy(m.VirtualIPs[i], o.VirtualIPs[i]) + } + } + +} + +func (m *Endpoint_VirtualIP) Copy() *Endpoint_VirtualIP { + if m == nil { + return nil + } + o := &Endpoint_VirtualIP{} + o.CopyFrom(m) + return o +} + +func (m *Endpoint_VirtualIP) CopyFrom(src interface{}) { + + o := src.(*Endpoint_VirtualIP) + m.NetworkID = o.NetworkID + m.Addr = o.Addr +} + +func (m *Task) Copy() *Task { + if m == nil { + return nil + } + o := &Task{} + o.CopyFrom(m) + return o +} + +func (m *Task) CopyFrom(src interface{}) { + + o := src.(*Task) + m.ID = o.ID + if o.Meta != nil { + m.Meta = &Meta{} + deepcopy.Copy(m.Meta, o.Meta) + } + + if o.Spec != nil { + m.Spec = &TaskSpec{} + deepcopy.Copy(m.Spec, o.Spec) + } + + if o.SpecVersion != nil { + m.SpecVersion = &Version{} + deepcopy.Copy(m.SpecVersion, o.SpecVersion) + } + + m.ServiceID = o.ServiceID + m.Slot = o.Slot + m.NodeID = o.NodeID + if o.Annotations != nil { + m.Annotations = &Annotations{} + deepcopy.Copy(m.Annotations, o.Annotations) + } + + if o.ServiceAnnotations != nil { + m.ServiceAnnotations = &Annotations{} + deepcopy.Copy(m.ServiceAnnotations, o.ServiceAnnotations) + } + + if o.Status != nil { + m.Status = &TaskStatus{} + deepcopy.Copy(m.Status, o.Status) + } + + m.DesiredState = o.DesiredState + if o.Networks != nil { + m.Networks = make([]*NetworkAttachment, len(o.Networks)) + for i := range m.Networks { + m.Networks[i] = &NetworkAttachment{} + deepcopy.Copy(m.Networks[i], o.Networks[i]) + } + } + + if o.Endpoint != nil { + m.Endpoint = &Endpoint{} + deepcopy.Copy(m.Endpoint, o.Endpoint) + } + + if o.LogDriver != nil { + m.LogDriver = &Driver{} + deepcopy.Copy(m.LogDriver, o.LogDriver) + } + + if o.AssignedGenericResources != nil { + m.AssignedGenericResources = make([]*GenericResource, len(o.AssignedGenericResources)) + for i := range m.AssignedGenericResources { + m.AssignedGenericResources[i] = &GenericResource{} + deepcopy.Copy(m.AssignedGenericResources[i], o.AssignedGenericResources[i]) + } + } + + if o.JobIteration != nil { + m.JobIteration = &Version{} + deepcopy.Copy(m.JobIteration, o.JobIteration) + } + + if o.Volumes != nil { + m.Volumes = make([]*VolumeAttachment, len(o.Volumes)) + for i := range m.Volumes { + m.Volumes[i] = &VolumeAttachment{} + deepcopy.Copy(m.Volumes[i], o.Volumes[i]) + } + } + +} + +func (m *NetworkAttachment) Copy() *NetworkAttachment { + if m == nil { + return nil + } + o := &NetworkAttachment{} + o.CopyFrom(m) + return o +} + +func (m *NetworkAttachment) CopyFrom(src interface{}) { + + o := src.(*NetworkAttachment) + if o.Network != nil { + m.Network = &Network{} + deepcopy.Copy(m.Network, o.Network) + } + + if o.Addresses != nil { + m.Addresses = make([]string, len(o.Addresses)) + copy(m.Addresses, o.Addresses) + } + + if o.Aliases != nil { + m.Aliases = make([]string, len(o.Aliases)) + copy(m.Aliases, o.Aliases) + } + + if o.DriverAttachmentOpts != nil { + m.DriverAttachmentOpts = make(map[string]string, len(o.DriverAttachmentOpts)) + for k, v := range o.DriverAttachmentOpts { + m.DriverAttachmentOpts[k] = v + } + } + +} + +func (m *Network) Copy() *Network { + if m == nil { + return nil + } + o := &Network{} + o.CopyFrom(m) + return o +} + +func (m *Network) CopyFrom(src interface{}) { + + o := src.(*Network) + m.ID = o.ID + if o.Meta != nil { + m.Meta = &Meta{} + deepcopy.Copy(m.Meta, o.Meta) + } + + if o.Spec != nil { + m.Spec = &NetworkSpec{} + deepcopy.Copy(m.Spec, o.Spec) + } + + if o.DriverState != nil { + m.DriverState = &Driver{} + deepcopy.Copy(m.DriverState, o.DriverState) + } + + if o.IPAM != nil { + m.IPAM = &IPAMOptions{} + deepcopy.Copy(m.IPAM, o.IPAM) + } + + m.PendingDelete = o.PendingDelete + if o.Extra != nil { + m.Extra = &anypb.Any{} + deepcopy.Copy(m.Extra, o.Extra) + } + +} + +func (m *Cluster) Copy() *Cluster { + if m == nil { + return nil + } + o := &Cluster{} + o.CopyFrom(m) + return o +} + +func (m *Cluster) CopyFrom(src interface{}) { + + o := src.(*Cluster) + m.ID = o.ID + if o.Meta != nil { + m.Meta = &Meta{} + deepcopy.Copy(m.Meta, o.Meta) + } + + if o.Spec != nil { + m.Spec = &ClusterSpec{} + deepcopy.Copy(m.Spec, o.Spec) + } + + if o.RootCA != nil { + m.RootCA = &RootCA{} + deepcopy.Copy(m.RootCA, o.RootCA) + } + + if o.NetworkBootstrapKeys != nil { + m.NetworkBootstrapKeys = make([]*EncryptionKey, len(o.NetworkBootstrapKeys)) + for i := range m.NetworkBootstrapKeys { + m.NetworkBootstrapKeys[i] = &EncryptionKey{} + deepcopy.Copy(m.NetworkBootstrapKeys[i], o.NetworkBootstrapKeys[i]) + } + } + + m.EncryptionKeyLamportClock = o.EncryptionKeyLamportClock + if o.BlacklistedCertificates != nil { + m.BlacklistedCertificates = make(map[string]*BlacklistedCertificate, len(o.BlacklistedCertificates)) + for k, v := range o.BlacklistedCertificates { + m.BlacklistedCertificates[k] = &BlacklistedCertificate{} + deepcopy.Copy(m.BlacklistedCertificates[k], v) + } + } + + if o.UnlockKeys != nil { + m.UnlockKeys = make([]*EncryptionKey, len(o.UnlockKeys)) + for i := range m.UnlockKeys { + m.UnlockKeys[i] = &EncryptionKey{} + deepcopy.Copy(m.UnlockKeys[i], o.UnlockKeys[i]) + } + } + + m.FIPS = o.FIPS + if o.DefaultAddressPool != nil { + m.DefaultAddressPool = make([]string, len(o.DefaultAddressPool)) + copy(m.DefaultAddressPool, o.DefaultAddressPool) + } + + m.SubnetSize = o.SubnetSize + m.VXLANUDPPort = o.VXLANUDPPort +} + +func (m *Secret) Copy() *Secret { + if m == nil { + return nil + } + o := &Secret{} + o.CopyFrom(m) + return o +} + +func (m *Secret) CopyFrom(src interface{}) { + + o := src.(*Secret) + m.ID = o.ID + if o.Meta != nil { + m.Meta = &Meta{} + deepcopy.Copy(m.Meta, o.Meta) + } + + if o.Spec != nil { + m.Spec = &SecretSpec{} + deepcopy.Copy(m.Spec, o.Spec) + } + + m.Internal = o.Internal +} + +func (m *Config) Copy() *Config { + if m == nil { + return nil + } + o := &Config{} + o.CopyFrom(m) + return o +} + +func (m *Config) CopyFrom(src interface{}) { + + o := src.(*Config) + m.ID = o.ID + if o.Meta != nil { + m.Meta = &Meta{} + deepcopy.Copy(m.Meta, o.Meta) + } + + if o.Spec != nil { + m.Spec = &ConfigSpec{} + deepcopy.Copy(m.Spec, o.Spec) + } + +} + +func (m *Resource) Copy() *Resource { + if m == nil { + return nil + } + o := &Resource{} + o.CopyFrom(m) + return o +} + +func (m *Resource) CopyFrom(src interface{}) { + + o := src.(*Resource) + m.ID = o.ID + if o.Meta != nil { + m.Meta = &Meta{} + deepcopy.Copy(m.Meta, o.Meta) + } + + if o.Annotations != nil { + m.Annotations = &Annotations{} + deepcopy.Copy(m.Annotations, o.Annotations) + } + + m.Kind = o.Kind + if o.Payload != nil { + m.Payload = &anypb.Any{} + deepcopy.Copy(m.Payload, o.Payload) + } + +} + +func (m *Extension) Copy() *Extension { + if m == nil { + return nil + } + o := &Extension{} + o.CopyFrom(m) + return o +} + +func (m *Extension) CopyFrom(src interface{}) { + + o := src.(*Extension) + m.ID = o.ID + if o.Meta != nil { + m.Meta = &Meta{} + deepcopy.Copy(m.Meta, o.Meta) + } + + if o.Annotations != nil { + m.Annotations = &Annotations{} + deepcopy.Copy(m.Annotations, o.Annotations) + } + + m.Description = o.Description +} + +func (m *Volume) Copy() *Volume { + if m == nil { + return nil + } + o := &Volume{} + o.CopyFrom(m) + return o +} + +func (m *Volume) CopyFrom(src interface{}) { + + o := src.(*Volume) + m.ID = o.ID + if o.Meta != nil { + m.Meta = &Meta{} + deepcopy.Copy(m.Meta, o.Meta) + } + + if o.Spec != nil { + m.Spec = &VolumeSpec{} + deepcopy.Copy(m.Spec, o.Spec) + } + + if o.PublishStatus != nil { + m.PublishStatus = make([]*VolumePublishStatus, len(o.PublishStatus)) + for i := range m.PublishStatus { + m.PublishStatus[i] = &VolumePublishStatus{} + deepcopy.Copy(m.PublishStatus[i], o.PublishStatus[i]) + } + } + + if o.VolumeInfo != nil { + m.VolumeInfo = &VolumeInfo{} + deepcopy.Copy(m.VolumeInfo, o.VolumeInfo) + } + + m.PendingDelete = o.PendingDelete +} diff --git a/api/objects.pb.go b/api/objects.pb.go index 4581b2f673..6782d18b88 100644 --- a/api/objects.pb.go +++ b/api/objects.pb.go @@ -1,98 +1,117 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: github.com/docker/swarmkit/api/objects.proto +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.11 +// protoc v3.21.12 +// source: api/objects.proto package api import ( - fmt "fmt" - github_com_docker_go_events "github.com/docker/go-events" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" - github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" - types "github.com/gogo/protobuf/types" - github_com_moby_swarmkit_v2_api_deepcopy "github.com/moby/swarmkit/v2/api/deepcopy" _ "github.com/moby/swarmkit/v2/protobuf/plugin" - io "io" - math "math" - math_bits "math/bits" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + anypb "google.golang.org/protobuf/types/known/anypb" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" reflect "reflect" - strings "strings" + sync "sync" + unsafe "unsafe" ) -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package +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) +) // Meta contains metadata about objects. Every object contains a meta field. type Meta struct { + state protoimpl.MessageState `protogen:"open.v1"` // Version tracks the current version of the object. - Version Version `protobuf:"bytes,1,opt,name=version,proto3" json:"version"` + Version *Version `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"` // Object timestamps. // Note: can't use stdtime because these fields are nullable. - CreatedAt *types.Timestamp `protobuf:"bytes,2,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` - UpdatedAt *types.Timestamp `protobuf:"bytes,3,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` + CreatedAt *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` + UpdatedAt *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Meta) Reset() { + *x = Meta{} + mi := &file_api_objects_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Meta) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Meta) Reset() { *m = Meta{} } func (*Meta) ProtoMessage() {} -func (*Meta) Descriptor() ([]byte, []int) { - return fileDescriptor_6218a23329ef342d, []int{0} -} -func (m *Meta) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Meta) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_Meta.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *Meta) ProtoReflect() protoreflect.Message { + mi := &file_api_objects_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *Meta) XXX_Merge(src proto.Message) { - xxx_messageInfo_Meta.Merge(m, src) + +// Deprecated: Use Meta.ProtoReflect.Descriptor instead. +func (*Meta) Descriptor() ([]byte, []int) { + return file_api_objects_proto_rawDescGZIP(), []int{0} } -func (m *Meta) XXX_Size() int { - return m.Size() + +func (x *Meta) GetVersion() *Version { + if x != nil { + return x.Version + } + return nil } -func (m *Meta) XXX_DiscardUnknown() { - xxx_messageInfo_Meta.DiscardUnknown(m) + +func (x *Meta) GetCreatedAt() *timestamppb.Timestamp { + if x != nil { + return x.CreatedAt + } + return nil } -var xxx_messageInfo_Meta proto.InternalMessageInfo +func (x *Meta) GetUpdatedAt() *timestamppb.Timestamp { + if x != nil { + return x.UpdatedAt + } + return nil +} // Node provides the internal node state as seen by the cluster. type Node struct { + state protoimpl.MessageState `protogen:"open.v1"` // ID specifies the identity of the node. ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Meta Meta `protobuf:"bytes,2,opt,name=meta,proto3" json:"meta"` + Meta *Meta `protobuf:"bytes,2,opt,name=meta,proto3" json:"meta,omitempty"` // Spec defines the desired state of the node as specified by the user. // The system will honor this and will *never* modify it. - Spec NodeSpec `protobuf:"bytes,3,opt,name=spec,proto3" json:"spec"` + Spec *NodeSpec `protobuf:"bytes,3,opt,name=spec,proto3" json:"spec,omitempty"` // Description encapsulated the properties of the Node as reported by the // agent. Description *NodeDescription `protobuf:"bytes,4,opt,name=description,proto3" json:"description,omitempty"` // Status provides the current status of the node, as seen by the manager. - Status NodeStatus `protobuf:"bytes,5,opt,name=status,proto3" json:"status"` + Status *NodeStatus `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` // ManagerStatus provides the current status of the node's manager // component, if the node is a manager. ManagerStatus *ManagerStatus `protobuf:"bytes,6,opt,name=manager_status,json=managerStatus,proto3" json:"manager_status,omitempty"` // DEPRECATED: Use Attachments to find the ingress network // The node attachment to the ingress network. - Attachment *NetworkAttachment `protobuf:"bytes,7,opt,name=attachment,proto3" json:"attachment,omitempty"` // Deprecated: Do not use. + // + // Deprecated: Marked as deprecated in api/objects.proto. + Attachment *NetworkAttachment `protobuf:"bytes,7,opt,name=attachment,proto3" json:"attachment,omitempty"` // Certificate is the TLS certificate issued for the node, if any. - Certificate Certificate `protobuf:"bytes,8,opt,name=certificate,proto3" json:"certificate"` + Certificate *Certificate `protobuf:"bytes,8,opt,name=certificate,proto3" json:"certificate,omitempty"` // Role is the *observed* role for this node. It differs from the // desired role set in Node.Spec.Role because the role here is only // updated after the Raft member list has been reconciled with the @@ -109,45 +128,124 @@ type Node struct { Attachments []*NetworkAttachment `protobuf:"bytes,10,rep,name=attachments,proto3" json:"attachments,omitempty"` // VXLANUDPPort specifies the UDP port for VXLAN traffic. // This information is passed from cluster object to individual nodes. - VXLANUDPPort uint32 `protobuf:"varint,11,opt,name=VXLANUDPPort,proto3" json:"VXLANUDPPort,omitempty"` + VXLANUDPPort uint32 `protobuf:"varint,11,opt,name=VXLANUDPPort,proto3" json:"VXLANUDPPort,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Node) Reset() { + *x = Node{} + mi := &file_api_objects_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Node) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Node) Reset() { *m = Node{} } func (*Node) ProtoMessage() {} -func (*Node) Descriptor() ([]byte, []int) { - return fileDescriptor_6218a23329ef342d, []int{1} -} -func (m *Node) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Node) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_Node.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *Node) ProtoReflect() protoreflect.Message { + mi := &file_api_objects_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Node.ProtoReflect.Descriptor instead. +func (*Node) Descriptor() ([]byte, []int) { + return file_api_objects_proto_rawDescGZIP(), []int{1} +} + +func (x *Node) GetID() string { + if x != nil { + return x.ID } + return "" } -func (m *Node) XXX_Merge(src proto.Message) { - xxx_messageInfo_Node.Merge(m, src) + +func (x *Node) GetMeta() *Meta { + if x != nil { + return x.Meta + } + return nil +} + +func (x *Node) GetSpec() *NodeSpec { + if x != nil { + return x.Spec + } + return nil +} + +func (x *Node) GetDescription() *NodeDescription { + if x != nil { + return x.Description + } + return nil +} + +func (x *Node) GetStatus() *NodeStatus { + if x != nil { + return x.Status + } + return nil +} + +func (x *Node) GetManagerStatus() *ManagerStatus { + if x != nil { + return x.ManagerStatus + } + return nil +} + +// Deprecated: Marked as deprecated in api/objects.proto. +func (x *Node) GetAttachment() *NetworkAttachment { + if x != nil { + return x.Attachment + } + return nil +} + +func (x *Node) GetCertificate() *Certificate { + if x != nil { + return x.Certificate + } + return nil } -func (m *Node) XXX_Size() int { - return m.Size() + +func (x *Node) GetRole() NodeRole { + if x != nil { + return x.Role + } + return NodeRoleWorker } -func (m *Node) XXX_DiscardUnknown() { - xxx_messageInfo_Node.DiscardUnknown(m) + +func (x *Node) GetAttachments() []*NetworkAttachment { + if x != nil { + return x.Attachments + } + return nil } -var xxx_messageInfo_Node proto.InternalMessageInfo +func (x *Node) GetVXLANUDPPort() uint32 { + if x != nil { + return x.VXLANUDPPort + } + return 0 +} type Service struct { - ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Meta Meta `protobuf:"bytes,2,opt,name=meta,proto3" json:"meta"` - Spec ServiceSpec `protobuf:"bytes,3,opt,name=spec,proto3" json:"spec"` + state protoimpl.MessageState `protogen:"open.v1"` + ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Meta *Meta `protobuf:"bytes,2,opt,name=meta,proto3" json:"meta,omitempty"` + Spec *ServiceSpec `protobuf:"bytes,3,opt,name=spec,proto3" json:"spec,omitempty"` // SpecVersion versions Spec, to identify changes in the spec. Note that // this is not directly comparable to the service's Version. SpecVersion *Version `protobuf:"bytes,10,opt,name=spec_version,json=specVersion,proto3" json:"spec_version,omitempty"` @@ -177,142 +275,187 @@ type Service struct { // potentially its associated resources also marked for deletion) when // all of its tasks are gone PendingDelete bool `protobuf:"varint,7,opt,name=pending_delete,json=pendingDelete,proto3" json:"pending_delete,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Service) Reset() { + *x = Service{} + mi := &file_api_objects_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Service) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Service) Reset() { *m = Service{} } func (*Service) ProtoMessage() {} -func (*Service) Descriptor() ([]byte, []int) { - return fileDescriptor_6218a23329ef342d, []int{2} -} -func (m *Service) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Service) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_Service.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *Service) ProtoReflect() protoreflect.Message { + mi := &file_api_objects_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Service.ProtoReflect.Descriptor instead. +func (*Service) Descriptor() ([]byte, []int) { + return file_api_objects_proto_rawDescGZIP(), []int{2} +} + +func (x *Service) GetID() string { + if x != nil { + return x.ID + } + return "" +} + +func (x *Service) GetMeta() *Meta { + if x != nil { + return x.Meta + } + return nil +} + +func (x *Service) GetSpec() *ServiceSpec { + if x != nil { + return x.Spec + } + return nil +} + +func (x *Service) GetSpecVersion() *Version { + if x != nil { + return x.SpecVersion + } + return nil +} + +func (x *Service) GetPreviousSpec() *ServiceSpec { + if x != nil { + return x.PreviousSpec + } + return nil +} + +func (x *Service) GetPreviousSpecVersion() *Version { + if x != nil { + return x.PreviousSpecVersion } + return nil } -func (m *Service) XXX_Merge(src proto.Message) { - xxx_messageInfo_Service.Merge(m, src) + +func (x *Service) GetEndpoint() *Endpoint { + if x != nil { + return x.Endpoint + } + return nil } -func (m *Service) XXX_Size() int { - return m.Size() + +func (x *Service) GetUpdateStatus() *UpdateStatus { + if x != nil { + return x.UpdateStatus + } + return nil } -func (m *Service) XXX_DiscardUnknown() { - xxx_messageInfo_Service.DiscardUnknown(m) + +func (x *Service) GetJobStatus() *JobStatus { + if x != nil { + return x.JobStatus + } + return nil } -var xxx_messageInfo_Service proto.InternalMessageInfo +func (x *Service) GetPendingDelete() bool { + if x != nil { + return x.PendingDelete + } + return false +} // Endpoint specified all the network parameters required to // correctly discover and load balance a service type Endpoint struct { - Spec *EndpointSpec `protobuf:"bytes,1,opt,name=spec,proto3" json:"spec,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Spec *EndpointSpec `protobuf:"bytes,1,opt,name=spec,proto3" json:"spec,omitempty"` // Runtime state of the exposed ports which may carry // auto-allocated swarm ports in addition to the user // configured information. Ports []*PortConfig `protobuf:"bytes,2,rep,name=ports,proto3" json:"ports,omitempty"` // VirtualIPs specifies the IP addresses under which this endpoint will be // made available. - VirtualIPs []*Endpoint_VirtualIP `protobuf:"bytes,3,rep,name=virtual_ips,json=virtualIps,proto3" json:"virtual_ips,omitempty"` + VirtualIPs []*Endpoint_VirtualIP `protobuf:"bytes,3,rep,name=virtual_ips,json=virtualIps,proto3" json:"virtual_ips,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *Endpoint) Reset() { *m = Endpoint{} } -func (*Endpoint) ProtoMessage() {} -func (*Endpoint) Descriptor() ([]byte, []int) { - return fileDescriptor_6218a23329ef342d, []int{3} -} -func (m *Endpoint) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Endpoint) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_Endpoint.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 *Endpoint) XXX_Merge(src proto.Message) { - xxx_messageInfo_Endpoint.Merge(m, src) -} -func (m *Endpoint) XXX_Size() int { - return m.Size() -} -func (m *Endpoint) XXX_DiscardUnknown() { - xxx_messageInfo_Endpoint.DiscardUnknown(m) +func (x *Endpoint) Reset() { + *x = Endpoint{} + mi := &file_api_objects_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -var xxx_messageInfo_Endpoint proto.InternalMessageInfo - -// VirtualIP specifies a set of networks this endpoint will be attached to -// and the IP addresses the target service will be made available under. -type Endpoint_VirtualIP struct { - // NetworkID for which this endpoint attachment was created. - NetworkID string `protobuf:"bytes,1,opt,name=network_id,json=networkId,proto3" json:"network_id,omitempty"` - // A virtual IP is used to address this service in IP - // layer that the client can use to send requests to - // this service. A DNS A/AAAA query on the service - // name might return this IP to the client. This is - // strictly a logical IP and there may not be any - // interfaces assigned this IP address or any route - // created for this address. More than one to - // accommodate for both IPv4 and IPv6 - Addr string `protobuf:"bytes,2,opt,name=addr,proto3" json:"addr,omitempty"` +func (x *Endpoint) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Endpoint_VirtualIP) Reset() { *m = Endpoint_VirtualIP{} } -func (*Endpoint_VirtualIP) ProtoMessage() {} -func (*Endpoint_VirtualIP) Descriptor() ([]byte, []int) { - return fileDescriptor_6218a23329ef342d, []int{3, 0} -} -func (m *Endpoint_VirtualIP) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Endpoint_VirtualIP) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_Endpoint_VirtualIP.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err +func (*Endpoint) ProtoMessage() {} + +func (x *Endpoint) ProtoReflect() protoreflect.Message { + mi := &file_api_objects_proto_msgTypes[3] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *Endpoint_VirtualIP) XXX_Merge(src proto.Message) { - xxx_messageInfo_Endpoint_VirtualIP.Merge(m, src) + +// Deprecated: Use Endpoint.ProtoReflect.Descriptor instead. +func (*Endpoint) Descriptor() ([]byte, []int) { + return file_api_objects_proto_rawDescGZIP(), []int{3} } -func (m *Endpoint_VirtualIP) XXX_Size() int { - return m.Size() + +func (x *Endpoint) GetSpec() *EndpointSpec { + if x != nil { + return x.Spec + } + return nil } -func (m *Endpoint_VirtualIP) XXX_DiscardUnknown() { - xxx_messageInfo_Endpoint_VirtualIP.DiscardUnknown(m) + +func (x *Endpoint) GetPorts() []*PortConfig { + if x != nil { + return x.Ports + } + return nil } -var xxx_messageInfo_Endpoint_VirtualIP proto.InternalMessageInfo +func (x *Endpoint) GetVirtualIPs() []*Endpoint_VirtualIP { + if x != nil { + return x.VirtualIPs + } + return nil +} // Task specifies the parameters for implementing a Spec. A task is effectively // immutable and idempotent. Once it is dispatched to a node, it will not be // dispatched to another node. type Task struct { - ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Meta Meta `protobuf:"bytes,2,opt,name=meta,proto3" json:"meta"` + state protoimpl.MessageState `protogen:"open.v1"` + ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Meta *Meta `protobuf:"bytes,2,opt,name=meta,proto3" json:"meta,omitempty"` // Spec defines the desired state of the task as specified by the user. // The system will honor this and will *never* modify it. - Spec TaskSpec `protobuf:"bytes,3,opt,name=spec,proto3" json:"spec"` + Spec *TaskSpec `protobuf:"bytes,3,opt,name=spec,proto3" json:"spec,omitempty"` // SpecVersion is copied from Service, to identify which version of the // spec this task has. Note that this is not directly comparable to the // service's Version. @@ -335,14 +478,14 @@ type Task struct { // // NOTE(stevvooe): The preserves the ability for us to making naming // decisions for tasks in orchestrator, albeit, this is left empty for now. - Annotations Annotations `protobuf:"bytes,7,opt,name=annotations,proto3" json:"annotations"` + Annotations *Annotations `protobuf:"bytes,7,opt,name=annotations,proto3" json:"annotations,omitempty"` // ServiceAnnotations is a direct copy of the service name and labels when // this task is created. // // Labels set here will *not* be propagated to the runtime target, such as a // container. Use labels on the runtime target for that purpose. - ServiceAnnotations Annotations `protobuf:"bytes,8,opt,name=service_annotations,json=serviceAnnotations,proto3" json:"service_annotations"` - Status TaskStatus `protobuf:"bytes,9,opt,name=status,proto3" json:"status"` + ServiceAnnotations *Annotations `protobuf:"bytes,8,opt,name=service_annotations,json=serviceAnnotations,proto3" json:"service_annotations,omitempty"` + Status *TaskStatus `protobuf:"bytes,9,opt,name=status,proto3" json:"status,omitempty"` // DesiredState is the target state for the task. It is set to // TaskStateRunning when a task is first created, and changed to // TaskStateShutdown if the manager wants to terminate the task. This field @@ -368,44 +511,164 @@ type Task struct { JobIteration *Version `protobuf:"bytes,16,opt,name=job_iteration,json=jobIteration,proto3" json:"job_iteration,omitempty"` // Volumes is a list of VolumeAttachments for this task. It specifies which // volumes this task is allocated. - Volumes []*VolumeAttachment `protobuf:"bytes,17,rep,name=volumes,proto3" json:"volumes,omitempty"` + Volumes []*VolumeAttachment `protobuf:"bytes,17,rep,name=volumes,proto3" json:"volumes,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Task) Reset() { + *x = Task{} + mi := &file_api_objects_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Task) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Task) Reset() { *m = Task{} } func (*Task) ProtoMessage() {} -func (*Task) Descriptor() ([]byte, []int) { - return fileDescriptor_6218a23329ef342d, []int{4} -} -func (m *Task) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Task) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_Task.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *Task) ProtoReflect() protoreflect.Message { + mi := &file_api_objects_proto_msgTypes[4] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Task.ProtoReflect.Descriptor instead. +func (*Task) Descriptor() ([]byte, []int) { + return file_api_objects_proto_rawDescGZIP(), []int{4} +} + +func (x *Task) GetID() string { + if x != nil { + return x.ID + } + return "" +} + +func (x *Task) GetMeta() *Meta { + if x != nil { + return x.Meta + } + return nil +} + +func (x *Task) GetSpec() *TaskSpec { + if x != nil { + return x.Spec + } + return nil +} + +func (x *Task) GetSpecVersion() *Version { + if x != nil { + return x.SpecVersion + } + return nil +} + +func (x *Task) GetServiceID() string { + if x != nil { + return x.ServiceID + } + return "" +} + +func (x *Task) GetSlot() uint64 { + if x != nil { + return x.Slot + } + return 0 +} + +func (x *Task) GetNodeID() string { + if x != nil { + return x.NodeID + } + return "" +} + +func (x *Task) GetAnnotations() *Annotations { + if x != nil { + return x.Annotations + } + return nil +} + +func (x *Task) GetServiceAnnotations() *Annotations { + if x != nil { + return x.ServiceAnnotations + } + return nil +} + +func (x *Task) GetStatus() *TaskStatus { + if x != nil { + return x.Status + } + return nil +} + +func (x *Task) GetDesiredState() TaskState { + if x != nil { + return x.DesiredState + } + return TaskStateNew +} + +func (x *Task) GetNetworks() []*NetworkAttachment { + if x != nil { + return x.Networks + } + return nil +} + +func (x *Task) GetEndpoint() *Endpoint { + if x != nil { + return x.Endpoint } + return nil } -func (m *Task) XXX_Merge(src proto.Message) { - xxx_messageInfo_Task.Merge(m, src) + +func (x *Task) GetLogDriver() *Driver { + if x != nil { + return x.LogDriver + } + return nil } -func (m *Task) XXX_Size() int { - return m.Size() + +func (x *Task) GetAssignedGenericResources() []*GenericResource { + if x != nil { + return x.AssignedGenericResources + } + return nil } -func (m *Task) XXX_DiscardUnknown() { - xxx_messageInfo_Task.DiscardUnknown(m) + +func (x *Task) GetJobIteration() *Version { + if x != nil { + return x.JobIteration + } + return nil } -var xxx_messageInfo_Task proto.InternalMessageInfo +func (x *Task) GetVolumes() []*VolumeAttachment { + if x != nil { + return x.Volumes + } + return nil +} // NetworkAttachment specifies the network parameters of attachment to // a single network by an object such as task or node. type NetworkAttachment struct { + state protoimpl.MessageState `protogen:"open.v1"` // Network state as a whole becomes part of the object so that // it always is available for use in agents so that agents // don't have any other dependency during execution. @@ -416,45 +679,74 @@ type NetworkAttachment struct { // List of aliases by which a task is resolved in a network Aliases []string `protobuf:"bytes,3,rep,name=aliases,proto3" json:"aliases,omitempty"` // Map of all the driver attachment options for this network - DriverAttachmentOpts map[string]string `protobuf:"bytes,4,rep,name=driver_attachment_opts,json=driverAttachmentOpts,proto3" json:"driver_attachment_opts,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + DriverAttachmentOpts map[string]string `protobuf:"bytes,4,rep,name=driver_attachment_opts,json=driverAttachmentOpts,proto3" json:"driver_attachment_opts,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *NetworkAttachment) Reset() { + *x = NetworkAttachment{} + mi := &file_api_objects_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *NetworkAttachment) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *NetworkAttachment) Reset() { *m = NetworkAttachment{} } func (*NetworkAttachment) ProtoMessage() {} -func (*NetworkAttachment) Descriptor() ([]byte, []int) { - return fileDescriptor_6218a23329ef342d, []int{5} -} -func (m *NetworkAttachment) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *NetworkAttachment) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_NetworkAttachment.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *NetworkAttachment) ProtoReflect() protoreflect.Message { + mi := &file_api_objects_proto_msgTypes[5] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *NetworkAttachment) XXX_Merge(src proto.Message) { - xxx_messageInfo_NetworkAttachment.Merge(m, src) + +// Deprecated: Use NetworkAttachment.ProtoReflect.Descriptor instead. +func (*NetworkAttachment) Descriptor() ([]byte, []int) { + return file_api_objects_proto_rawDescGZIP(), []int{5} +} + +func (x *NetworkAttachment) GetNetwork() *Network { + if x != nil { + return x.Network + } + return nil } -func (m *NetworkAttachment) XXX_Size() int { - return m.Size() + +func (x *NetworkAttachment) GetAddresses() []string { + if x != nil { + return x.Addresses + } + return nil } -func (m *NetworkAttachment) XXX_DiscardUnknown() { - xxx_messageInfo_NetworkAttachment.DiscardUnknown(m) + +func (x *NetworkAttachment) GetAliases() []string { + if x != nil { + return x.Aliases + } + return nil } -var xxx_messageInfo_NetworkAttachment proto.InternalMessageInfo +func (x *NetworkAttachment) GetDriverAttachmentOpts() map[string]string { + if x != nil { + return x.DriverAttachmentOpts + } + return nil +} type Network struct { - ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Meta Meta `protobuf:"bytes,2,opt,name=meta,proto3" json:"meta"` - Spec NetworkSpec `protobuf:"bytes,3,opt,name=spec,proto3" json:"spec"` + state protoimpl.MessageState `protogen:"open.v1"` + ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Meta *Meta `protobuf:"bytes,2,opt,name=meta,proto3" json:"meta,omitempty"` + Spec *NetworkSpec `protobuf:"bytes,3,opt,name=spec,proto3" json:"spec,omitempty"` // Driver specific operational state provided by the network driver. DriverState *Driver `protobuf:"bytes,4,opt,name=driver_state,json=driverState,proto3" json:"driver_state,omitempty"` // Runtime state of IPAM options. This may not reflect the @@ -476,50 +768,100 @@ type Network struct { // Extra encodes application-specific information about the live state // of the network. The syntax and semantics of the value are dictated by // the network allocator implementation. - Extra *types.Any `protobuf:"bytes,7,opt,name=extra,proto3" json:"extra,omitempty"` + Extra *anypb.Any `protobuf:"bytes,7,opt,name=extra,proto3" json:"extra,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Network) Reset() { + *x = Network{} + mi := &file_api_objects_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Network) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Network) Reset() { *m = Network{} } func (*Network) ProtoMessage() {} -func (*Network) Descriptor() ([]byte, []int) { - return fileDescriptor_6218a23329ef342d, []int{6} -} -func (m *Network) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Network) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_Network.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *Network) ProtoReflect() protoreflect.Message { + mi := &file_api_objects_proto_msgTypes[6] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *Network) XXX_Merge(src proto.Message) { - xxx_messageInfo_Network.Merge(m, src) + +// Deprecated: Use Network.ProtoReflect.Descriptor instead. +func (*Network) Descriptor() ([]byte, []int) { + return file_api_objects_proto_rawDescGZIP(), []int{6} } -func (m *Network) XXX_Size() int { - return m.Size() + +func (x *Network) GetID() string { + if x != nil { + return x.ID + } + return "" } -func (m *Network) XXX_DiscardUnknown() { - xxx_messageInfo_Network.DiscardUnknown(m) + +func (x *Network) GetMeta() *Meta { + if x != nil { + return x.Meta + } + return nil } -var xxx_messageInfo_Network proto.InternalMessageInfo +func (x *Network) GetSpec() *NetworkSpec { + if x != nil { + return x.Spec + } + return nil +} -// Cluster provides global cluster settings. -type Cluster struct { - ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Meta Meta `protobuf:"bytes,2,opt,name=meta,proto3" json:"meta"` - Spec ClusterSpec `protobuf:"bytes,3,opt,name=spec,proto3" json:"spec"` - // RootCA contains key material for the root CA. - RootCA RootCA `protobuf:"bytes,4,opt,name=root_ca,json=rootCa,proto3" json:"root_ca"` - // Symmetric encryption key distributed by the lead manager. Used by agents - // for securing network bootstrapping and communication. +func (x *Network) GetDriverState() *Driver { + if x != nil { + return x.DriverState + } + return nil +} + +func (x *Network) GetIPAM() *IPAMOptions { + if x != nil { + return x.IPAM + } + return nil +} + +func (x *Network) GetPendingDelete() bool { + if x != nil { + return x.PendingDelete + } + return false +} + +func (x *Network) GetExtra() *anypb.Any { + if x != nil { + return x.Extra + } + return nil +} + +// Cluster provides global cluster settings. +type Cluster struct { + state protoimpl.MessageState `protogen:"open.v1"` + ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Meta *Meta `protobuf:"bytes,2,opt,name=meta,proto3" json:"meta,omitempty"` + Spec *ClusterSpec `protobuf:"bytes,3,opt,name=spec,proto3" json:"spec,omitempty"` + // RootCA contains key material for the root CA. + RootCA *RootCA `protobuf:"bytes,4,opt,name=root_ca,json=rootCa,proto3" json:"root_ca,omitempty"` + // Symmetric encryption key distributed by the lead manager. Used by agents + // for securing network bootstrapping and communication. NetworkBootstrapKeys []*EncryptionKey `protobuf:"bytes,5,rep,name=network_bootstrap_keys,json=networkBootstrapKeys,proto3" json:"network_bootstrap_keys,omitempty"` // Logical clock used to timestamp every key. It allows other managers // and agents to unambiguously identify the older key to be deleted when @@ -528,7 +870,7 @@ type Cluster struct { // BlacklistedCertificates tracks certificates that should no longer // be honored. It's a mapping from CN -> BlacklistedCertificate. // swarm. Their certificates should effectively be blacklisted. - BlacklistedCertificates map[string]*BlacklistedCertificate `protobuf:"bytes,8,rep,name=blacklisted_certificates,json=blacklistedCertificates,proto3" json:"blacklisted_certificates,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + BlacklistedCertificates map[string]*BlacklistedCertificate `protobuf:"bytes,8,rep,name=blacklisted_certificates,json=blacklistedCertificates,proto3" json:"blacklisted_certificates,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // UnlockKeys defines the keys that lock node data at rest. For example, // this would contain the key encrypting key (KEK) that will encrypt the // manager TLS keys at rest and the raft encryption keys at rest. @@ -548,226 +890,427 @@ type Cluster struct { // the length of the subnet masks for every such network SubnetSize uint32 `protobuf:"varint,12,opt,name=subnetSize,proto3" json:"subnetSize,omitempty"` // VXLANUDPPort specifies the UDP port for VXLAN traffic. - VXLANUDPPort uint32 `protobuf:"varint,13,opt,name=VXLANUDPPort,proto3" json:"VXLANUDPPort,omitempty"` + VXLANUDPPort uint32 `protobuf:"varint,13,opt,name=VXLANUDPPort,proto3" json:"VXLANUDPPort,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Cluster) Reset() { + *x = Cluster{} + mi := &file_api_objects_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Cluster) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Cluster) Reset() { *m = Cluster{} } func (*Cluster) ProtoMessage() {} -func (*Cluster) Descriptor() ([]byte, []int) { - return fileDescriptor_6218a23329ef342d, []int{7} -} -func (m *Cluster) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Cluster) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_Cluster.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *Cluster) ProtoReflect() protoreflect.Message { + mi := &file_api_objects_proto_msgTypes[7] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Cluster.ProtoReflect.Descriptor instead. +func (*Cluster) Descriptor() ([]byte, []int) { + return file_api_objects_proto_rawDescGZIP(), []int{7} +} + +func (x *Cluster) GetID() string { + if x != nil { + return x.ID } + return "" } -func (m *Cluster) XXX_Merge(src proto.Message) { - xxx_messageInfo_Cluster.Merge(m, src) + +func (x *Cluster) GetMeta() *Meta { + if x != nil { + return x.Meta + } + return nil +} + +func (x *Cluster) GetSpec() *ClusterSpec { + if x != nil { + return x.Spec + } + return nil +} + +func (x *Cluster) GetRootCA() *RootCA { + if x != nil { + return x.RootCA + } + return nil +} + +func (x *Cluster) GetNetworkBootstrapKeys() []*EncryptionKey { + if x != nil { + return x.NetworkBootstrapKeys + } + return nil +} + +func (x *Cluster) GetEncryptionKeyLamportClock() uint64 { + if x != nil { + return x.EncryptionKeyLamportClock + } + return 0 +} + +func (x *Cluster) GetBlacklistedCertificates() map[string]*BlacklistedCertificate { + if x != nil { + return x.BlacklistedCertificates + } + return nil +} + +func (x *Cluster) GetUnlockKeys() []*EncryptionKey { + if x != nil { + return x.UnlockKeys + } + return nil +} + +func (x *Cluster) GetFIPS() bool { + if x != nil { + return x.FIPS + } + return false } -func (m *Cluster) XXX_Size() int { - return m.Size() + +func (x *Cluster) GetDefaultAddressPool() []string { + if x != nil { + return x.DefaultAddressPool + } + return nil } -func (m *Cluster) XXX_DiscardUnknown() { - xxx_messageInfo_Cluster.DiscardUnknown(m) + +func (x *Cluster) GetSubnetSize() uint32 { + if x != nil { + return x.SubnetSize + } + return 0 } -var xxx_messageInfo_Cluster proto.InternalMessageInfo +func (x *Cluster) GetVXLANUDPPort() uint32 { + if x != nil { + return x.VXLANUDPPort + } + return 0 +} // Secret represents a secret that should be passed to a container or a node, // and is immutable. type Secret struct { - ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Meta Meta `protobuf:"bytes,2,opt,name=meta,proto3" json:"meta"` + state protoimpl.MessageState `protogen:"open.v1"` + ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Meta *Meta `protobuf:"bytes,2,opt,name=meta,proto3" json:"meta,omitempty"` // Spec contains the actual secret data, as well as any context around the // secret data that the user provides. - Spec SecretSpec `protobuf:"bytes,3,opt,name=spec,proto3" json:"spec"` + Spec *SecretSpec `protobuf:"bytes,3,opt,name=spec,proto3" json:"spec,omitempty"` // Whether the secret is an internal secret (not set by a user) or not. - Internal bool `protobuf:"varint,4,opt,name=internal,proto3" json:"internal,omitempty"` + Internal bool `protobuf:"varint,4,opt,name=internal,proto3" json:"internal,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Secret) Reset() { + *x = Secret{} + mi := &file_api_objects_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Secret) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Secret) Reset() { *m = Secret{} } func (*Secret) ProtoMessage() {} -func (*Secret) Descriptor() ([]byte, []int) { - return fileDescriptor_6218a23329ef342d, []int{8} -} -func (m *Secret) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Secret) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_Secret.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *Secret) ProtoReflect() protoreflect.Message { + mi := &file_api_objects_proto_msgTypes[8] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) +} + +// Deprecated: Use Secret.ProtoReflect.Descriptor instead. +func (*Secret) Descriptor() ([]byte, []int) { + return file_api_objects_proto_rawDescGZIP(), []int{8} } -func (m *Secret) XXX_Merge(src proto.Message) { - xxx_messageInfo_Secret.Merge(m, src) + +func (x *Secret) GetID() string { + if x != nil { + return x.ID + } + return "" } -func (m *Secret) XXX_Size() int { - return m.Size() + +func (x *Secret) GetMeta() *Meta { + if x != nil { + return x.Meta + } + return nil } -func (m *Secret) XXX_DiscardUnknown() { - xxx_messageInfo_Secret.DiscardUnknown(m) + +func (x *Secret) GetSpec() *SecretSpec { + if x != nil { + return x.Spec + } + return nil } -var xxx_messageInfo_Secret proto.InternalMessageInfo +func (x *Secret) GetInternal() bool { + if x != nil { + return x.Internal + } + return false +} // Config represents a set of configuration files that should be passed to a // container. type Config struct { - ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Meta Meta `protobuf:"bytes,2,opt,name=meta,proto3" json:"meta"` + state protoimpl.MessageState `protogen:"open.v1"` + ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Meta *Meta `protobuf:"bytes,2,opt,name=meta,proto3" json:"meta,omitempty"` // Spec contains the actual config data, as well as any context around the // config data that the user provides. - Spec ConfigSpec `protobuf:"bytes,3,opt,name=spec,proto3" json:"spec"` + Spec *ConfigSpec `protobuf:"bytes,3,opt,name=spec,proto3" json:"spec,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Config) Reset() { + *x = Config{} + mi := &file_api_objects_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Config) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Config) Reset() { *m = Config{} } func (*Config) ProtoMessage() {} -func (*Config) Descriptor() ([]byte, []int) { - return fileDescriptor_6218a23329ef342d, []int{9} -} -func (m *Config) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Config) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_Config.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *Config) ProtoReflect() protoreflect.Message { + mi := &file_api_objects_proto_msgTypes[9] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *Config) XXX_Merge(src proto.Message) { - xxx_messageInfo_Config.Merge(m, src) + +// Deprecated: Use Config.ProtoReflect.Descriptor instead. +func (*Config) Descriptor() ([]byte, []int) { + return file_api_objects_proto_rawDescGZIP(), []int{9} } -func (m *Config) XXX_Size() int { - return m.Size() + +func (x *Config) GetID() string { + if x != nil { + return x.ID + } + return "" } -func (m *Config) XXX_DiscardUnknown() { - xxx_messageInfo_Config.DiscardUnknown(m) + +func (x *Config) GetMeta() *Meta { + if x != nil { + return x.Meta + } + return nil } -var xxx_messageInfo_Config proto.InternalMessageInfo +func (x *Config) GetSpec() *ConfigSpec { + if x != nil { + return x.Spec + } + return nil +} // Resource is a top-level object with externally defined content and indexing. // SwarmKit can serve as a store for these objects without understanding their // meanings. type Resource struct { - ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Meta Meta `protobuf:"bytes,2,opt,name=meta,proto3" json:"meta"` - Annotations Annotations `protobuf:"bytes,3,opt,name=annotations,proto3" json:"annotations"` + state protoimpl.MessageState `protogen:"open.v1"` + ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Meta *Meta `protobuf:"bytes,2,opt,name=meta,proto3" json:"meta,omitempty"` + Annotations *Annotations `protobuf:"bytes,3,opt,name=annotations,proto3" json:"annotations,omitempty"` // Kind identifies this class of object. It is essentially a namespace // to keep IDs or indices from colliding between unrelated Resource // objects. This must correspond to the name of an Extension. Kind string `protobuf:"bytes,4,opt,name=kind,proto3" json:"kind,omitempty"` // Payload bytes. This data is not interpreted in any way by SwarmKit. // By convention, it should be a marshalled protocol buffers message. - Payload *types.Any `protobuf:"bytes,5,opt,name=payload,proto3" json:"payload,omitempty"` + Payload *anypb.Any `protobuf:"bytes,5,opt,name=payload,proto3" json:"payload,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Resource) Reset() { + *x = Resource{} + mi := &file_api_objects_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Resource) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Resource) Reset() { *m = Resource{} } func (*Resource) ProtoMessage() {} -func (*Resource) Descriptor() ([]byte, []int) { - return fileDescriptor_6218a23329ef342d, []int{10} -} -func (m *Resource) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Resource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_Resource.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *Resource) ProtoReflect() protoreflect.Message { + mi := &file_api_objects_proto_msgTypes[10] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Resource.ProtoReflect.Descriptor instead. +func (*Resource) Descriptor() ([]byte, []int) { + return file_api_objects_proto_rawDescGZIP(), []int{10} +} + +func (x *Resource) GetID() string { + if x != nil { + return x.ID } + return "" } -func (m *Resource) XXX_Merge(src proto.Message) { - xxx_messageInfo_Resource.Merge(m, src) + +func (x *Resource) GetMeta() *Meta { + if x != nil { + return x.Meta + } + return nil } -func (m *Resource) XXX_Size() int { - return m.Size() + +func (x *Resource) GetAnnotations() *Annotations { + if x != nil { + return x.Annotations + } + return nil } -func (m *Resource) XXX_DiscardUnknown() { - xxx_messageInfo_Resource.DiscardUnknown(m) + +func (x *Resource) GetKind() string { + if x != nil { + return x.Kind + } + return "" } -var xxx_messageInfo_Resource proto.InternalMessageInfo +func (x *Resource) GetPayload() *anypb.Any { + if x != nil { + return x.Payload + } + return nil +} // Extension declares a type of "resource" object. This message provides some // metadata about the objects. type Extension struct { - ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Meta Meta `protobuf:"bytes,2,opt,name=meta,proto3" json:"meta"` - Annotations Annotations `protobuf:"bytes,3,opt,name=annotations,proto3" json:"annotations"` - Description string `protobuf:"bytes,4,opt,name=description,proto3" json:"description,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Meta *Meta `protobuf:"bytes,2,opt,name=meta,proto3" json:"meta,omitempty"` + Annotations *Annotations `protobuf:"bytes,3,opt,name=annotations,proto3" json:"annotations,omitempty"` + Description string `protobuf:"bytes,4,opt,name=description,proto3" json:"description,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Extension) Reset() { + *x = Extension{} + mi := &file_api_objects_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Extension) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Extension) Reset() { *m = Extension{} } func (*Extension) ProtoMessage() {} -func (*Extension) Descriptor() ([]byte, []int) { - return fileDescriptor_6218a23329ef342d, []int{11} -} -func (m *Extension) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Extension) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_Extension.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *Extension) ProtoReflect() protoreflect.Message { + mi := &file_api_objects_proto_msgTypes[11] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) +} + +// Deprecated: Use Extension.ProtoReflect.Descriptor instead. +func (*Extension) Descriptor() ([]byte, []int) { + return file_api_objects_proto_rawDescGZIP(), []int{11} } -func (m *Extension) XXX_Merge(src proto.Message) { - xxx_messageInfo_Extension.Merge(m, src) + +func (x *Extension) GetID() string { + if x != nil { + return x.ID + } + return "" } -func (m *Extension) XXX_Size() int { - return m.Size() + +func (x *Extension) GetMeta() *Meta { + if x != nil { + return x.Meta + } + return nil } -func (m *Extension) XXX_DiscardUnknown() { - xxx_messageInfo_Extension.DiscardUnknown(m) + +func (x *Extension) GetAnnotations() *Annotations { + if x != nil { + return x.Annotations + } + return nil } -var xxx_messageInfo_Extension proto.InternalMessageInfo +func (x *Extension) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} // Volume is the top-level object describing a volume usable by Swarmkit. The // Volume contains the user's VolumeSpec, the Volume's status, and the Volume // object that was returned by the CSI Plugin when the volume was created. type Volume struct { + state protoimpl.MessageState `protogen:"open.v1"` // ID is the swarmkit-internal ID for this volume object. This has no // relation to the CSI volume identifier provided by the CSI Plugin. ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Meta Meta `protobuf:"bytes,2,opt,name=meta,proto3" json:"meta"` + Meta *Meta `protobuf:"bytes,2,opt,name=meta,proto3" json:"meta,omitempty"` // Spec is the desired state of the Volume, as provided by the user. - Spec VolumeSpec `protobuf:"bytes,3,opt,name=spec,proto3" json:"spec"` + Spec *VolumeSpec `protobuf:"bytes,3,opt,name=spec,proto3" json:"spec,omitempty"` // PublishStatus is the status of the volume as it pertains to the various // nodes it is in use on. PublishStatus []*VolumePublishStatus `protobuf:"bytes,4,rep,name=publish_status,json=publishStatus,proto3" json:"publish_status,omitempty"` @@ -781,9414 +1324,447 @@ type Volume struct { // PendingDelete = true, which instructs Swarm to go through the work of // removing the volume and then delete it when finished. PendingDelete bool `protobuf:"varint,6,opt,name=pending_delete,json=pendingDelete,proto3" json:"pending_delete,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *Volume) Reset() { *m = Volume{} } -func (*Volume) ProtoMessage() {} -func (*Volume) Descriptor() ([]byte, []int) { - return fileDescriptor_6218a23329ef342d, []int{12} -} -func (m *Volume) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Volume) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_Volume.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 *Volume) XXX_Merge(src proto.Message) { - xxx_messageInfo_Volume.Merge(m, src) -} -func (m *Volume) XXX_Size() int { - return m.Size() -} -func (m *Volume) XXX_DiscardUnknown() { - xxx_messageInfo_Volume.DiscardUnknown(m) -} - -var xxx_messageInfo_Volume proto.InternalMessageInfo - -func init() { - proto.RegisterType((*Meta)(nil), "docker.swarmkit.v1.Meta") - proto.RegisterType((*Node)(nil), "docker.swarmkit.v1.Node") - proto.RegisterType((*Service)(nil), "docker.swarmkit.v1.Service") - proto.RegisterType((*Endpoint)(nil), "docker.swarmkit.v1.Endpoint") - proto.RegisterType((*Endpoint_VirtualIP)(nil), "docker.swarmkit.v1.Endpoint.VirtualIP") - proto.RegisterType((*Task)(nil), "docker.swarmkit.v1.Task") - proto.RegisterType((*NetworkAttachment)(nil), "docker.swarmkit.v1.NetworkAttachment") - proto.RegisterMapType((map[string]string)(nil), "docker.swarmkit.v1.NetworkAttachment.DriverAttachmentOptsEntry") - proto.RegisterType((*Network)(nil), "docker.swarmkit.v1.Network") - proto.RegisterType((*Cluster)(nil), "docker.swarmkit.v1.Cluster") - proto.RegisterMapType((map[string]*BlacklistedCertificate)(nil), "docker.swarmkit.v1.Cluster.BlacklistedCertificatesEntry") - proto.RegisterType((*Secret)(nil), "docker.swarmkit.v1.Secret") - proto.RegisterType((*Config)(nil), "docker.swarmkit.v1.Config") - proto.RegisterType((*Resource)(nil), "docker.swarmkit.v1.Resource") - proto.RegisterType((*Extension)(nil), "docker.swarmkit.v1.Extension") - proto.RegisterType((*Volume)(nil), "docker.swarmkit.v1.Volume") -} - -func init() { - proto.RegisterFile("github.com/docker/swarmkit/api/objects.proto", fileDescriptor_6218a23329ef342d) -} - -var fileDescriptor_6218a23329ef342d = []byte{ - // 1805 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x58, 0xcd, 0x6f, 0x1b, 0xc7, - 0x15, 0xd7, 0x52, 0x2b, 0x7e, 0x3c, 0x7e, 0x54, 0x99, 0xa8, 0xea, 0x5a, 0x55, 0x29, 0x95, 0x49, - 0x5a, 0xc3, 0x30, 0xa8, 0xd4, 0x4d, 0x5b, 0x59, 0x4d, 0x62, 0x93, 0x92, 0xea, 0xb0, 0x89, 0x6d, - 0x61, 0x94, 0x38, 0xb9, 0x6d, 0x97, 0xbb, 0x23, 0x7a, 0xcd, 0xe5, 0xce, 0x62, 0x67, 0xc8, 0x84, - 0x3d, 0xf5, 0x6c, 0xa0, 0x40, 0x6f, 0xbe, 0xf5, 0x50, 0xf4, 0x9f, 0xe8, 0xa5, 0x87, 0x1e, 0x0a, - 0x1f, 0x73, 0x2a, 0x8c, 0x1e, 0x84, 0x9a, 0xfe, 0x1b, 0x7a, 0xe8, 0xad, 0x98, 0x8f, 0x25, 0x57, - 0xe6, 0xea, 0xab, 0x30, 0x84, 0x9e, 0xb8, 0x33, 0xf3, 0xfb, 0xbd, 0x79, 0xef, 0xcd, 0xbc, 0x8f, - 0x21, 0xdc, 0xec, 0xf9, 0xfc, 0xf1, 0xb0, 0xdb, 0x74, 0xe9, 0x60, 0xcb, 0xa3, 0x6e, 0x9f, 0xc4, - 0x5b, 0xec, 0x6b, 0x27, 0x1e, 0xf4, 0x7d, 0xbe, 0xe5, 0x44, 0xfe, 0x16, 0xed, 0x3e, 0x21, 0x2e, - 0x67, 0xcd, 0x28, 0xa6, 0x9c, 0x22, 0xa4, 0x20, 0xcd, 0x04, 0xd2, 0x1c, 0xfd, 0x64, 0xed, 0xc6, - 0x39, 0x12, 0xf8, 0x38, 0x22, 0x9a, 0x7f, 0x2e, 0x96, 0x45, 0xc4, 0x4d, 0xb0, 0x1b, 0x3d, 0x4a, - 0x7b, 0x01, 0xd9, 0x92, 0xa3, 0xee, 0xf0, 0x68, 0x8b, 0xfb, 0x03, 0xc2, 0xb8, 0x33, 0x88, 0x34, - 0x60, 0xa5, 0x47, 0x7b, 0x54, 0x7e, 0x6e, 0x89, 0x2f, 0x3d, 0x7b, 0xed, 0x75, 0x9a, 0x13, 0x8e, - 0xf5, 0xd2, 0x2f, 0xce, 0xd8, 0x7d, 0x0a, 0x8f, 0x82, 0x61, 0xcf, 0x0f, 0xf5, 0x8f, 0x22, 0x36, - 0xfe, 0x62, 0x80, 0x79, 0x9f, 0x70, 0x07, 0xfd, 0x12, 0x0a, 0x23, 0x12, 0x33, 0x9f, 0x86, 0x96, - 0xb1, 0x69, 0x5c, 0x2f, 0xdf, 0xfa, 0x7e, 0x73, 0xde, 0x23, 0xcd, 0x47, 0x0a, 0xd2, 0x36, 0x9f, - 0x1f, 0x6f, 0x2c, 0xe0, 0x84, 0x81, 0x6e, 0x03, 0xb8, 0x31, 0x71, 0x38, 0xf1, 0x6c, 0x87, 0x5b, - 0x39, 0xc9, 0x5f, 0x6b, 0x2a, 0x75, 0x9b, 0xc9, 0xfe, 0xcd, 0xcf, 0x13, 0x2b, 0x71, 0x49, 0xa3, - 0x5b, 0x5c, 0x50, 0x87, 0x91, 0x97, 0x50, 0x17, 0xcf, 0xa7, 0x6a, 0x74, 0x8b, 0x37, 0xfe, 0xbc, - 0x04, 0xe6, 0x03, 0xea, 0x11, 0xb4, 0x0a, 0x39, 0xdf, 0x93, 0x6a, 0x97, 0xda, 0xf9, 0xc9, 0xf1, - 0x46, 0xae, 0xb3, 0x87, 0x73, 0xbe, 0x87, 0x6e, 0x81, 0x39, 0x20, 0xdc, 0xd1, 0x0a, 0x59, 0x59, - 0x06, 0x09, 0xdb, 0xb5, 0x35, 0x12, 0x8b, 0x7e, 0x0e, 0xa6, 0x38, 0x2a, 0xad, 0xc9, 0x7a, 0x16, - 0x47, 0xec, 0x79, 0x18, 0x11, 0x37, 0xe1, 0x09, 0x3c, 0xda, 0x87, 0xb2, 0x47, 0x98, 0x1b, 0xfb, - 0x11, 0x17, 0x3e, 0x34, 0x25, 0xfd, 0x9d, 0xd3, 0xe8, 0x7b, 0x33, 0x28, 0x4e, 0xf3, 0xd0, 0x87, - 0x90, 0x67, 0xdc, 0xe1, 0x43, 0x66, 0x2d, 0x49, 0x09, 0xf5, 0x53, 0x15, 0x90, 0x28, 0xad, 0x82, - 0xe6, 0xa0, 0x4f, 0xa0, 0x36, 0x70, 0x42, 0xa7, 0x47, 0x62, 0x5b, 0x4b, 0xc9, 0x4b, 0x29, 0x3f, - 0xcc, 0x34, 0x5d, 0x21, 0x95, 0x20, 0x5c, 0x1d, 0xa4, 0x87, 0xa8, 0x03, 0xe0, 0x70, 0xee, 0xb8, - 0x8f, 0x07, 0x24, 0xe4, 0x56, 0x41, 0x4a, 0x79, 0x2f, 0x53, 0x17, 0xc2, 0xbf, 0xa6, 0x71, 0xbf, - 0x35, 0x05, 0xb7, 0x73, 0x96, 0x81, 0x53, 0x64, 0x74, 0x0f, 0xca, 0x2e, 0x89, 0xb9, 0x7f, 0xe4, - 0xbb, 0x0e, 0x27, 0x56, 0x51, 0xca, 0xda, 0xc8, 0x92, 0xb5, 0x3b, 0x83, 0x69, 0xc3, 0xd2, 0x4c, - 0xf4, 0x3e, 0x98, 0x31, 0x0d, 0x88, 0x55, 0xda, 0x34, 0xae, 0xd7, 0x4e, 0x3f, 0x1a, 0x4c, 0x03, - 0x82, 0x25, 0x52, 0x6c, 0x3d, 0x53, 0x84, 0x59, 0xb0, 0xb9, 0x78, 0x61, 0x33, 0x70, 0x9a, 0x89, - 0x1a, 0x50, 0x79, 0xf4, 0xd5, 0x67, 0xad, 0x07, 0x5f, 0xec, 0x1d, 0x1c, 0xd0, 0x98, 0x5b, 0xe5, - 0x4d, 0xe3, 0x7a, 0x15, 0x9f, 0x98, 0xdb, 0x59, 0x7d, 0xfa, 0xac, 0x81, 0x60, 0xb9, 0x68, 0x2c, - 0x1b, 0xf2, 0x2e, 0x1a, 0xef, 0x1b, 0x5f, 0x19, 0xbf, 0x31, 0x1a, 0x2f, 0x4d, 0x28, 0x1c, 0x92, - 0x78, 0xe4, 0xbb, 0x6f, 0xf6, 0xa6, 0xde, 0x3e, 0x71, 0x53, 0x33, 0x1d, 0xaa, 0xb7, 0x9d, 0xbb, - 0xac, 0x1f, 0x43, 0x45, 0xfc, 0xda, 0x49, 0xc4, 0xc3, 0xb9, 0x11, 0x8f, 0xcb, 0x82, 0xa0, 0x07, - 0x68, 0x0f, 0xaa, 0x51, 0x4c, 0x46, 0x3e, 0x1d, 0x32, 0x5b, 0xea, 0x90, 0xbf, 0x90, 0x0e, 0xb8, - 0x92, 0xb0, 0xc4, 0x08, 0x3d, 0x84, 0xef, 0x9e, 0x90, 0x32, 0x55, 0xa7, 0x7c, 0xbe, 0x3a, 0x6f, - 0xa7, 0x25, 0x25, 0x6a, 0x6d, 0x43, 0x91, 0x84, 0x5e, 0x44, 0xfd, 0x90, 0xeb, 0x00, 0xcc, 0xbc, - 0x24, 0xfb, 0x1a, 0x83, 0xa7, 0x68, 0xb4, 0x0f, 0x55, 0x95, 0x57, 0xec, 0x13, 0xd1, 0xb7, 0x99, - 0x45, 0xff, 0x42, 0x02, 0x75, 0xd8, 0x54, 0x86, 0xa9, 0x11, 0xfa, 0x10, 0xe0, 0x09, 0xed, 0x26, - 0x32, 0x2a, 0x52, 0xc6, 0x0f, 0xb2, 0x64, 0xfc, 0x9a, 0x76, 0xb5, 0x80, 0xd2, 0x93, 0xe4, 0x13, - 0xbd, 0x07, 0xb5, 0x88, 0x84, 0x9e, 0x1f, 0xf6, 0x6c, 0x8f, 0x04, 0x84, 0x13, 0x19, 0x77, 0x45, - 0x5c, 0xd5, 0xb3, 0x7b, 0x72, 0x72, 0x07, 0x3d, 0x7d, 0xd6, 0xa8, 0x41, 0x25, 0x7d, 0xcf, 0x1a, - 0x7f, 0xcc, 0x41, 0x31, 0x31, 0x0b, 0x7d, 0xa0, 0x2f, 0x86, 0x71, 0xba, 0x0d, 0x09, 0x56, 0x9e, - 0x8a, 0xba, 0x13, 0x1f, 0xc0, 0x52, 0x44, 0x63, 0xce, 0xac, 0x9c, 0x8c, 0x92, 0xcc, 0xc4, 0x23, - 0xee, 0xf9, 0x2e, 0x0d, 0x8f, 0xfc, 0x1e, 0x56, 0x60, 0xf4, 0x25, 0x94, 0x47, 0x7e, 0xcc, 0x87, - 0x4e, 0x60, 0xfb, 0x11, 0xb3, 0x16, 0x25, 0xf7, 0x47, 0x67, 0x6d, 0xd9, 0x7c, 0xa4, 0xf0, 0x9d, - 0x83, 0x76, 0x6d, 0x72, 0xbc, 0x01, 0xd3, 0x21, 0xc3, 0xa0, 0x45, 0x75, 0x22, 0xb6, 0x76, 0x1f, - 0x4a, 0xd3, 0x15, 0x74, 0x13, 0x20, 0x54, 0x01, 0x6a, 0x4f, 0xc3, 0xa7, 0x3a, 0x39, 0xde, 0x28, - 0xe9, 0xb0, 0xed, 0xec, 0xe1, 0x92, 0x06, 0x74, 0x3c, 0x84, 0xc0, 0x74, 0x3c, 0x2f, 0x96, 0xc1, - 0x54, 0xc2, 0xf2, 0xbb, 0xf1, 0xfb, 0x22, 0x98, 0x9f, 0x3b, 0xac, 0x7f, 0xd5, 0xb5, 0x42, 0xec, - 0x79, 0x6e, 0xf8, 0xd5, 0x2e, 0x19, 0x7e, 0x37, 0x01, 0x98, 0x8a, 0x2a, 0xe1, 0x0e, 0x73, 0xe6, - 0x0e, 0x1d, 0x6b, 0xc2, 0x1d, 0x1a, 0xa0, 0xdc, 0xc1, 0x02, 0xca, 0xe5, 0x95, 0x36, 0xb1, 0xfc, - 0x46, 0xef, 0x40, 0x21, 0xa4, 0x9e, 0xa4, 0xe7, 0x25, 0x1d, 0x26, 0xc7, 0x1b, 0x79, 0x91, 0x3d, - 0x3b, 0x7b, 0x38, 0x2f, 0x96, 0x3a, 0x9e, 0xcc, 0x9e, 0x61, 0x48, 0xb9, 0x23, 0x2a, 0x13, 0xd3, - 0x45, 0x20, 0x33, 0xc6, 0x5b, 0x33, 0x58, 0x92, 0xb8, 0x53, 0x4c, 0xf4, 0x08, 0xde, 0x4e, 0xf4, - 0x4d, 0x0b, 0x2c, 0x5e, 0x46, 0x20, 0xd2, 0x12, 0x52, 0x2b, 0xa9, 0x62, 0x59, 0x3a, 0xbd, 0x58, - 0xca, 0x13, 0xc8, 0x2a, 0x96, 0x6d, 0xa8, 0x7a, 0x84, 0xf9, 0x31, 0xf1, 0x64, 0xc0, 0x12, 0x99, - 0x05, 0x6b, 0xd9, 0xf1, 0x9a, 0x08, 0x21, 0xb8, 0xa2, 0x39, 0x72, 0x84, 0x5a, 0x50, 0xd4, 0xf7, - 0x8e, 0x59, 0xe5, 0xcb, 0x54, 0x97, 0x29, 0xed, 0x44, 0xd2, 0xaa, 0x5c, 0x2a, 0x69, 0xdd, 0x06, - 0x08, 0x68, 0xcf, 0xf6, 0x62, 0x7f, 0x44, 0x62, 0xab, 0xaa, 0x5b, 0xa7, 0x0c, 0xee, 0x9e, 0x44, - 0xe0, 0x52, 0x40, 0x7b, 0xea, 0x13, 0x39, 0xb0, 0xe6, 0x30, 0xe6, 0xf7, 0x42, 0xe2, 0xd9, 0x3d, - 0x12, 0x92, 0xd8, 0x77, 0xed, 0x98, 0x30, 0x3a, 0x8c, 0x5d, 0xc2, 0xac, 0xef, 0x48, 0x4b, 0x32, - 0x9b, 0x97, 0x7b, 0x0a, 0x8c, 0x35, 0x16, 0x5b, 0x89, 0x98, 0xd7, 0x16, 0x18, 0xba, 0x0b, 0x55, - 0x91, 0x0b, 0x7d, 0x4e, 0x62, 0x79, 0x5c, 0xd6, 0xf2, 0xf9, 0xb7, 0xbc, 0xf2, 0x84, 0x76, 0x3b, - 0x09, 0x01, 0x7d, 0x0c, 0x85, 0x11, 0x0d, 0x86, 0x03, 0xc2, 0xac, 0xb7, 0xa4, 0x46, 0xef, 0x66, - 0x72, 0x25, 0x24, 0xe5, 0xda, 0x84, 0xb4, 0xb3, 0xf6, 0xf4, 0x59, 0x63, 0x15, 0x56, 0xd2, 0x89, - 0x72, 0xdb, 0xb8, 0x6b, 0x7c, 0x62, 0x1c, 0x18, 0x8d, 0xbf, 0xe5, 0xe0, 0xad, 0xb9, 0x53, 0x41, - 0x3f, 0x83, 0x82, 0x3e, 0x97, 0xb3, 0x9a, 0x60, 0xcd, 0xc3, 0x09, 0x16, 0xad, 0x43, 0x49, 0x24, - 0x19, 0xc2, 0x18, 0x51, 0xe9, 0xb3, 0x84, 0x67, 0x13, 0xc8, 0x82, 0x82, 0x13, 0xf8, 0x8e, 0x58, - 0x5b, 0x94, 0x6b, 0xc9, 0x10, 0x0d, 0x61, 0x55, 0x1d, 0x9e, 0x3d, 0xeb, 0x35, 0x6c, 0x1a, 0x71, - 0x66, 0x99, 0xd2, 0xde, 0x3b, 0x17, 0xba, 0x4b, 0xfa, 0x78, 0x67, 0x13, 0x0f, 0x23, 0xce, 0xf6, - 0x43, 0x1e, 0x8f, 0xf1, 0x8a, 0x97, 0xb1, 0xb4, 0x76, 0x0f, 0xae, 0x9d, 0x4a, 0x41, 0xcb, 0xb0, - 0xd8, 0x27, 0x63, 0x95, 0x20, 0xb1, 0xf8, 0x44, 0x2b, 0xb0, 0x34, 0x72, 0x82, 0x21, 0xd1, 0xf9, - 0x54, 0x0d, 0x76, 0x72, 0xdb, 0x46, 0xe3, 0xdf, 0x39, 0x28, 0x68, 0x75, 0xae, 0xba, 0xb3, 0xd1, - 0xdb, 0xce, 0xa5, 0xd6, 0x8f, 0xa0, 0xa2, 0x5d, 0xaa, 0x62, 0xda, 0x3c, 0x37, 0x2a, 0xca, 0x0a, - 0xaf, 0xe2, 0xf9, 0x23, 0x30, 0xfd, 0xc8, 0x19, 0xe8, 0xf2, 0x9f, 0xb9, 0x73, 0xe7, 0xa0, 0x75, - 0xff, 0x61, 0xa4, 0x52, 0x53, 0x71, 0x72, 0xbc, 0x61, 0x8a, 0x09, 0x2c, 0x69, 0x19, 0x15, 0x3c, - 0x9f, 0x51, 0xc1, 0xd1, 0x0d, 0x58, 0x22, 0xdf, 0xf0, 0xd8, 0xd1, 0x29, 0x75, 0x65, 0xee, 0xb9, - 0xd3, 0x0a, 0xc7, 0x58, 0x41, 0x32, 0xab, 0xfd, 0xdf, 0xf3, 0x50, 0xd8, 0x0d, 0x86, 0x8c, 0x93, - 0xf8, 0xaa, 0xfd, 0xae, 0xb7, 0x9d, 0xf3, 0xfb, 0x2e, 0x14, 0x62, 0x4a, 0xb9, 0xed, 0x3a, 0x67, - 0xb9, 0x1c, 0x53, 0xca, 0x77, 0x5b, 0xed, 0x9a, 0x20, 0x8a, 0x82, 0xa3, 0xc6, 0x38, 0x2f, 0xa8, - 0xbb, 0x0e, 0xfa, 0x12, 0x56, 0x93, 0x32, 0xdf, 0xa5, 0x94, 0x33, 0x1e, 0x3b, 0x91, 0xdd, 0x27, - 0x63, 0xd1, 0x8e, 0x2d, 0x9e, 0xf6, 0x8c, 0xd9, 0x0f, 0xdd, 0x78, 0x2c, 0xcf, 0xe3, 0x53, 0x32, - 0xc6, 0x2b, 0x5a, 0x40, 0x3b, 0xe1, 0x7f, 0x4a, 0xc6, 0x0c, 0xdd, 0x81, 0x75, 0x32, 0x85, 0x09, - 0x89, 0x76, 0xe0, 0x0c, 0x44, 0x03, 0x63, 0xbb, 0x01, 0x75, 0xfb, 0xf2, 0x94, 0x4c, 0x7c, 0x8d, - 0xa4, 0x45, 0x7d, 0xa6, 0x10, 0xbb, 0x02, 0x80, 0x18, 0x58, 0xdd, 0xc0, 0x71, 0xfb, 0x81, 0xcf, - 0xc4, 0x4b, 0x35, 0xf5, 0x2a, 0x11, 0x65, 0x4c, 0xe8, 0xb6, 0x7d, 0x86, 0xb7, 0x9a, 0xed, 0x19, - 0x37, 0xf5, 0xc6, 0xd1, 0x41, 0xfa, 0xbd, 0x6e, 0xf6, 0x2a, 0x6a, 0x43, 0x79, 0x18, 0x8a, 0xed, - 0x95, 0x0f, 0x4a, 0x17, 0xf5, 0x01, 0x28, 0x96, 0xb4, 0x7c, 0x1d, 0xcc, 0x23, 0xd1, 0x98, 0x89, - 0xda, 0x56, 0x54, 0xf7, 0xf5, 0x57, 0x9d, 0x83, 0x43, 0x2c, 0x67, 0x51, 0x13, 0x90, 0x47, 0x8e, - 0x9c, 0x61, 0xc0, 0x5b, 0x2a, 0x5d, 0x1d, 0x50, 0x1a, 0xc8, 0x42, 0x56, 0xc2, 0x19, 0x2b, 0xa8, - 0x0e, 0xc0, 0x86, 0xdd, 0x90, 0xf0, 0x43, 0xff, 0xb7, 0x44, 0x56, 0xab, 0x2a, 0x4e, 0xcd, 0xcc, - 0x3d, 0x93, 0xaa, 0xf3, 0xcf, 0xa4, 0xb5, 0x11, 0xac, 0x9f, 0xe5, 0x8e, 0x8c, 0x04, 0x74, 0x37, - 0x9d, 0x80, 0xca, 0xb7, 0x6e, 0x64, 0x79, 0x20, 0x5b, 0x64, 0x2a, 0x59, 0x65, 0x06, 0xd2, 0x5f, - 0x0d, 0xc8, 0x1f, 0x12, 0x37, 0x26, 0xfc, 0x8d, 0xc6, 0xd1, 0xf6, 0x89, 0x38, 0xaa, 0x67, 0xbf, - 0x8a, 0xc4, 0xae, 0x73, 0x61, 0xb4, 0x06, 0x45, 0x3f, 0xe4, 0x24, 0x0e, 0x9d, 0x40, 0xc6, 0x51, - 0x11, 0x4f, 0xc7, 0x99, 0x06, 0xfc, 0xc9, 0x80, 0xbc, 0x6a, 0xc8, 0xaf, 0xda, 0x00, 0xb5, 0xeb, - 0xeb, 0x06, 0x64, 0x2a, 0xf9, 0x1f, 0x03, 0x8a, 0x49, 0x5f, 0xf0, 0x46, 0xd5, 0x7c, 0xad, 0x41, - 0x5d, 0xfc, 0x9f, 0x1b, 0x54, 0x04, 0x66, 0xdf, 0x0f, 0x75, 0x2b, 0x8d, 0xe5, 0x37, 0x6a, 0x42, - 0x21, 0x72, 0xc6, 0x01, 0x75, 0x3c, 0x5d, 0x0d, 0xb2, 0xd3, 0x74, 0x02, 0xda, 0x59, 0x79, 0xfa, - 0xac, 0xb1, 0x0c, 0xb5, 0xb4, 0xe5, 0x8f, 0x8d, 0xc6, 0x3f, 0x0c, 0x28, 0xed, 0x7f, 0xc3, 0x49, - 0x28, 0x1b, 0xf7, 0xff, 0x4b, 0xe3, 0x37, 0xe7, 0xff, 0xb9, 0x2a, 0x9d, 0xf8, 0x53, 0x2a, 0xf3, - 0x50, 0xff, 0x99, 0x83, 0xbc, 0x6a, 0xbd, 0xae, 0xfa, 0xe6, 0xa9, 0x5d, 0xe7, 0x42, 0xe7, 0x01, - 0xd4, 0xa2, 0x61, 0x37, 0xf0, 0xd9, 0xe3, 0xe4, 0xfd, 0xad, 0x9a, 0xa8, 0x1f, 0x9f, 0x2e, 0xe3, - 0x40, 0xe1, 0x93, 0x7f, 0xc0, 0xa2, 0xf4, 0x10, 0xdd, 0x81, 0xb2, 0x6a, 0x24, 0x6d, 0x3f, 0x3c, - 0xa2, 0x67, 0xfd, 0x1d, 0xa7, 0x84, 0x75, 0xc2, 0x23, 0x8a, 0x61, 0x34, 0xfd, 0xbe, 0x60, 0x33, - 0x90, 0xe5, 0xdc, 0xf6, 0xbb, 0xcf, 0x5f, 0xd6, 0x17, 0x5e, 0xbc, 0xac, 0x2f, 0xfc, 0x6e, 0x52, - 0x37, 0x9e, 0x4f, 0xea, 0xc6, 0xb7, 0x93, 0xba, 0xf1, 0xaf, 0x49, 0xdd, 0xf8, 0xc3, 0xab, 0xfa, - 0xc2, 0xb7, 0xaf, 0xea, 0x0b, 0x2f, 0x5e, 0xd5, 0x17, 0xba, 0x79, 0x79, 0x11, 0x7f, 0xfa, 0xdf, - 0x00, 0x00, 0x00, 0xff, 0xff, 0xc8, 0xcf, 0x42, 0x61, 0xe9, 0x16, 0x00, 0x00, -} - -func (m *Meta) Copy() *Meta { - if m == nil { - return nil - } - o := &Meta{} - o.CopyFrom(m) - return o -} - -func (m *Meta) CopyFrom(src interface{}) { - - o := src.(*Meta) - *m = *o - github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Version, &o.Version) - if o.CreatedAt != nil { - m.CreatedAt = &types.Timestamp{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.CreatedAt, o.CreatedAt) - } - if o.UpdatedAt != nil { - m.UpdatedAt = &types.Timestamp{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.UpdatedAt, o.UpdatedAt) - } +func (x *Volume) Reset() { + *x = Volume{} + mi := &file_api_objects_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *Node) Copy() *Node { - if m == nil { - return nil - } - o := &Node{} - o.CopyFrom(m) - return o +func (x *Volume) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Node) CopyFrom(src interface{}) { +func (*Volume) ProtoMessage() {} - o := src.(*Node) - *m = *o - github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Meta, &o.Meta) - github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Spec, &o.Spec) - if o.Description != nil { - m.Description = &NodeDescription{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Description, o.Description) - } - github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Status, &o.Status) - if o.ManagerStatus != nil { - m.ManagerStatus = &ManagerStatus{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.ManagerStatus, o.ManagerStatus) - } - if o.Attachment != nil { - m.Attachment = &NetworkAttachment{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Attachment, o.Attachment) - } - github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Certificate, &o.Certificate) - if o.Attachments != nil { - m.Attachments = make([]*NetworkAttachment, len(o.Attachments)) - for i := range m.Attachments { - m.Attachments[i] = &NetworkAttachment{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Attachments[i], o.Attachments[i]) +func (x *Volume) ProtoReflect() protoreflect.Message { + mi := &file_api_objects_proto_msgTypes[12] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } + return ms } - -} - -func (m *Service) Copy() *Service { - if m == nil { - return nil - } - o := &Service{} - o.CopyFrom(m) - return o + return mi.MessageOf(x) } -func (m *Service) CopyFrom(src interface{}) { - - o := src.(*Service) - *m = *o - github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Meta, &o.Meta) - github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Spec, &o.Spec) - if o.SpecVersion != nil { - m.SpecVersion = &Version{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.SpecVersion, o.SpecVersion) - } - if o.PreviousSpec != nil { - m.PreviousSpec = &ServiceSpec{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.PreviousSpec, o.PreviousSpec) - } - if o.PreviousSpecVersion != nil { - m.PreviousSpecVersion = &Version{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.PreviousSpecVersion, o.PreviousSpecVersion) - } - if o.Endpoint != nil { - m.Endpoint = &Endpoint{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Endpoint, o.Endpoint) - } - if o.UpdateStatus != nil { - m.UpdateStatus = &UpdateStatus{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.UpdateStatus, o.UpdateStatus) - } - if o.JobStatus != nil { - m.JobStatus = &JobStatus{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.JobStatus, o.JobStatus) - } +// Deprecated: Use Volume.ProtoReflect.Descriptor instead. +func (*Volume) Descriptor() ([]byte, []int) { + return file_api_objects_proto_rawDescGZIP(), []int{12} } -func (m *Endpoint) Copy() *Endpoint { - if m == nil { - return nil +func (x *Volume) GetID() string { + if x != nil { + return x.ID } - o := &Endpoint{} - o.CopyFrom(m) - return o + return "" } -func (m *Endpoint) CopyFrom(src interface{}) { - - o := src.(*Endpoint) - *m = *o - if o.Spec != nil { - m.Spec = &EndpointSpec{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Spec, o.Spec) +func (x *Volume) GetMeta() *Meta { + if x != nil { + return x.Meta } - if o.Ports != nil { - m.Ports = make([]*PortConfig, len(o.Ports)) - for i := range m.Ports { - m.Ports[i] = &PortConfig{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Ports[i], o.Ports[i]) - } - } - - if o.VirtualIPs != nil { - m.VirtualIPs = make([]*Endpoint_VirtualIP, len(o.VirtualIPs)) - for i := range m.VirtualIPs { - m.VirtualIPs[i] = &Endpoint_VirtualIP{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.VirtualIPs[i], o.VirtualIPs[i]) - } - } - + return nil } -func (m *Endpoint_VirtualIP) Copy() *Endpoint_VirtualIP { - if m == nil { - return nil +func (x *Volume) GetSpec() *VolumeSpec { + if x != nil { + return x.Spec } - o := &Endpoint_VirtualIP{} - o.CopyFrom(m) - return o -} - -func (m *Endpoint_VirtualIP) CopyFrom(src interface{}) { - - o := src.(*Endpoint_VirtualIP) - *m = *o + return nil } -func (m *Task) Copy() *Task { - if m == nil { - return nil +func (x *Volume) GetPublishStatus() []*VolumePublishStatus { + if x != nil { + return x.PublishStatus } - o := &Task{} - o.CopyFrom(m) - return o + return nil } -func (m *Task) CopyFrom(src interface{}) { - - o := src.(*Task) - *m = *o - github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Meta, &o.Meta) - github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Spec, &o.Spec) - if o.SpecVersion != nil { - m.SpecVersion = &Version{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.SpecVersion, o.SpecVersion) - } - github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Annotations, &o.Annotations) - github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.ServiceAnnotations, &o.ServiceAnnotations) - github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Status, &o.Status) - if o.Networks != nil { - m.Networks = make([]*NetworkAttachment, len(o.Networks)) - for i := range m.Networks { - m.Networks[i] = &NetworkAttachment{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Networks[i], o.Networks[i]) - } - } - - if o.Endpoint != nil { - m.Endpoint = &Endpoint{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Endpoint, o.Endpoint) - } - if o.LogDriver != nil { - m.LogDriver = &Driver{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.LogDriver, o.LogDriver) - } - if o.AssignedGenericResources != nil { - m.AssignedGenericResources = make([]*GenericResource, len(o.AssignedGenericResources)) - for i := range m.AssignedGenericResources { - m.AssignedGenericResources[i] = &GenericResource{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.AssignedGenericResources[i], o.AssignedGenericResources[i]) - } - } - - if o.JobIteration != nil { - m.JobIteration = &Version{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.JobIteration, o.JobIteration) - } - if o.Volumes != nil { - m.Volumes = make([]*VolumeAttachment, len(o.Volumes)) - for i := range m.Volumes { - m.Volumes[i] = &VolumeAttachment{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Volumes[i], o.Volumes[i]) - } +func (x *Volume) GetVolumeInfo() *VolumeInfo { + if x != nil { + return x.VolumeInfo } - + return nil } -func (m *NetworkAttachment) Copy() *NetworkAttachment { - if m == nil { - return nil +func (x *Volume) GetPendingDelete() bool { + if x != nil { + return x.PendingDelete } - o := &NetworkAttachment{} - o.CopyFrom(m) - return o + return false } -func (m *NetworkAttachment) CopyFrom(src interface{}) { - - o := src.(*NetworkAttachment) - *m = *o - if o.Network != nil { - m.Network = &Network{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Network, o.Network) - } - if o.Addresses != nil { - m.Addresses = make([]string, len(o.Addresses)) - copy(m.Addresses, o.Addresses) - } - - if o.Aliases != nil { - m.Aliases = make([]string, len(o.Aliases)) - copy(m.Aliases, o.Aliases) - } - - if o.DriverAttachmentOpts != nil { - m.DriverAttachmentOpts = make(map[string]string, len(o.DriverAttachmentOpts)) - for k, v := range o.DriverAttachmentOpts { - m.DriverAttachmentOpts[k] = v - } - } - +// VirtualIP specifies a set of networks this endpoint will be attached to +// and the IP addresses the target service will be made available under. +type Endpoint_VirtualIP struct { + state protoimpl.MessageState `protogen:"open.v1"` + // NetworkID for which this endpoint attachment was created. + NetworkID string `protobuf:"bytes,1,opt,name=network_id,json=networkId,proto3" json:"network_id,omitempty"` + // A virtual IP is used to address this service in IP + // layer that the client can use to send requests to + // this service. A DNS A/AAAA query on the service + // name might return this IP to the client. This is + // strictly a logical IP and there may not be any + // interfaces assigned this IP address or any route + // created for this address. More than one to + // accommodate for both IPv4 and IPv6 + Addr string `protobuf:"bytes,2,opt,name=addr,proto3" json:"addr,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *Network) Copy() *Network { - if m == nil { - return nil - } - o := &Network{} - o.CopyFrom(m) - return o +func (x *Endpoint_VirtualIP) Reset() { + *x = Endpoint_VirtualIP{} + mi := &file_api_objects_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *Network) CopyFrom(src interface{}) { - - o := src.(*Network) - *m = *o - github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Meta, &o.Meta) - github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Spec, &o.Spec) - if o.DriverState != nil { - m.DriverState = &Driver{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.DriverState, o.DriverState) - } - if o.IPAM != nil { - m.IPAM = &IPAMOptions{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.IPAM, o.IPAM) - } - if o.Extra != nil { - m.Extra = &types.Any{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Extra, o.Extra) - } +func (x *Endpoint_VirtualIP) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Cluster) Copy() *Cluster { - if m == nil { - return nil - } - o := &Cluster{} - o.CopyFrom(m) - return o -} - -func (m *Cluster) CopyFrom(src interface{}) { - - o := src.(*Cluster) - *m = *o - github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Meta, &o.Meta) - github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Spec, &o.Spec) - github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.RootCA, &o.RootCA) - if o.NetworkBootstrapKeys != nil { - m.NetworkBootstrapKeys = make([]*EncryptionKey, len(o.NetworkBootstrapKeys)) - for i := range m.NetworkBootstrapKeys { - m.NetworkBootstrapKeys[i] = &EncryptionKey{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.NetworkBootstrapKeys[i], o.NetworkBootstrapKeys[i]) - } - } - - if o.BlacklistedCertificates != nil { - m.BlacklistedCertificates = make(map[string]*BlacklistedCertificate, len(o.BlacklistedCertificates)) - for k, v := range o.BlacklistedCertificates { - m.BlacklistedCertificates[k] = &BlacklistedCertificate{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.BlacklistedCertificates[k], v) - } - } +func (*Endpoint_VirtualIP) ProtoMessage() {} - if o.UnlockKeys != nil { - m.UnlockKeys = make([]*EncryptionKey, len(o.UnlockKeys)) - for i := range m.UnlockKeys { - m.UnlockKeys[i] = &EncryptionKey{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.UnlockKeys[i], o.UnlockKeys[i]) +func (x *Endpoint_VirtualIP) ProtoReflect() protoreflect.Message { + mi := &file_api_objects_proto_msgTypes[13] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } + return ms } - - if o.DefaultAddressPool != nil { - m.DefaultAddressPool = make([]string, len(o.DefaultAddressPool)) - copy(m.DefaultAddressPool, o.DefaultAddressPool) - } - -} - -func (m *Secret) Copy() *Secret { - if m == nil { - return nil - } - o := &Secret{} - o.CopyFrom(m) - return o -} - -func (m *Secret) CopyFrom(src interface{}) { - - o := src.(*Secret) - *m = *o - github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Meta, &o.Meta) - github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Spec, &o.Spec) -} - -func (m *Config) Copy() *Config { - if m == nil { - return nil - } - o := &Config{} - o.CopyFrom(m) - return o + return mi.MessageOf(x) } -func (m *Config) CopyFrom(src interface{}) { +// Deprecated: Use Endpoint_VirtualIP.ProtoReflect.Descriptor instead. +func (*Endpoint_VirtualIP) Descriptor() ([]byte, []int) { + return file_api_objects_proto_rawDescGZIP(), []int{3, 0} +} + +func (x *Endpoint_VirtualIP) GetNetworkID() string { + if x != nil { + return x.NetworkID + } + return "" +} + +func (x *Endpoint_VirtualIP) GetAddr() string { + if x != nil { + return x.Addr + } + return "" +} + +var File_api_objects_proto protoreflect.FileDescriptor + +const file_api_objects_proto_rawDesc = "" + + "\n" + + "\x11api/objects.proto\x12\x12docker.swarmkit.v1\x1a\x0fapi/types.proto\x1a\x0fapi/specs.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x19google/protobuf/any.proto\x1a\x1cprotobuf/plugin/plugin.proto\"\xb3\x01\n" + + "\x04Meta\x125\n" + + "\aversion\x18\x01 \x01(\v2\x1b.docker.swarmkit.v1.VersionR\aversion\x129\n" + + "\n" + + "created_at\x18\x02 \x01(\v2\x1a.google.protobuf.TimestampR\tcreatedAt\x129\n" + + "\n" + + "updated_at\x18\x03 \x01(\v2\x1a.google.protobuf.TimestampR\tupdatedAt\"\x84\x05\n" + + "\x04Node\x12\x0e\n" + + "\x02id\x18\x01 \x01(\tR\x02id\x12,\n" + + "\x04meta\x18\x02 \x01(\v2\x18.docker.swarmkit.v1.MetaR\x04meta\x120\n" + + "\x04spec\x18\x03 \x01(\v2\x1c.docker.swarmkit.v1.NodeSpecR\x04spec\x12E\n" + + "\vdescription\x18\x04 \x01(\v2#.docker.swarmkit.v1.NodeDescriptionR\vdescription\x126\n" + + "\x06status\x18\x05 \x01(\v2\x1e.docker.swarmkit.v1.NodeStatusR\x06status\x12H\n" + + "\x0emanager_status\x18\x06 \x01(\v2!.docker.swarmkit.v1.ManagerStatusR\rmanagerStatus\x12I\n" + + "\n" + + "attachment\x18\a \x01(\v2%.docker.swarmkit.v1.NetworkAttachmentB\x02\x18\x01R\n" + + "attachment\x12A\n" + + "\vcertificate\x18\b \x01(\v2\x1f.docker.swarmkit.v1.CertificateR\vcertificate\x120\n" + + "\x04role\x18\t \x01(\x0e2\x1c.docker.swarmkit.v1.NodeRoleR\x04role\x12G\n" + + "\vattachments\x18\n" + + " \x03(\v2%.docker.swarmkit.v1.NetworkAttachmentR\vattachments\x12\"\n" + + "\fVXLANUDPPort\x18\v \x01(\rR\fVXLANUDPPort:\x16\x8a\x97\"\x12\n" + + "\x10\b\x01\x10\x01\x18\x01 \x01(\x010\x01X\x01`\x01\"\xcd\x04\n" + + "\aService\x12\x0e\n" + + "\x02id\x18\x01 \x01(\tR\x02id\x12,\n" + + "\x04meta\x18\x02 \x01(\v2\x18.docker.swarmkit.v1.MetaR\x04meta\x123\n" + + "\x04spec\x18\x03 \x01(\v2\x1f.docker.swarmkit.v1.ServiceSpecR\x04spec\x12>\n" + + "\fspec_version\x18\n" + + " \x01(\v2\x1b.docker.swarmkit.v1.VersionR\vspecVersion\x12D\n" + + "\rprevious_spec\x18\x06 \x01(\v2\x1f.docker.swarmkit.v1.ServiceSpecR\fpreviousSpec\x12O\n" + + "\x15previous_spec_version\x18\v \x01(\v2\x1b.docker.swarmkit.v1.VersionR\x13previousSpecVersion\x128\n" + + "\bendpoint\x18\x04 \x01(\v2\x1c.docker.swarmkit.v1.EndpointR\bendpoint\x12E\n" + + "\rupdate_status\x18\x05 \x01(\v2 .docker.swarmkit.v1.UpdateStatusR\fupdateStatus\x12<\n" + + "\n" + + "job_status\x18\f \x01(\v2\x1d.docker.swarmkit.v1.JobStatusR\tjobStatus\x12%\n" + + "\x0epending_delete\x18\a \x01(\bR\rpendingDelete:\x12\x8a\x97\"\x0e\n" + + "\f\b\x01\x10\x01\x18\x01 \x01(\x010\x01\"\x8f\x02\n" + + "\bEndpoint\x124\n" + + "\x04spec\x18\x01 \x01(\v2 .docker.swarmkit.v1.EndpointSpecR\x04spec\x124\n" + + "\x05ports\x18\x02 \x03(\v2\x1e.docker.swarmkit.v1.PortConfigR\x05ports\x12W\n" + + "\vvirtual_ips\x18\x03 \x03(\v2&.docker.swarmkit.v1.Endpoint.VirtualIPB\x0e\x92\x97\"\n" + + "VirtualIPsR\n" + + "virtualIps\x1a>\n" + + "\tVirtualIP\x12\x1d\n" + + "\n" + + "network_id\x18\x01 \x01(\tR\tnetworkId\x12\x12\n" + + "\x04addr\x18\x02 \x01(\tR\x04addr\"\xcc\a\n" + + "\x04Task\x12\x0e\n" + + "\x02id\x18\x01 \x01(\tR\x02id\x12,\n" + + "\x04meta\x18\x02 \x01(\v2\x18.docker.swarmkit.v1.MetaR\x04meta\x120\n" + + "\x04spec\x18\x03 \x01(\v2\x1c.docker.swarmkit.v1.TaskSpecR\x04spec\x12>\n" + + "\fspec_version\x18\x0e \x01(\v2\x1b.docker.swarmkit.v1.VersionR\vspecVersion\x12\x1d\n" + + "\n" + + "service_id\x18\x04 \x01(\tR\tserviceId\x12\x12\n" + + "\x04slot\x18\x05 \x01(\x04R\x04slot\x12\x17\n" + + "\anode_id\x18\x06 \x01(\tR\x06nodeId\x12A\n" + + "\vannotations\x18\a \x01(\v2\x1f.docker.swarmkit.v1.AnnotationsR\vannotations\x12P\n" + + "\x13service_annotations\x18\b \x01(\v2\x1f.docker.swarmkit.v1.AnnotationsR\x12serviceAnnotations\x126\n" + + "\x06status\x18\t \x01(\v2\x1e.docker.swarmkit.v1.TaskStatusR\x06status\x12B\n" + + "\rdesired_state\x18\n" + + " \x01(\x0e2\x1d.docker.swarmkit.v1.TaskStateR\fdesiredState\x12A\n" + + "\bnetworks\x18\v \x03(\v2%.docker.swarmkit.v1.NetworkAttachmentR\bnetworks\x128\n" + + "\bendpoint\x18\f \x01(\v2\x1c.docker.swarmkit.v1.EndpointR\bendpoint\x129\n" + + "\n" + + "log_driver\x18\r \x01(\v2\x1a.docker.swarmkit.v1.DriverR\tlogDriver\x12a\n" + + "\x1aassigned_generic_resources\x18\x0f \x03(\v2#.docker.swarmkit.v1.GenericResourceR\x18assignedGenericResources\x12@\n" + + "\rjob_iteration\x18\x10 \x01(\v2\x1b.docker.swarmkit.v1.VersionR\fjobIteration\x12>\n" + + "\avolumes\x18\x11 \x03(\v2$.docker.swarmkit.v1.VolumeAttachmentR\avolumes:\x1a\x8a\x97\"\x16\n" + + "\x14\b\x01\x10\x01\x18\x01 \x01(\x010\x018\x01@\x01H\x01P\x01\"\xc2\x02\n" + + "\x11NetworkAttachment\x125\n" + + "\anetwork\x18\x01 \x01(\v2\x1b.docker.swarmkit.v1.NetworkR\anetwork\x12\x1c\n" + + "\taddresses\x18\x02 \x03(\tR\taddresses\x12\x18\n" + + "\aaliases\x18\x03 \x03(\tR\aaliases\x12u\n" + + "\x16driver_attachment_opts\x18\x04 \x03(\v2?.docker.swarmkit.v1.NetworkAttachment.DriverAttachmentOptsEntryR\x14driverAttachmentOpts\x1aG\n" + + "\x19DriverAttachmentOptsEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xe1\x02\n" + + "\aNetwork\x12\x0e\n" + + "\x02id\x18\x01 \x01(\tR\x02id\x12,\n" + + "\x04meta\x18\x02 \x01(\v2\x18.docker.swarmkit.v1.MetaR\x04meta\x123\n" + + "\x04spec\x18\x03 \x01(\v2\x1f.docker.swarmkit.v1.NetworkSpecR\x04spec\x12=\n" + + "\fdriver_state\x18\x04 \x01(\v2\x1a.docker.swarmkit.v1.DriverR\vdriverState\x12=\n" + + "\x04ipam\x18\x05 \x01(\v2\x1f.docker.swarmkit.v1.IPAMOptionsB\b\x92\x97\"\x04IPAMR\x04ipam\x12%\n" + + "\x0epending_delete\x18\x06 \x01(\bR\rpendingDelete\x12*\n" + + "\x05extra\x18\a \x01(\v2\x14.google.protobuf.AnyR\x05extra:\x12\x8a\x97\"\x0e\n" + + "\f\b\x01\x10\x01\x18\x01 \x01(\x010\x01\"\xae\x06\n" + + "\aCluster\x12\x0e\n" + + "\x02id\x18\x01 \x01(\tR\x02id\x12,\n" + + "\x04meta\x18\x02 \x01(\v2\x18.docker.swarmkit.v1.MetaR\x04meta\x123\n" + + "\x04spec\x18\x03 \x01(\v2\x1f.docker.swarmkit.v1.ClusterSpecR\x04spec\x12?\n" + + "\aroot_ca\x18\x04 \x01(\v2\x1a.docker.swarmkit.v1.RootCAB\n" + + "\x92\x97\"\x06RootCAR\x06rootCa\x12W\n" + + "\x16network_bootstrap_keys\x18\x05 \x03(\v2!.docker.swarmkit.v1.EncryptionKeyR\x14networkBootstrapKeys\x12?\n" + + "\x1cencryption_key_lamport_clock\x18\x06 \x01(\x04R\x19encryptionKeyLamportClock\x12s\n" + + "\x18blacklisted_certificates\x18\b \x03(\v28.docker.swarmkit.v1.Cluster.BlacklistedCertificatesEntryR\x17blacklistedCertificates\x12B\n" + + "\vunlock_keys\x18\t \x03(\v2!.docker.swarmkit.v1.EncryptionKeyR\n" + + "unlockKeys\x12\x1c\n" + + "\x04fips\x18\n" + + " \x01(\bB\b\x92\x97\"\x04FIPSR\x04fips\x12.\n" + + "\x12defaultAddressPool\x18\v \x03(\tR\x12defaultAddressPool\x12\x1e\n" + + "\n" + + "subnetSize\x18\f \x01(\rR\n" + + "subnetSize\x12\"\n" + + "\fVXLANUDPPort\x18\r \x01(\rR\fVXLANUDPPort\x1av\n" + + "\x1cBlacklistedCertificatesEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12@\n" + + "\x05value\x18\x02 \x01(\v2*.docker.swarmkit.v1.BlacklistedCertificateR\x05value:\x028\x01:\x12\x8a\x97\"\x0e\n" + + "\f\b\x01\x10\x01\x18\x01 \x01(\x010\x01\"\xaa\x01\n" + + "\x06Secret\x12\x0e\n" + + "\x02id\x18\x01 \x01(\tR\x02id\x12,\n" + + "\x04meta\x18\x02 \x01(\v2\x18.docker.swarmkit.v1.MetaR\x04meta\x122\n" + + "\x04spec\x18\x03 \x01(\v2\x1e.docker.swarmkit.v1.SecretSpecR\x04spec\x12\x1a\n" + + "\binternal\x18\x04 \x01(\bR\binternal:\x12\x8a\x97\"\x0e\n" + + "\f\b\x01\x10\x01\x18\x01 \x01(\x010\x01\"\x8e\x01\n" + + "\x06Config\x12\x0e\n" + + "\x02id\x18\x01 \x01(\tR\x02id\x12,\n" + + "\x04meta\x18\x02 \x01(\v2\x18.docker.swarmkit.v1.MetaR\x04meta\x122\n" + + "\x04spec\x18\x03 \x01(\v2\x1e.docker.swarmkit.v1.ConfigSpecR\x04spec:\x12\x8a\x97\"\x0e\n" + + "\f\b\x01\x10\x01\x18\x01 \x01(\x010\x01\"\xed\x01\n" + + "\bResource\x12\x16\n" + + "\x02id\x18\x01 \x01(\tB\x06\x92\x97\"\x02IDR\x02id\x12,\n" + + "\x04meta\x18\x02 \x01(\v2\x18.docker.swarmkit.v1.MetaR\x04meta\x12A\n" + + "\vannotations\x18\x03 \x01(\v2\x1f.docker.swarmkit.v1.AnnotationsR\vannotations\x12\x12\n" + + "\x04kind\x18\x04 \x01(\tR\x04kind\x12.\n" + + "\apayload\x18\x05 \x01(\v2\x14.google.protobuf.AnyR\apayload:\x14\x8a\x97\"\x10\n" + + "\x0e\b\x01\x10\x01\x18\x01 \x01(\x010\x01h\x01\"\xca\x01\n" + + "\tExtension\x12\x16\n" + + "\x02id\x18\x01 \x01(\tB\x06\x92\x97\"\x02IDR\x02id\x12,\n" + + "\x04meta\x18\x02 \x01(\v2\x18.docker.swarmkit.v1.MetaR\x04meta\x12A\n" + + "\vannotations\x18\x03 \x01(\v2\x1f.docker.swarmkit.v1.AnnotationsR\vannotations\x12 \n" + + "\vdescription\x18\x04 \x01(\tR\vdescription:\x12\x8a\x97\"\x0e\n" + + "\f\b\x01\x10\x01\x18\x01 \x01(\x010\x01\"\xc6\x02\n" + + "\x06Volume\x12\x0e\n" + + "\x02id\x18\x01 \x01(\tR\x02id\x12,\n" + + "\x04meta\x18\x02 \x01(\v2\x18.docker.swarmkit.v1.MetaR\x04meta\x122\n" + + "\x04spec\x18\x03 \x01(\v2\x1e.docker.swarmkit.v1.VolumeSpecR\x04spec\x12N\n" + + "\x0epublish_status\x18\x04 \x03(\v2'.docker.swarmkit.v1.VolumePublishStatusR\rpublishStatus\x12?\n" + + "\vvolume_info\x18\x05 \x01(\v2\x1e.docker.swarmkit.v1.VolumeInfoR\n" + + "volumeInfo\x12%\n" + + "\x0epending_delete\x18\x06 \x01(\bR\rpendingDelete:\x12\x8a\x97\"\x0e\n" + + "\f\b\x01\x10\x01\x18\x01 \x01(\x010\x01B!Z\x1fgithub.com/moby/swarmkit/v2/apib\x06proto3" - o := src.(*Config) - *m = *o - github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Meta, &o.Meta) - github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Spec, &o.Spec) -} +var ( + file_api_objects_proto_rawDescOnce sync.Once + file_api_objects_proto_rawDescData []byte +) -func (m *Resource) Copy() *Resource { - if m == nil { - return nil - } - o := &Resource{} - o.CopyFrom(m) - return o +func file_api_objects_proto_rawDescGZIP() []byte { + file_api_objects_proto_rawDescOnce.Do(func() { + file_api_objects_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_api_objects_proto_rawDesc), len(file_api_objects_proto_rawDesc))) + }) + return file_api_objects_proto_rawDescData +} + +var file_api_objects_proto_msgTypes = make([]protoimpl.MessageInfo, 16) +var file_api_objects_proto_goTypes = []any{ + (*Meta)(nil), // 0: docker.swarmkit.v1.Meta + (*Node)(nil), // 1: docker.swarmkit.v1.Node + (*Service)(nil), // 2: docker.swarmkit.v1.Service + (*Endpoint)(nil), // 3: docker.swarmkit.v1.Endpoint + (*Task)(nil), // 4: docker.swarmkit.v1.Task + (*NetworkAttachment)(nil), // 5: docker.swarmkit.v1.NetworkAttachment + (*Network)(nil), // 6: docker.swarmkit.v1.Network + (*Cluster)(nil), // 7: docker.swarmkit.v1.Cluster + (*Secret)(nil), // 8: docker.swarmkit.v1.Secret + (*Config)(nil), // 9: docker.swarmkit.v1.Config + (*Resource)(nil), // 10: docker.swarmkit.v1.Resource + (*Extension)(nil), // 11: docker.swarmkit.v1.Extension + (*Volume)(nil), // 12: docker.swarmkit.v1.Volume + (*Endpoint_VirtualIP)(nil), // 13: docker.swarmkit.v1.Endpoint.VirtualIP + nil, // 14: docker.swarmkit.v1.NetworkAttachment.DriverAttachmentOptsEntry + nil, // 15: docker.swarmkit.v1.Cluster.BlacklistedCertificatesEntry + (*Version)(nil), // 16: docker.swarmkit.v1.Version + (*timestamppb.Timestamp)(nil), // 17: google.protobuf.Timestamp + (*NodeSpec)(nil), // 18: docker.swarmkit.v1.NodeSpec + (*NodeDescription)(nil), // 19: docker.swarmkit.v1.NodeDescription + (*NodeStatus)(nil), // 20: docker.swarmkit.v1.NodeStatus + (*ManagerStatus)(nil), // 21: docker.swarmkit.v1.ManagerStatus + (*Certificate)(nil), // 22: docker.swarmkit.v1.Certificate + (NodeRole)(0), // 23: docker.swarmkit.v1.NodeRole + (*ServiceSpec)(nil), // 24: docker.swarmkit.v1.ServiceSpec + (*UpdateStatus)(nil), // 25: docker.swarmkit.v1.UpdateStatus + (*JobStatus)(nil), // 26: docker.swarmkit.v1.JobStatus + (*EndpointSpec)(nil), // 27: docker.swarmkit.v1.EndpointSpec + (*PortConfig)(nil), // 28: docker.swarmkit.v1.PortConfig + (*TaskSpec)(nil), // 29: docker.swarmkit.v1.TaskSpec + (*Annotations)(nil), // 30: docker.swarmkit.v1.Annotations + (*TaskStatus)(nil), // 31: docker.swarmkit.v1.TaskStatus + (TaskState)(0), // 32: docker.swarmkit.v1.TaskState + (*Driver)(nil), // 33: docker.swarmkit.v1.Driver + (*GenericResource)(nil), // 34: docker.swarmkit.v1.GenericResource + (*VolumeAttachment)(nil), // 35: docker.swarmkit.v1.VolumeAttachment + (*NetworkSpec)(nil), // 36: docker.swarmkit.v1.NetworkSpec + (*IPAMOptions)(nil), // 37: docker.swarmkit.v1.IPAMOptions + (*anypb.Any)(nil), // 38: google.protobuf.Any + (*ClusterSpec)(nil), // 39: docker.swarmkit.v1.ClusterSpec + (*RootCA)(nil), // 40: docker.swarmkit.v1.RootCA + (*EncryptionKey)(nil), // 41: docker.swarmkit.v1.EncryptionKey + (*SecretSpec)(nil), // 42: docker.swarmkit.v1.SecretSpec + (*ConfigSpec)(nil), // 43: docker.swarmkit.v1.ConfigSpec + (*VolumeSpec)(nil), // 44: docker.swarmkit.v1.VolumeSpec + (*VolumePublishStatus)(nil), // 45: docker.swarmkit.v1.VolumePublishStatus + (*VolumeInfo)(nil), // 46: docker.swarmkit.v1.VolumeInfo + (*BlacklistedCertificate)(nil), // 47: docker.swarmkit.v1.BlacklistedCertificate +} +var file_api_objects_proto_depIdxs = []int32{ + 16, // 0: docker.swarmkit.v1.Meta.version:type_name -> docker.swarmkit.v1.Version + 17, // 1: docker.swarmkit.v1.Meta.created_at:type_name -> google.protobuf.Timestamp + 17, // 2: docker.swarmkit.v1.Meta.updated_at:type_name -> google.protobuf.Timestamp + 0, // 3: docker.swarmkit.v1.Node.meta:type_name -> docker.swarmkit.v1.Meta + 18, // 4: docker.swarmkit.v1.Node.spec:type_name -> docker.swarmkit.v1.NodeSpec + 19, // 5: docker.swarmkit.v1.Node.description:type_name -> docker.swarmkit.v1.NodeDescription + 20, // 6: docker.swarmkit.v1.Node.status:type_name -> docker.swarmkit.v1.NodeStatus + 21, // 7: docker.swarmkit.v1.Node.manager_status:type_name -> docker.swarmkit.v1.ManagerStatus + 5, // 8: docker.swarmkit.v1.Node.attachment:type_name -> docker.swarmkit.v1.NetworkAttachment + 22, // 9: docker.swarmkit.v1.Node.certificate:type_name -> docker.swarmkit.v1.Certificate + 23, // 10: docker.swarmkit.v1.Node.role:type_name -> docker.swarmkit.v1.NodeRole + 5, // 11: docker.swarmkit.v1.Node.attachments:type_name -> docker.swarmkit.v1.NetworkAttachment + 0, // 12: docker.swarmkit.v1.Service.meta:type_name -> docker.swarmkit.v1.Meta + 24, // 13: docker.swarmkit.v1.Service.spec:type_name -> docker.swarmkit.v1.ServiceSpec + 16, // 14: docker.swarmkit.v1.Service.spec_version:type_name -> docker.swarmkit.v1.Version + 24, // 15: docker.swarmkit.v1.Service.previous_spec:type_name -> docker.swarmkit.v1.ServiceSpec + 16, // 16: docker.swarmkit.v1.Service.previous_spec_version:type_name -> docker.swarmkit.v1.Version + 3, // 17: docker.swarmkit.v1.Service.endpoint:type_name -> docker.swarmkit.v1.Endpoint + 25, // 18: docker.swarmkit.v1.Service.update_status:type_name -> docker.swarmkit.v1.UpdateStatus + 26, // 19: docker.swarmkit.v1.Service.job_status:type_name -> docker.swarmkit.v1.JobStatus + 27, // 20: docker.swarmkit.v1.Endpoint.spec:type_name -> docker.swarmkit.v1.EndpointSpec + 28, // 21: docker.swarmkit.v1.Endpoint.ports:type_name -> docker.swarmkit.v1.PortConfig + 13, // 22: docker.swarmkit.v1.Endpoint.virtual_ips:type_name -> docker.swarmkit.v1.Endpoint.VirtualIP + 0, // 23: docker.swarmkit.v1.Task.meta:type_name -> docker.swarmkit.v1.Meta + 29, // 24: docker.swarmkit.v1.Task.spec:type_name -> docker.swarmkit.v1.TaskSpec + 16, // 25: docker.swarmkit.v1.Task.spec_version:type_name -> docker.swarmkit.v1.Version + 30, // 26: docker.swarmkit.v1.Task.annotations:type_name -> docker.swarmkit.v1.Annotations + 30, // 27: docker.swarmkit.v1.Task.service_annotations:type_name -> docker.swarmkit.v1.Annotations + 31, // 28: docker.swarmkit.v1.Task.status:type_name -> docker.swarmkit.v1.TaskStatus + 32, // 29: docker.swarmkit.v1.Task.desired_state:type_name -> docker.swarmkit.v1.TaskState + 5, // 30: docker.swarmkit.v1.Task.networks:type_name -> docker.swarmkit.v1.NetworkAttachment + 3, // 31: docker.swarmkit.v1.Task.endpoint:type_name -> docker.swarmkit.v1.Endpoint + 33, // 32: docker.swarmkit.v1.Task.log_driver:type_name -> docker.swarmkit.v1.Driver + 34, // 33: docker.swarmkit.v1.Task.assigned_generic_resources:type_name -> docker.swarmkit.v1.GenericResource + 16, // 34: docker.swarmkit.v1.Task.job_iteration:type_name -> docker.swarmkit.v1.Version + 35, // 35: docker.swarmkit.v1.Task.volumes:type_name -> docker.swarmkit.v1.VolumeAttachment + 6, // 36: docker.swarmkit.v1.NetworkAttachment.network:type_name -> docker.swarmkit.v1.Network + 14, // 37: docker.swarmkit.v1.NetworkAttachment.driver_attachment_opts:type_name -> docker.swarmkit.v1.NetworkAttachment.DriverAttachmentOptsEntry + 0, // 38: docker.swarmkit.v1.Network.meta:type_name -> docker.swarmkit.v1.Meta + 36, // 39: docker.swarmkit.v1.Network.spec:type_name -> docker.swarmkit.v1.NetworkSpec + 33, // 40: docker.swarmkit.v1.Network.driver_state:type_name -> docker.swarmkit.v1.Driver + 37, // 41: docker.swarmkit.v1.Network.ipam:type_name -> docker.swarmkit.v1.IPAMOptions + 38, // 42: docker.swarmkit.v1.Network.extra:type_name -> google.protobuf.Any + 0, // 43: docker.swarmkit.v1.Cluster.meta:type_name -> docker.swarmkit.v1.Meta + 39, // 44: docker.swarmkit.v1.Cluster.spec:type_name -> docker.swarmkit.v1.ClusterSpec + 40, // 45: docker.swarmkit.v1.Cluster.root_ca:type_name -> docker.swarmkit.v1.RootCA + 41, // 46: docker.swarmkit.v1.Cluster.network_bootstrap_keys:type_name -> docker.swarmkit.v1.EncryptionKey + 15, // 47: docker.swarmkit.v1.Cluster.blacklisted_certificates:type_name -> docker.swarmkit.v1.Cluster.BlacklistedCertificatesEntry + 41, // 48: docker.swarmkit.v1.Cluster.unlock_keys:type_name -> docker.swarmkit.v1.EncryptionKey + 0, // 49: docker.swarmkit.v1.Secret.meta:type_name -> docker.swarmkit.v1.Meta + 42, // 50: docker.swarmkit.v1.Secret.spec:type_name -> docker.swarmkit.v1.SecretSpec + 0, // 51: docker.swarmkit.v1.Config.meta:type_name -> docker.swarmkit.v1.Meta + 43, // 52: docker.swarmkit.v1.Config.spec:type_name -> docker.swarmkit.v1.ConfigSpec + 0, // 53: docker.swarmkit.v1.Resource.meta:type_name -> docker.swarmkit.v1.Meta + 30, // 54: docker.swarmkit.v1.Resource.annotations:type_name -> docker.swarmkit.v1.Annotations + 38, // 55: docker.swarmkit.v1.Resource.payload:type_name -> google.protobuf.Any + 0, // 56: docker.swarmkit.v1.Extension.meta:type_name -> docker.swarmkit.v1.Meta + 30, // 57: docker.swarmkit.v1.Extension.annotations:type_name -> docker.swarmkit.v1.Annotations + 0, // 58: docker.swarmkit.v1.Volume.meta:type_name -> docker.swarmkit.v1.Meta + 44, // 59: docker.swarmkit.v1.Volume.spec:type_name -> docker.swarmkit.v1.VolumeSpec + 45, // 60: docker.swarmkit.v1.Volume.publish_status:type_name -> docker.swarmkit.v1.VolumePublishStatus + 46, // 61: docker.swarmkit.v1.Volume.volume_info:type_name -> docker.swarmkit.v1.VolumeInfo + 47, // 62: docker.swarmkit.v1.Cluster.BlacklistedCertificatesEntry.value:type_name -> docker.swarmkit.v1.BlacklistedCertificate + 63, // [63:63] is the sub-list for method output_type + 63, // [63:63] is the sub-list for method input_type + 63, // [63:63] is the sub-list for extension type_name + 63, // [63:63] is the sub-list for extension extendee + 0, // [0:63] is the sub-list for field type_name +} + +func init() { file_api_objects_proto_init() } +func file_api_objects_proto_init() { + if File_api_objects_proto != nil { + return + } + file_api_types_proto_init() + file_api_specs_proto_init() + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_api_objects_proto_rawDesc), len(file_api_objects_proto_rawDesc)), + NumEnums: 0, + NumMessages: 16, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_api_objects_proto_goTypes, + DependencyIndexes: file_api_objects_proto_depIdxs, + MessageInfos: file_api_objects_proto_msgTypes, + }.Build() + File_api_objects_proto = out.File + file_api_objects_proto_goTypes = nil + file_api_objects_proto_depIdxs = nil } - -func (m *Resource) CopyFrom(src interface{}) { - - o := src.(*Resource) - *m = *o - github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Meta, &o.Meta) - github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Annotations, &o.Annotations) - if o.Payload != nil { - m.Payload = &types.Any{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Payload, o.Payload) - } -} - -func (m *Extension) Copy() *Extension { - if m == nil { - return nil - } - o := &Extension{} - o.CopyFrom(m) - return o -} - -func (m *Extension) CopyFrom(src interface{}) { - - o := src.(*Extension) - *m = *o - github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Meta, &o.Meta) - github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Annotations, &o.Annotations) -} - -func (m *Volume) Copy() *Volume { - if m == nil { - return nil - } - o := &Volume{} - o.CopyFrom(m) - return o -} - -func (m *Volume) CopyFrom(src interface{}) { - - o := src.(*Volume) - *m = *o - github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Meta, &o.Meta) - github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Spec, &o.Spec) - if o.PublishStatus != nil { - m.PublishStatus = make([]*VolumePublishStatus, len(o.PublishStatus)) - for i := range m.PublishStatus { - m.PublishStatus[i] = &VolumePublishStatus{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.PublishStatus[i], o.PublishStatus[i]) - } - } - - if o.VolumeInfo != nil { - m.VolumeInfo = &VolumeInfo{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.VolumeInfo, o.VolumeInfo) - } -} - -func (m *Meta) 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 *Meta) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *Meta) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.UpdatedAt != nil { - { - size, err := m.UpdatedAt.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintObjects(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - } - if m.CreatedAt != nil { - { - size, err := m.CreatedAt.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintObjects(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - { - size, err := m.Version.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintObjects(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *Node) 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 *Node) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *Node) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.VXLANUDPPort != 0 { - i = encodeVarintObjects(dAtA, i, uint64(m.VXLANUDPPort)) - i-- - dAtA[i] = 0x58 - } - if len(m.Attachments) > 0 { - for iNdEx := len(m.Attachments) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Attachments[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintObjects(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x52 - } - } - if m.Role != 0 { - i = encodeVarintObjects(dAtA, i, uint64(m.Role)) - i-- - dAtA[i] = 0x48 - } - { - size, err := m.Certificate.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintObjects(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x42 - if m.Attachment != nil { - { - size, err := m.Attachment.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintObjects(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x3a - } - if m.ManagerStatus != nil { - { - size, err := m.ManagerStatus.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintObjects(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x32 - } - { - size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintObjects(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x2a - if m.Description != nil { - { - size, err := m.Description.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintObjects(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - } - { - size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintObjects(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - { - size, err := m.Meta.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintObjects(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - if len(m.ID) > 0 { - i -= len(m.ID) - copy(dAtA[i:], m.ID) - i = encodeVarintObjects(dAtA, i, uint64(len(m.ID))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *Service) 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 *Service) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *Service) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.JobStatus != nil { - { - size, err := m.JobStatus.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintObjects(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x62 - } - if m.PreviousSpecVersion != nil { - { - size, err := m.PreviousSpecVersion.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintObjects(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x5a - } - if m.SpecVersion != nil { - { - size, err := m.SpecVersion.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintObjects(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x52 - } - if m.PendingDelete { - i-- - if m.PendingDelete { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x38 - } - if m.PreviousSpec != nil { - { - size, err := m.PreviousSpec.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintObjects(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x32 - } - if m.UpdateStatus != nil { - { - size, err := m.UpdateStatus.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintObjects(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x2a - } - if m.Endpoint != nil { - { - size, err := m.Endpoint.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintObjects(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - } - { - size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintObjects(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - { - size, err := m.Meta.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintObjects(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - if len(m.ID) > 0 { - i -= len(m.ID) - copy(dAtA[i:], m.ID) - i = encodeVarintObjects(dAtA, i, uint64(len(m.ID))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *Endpoint) 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 *Endpoint) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *Endpoint) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.VirtualIPs) > 0 { - for iNdEx := len(m.VirtualIPs) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.VirtualIPs[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintObjects(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - } - } - if len(m.Ports) > 0 { - for iNdEx := len(m.Ports) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Ports[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintObjects(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - } - if m.Spec != nil { - { - size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintObjects(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *Endpoint_VirtualIP) 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 *Endpoint_VirtualIP) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *Endpoint_VirtualIP) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Addr) > 0 { - i -= len(m.Addr) - copy(dAtA[i:], m.Addr) - i = encodeVarintObjects(dAtA, i, uint64(len(m.Addr))) - i-- - dAtA[i] = 0x12 - } - if len(m.NetworkID) > 0 { - i -= len(m.NetworkID) - copy(dAtA[i:], m.NetworkID) - i = encodeVarintObjects(dAtA, i, uint64(len(m.NetworkID))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *Task) 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 *Task) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *Task) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Volumes) > 0 { - for iNdEx := len(m.Volumes) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Volumes[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintObjects(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1 - i-- - dAtA[i] = 0x8a - } - } - if m.JobIteration != nil { - { - size, err := m.JobIteration.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintObjects(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1 - i-- - dAtA[i] = 0x82 - } - if len(m.AssignedGenericResources) > 0 { - for iNdEx := len(m.AssignedGenericResources) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.AssignedGenericResources[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintObjects(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x7a - } - } - if m.SpecVersion != nil { - { - size, err := m.SpecVersion.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintObjects(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x72 - } - if m.LogDriver != nil { - { - size, err := m.LogDriver.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintObjects(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x6a - } - if m.Endpoint != nil { - { - size, err := m.Endpoint.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintObjects(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x62 - } - if len(m.Networks) > 0 { - for iNdEx := len(m.Networks) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Networks[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintObjects(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x5a - } - } - if m.DesiredState != 0 { - i = encodeVarintObjects(dAtA, i, uint64(m.DesiredState)) - i-- - dAtA[i] = 0x50 - } - { - size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintObjects(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x4a - { - size, err := m.ServiceAnnotations.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintObjects(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x42 - { - size, err := m.Annotations.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintObjects(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x3a - if len(m.NodeID) > 0 { - i -= len(m.NodeID) - copy(dAtA[i:], m.NodeID) - i = encodeVarintObjects(dAtA, i, uint64(len(m.NodeID))) - i-- - dAtA[i] = 0x32 - } - if m.Slot != 0 { - i = encodeVarintObjects(dAtA, i, uint64(m.Slot)) - i-- - dAtA[i] = 0x28 - } - if len(m.ServiceID) > 0 { - i -= len(m.ServiceID) - copy(dAtA[i:], m.ServiceID) - i = encodeVarintObjects(dAtA, i, uint64(len(m.ServiceID))) - i-- - dAtA[i] = 0x22 - } - { - size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintObjects(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - { - size, err := m.Meta.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintObjects(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - if len(m.ID) > 0 { - i -= len(m.ID) - copy(dAtA[i:], m.ID) - i = encodeVarintObjects(dAtA, i, uint64(len(m.ID))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *NetworkAttachment) 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 *NetworkAttachment) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *NetworkAttachment) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.DriverAttachmentOpts) > 0 { - for k := range m.DriverAttachmentOpts { - v := m.DriverAttachmentOpts[k] - baseI := i - i -= len(v) - copy(dAtA[i:], v) - i = encodeVarintObjects(dAtA, i, uint64(len(v))) - i-- - dAtA[i] = 0x12 - i -= len(k) - copy(dAtA[i:], k) - i = encodeVarintObjects(dAtA, i, uint64(len(k))) - i-- - dAtA[i] = 0xa - i = encodeVarintObjects(dAtA, i, uint64(baseI-i)) - i-- - dAtA[i] = 0x22 - } - } - if len(m.Aliases) > 0 { - for iNdEx := len(m.Aliases) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.Aliases[iNdEx]) - copy(dAtA[i:], m.Aliases[iNdEx]) - i = encodeVarintObjects(dAtA, i, uint64(len(m.Aliases[iNdEx]))) - i-- - dAtA[i] = 0x1a - } - } - if len(m.Addresses) > 0 { - for iNdEx := len(m.Addresses) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.Addresses[iNdEx]) - copy(dAtA[i:], m.Addresses[iNdEx]) - i = encodeVarintObjects(dAtA, i, uint64(len(m.Addresses[iNdEx]))) - i-- - dAtA[i] = 0x12 - } - } - if m.Network != nil { - { - size, err := m.Network.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintObjects(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *Network) 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 *Network) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *Network) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Extra != nil { - { - size, err := m.Extra.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintObjects(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x3a - } - if m.PendingDelete { - i-- - if m.PendingDelete { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x30 - } - if m.IPAM != nil { - { - size, err := m.IPAM.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintObjects(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x2a - } - if m.DriverState != nil { - { - size, err := m.DriverState.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintObjects(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - } - { - size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintObjects(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - { - size, err := m.Meta.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintObjects(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - if len(m.ID) > 0 { - i -= len(m.ID) - copy(dAtA[i:], m.ID) - i = encodeVarintObjects(dAtA, i, uint64(len(m.ID))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *Cluster) 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 *Cluster) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *Cluster) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.VXLANUDPPort != 0 { - i = encodeVarintObjects(dAtA, i, uint64(m.VXLANUDPPort)) - i-- - dAtA[i] = 0x68 - } - if m.SubnetSize != 0 { - i = encodeVarintObjects(dAtA, i, uint64(m.SubnetSize)) - i-- - dAtA[i] = 0x60 - } - if len(m.DefaultAddressPool) > 0 { - for iNdEx := len(m.DefaultAddressPool) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.DefaultAddressPool[iNdEx]) - copy(dAtA[i:], m.DefaultAddressPool[iNdEx]) - i = encodeVarintObjects(dAtA, i, uint64(len(m.DefaultAddressPool[iNdEx]))) - i-- - dAtA[i] = 0x5a - } - } - if m.FIPS { - i-- - if m.FIPS { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x50 - } - if len(m.UnlockKeys) > 0 { - for iNdEx := len(m.UnlockKeys) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.UnlockKeys[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintObjects(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x4a - } - } - if len(m.BlacklistedCertificates) > 0 { - for k := range m.BlacklistedCertificates { - v := m.BlacklistedCertificates[k] - baseI := i - if v != nil { - { - size, err := v.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintObjects(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - i -= len(k) - copy(dAtA[i:], k) - i = encodeVarintObjects(dAtA, i, uint64(len(k))) - i-- - dAtA[i] = 0xa - i = encodeVarintObjects(dAtA, i, uint64(baseI-i)) - i-- - dAtA[i] = 0x42 - } - } - if m.EncryptionKeyLamportClock != 0 { - i = encodeVarintObjects(dAtA, i, uint64(m.EncryptionKeyLamportClock)) - i-- - dAtA[i] = 0x30 - } - if len(m.NetworkBootstrapKeys) > 0 { - for iNdEx := len(m.NetworkBootstrapKeys) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.NetworkBootstrapKeys[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintObjects(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x2a - } - } - { - size, err := m.RootCA.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintObjects(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - { - size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintObjects(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - { - size, err := m.Meta.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintObjects(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - if len(m.ID) > 0 { - i -= len(m.ID) - copy(dAtA[i:], m.ID) - i = encodeVarintObjects(dAtA, i, uint64(len(m.ID))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *Secret) 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 *Secret) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *Secret) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Internal { - i-- - if m.Internal { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x20 - } - { - size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintObjects(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - { - size, err := m.Meta.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintObjects(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - if len(m.ID) > 0 { - i -= len(m.ID) - copy(dAtA[i:], m.ID) - i = encodeVarintObjects(dAtA, i, uint64(len(m.ID))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *Config) 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 *Config) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *Config) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintObjects(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - { - size, err := m.Meta.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintObjects(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - if len(m.ID) > 0 { - i -= len(m.ID) - copy(dAtA[i:], m.ID) - i = encodeVarintObjects(dAtA, i, uint64(len(m.ID))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *Resource) 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 *Resource) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *Resource) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Payload != nil { - { - size, err := m.Payload.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintObjects(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x2a - } - if len(m.Kind) > 0 { - i -= len(m.Kind) - copy(dAtA[i:], m.Kind) - i = encodeVarintObjects(dAtA, i, uint64(len(m.Kind))) - i-- - dAtA[i] = 0x22 - } - { - size, err := m.Annotations.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintObjects(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - { - size, err := m.Meta.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintObjects(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - if len(m.ID) > 0 { - i -= len(m.ID) - copy(dAtA[i:], m.ID) - i = encodeVarintObjects(dAtA, i, uint64(len(m.ID))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *Extension) 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 *Extension) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *Extension) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Description) > 0 { - i -= len(m.Description) - copy(dAtA[i:], m.Description) - i = encodeVarintObjects(dAtA, i, uint64(len(m.Description))) - i-- - dAtA[i] = 0x22 - } - { - size, err := m.Annotations.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintObjects(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - { - size, err := m.Meta.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintObjects(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - if len(m.ID) > 0 { - i -= len(m.ID) - copy(dAtA[i:], m.ID) - i = encodeVarintObjects(dAtA, i, uint64(len(m.ID))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *Volume) 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 *Volume) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *Volume) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.PendingDelete { - i-- - if m.PendingDelete { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x30 - } - if m.VolumeInfo != nil { - { - size, err := m.VolumeInfo.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintObjects(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x2a - } - if len(m.PublishStatus) > 0 { - for iNdEx := len(m.PublishStatus) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.PublishStatus[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintObjects(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - } - } - { - size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintObjects(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - { - size, err := m.Meta.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintObjects(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - if len(m.ID) > 0 { - i -= len(m.ID) - copy(dAtA[i:], m.ID) - i = encodeVarintObjects(dAtA, i, uint64(len(m.ID))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func encodeVarintObjects(dAtA []byte, offset int, v uint64) int { - offset -= sovObjects(v) - base := offset - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return base -} -func (m *Meta) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.Version.Size() - n += 1 + l + sovObjects(uint64(l)) - if m.CreatedAt != nil { - l = m.CreatedAt.Size() - n += 1 + l + sovObjects(uint64(l)) - } - if m.UpdatedAt != nil { - l = m.UpdatedAt.Size() - n += 1 + l + sovObjects(uint64(l)) - } - return n -} - -func (m *Node) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.ID) - if l > 0 { - n += 1 + l + sovObjects(uint64(l)) - } - l = m.Meta.Size() - n += 1 + l + sovObjects(uint64(l)) - l = m.Spec.Size() - n += 1 + l + sovObjects(uint64(l)) - if m.Description != nil { - l = m.Description.Size() - n += 1 + l + sovObjects(uint64(l)) - } - l = m.Status.Size() - n += 1 + l + sovObjects(uint64(l)) - if m.ManagerStatus != nil { - l = m.ManagerStatus.Size() - n += 1 + l + sovObjects(uint64(l)) - } - if m.Attachment != nil { - l = m.Attachment.Size() - n += 1 + l + sovObjects(uint64(l)) - } - l = m.Certificate.Size() - n += 1 + l + sovObjects(uint64(l)) - if m.Role != 0 { - n += 1 + sovObjects(uint64(m.Role)) - } - if len(m.Attachments) > 0 { - for _, e := range m.Attachments { - l = e.Size() - n += 1 + l + sovObjects(uint64(l)) - } - } - if m.VXLANUDPPort != 0 { - n += 1 + sovObjects(uint64(m.VXLANUDPPort)) - } - return n -} - -func (m *Service) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.ID) - if l > 0 { - n += 1 + l + sovObjects(uint64(l)) - } - l = m.Meta.Size() - n += 1 + l + sovObjects(uint64(l)) - l = m.Spec.Size() - n += 1 + l + sovObjects(uint64(l)) - if m.Endpoint != nil { - l = m.Endpoint.Size() - n += 1 + l + sovObjects(uint64(l)) - } - if m.UpdateStatus != nil { - l = m.UpdateStatus.Size() - n += 1 + l + sovObjects(uint64(l)) - } - if m.PreviousSpec != nil { - l = m.PreviousSpec.Size() - n += 1 + l + sovObjects(uint64(l)) - } - if m.PendingDelete { - n += 2 - } - if m.SpecVersion != nil { - l = m.SpecVersion.Size() - n += 1 + l + sovObjects(uint64(l)) - } - if m.PreviousSpecVersion != nil { - l = m.PreviousSpecVersion.Size() - n += 1 + l + sovObjects(uint64(l)) - } - if m.JobStatus != nil { - l = m.JobStatus.Size() - n += 1 + l + sovObjects(uint64(l)) - } - return n -} - -func (m *Endpoint) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Spec != nil { - l = m.Spec.Size() - n += 1 + l + sovObjects(uint64(l)) - } - if len(m.Ports) > 0 { - for _, e := range m.Ports { - l = e.Size() - n += 1 + l + sovObjects(uint64(l)) - } - } - if len(m.VirtualIPs) > 0 { - for _, e := range m.VirtualIPs { - l = e.Size() - n += 1 + l + sovObjects(uint64(l)) - } - } - return n -} - -func (m *Endpoint_VirtualIP) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.NetworkID) - if l > 0 { - n += 1 + l + sovObjects(uint64(l)) - } - l = len(m.Addr) - if l > 0 { - n += 1 + l + sovObjects(uint64(l)) - } - return n -} - -func (m *Task) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.ID) - if l > 0 { - n += 1 + l + sovObjects(uint64(l)) - } - l = m.Meta.Size() - n += 1 + l + sovObjects(uint64(l)) - l = m.Spec.Size() - n += 1 + l + sovObjects(uint64(l)) - l = len(m.ServiceID) - if l > 0 { - n += 1 + l + sovObjects(uint64(l)) - } - if m.Slot != 0 { - n += 1 + sovObjects(uint64(m.Slot)) - } - l = len(m.NodeID) - if l > 0 { - n += 1 + l + sovObjects(uint64(l)) - } - l = m.Annotations.Size() - n += 1 + l + sovObjects(uint64(l)) - l = m.ServiceAnnotations.Size() - n += 1 + l + sovObjects(uint64(l)) - l = m.Status.Size() - n += 1 + l + sovObjects(uint64(l)) - if m.DesiredState != 0 { - n += 1 + sovObjects(uint64(m.DesiredState)) - } - if len(m.Networks) > 0 { - for _, e := range m.Networks { - l = e.Size() - n += 1 + l + sovObjects(uint64(l)) - } - } - if m.Endpoint != nil { - l = m.Endpoint.Size() - n += 1 + l + sovObjects(uint64(l)) - } - if m.LogDriver != nil { - l = m.LogDriver.Size() - n += 1 + l + sovObjects(uint64(l)) - } - if m.SpecVersion != nil { - l = m.SpecVersion.Size() - n += 1 + l + sovObjects(uint64(l)) - } - if len(m.AssignedGenericResources) > 0 { - for _, e := range m.AssignedGenericResources { - l = e.Size() - n += 1 + l + sovObjects(uint64(l)) - } - } - if m.JobIteration != nil { - l = m.JobIteration.Size() - n += 2 + l + sovObjects(uint64(l)) - } - if len(m.Volumes) > 0 { - for _, e := range m.Volumes { - l = e.Size() - n += 2 + l + sovObjects(uint64(l)) - } - } - return n -} - -func (m *NetworkAttachment) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Network != nil { - l = m.Network.Size() - n += 1 + l + sovObjects(uint64(l)) - } - if len(m.Addresses) > 0 { - for _, s := range m.Addresses { - l = len(s) - n += 1 + l + sovObjects(uint64(l)) - } - } - if len(m.Aliases) > 0 { - for _, s := range m.Aliases { - l = len(s) - n += 1 + l + sovObjects(uint64(l)) - } - } - if len(m.DriverAttachmentOpts) > 0 { - for k, v := range m.DriverAttachmentOpts { - _ = k - _ = v - mapEntrySize := 1 + len(k) + sovObjects(uint64(len(k))) + 1 + len(v) + sovObjects(uint64(len(v))) - n += mapEntrySize + 1 + sovObjects(uint64(mapEntrySize)) - } - } - return n -} - -func (m *Network) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.ID) - if l > 0 { - n += 1 + l + sovObjects(uint64(l)) - } - l = m.Meta.Size() - n += 1 + l + sovObjects(uint64(l)) - l = m.Spec.Size() - n += 1 + l + sovObjects(uint64(l)) - if m.DriverState != nil { - l = m.DriverState.Size() - n += 1 + l + sovObjects(uint64(l)) - } - if m.IPAM != nil { - l = m.IPAM.Size() - n += 1 + l + sovObjects(uint64(l)) - } - if m.PendingDelete { - n += 2 - } - if m.Extra != nil { - l = m.Extra.Size() - n += 1 + l + sovObjects(uint64(l)) - } - return n -} - -func (m *Cluster) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.ID) - if l > 0 { - n += 1 + l + sovObjects(uint64(l)) - } - l = m.Meta.Size() - n += 1 + l + sovObjects(uint64(l)) - l = m.Spec.Size() - n += 1 + l + sovObjects(uint64(l)) - l = m.RootCA.Size() - n += 1 + l + sovObjects(uint64(l)) - if len(m.NetworkBootstrapKeys) > 0 { - for _, e := range m.NetworkBootstrapKeys { - l = e.Size() - n += 1 + l + sovObjects(uint64(l)) - } - } - if m.EncryptionKeyLamportClock != 0 { - n += 1 + sovObjects(uint64(m.EncryptionKeyLamportClock)) - } - if len(m.BlacklistedCertificates) > 0 { - for k, v := range m.BlacklistedCertificates { - _ = k - _ = v - l = 0 - if v != nil { - l = v.Size() - l += 1 + sovObjects(uint64(l)) - } - mapEntrySize := 1 + len(k) + sovObjects(uint64(len(k))) + l - n += mapEntrySize + 1 + sovObjects(uint64(mapEntrySize)) - } - } - if len(m.UnlockKeys) > 0 { - for _, e := range m.UnlockKeys { - l = e.Size() - n += 1 + l + sovObjects(uint64(l)) - } - } - if m.FIPS { - n += 2 - } - if len(m.DefaultAddressPool) > 0 { - for _, s := range m.DefaultAddressPool { - l = len(s) - n += 1 + l + sovObjects(uint64(l)) - } - } - if m.SubnetSize != 0 { - n += 1 + sovObjects(uint64(m.SubnetSize)) - } - if m.VXLANUDPPort != 0 { - n += 1 + sovObjects(uint64(m.VXLANUDPPort)) - } - return n -} - -func (m *Secret) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.ID) - if l > 0 { - n += 1 + l + sovObjects(uint64(l)) - } - l = m.Meta.Size() - n += 1 + l + sovObjects(uint64(l)) - l = m.Spec.Size() - n += 1 + l + sovObjects(uint64(l)) - if m.Internal { - n += 2 - } - return n -} - -func (m *Config) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.ID) - if l > 0 { - n += 1 + l + sovObjects(uint64(l)) - } - l = m.Meta.Size() - n += 1 + l + sovObjects(uint64(l)) - l = m.Spec.Size() - n += 1 + l + sovObjects(uint64(l)) - return n -} - -func (m *Resource) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.ID) - if l > 0 { - n += 1 + l + sovObjects(uint64(l)) - } - l = m.Meta.Size() - n += 1 + l + sovObjects(uint64(l)) - l = m.Annotations.Size() - n += 1 + l + sovObjects(uint64(l)) - l = len(m.Kind) - if l > 0 { - n += 1 + l + sovObjects(uint64(l)) - } - if m.Payload != nil { - l = m.Payload.Size() - n += 1 + l + sovObjects(uint64(l)) - } - return n -} - -func (m *Extension) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.ID) - if l > 0 { - n += 1 + l + sovObjects(uint64(l)) - } - l = m.Meta.Size() - n += 1 + l + sovObjects(uint64(l)) - l = m.Annotations.Size() - n += 1 + l + sovObjects(uint64(l)) - l = len(m.Description) - if l > 0 { - n += 1 + l + sovObjects(uint64(l)) - } - return n -} - -func (m *Volume) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.ID) - if l > 0 { - n += 1 + l + sovObjects(uint64(l)) - } - l = m.Meta.Size() - n += 1 + l + sovObjects(uint64(l)) - l = m.Spec.Size() - n += 1 + l + sovObjects(uint64(l)) - if len(m.PublishStatus) > 0 { - for _, e := range m.PublishStatus { - l = e.Size() - n += 1 + l + sovObjects(uint64(l)) - } - } - if m.VolumeInfo != nil { - l = m.VolumeInfo.Size() - n += 1 + l + sovObjects(uint64(l)) - } - if m.PendingDelete { - n += 2 - } - return n -} - -func sovObjects(x uint64) (n int) { - return (math_bits.Len64(x|1) + 6) / 7 -} -func sozObjects(x uint64) (n int) { - return sovObjects(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} - -type NodeCheckFunc func(t1, t2 *Node) bool - -type EventNode interface { - IsEventNode() bool -} - -type EventCreateNode struct { - Node *Node - Checks []NodeCheckFunc -} - -func (e EventCreateNode) Matches(apiEvent github_com_docker_go_events.Event) bool { - typedEvent, ok := apiEvent.(EventCreateNode) - if !ok { - return false - } - - for _, check := range e.Checks { - if !check(e.Node, typedEvent.Node) { - return false - } - } - return true -} - -func (e EventCreateNode) IsEventCreate() bool { - return true -} - -func (e EventCreateNode) IsEventNode() bool { - return true -} - -type EventUpdateNode struct { - Node *Node - OldNode *Node - Checks []NodeCheckFunc -} - -func (e EventUpdateNode) Matches(apiEvent github_com_docker_go_events.Event) bool { - typedEvent, ok := apiEvent.(EventUpdateNode) - if !ok { - return false - } - - for _, check := range e.Checks { - if !check(e.Node, typedEvent.Node) { - return false - } - } - return true -} - -func (e EventUpdateNode) IsEventUpdate() bool { - return true -} - -func (e EventUpdateNode) IsEventNode() bool { - return true -} - -type EventDeleteNode struct { - Node *Node - Checks []NodeCheckFunc -} - -func (e EventDeleteNode) Matches(apiEvent github_com_docker_go_events.Event) bool { - typedEvent, ok := apiEvent.(EventDeleteNode) - if !ok { - return false - } - - for _, check := range e.Checks { - if !check(e.Node, typedEvent.Node) { - return false - } - } - return true -} - -func (e EventDeleteNode) IsEventDelete() bool { - return true -} - -func (e EventDeleteNode) IsEventNode() bool { - return true -} - -func (m *Node) CopyStoreObject() StoreObject { - return m.Copy() -} - -func (m *Node) GetMeta() Meta { - return m.Meta -} - -func (m *Node) SetMeta(meta Meta) { - m.Meta = meta -} - -func (m *Node) GetID() string { - return m.ID -} - -func (m *Node) EventCreate() Event { - return EventCreateNode{Node: m} -} - -func (m *Node) EventUpdate(oldObject StoreObject) Event { - if oldObject != nil { - return EventUpdateNode{Node: m, OldNode: oldObject.(*Node)} - } else { - return EventUpdateNode{Node: m} - } -} - -func (m *Node) EventDelete() Event { - return EventDeleteNode{Node: m} -} - -func NodeCheckID(v1, v2 *Node) bool { - return v1.ID == v2.ID -} - -func NodeCheckIDPrefix(v1, v2 *Node) bool { - return strings.HasPrefix(v2.ID, v1.ID) -} - -func NodeCheckName(v1, v2 *Node) bool { - if v1.Description == nil || v2.Description == nil { - return false - } - return v1.Description.Hostname == v2.Description.Hostname -} - -func NodeCheckNamePrefix(v1, v2 *Node) bool { - if v1.Description == nil || v2.Description == nil { - return false - } - return strings.HasPrefix(v2.Description.Hostname, v1.Description.Hostname) -} - -func NodeCheckCustom(v1, v2 *Node) bool { - return checkCustom(v1.Spec.Annotations, v2.Spec.Annotations) -} - -func NodeCheckCustomPrefix(v1, v2 *Node) bool { - return checkCustomPrefix(v1.Spec.Annotations, v2.Spec.Annotations) -} - -func NodeCheckRole(v1, v2 *Node) bool { - return v1.Role == v2.Role -} - -func NodeCheckMembership(v1, v2 *Node) bool { - return v1.Spec.Membership == v2.Spec.Membership -} - -func ConvertNodeWatch(action WatchActionKind, filters []*SelectBy) ([]Event, error) { - var ( - m Node - checkFuncs []NodeCheckFunc - hasRole bool - hasMembership bool - ) - - for _, filter := range filters { - switch v := filter.By.(type) { - case *SelectBy_ID: - if m.ID != "" { - return nil, errConflictingFilters - } - m.ID = v.ID - checkFuncs = append(checkFuncs, NodeCheckID) - case *SelectBy_IDPrefix: - if m.ID != "" { - return nil, errConflictingFilters - } - m.ID = v.IDPrefix - checkFuncs = append(checkFuncs, NodeCheckIDPrefix) - case *SelectBy_Name: - if m.Description != nil { - return nil, errConflictingFilters - } - m.Description = &NodeDescription{Hostname: v.Name} - checkFuncs = append(checkFuncs, NodeCheckName) - case *SelectBy_NamePrefix: - if m.Description != nil { - return nil, errConflictingFilters - } - m.Description = &NodeDescription{Hostname: v.NamePrefix} - checkFuncs = append(checkFuncs, NodeCheckNamePrefix) - case *SelectBy_Custom: - if len(m.Spec.Annotations.Indices) != 0 { - return nil, errConflictingFilters - } - m.Spec.Annotations.Indices = []IndexEntry{{Key: v.Custom.Index, Val: v.Custom.Value}} - checkFuncs = append(checkFuncs, NodeCheckCustom) - case *SelectBy_CustomPrefix: - if len(m.Spec.Annotations.Indices) != 0 { - return nil, errConflictingFilters - } - m.Spec.Annotations.Indices = []IndexEntry{{Key: v.CustomPrefix.Index, Val: v.CustomPrefix.Value}} - checkFuncs = append(checkFuncs, NodeCheckCustomPrefix) - case *SelectBy_Role: - if hasRole { - return nil, errConflictingFilters - } - hasRole = true - m.Role = v.Role - checkFuncs = append(checkFuncs, NodeCheckRole) - case *SelectBy_Membership: - if hasMembership { - return nil, errConflictingFilters - } - hasMembership = true - m.Spec.Membership = v.Membership - checkFuncs = append(checkFuncs, NodeCheckMembership) - } - } - var events []Event - if (action & WatchActionKindCreate) != 0 { - events = append(events, EventCreateNode{Node: &m, Checks: checkFuncs}) - } - if (action & WatchActionKindUpdate) != 0 { - events = append(events, EventUpdateNode{Node: &m, Checks: checkFuncs}) - } - if (action & WatchActionKindRemove) != 0 { - events = append(events, EventDeleteNode{Node: &m, Checks: checkFuncs}) - } - if len(events) == 0 { - return nil, errUnrecognizedAction - } - return events, nil -} - -type NodeIndexerByID struct{} - -func (indexer NodeIndexerByID) FromArgs(args ...interface{}) ([]byte, error) { - return fromArgs(args...) -} -func (indexer NodeIndexerByID) PrefixFromArgs(args ...interface{}) ([]byte, error) { - return prefixFromArgs(args...) -} -func (indexer NodeIndexerByID) FromObject(obj interface{}) (bool, []byte, error) { - m := obj.(*Node) - return true, []byte(m.ID + "\x00"), nil -} - -type NodeIndexerByName struct{} - -func (indexer NodeIndexerByName) FromArgs(args ...interface{}) ([]byte, error) { - return fromArgs(args...) -} -func (indexer NodeIndexerByName) PrefixFromArgs(args ...interface{}) ([]byte, error) { - return prefixFromArgs(args...) -} -func (indexer NodeIndexerByName) FromObject(obj interface{}) (bool, []byte, error) { - m := obj.(*Node) - val := m.Spec.Annotations.Name - return true, []byte(strings.ToLower(val) + "\x00"), nil -} - -type NodeCustomIndexer struct{} - -func (indexer NodeCustomIndexer) FromArgs(args ...interface{}) ([]byte, error) { - return fromArgs(args...) -} -func (indexer NodeCustomIndexer) PrefixFromArgs(args ...interface{}) ([]byte, error) { - return prefixFromArgs(args...) -} -func (indexer NodeCustomIndexer) FromObject(obj interface{}) (bool, [][]byte, error) { - m := obj.(*Node) - return customIndexer("", &m.Spec.Annotations) -} - -type ServiceCheckFunc func(t1, t2 *Service) bool - -type EventService interface { - IsEventService() bool -} - -type EventCreateService struct { - Service *Service - Checks []ServiceCheckFunc -} - -func (e EventCreateService) Matches(apiEvent github_com_docker_go_events.Event) bool { - typedEvent, ok := apiEvent.(EventCreateService) - if !ok { - return false - } - - for _, check := range e.Checks { - if !check(e.Service, typedEvent.Service) { - return false - } - } - return true -} - -func (e EventCreateService) IsEventCreate() bool { - return true -} - -func (e EventCreateService) IsEventService() bool { - return true -} - -type EventUpdateService struct { - Service *Service - OldService *Service - Checks []ServiceCheckFunc -} - -func (e EventUpdateService) Matches(apiEvent github_com_docker_go_events.Event) bool { - typedEvent, ok := apiEvent.(EventUpdateService) - if !ok { - return false - } - - for _, check := range e.Checks { - if !check(e.Service, typedEvent.Service) { - return false - } - } - return true -} - -func (e EventUpdateService) IsEventUpdate() bool { - return true -} - -func (e EventUpdateService) IsEventService() bool { - return true -} - -type EventDeleteService struct { - Service *Service - Checks []ServiceCheckFunc -} - -func (e EventDeleteService) Matches(apiEvent github_com_docker_go_events.Event) bool { - typedEvent, ok := apiEvent.(EventDeleteService) - if !ok { - return false - } - - for _, check := range e.Checks { - if !check(e.Service, typedEvent.Service) { - return false - } - } - return true -} - -func (e EventDeleteService) IsEventDelete() bool { - return true -} - -func (e EventDeleteService) IsEventService() bool { - return true -} - -func (m *Service) CopyStoreObject() StoreObject { - return m.Copy() -} - -func (m *Service) GetMeta() Meta { - return m.Meta -} - -func (m *Service) SetMeta(meta Meta) { - m.Meta = meta -} - -func (m *Service) GetID() string { - return m.ID -} - -func (m *Service) EventCreate() Event { - return EventCreateService{Service: m} -} - -func (m *Service) EventUpdate(oldObject StoreObject) Event { - if oldObject != nil { - return EventUpdateService{Service: m, OldService: oldObject.(*Service)} - } else { - return EventUpdateService{Service: m} - } -} - -func (m *Service) EventDelete() Event { - return EventDeleteService{Service: m} -} - -func ServiceCheckID(v1, v2 *Service) bool { - return v1.ID == v2.ID -} - -func ServiceCheckIDPrefix(v1, v2 *Service) bool { - return strings.HasPrefix(v2.ID, v1.ID) -} - -func ServiceCheckName(v1, v2 *Service) bool { - return v1.Spec.Annotations.Name == v2.Spec.Annotations.Name -} - -func ServiceCheckNamePrefix(v1, v2 *Service) bool { - return strings.HasPrefix(v2.Spec.Annotations.Name, v1.Spec.Annotations.Name) -} - -func ServiceCheckCustom(v1, v2 *Service) bool { - return checkCustom(v1.Spec.Annotations, v2.Spec.Annotations) -} - -func ServiceCheckCustomPrefix(v1, v2 *Service) bool { - return checkCustomPrefix(v1.Spec.Annotations, v2.Spec.Annotations) -} - -func ConvertServiceWatch(action WatchActionKind, filters []*SelectBy) ([]Event, error) { - var ( - m Service - checkFuncs []ServiceCheckFunc - ) - - for _, filter := range filters { - switch v := filter.By.(type) { - case *SelectBy_ID: - if m.ID != "" { - return nil, errConflictingFilters - } - m.ID = v.ID - checkFuncs = append(checkFuncs, ServiceCheckID) - case *SelectBy_IDPrefix: - if m.ID != "" { - return nil, errConflictingFilters - } - m.ID = v.IDPrefix - checkFuncs = append(checkFuncs, ServiceCheckIDPrefix) - case *SelectBy_Name: - if m.Spec.Annotations.Name != "" { - return nil, errConflictingFilters - } - m.Spec.Annotations.Name = v.Name - checkFuncs = append(checkFuncs, ServiceCheckName) - case *SelectBy_NamePrefix: - if m.Spec.Annotations.Name != "" { - return nil, errConflictingFilters - } - m.Spec.Annotations.Name = v.NamePrefix - checkFuncs = append(checkFuncs, ServiceCheckNamePrefix) - case *SelectBy_Custom: - if len(m.Spec.Annotations.Indices) != 0 { - return nil, errConflictingFilters - } - m.Spec.Annotations.Indices = []IndexEntry{{Key: v.Custom.Index, Val: v.Custom.Value}} - checkFuncs = append(checkFuncs, ServiceCheckCustom) - case *SelectBy_CustomPrefix: - if len(m.Spec.Annotations.Indices) != 0 { - return nil, errConflictingFilters - } - m.Spec.Annotations.Indices = []IndexEntry{{Key: v.CustomPrefix.Index, Val: v.CustomPrefix.Value}} - checkFuncs = append(checkFuncs, ServiceCheckCustomPrefix) - } - } - var events []Event - if (action & WatchActionKindCreate) != 0 { - events = append(events, EventCreateService{Service: &m, Checks: checkFuncs}) - } - if (action & WatchActionKindUpdate) != 0 { - events = append(events, EventUpdateService{Service: &m, Checks: checkFuncs}) - } - if (action & WatchActionKindRemove) != 0 { - events = append(events, EventDeleteService{Service: &m, Checks: checkFuncs}) - } - if len(events) == 0 { - return nil, errUnrecognizedAction - } - return events, nil -} - -type ServiceIndexerByID struct{} - -func (indexer ServiceIndexerByID) FromArgs(args ...interface{}) ([]byte, error) { - return fromArgs(args...) -} -func (indexer ServiceIndexerByID) PrefixFromArgs(args ...interface{}) ([]byte, error) { - return prefixFromArgs(args...) -} -func (indexer ServiceIndexerByID) FromObject(obj interface{}) (bool, []byte, error) { - m := obj.(*Service) - return true, []byte(m.ID + "\x00"), nil -} - -type ServiceIndexerByName struct{} - -func (indexer ServiceIndexerByName) FromArgs(args ...interface{}) ([]byte, error) { - return fromArgs(args...) -} -func (indexer ServiceIndexerByName) PrefixFromArgs(args ...interface{}) ([]byte, error) { - return prefixFromArgs(args...) -} -func (indexer ServiceIndexerByName) FromObject(obj interface{}) (bool, []byte, error) { - m := obj.(*Service) - val := m.Spec.Annotations.Name - return true, []byte(strings.ToLower(val) + "\x00"), nil -} - -type ServiceCustomIndexer struct{} - -func (indexer ServiceCustomIndexer) FromArgs(args ...interface{}) ([]byte, error) { - return fromArgs(args...) -} -func (indexer ServiceCustomIndexer) PrefixFromArgs(args ...interface{}) ([]byte, error) { - return prefixFromArgs(args...) -} -func (indexer ServiceCustomIndexer) FromObject(obj interface{}) (bool, [][]byte, error) { - m := obj.(*Service) - return customIndexer("", &m.Spec.Annotations) -} - -type TaskCheckFunc func(t1, t2 *Task) bool - -type EventTask interface { - IsEventTask() bool -} - -type EventCreateTask struct { - Task *Task - Checks []TaskCheckFunc -} - -func (e EventCreateTask) Matches(apiEvent github_com_docker_go_events.Event) bool { - typedEvent, ok := apiEvent.(EventCreateTask) - if !ok { - return false - } - - for _, check := range e.Checks { - if !check(e.Task, typedEvent.Task) { - return false - } - } - return true -} - -func (e EventCreateTask) IsEventCreate() bool { - return true -} - -func (e EventCreateTask) IsEventTask() bool { - return true -} - -type EventUpdateTask struct { - Task *Task - OldTask *Task - Checks []TaskCheckFunc -} - -func (e EventUpdateTask) Matches(apiEvent github_com_docker_go_events.Event) bool { - typedEvent, ok := apiEvent.(EventUpdateTask) - if !ok { - return false - } - - for _, check := range e.Checks { - if !check(e.Task, typedEvent.Task) { - return false - } - } - return true -} - -func (e EventUpdateTask) IsEventUpdate() bool { - return true -} - -func (e EventUpdateTask) IsEventTask() bool { - return true -} - -type EventDeleteTask struct { - Task *Task - Checks []TaskCheckFunc -} - -func (e EventDeleteTask) Matches(apiEvent github_com_docker_go_events.Event) bool { - typedEvent, ok := apiEvent.(EventDeleteTask) - if !ok { - return false - } - - for _, check := range e.Checks { - if !check(e.Task, typedEvent.Task) { - return false - } - } - return true -} - -func (e EventDeleteTask) IsEventDelete() bool { - return true -} - -func (e EventDeleteTask) IsEventTask() bool { - return true -} - -func (m *Task) CopyStoreObject() StoreObject { - return m.Copy() -} - -func (m *Task) GetMeta() Meta { - return m.Meta -} - -func (m *Task) SetMeta(meta Meta) { - m.Meta = meta -} - -func (m *Task) GetID() string { - return m.ID -} - -func (m *Task) EventCreate() Event { - return EventCreateTask{Task: m} -} - -func (m *Task) EventUpdate(oldObject StoreObject) Event { - if oldObject != nil { - return EventUpdateTask{Task: m, OldTask: oldObject.(*Task)} - } else { - return EventUpdateTask{Task: m} - } -} - -func (m *Task) EventDelete() Event { - return EventDeleteTask{Task: m} -} - -func TaskCheckID(v1, v2 *Task) bool { - return v1.ID == v2.ID -} - -func TaskCheckIDPrefix(v1, v2 *Task) bool { - return strings.HasPrefix(v2.ID, v1.ID) -} - -func TaskCheckName(v1, v2 *Task) bool { - return v1.Annotations.Name == v2.Annotations.Name -} - -func TaskCheckNamePrefix(v1, v2 *Task) bool { - return strings.HasPrefix(v2.Annotations.Name, v1.Annotations.Name) -} - -func TaskCheckCustom(v1, v2 *Task) bool { - return checkCustom(v1.Annotations, v2.Annotations) -} - -func TaskCheckCustomPrefix(v1, v2 *Task) bool { - return checkCustomPrefix(v1.Annotations, v2.Annotations) -} - -func TaskCheckNodeID(v1, v2 *Task) bool { - return v1.NodeID == v2.NodeID -} - -func TaskCheckServiceID(v1, v2 *Task) bool { - return v1.ServiceID == v2.ServiceID -} - -func TaskCheckSlot(v1, v2 *Task) bool { - return v1.Slot == v2.Slot -} - -func TaskCheckDesiredState(v1, v2 *Task) bool { - return v1.DesiredState == v2.DesiredState -} - -func ConvertTaskWatch(action WatchActionKind, filters []*SelectBy) ([]Event, error) { - var ( - m Task - checkFuncs []TaskCheckFunc - hasDesiredState bool - ) - - for _, filter := range filters { - switch v := filter.By.(type) { - case *SelectBy_ID: - if m.ID != "" { - return nil, errConflictingFilters - } - m.ID = v.ID - checkFuncs = append(checkFuncs, TaskCheckID) - case *SelectBy_IDPrefix: - if m.ID != "" { - return nil, errConflictingFilters - } - m.ID = v.IDPrefix - checkFuncs = append(checkFuncs, TaskCheckIDPrefix) - case *SelectBy_Name: - if m.Annotations.Name != "" { - return nil, errConflictingFilters - } - m.Annotations.Name = v.Name - checkFuncs = append(checkFuncs, TaskCheckName) - case *SelectBy_NamePrefix: - if m.Annotations.Name != "" { - return nil, errConflictingFilters - } - m.Annotations.Name = v.NamePrefix - checkFuncs = append(checkFuncs, TaskCheckNamePrefix) - case *SelectBy_Custom: - if len(m.Annotations.Indices) != 0 { - return nil, errConflictingFilters - } - m.Annotations.Indices = []IndexEntry{{Key: v.Custom.Index, Val: v.Custom.Value}} - checkFuncs = append(checkFuncs, TaskCheckCustom) - case *SelectBy_CustomPrefix: - if len(m.Annotations.Indices) != 0 { - return nil, errConflictingFilters - } - m.Annotations.Indices = []IndexEntry{{Key: v.CustomPrefix.Index, Val: v.CustomPrefix.Value}} - checkFuncs = append(checkFuncs, TaskCheckCustomPrefix) - case *SelectBy_ServiceID: - if m.ServiceID != "" { - return nil, errConflictingFilters - } - m.ServiceID = v.ServiceID - checkFuncs = append(checkFuncs, TaskCheckServiceID) - case *SelectBy_NodeID: - if m.NodeID != "" { - return nil, errConflictingFilters - } - m.NodeID = v.NodeID - checkFuncs = append(checkFuncs, TaskCheckNodeID) - case *SelectBy_Slot: - if m.Slot != 0 || m.ServiceID != "" { - return nil, errConflictingFilters - } - m.ServiceID = v.Slot.ServiceID - m.Slot = v.Slot.Slot - checkFuncs = append(checkFuncs, TaskCheckNodeID, TaskCheckSlot) - case *SelectBy_DesiredState: - if hasDesiredState { - return nil, errConflictingFilters - } - hasDesiredState = true - m.DesiredState = v.DesiredState - checkFuncs = append(checkFuncs, TaskCheckDesiredState) - } - } - var events []Event - if (action & WatchActionKindCreate) != 0 { - events = append(events, EventCreateTask{Task: &m, Checks: checkFuncs}) - } - if (action & WatchActionKindUpdate) != 0 { - events = append(events, EventUpdateTask{Task: &m, Checks: checkFuncs}) - } - if (action & WatchActionKindRemove) != 0 { - events = append(events, EventDeleteTask{Task: &m, Checks: checkFuncs}) - } - if len(events) == 0 { - return nil, errUnrecognizedAction - } - return events, nil -} - -type TaskIndexerByID struct{} - -func (indexer TaskIndexerByID) FromArgs(args ...interface{}) ([]byte, error) { - return fromArgs(args...) -} -func (indexer TaskIndexerByID) PrefixFromArgs(args ...interface{}) ([]byte, error) { - return prefixFromArgs(args...) -} -func (indexer TaskIndexerByID) FromObject(obj interface{}) (bool, []byte, error) { - m := obj.(*Task) - return true, []byte(m.ID + "\x00"), nil -} - -type TaskIndexerByName struct{} - -func (indexer TaskIndexerByName) FromArgs(args ...interface{}) ([]byte, error) { - return fromArgs(args...) -} -func (indexer TaskIndexerByName) PrefixFromArgs(args ...interface{}) ([]byte, error) { - return prefixFromArgs(args...) -} -func (indexer TaskIndexerByName) FromObject(obj interface{}) (bool, []byte, error) { - m := obj.(*Task) - val := m.Annotations.Name - return true, []byte(strings.ToLower(val) + "\x00"), nil -} - -type TaskCustomIndexer struct{} - -func (indexer TaskCustomIndexer) FromArgs(args ...interface{}) ([]byte, error) { - return fromArgs(args...) -} -func (indexer TaskCustomIndexer) PrefixFromArgs(args ...interface{}) ([]byte, error) { - return prefixFromArgs(args...) -} -func (indexer TaskCustomIndexer) FromObject(obj interface{}) (bool, [][]byte, error) { - m := obj.(*Task) - return customIndexer("", &m.Annotations) -} - -type NetworkCheckFunc func(t1, t2 *Network) bool - -type EventNetwork interface { - IsEventNetwork() bool -} - -type EventCreateNetwork struct { - Network *Network - Checks []NetworkCheckFunc -} - -func (e EventCreateNetwork) Matches(apiEvent github_com_docker_go_events.Event) bool { - typedEvent, ok := apiEvent.(EventCreateNetwork) - if !ok { - return false - } - - for _, check := range e.Checks { - if !check(e.Network, typedEvent.Network) { - return false - } - } - return true -} - -func (e EventCreateNetwork) IsEventCreate() bool { - return true -} - -func (e EventCreateNetwork) IsEventNetwork() bool { - return true -} - -type EventUpdateNetwork struct { - Network *Network - OldNetwork *Network - Checks []NetworkCheckFunc -} - -func (e EventUpdateNetwork) Matches(apiEvent github_com_docker_go_events.Event) bool { - typedEvent, ok := apiEvent.(EventUpdateNetwork) - if !ok { - return false - } - - for _, check := range e.Checks { - if !check(e.Network, typedEvent.Network) { - return false - } - } - return true -} - -func (e EventUpdateNetwork) IsEventUpdate() bool { - return true -} - -func (e EventUpdateNetwork) IsEventNetwork() bool { - return true -} - -type EventDeleteNetwork struct { - Network *Network - Checks []NetworkCheckFunc -} - -func (e EventDeleteNetwork) Matches(apiEvent github_com_docker_go_events.Event) bool { - typedEvent, ok := apiEvent.(EventDeleteNetwork) - if !ok { - return false - } - - for _, check := range e.Checks { - if !check(e.Network, typedEvent.Network) { - return false - } - } - return true -} - -func (e EventDeleteNetwork) IsEventDelete() bool { - return true -} - -func (e EventDeleteNetwork) IsEventNetwork() bool { - return true -} - -func (m *Network) CopyStoreObject() StoreObject { - return m.Copy() -} - -func (m *Network) GetMeta() Meta { - return m.Meta -} - -func (m *Network) SetMeta(meta Meta) { - m.Meta = meta -} - -func (m *Network) GetID() string { - return m.ID -} - -func (m *Network) EventCreate() Event { - return EventCreateNetwork{Network: m} -} - -func (m *Network) EventUpdate(oldObject StoreObject) Event { - if oldObject != nil { - return EventUpdateNetwork{Network: m, OldNetwork: oldObject.(*Network)} - } else { - return EventUpdateNetwork{Network: m} - } -} - -func (m *Network) EventDelete() Event { - return EventDeleteNetwork{Network: m} -} - -func NetworkCheckID(v1, v2 *Network) bool { - return v1.ID == v2.ID -} - -func NetworkCheckIDPrefix(v1, v2 *Network) bool { - return strings.HasPrefix(v2.ID, v1.ID) -} - -func NetworkCheckName(v1, v2 *Network) bool { - return v1.Spec.Annotations.Name == v2.Spec.Annotations.Name -} - -func NetworkCheckNamePrefix(v1, v2 *Network) bool { - return strings.HasPrefix(v2.Spec.Annotations.Name, v1.Spec.Annotations.Name) -} - -func NetworkCheckCustom(v1, v2 *Network) bool { - return checkCustom(v1.Spec.Annotations, v2.Spec.Annotations) -} - -func NetworkCheckCustomPrefix(v1, v2 *Network) bool { - return checkCustomPrefix(v1.Spec.Annotations, v2.Spec.Annotations) -} - -func ConvertNetworkWatch(action WatchActionKind, filters []*SelectBy) ([]Event, error) { - var ( - m Network - checkFuncs []NetworkCheckFunc - ) - - for _, filter := range filters { - switch v := filter.By.(type) { - case *SelectBy_ID: - if m.ID != "" { - return nil, errConflictingFilters - } - m.ID = v.ID - checkFuncs = append(checkFuncs, NetworkCheckID) - case *SelectBy_IDPrefix: - if m.ID != "" { - return nil, errConflictingFilters - } - m.ID = v.IDPrefix - checkFuncs = append(checkFuncs, NetworkCheckIDPrefix) - case *SelectBy_Name: - if m.Spec.Annotations.Name != "" { - return nil, errConflictingFilters - } - m.Spec.Annotations.Name = v.Name - checkFuncs = append(checkFuncs, NetworkCheckName) - case *SelectBy_NamePrefix: - if m.Spec.Annotations.Name != "" { - return nil, errConflictingFilters - } - m.Spec.Annotations.Name = v.NamePrefix - checkFuncs = append(checkFuncs, NetworkCheckNamePrefix) - case *SelectBy_Custom: - if len(m.Spec.Annotations.Indices) != 0 { - return nil, errConflictingFilters - } - m.Spec.Annotations.Indices = []IndexEntry{{Key: v.Custom.Index, Val: v.Custom.Value}} - checkFuncs = append(checkFuncs, NetworkCheckCustom) - case *SelectBy_CustomPrefix: - if len(m.Spec.Annotations.Indices) != 0 { - return nil, errConflictingFilters - } - m.Spec.Annotations.Indices = []IndexEntry{{Key: v.CustomPrefix.Index, Val: v.CustomPrefix.Value}} - checkFuncs = append(checkFuncs, NetworkCheckCustomPrefix) - } - } - var events []Event - if (action & WatchActionKindCreate) != 0 { - events = append(events, EventCreateNetwork{Network: &m, Checks: checkFuncs}) - } - if (action & WatchActionKindUpdate) != 0 { - events = append(events, EventUpdateNetwork{Network: &m, Checks: checkFuncs}) - } - if (action & WatchActionKindRemove) != 0 { - events = append(events, EventDeleteNetwork{Network: &m, Checks: checkFuncs}) - } - if len(events) == 0 { - return nil, errUnrecognizedAction - } - return events, nil -} - -type NetworkIndexerByID struct{} - -func (indexer NetworkIndexerByID) FromArgs(args ...interface{}) ([]byte, error) { - return fromArgs(args...) -} -func (indexer NetworkIndexerByID) PrefixFromArgs(args ...interface{}) ([]byte, error) { - return prefixFromArgs(args...) -} -func (indexer NetworkIndexerByID) FromObject(obj interface{}) (bool, []byte, error) { - m := obj.(*Network) - return true, []byte(m.ID + "\x00"), nil -} - -type NetworkIndexerByName struct{} - -func (indexer NetworkIndexerByName) FromArgs(args ...interface{}) ([]byte, error) { - return fromArgs(args...) -} -func (indexer NetworkIndexerByName) PrefixFromArgs(args ...interface{}) ([]byte, error) { - return prefixFromArgs(args...) -} -func (indexer NetworkIndexerByName) FromObject(obj interface{}) (bool, []byte, error) { - m := obj.(*Network) - val := m.Spec.Annotations.Name - return true, []byte(strings.ToLower(val) + "\x00"), nil -} - -type NetworkCustomIndexer struct{} - -func (indexer NetworkCustomIndexer) FromArgs(args ...interface{}) ([]byte, error) { - return fromArgs(args...) -} -func (indexer NetworkCustomIndexer) PrefixFromArgs(args ...interface{}) ([]byte, error) { - return prefixFromArgs(args...) -} -func (indexer NetworkCustomIndexer) FromObject(obj interface{}) (bool, [][]byte, error) { - m := obj.(*Network) - return customIndexer("", &m.Spec.Annotations) -} - -type ClusterCheckFunc func(t1, t2 *Cluster) bool - -type EventCluster interface { - IsEventCluster() bool -} - -type EventCreateCluster struct { - Cluster *Cluster - Checks []ClusterCheckFunc -} - -func (e EventCreateCluster) Matches(apiEvent github_com_docker_go_events.Event) bool { - typedEvent, ok := apiEvent.(EventCreateCluster) - if !ok { - return false - } - - for _, check := range e.Checks { - if !check(e.Cluster, typedEvent.Cluster) { - return false - } - } - return true -} - -func (e EventCreateCluster) IsEventCreate() bool { - return true -} - -func (e EventCreateCluster) IsEventCluster() bool { - return true -} - -type EventUpdateCluster struct { - Cluster *Cluster - OldCluster *Cluster - Checks []ClusterCheckFunc -} - -func (e EventUpdateCluster) Matches(apiEvent github_com_docker_go_events.Event) bool { - typedEvent, ok := apiEvent.(EventUpdateCluster) - if !ok { - return false - } - - for _, check := range e.Checks { - if !check(e.Cluster, typedEvent.Cluster) { - return false - } - } - return true -} - -func (e EventUpdateCluster) IsEventUpdate() bool { - return true -} - -func (e EventUpdateCluster) IsEventCluster() bool { - return true -} - -type EventDeleteCluster struct { - Cluster *Cluster - Checks []ClusterCheckFunc -} - -func (e EventDeleteCluster) Matches(apiEvent github_com_docker_go_events.Event) bool { - typedEvent, ok := apiEvent.(EventDeleteCluster) - if !ok { - return false - } - - for _, check := range e.Checks { - if !check(e.Cluster, typedEvent.Cluster) { - return false - } - } - return true -} - -func (e EventDeleteCluster) IsEventDelete() bool { - return true -} - -func (e EventDeleteCluster) IsEventCluster() bool { - return true -} - -func (m *Cluster) CopyStoreObject() StoreObject { - return m.Copy() -} - -func (m *Cluster) GetMeta() Meta { - return m.Meta -} - -func (m *Cluster) SetMeta(meta Meta) { - m.Meta = meta -} - -func (m *Cluster) GetID() string { - return m.ID -} - -func (m *Cluster) EventCreate() Event { - return EventCreateCluster{Cluster: m} -} - -func (m *Cluster) EventUpdate(oldObject StoreObject) Event { - if oldObject != nil { - return EventUpdateCluster{Cluster: m, OldCluster: oldObject.(*Cluster)} - } else { - return EventUpdateCluster{Cluster: m} - } -} - -func (m *Cluster) EventDelete() Event { - return EventDeleteCluster{Cluster: m} -} - -func ClusterCheckID(v1, v2 *Cluster) bool { - return v1.ID == v2.ID -} - -func ClusterCheckIDPrefix(v1, v2 *Cluster) bool { - return strings.HasPrefix(v2.ID, v1.ID) -} - -func ClusterCheckName(v1, v2 *Cluster) bool { - return v1.Spec.Annotations.Name == v2.Spec.Annotations.Name -} - -func ClusterCheckNamePrefix(v1, v2 *Cluster) bool { - return strings.HasPrefix(v2.Spec.Annotations.Name, v1.Spec.Annotations.Name) -} - -func ClusterCheckCustom(v1, v2 *Cluster) bool { - return checkCustom(v1.Spec.Annotations, v2.Spec.Annotations) -} - -func ClusterCheckCustomPrefix(v1, v2 *Cluster) bool { - return checkCustomPrefix(v1.Spec.Annotations, v2.Spec.Annotations) -} - -func ConvertClusterWatch(action WatchActionKind, filters []*SelectBy) ([]Event, error) { - var ( - m Cluster - checkFuncs []ClusterCheckFunc - ) - - for _, filter := range filters { - switch v := filter.By.(type) { - case *SelectBy_ID: - if m.ID != "" { - return nil, errConflictingFilters - } - m.ID = v.ID - checkFuncs = append(checkFuncs, ClusterCheckID) - case *SelectBy_IDPrefix: - if m.ID != "" { - return nil, errConflictingFilters - } - m.ID = v.IDPrefix - checkFuncs = append(checkFuncs, ClusterCheckIDPrefix) - case *SelectBy_Name: - if m.Spec.Annotations.Name != "" { - return nil, errConflictingFilters - } - m.Spec.Annotations.Name = v.Name - checkFuncs = append(checkFuncs, ClusterCheckName) - case *SelectBy_NamePrefix: - if m.Spec.Annotations.Name != "" { - return nil, errConflictingFilters - } - m.Spec.Annotations.Name = v.NamePrefix - checkFuncs = append(checkFuncs, ClusterCheckNamePrefix) - case *SelectBy_Custom: - if len(m.Spec.Annotations.Indices) != 0 { - return nil, errConflictingFilters - } - m.Spec.Annotations.Indices = []IndexEntry{{Key: v.Custom.Index, Val: v.Custom.Value}} - checkFuncs = append(checkFuncs, ClusterCheckCustom) - case *SelectBy_CustomPrefix: - if len(m.Spec.Annotations.Indices) != 0 { - return nil, errConflictingFilters - } - m.Spec.Annotations.Indices = []IndexEntry{{Key: v.CustomPrefix.Index, Val: v.CustomPrefix.Value}} - checkFuncs = append(checkFuncs, ClusterCheckCustomPrefix) - } - } - var events []Event - if (action & WatchActionKindCreate) != 0 { - events = append(events, EventCreateCluster{Cluster: &m, Checks: checkFuncs}) - } - if (action & WatchActionKindUpdate) != 0 { - events = append(events, EventUpdateCluster{Cluster: &m, Checks: checkFuncs}) - } - if (action & WatchActionKindRemove) != 0 { - events = append(events, EventDeleteCluster{Cluster: &m, Checks: checkFuncs}) - } - if len(events) == 0 { - return nil, errUnrecognizedAction - } - return events, nil -} - -type ClusterIndexerByID struct{} - -func (indexer ClusterIndexerByID) FromArgs(args ...interface{}) ([]byte, error) { - return fromArgs(args...) -} -func (indexer ClusterIndexerByID) PrefixFromArgs(args ...interface{}) ([]byte, error) { - return prefixFromArgs(args...) -} -func (indexer ClusterIndexerByID) FromObject(obj interface{}) (bool, []byte, error) { - m := obj.(*Cluster) - return true, []byte(m.ID + "\x00"), nil -} - -type ClusterIndexerByName struct{} - -func (indexer ClusterIndexerByName) FromArgs(args ...interface{}) ([]byte, error) { - return fromArgs(args...) -} -func (indexer ClusterIndexerByName) PrefixFromArgs(args ...interface{}) ([]byte, error) { - return prefixFromArgs(args...) -} -func (indexer ClusterIndexerByName) FromObject(obj interface{}) (bool, []byte, error) { - m := obj.(*Cluster) - val := m.Spec.Annotations.Name - return true, []byte(strings.ToLower(val) + "\x00"), nil -} - -type ClusterCustomIndexer struct{} - -func (indexer ClusterCustomIndexer) FromArgs(args ...interface{}) ([]byte, error) { - return fromArgs(args...) -} -func (indexer ClusterCustomIndexer) PrefixFromArgs(args ...interface{}) ([]byte, error) { - return prefixFromArgs(args...) -} -func (indexer ClusterCustomIndexer) FromObject(obj interface{}) (bool, [][]byte, error) { - m := obj.(*Cluster) - return customIndexer("", &m.Spec.Annotations) -} - -type SecretCheckFunc func(t1, t2 *Secret) bool - -type EventSecret interface { - IsEventSecret() bool -} - -type EventCreateSecret struct { - Secret *Secret - Checks []SecretCheckFunc -} - -func (e EventCreateSecret) Matches(apiEvent github_com_docker_go_events.Event) bool { - typedEvent, ok := apiEvent.(EventCreateSecret) - if !ok { - return false - } - - for _, check := range e.Checks { - if !check(e.Secret, typedEvent.Secret) { - return false - } - } - return true -} - -func (e EventCreateSecret) IsEventCreate() bool { - return true -} - -func (e EventCreateSecret) IsEventSecret() bool { - return true -} - -type EventUpdateSecret struct { - Secret *Secret - OldSecret *Secret - Checks []SecretCheckFunc -} - -func (e EventUpdateSecret) Matches(apiEvent github_com_docker_go_events.Event) bool { - typedEvent, ok := apiEvent.(EventUpdateSecret) - if !ok { - return false - } - - for _, check := range e.Checks { - if !check(e.Secret, typedEvent.Secret) { - return false - } - } - return true -} - -func (e EventUpdateSecret) IsEventUpdate() bool { - return true -} - -func (e EventUpdateSecret) IsEventSecret() bool { - return true -} - -type EventDeleteSecret struct { - Secret *Secret - Checks []SecretCheckFunc -} - -func (e EventDeleteSecret) Matches(apiEvent github_com_docker_go_events.Event) bool { - typedEvent, ok := apiEvent.(EventDeleteSecret) - if !ok { - return false - } - - for _, check := range e.Checks { - if !check(e.Secret, typedEvent.Secret) { - return false - } - } - return true -} - -func (e EventDeleteSecret) IsEventDelete() bool { - return true -} - -func (e EventDeleteSecret) IsEventSecret() bool { - return true -} - -func (m *Secret) CopyStoreObject() StoreObject { - return m.Copy() -} - -func (m *Secret) GetMeta() Meta { - return m.Meta -} - -func (m *Secret) SetMeta(meta Meta) { - m.Meta = meta -} - -func (m *Secret) GetID() string { - return m.ID -} - -func (m *Secret) EventCreate() Event { - return EventCreateSecret{Secret: m} -} - -func (m *Secret) EventUpdate(oldObject StoreObject) Event { - if oldObject != nil { - return EventUpdateSecret{Secret: m, OldSecret: oldObject.(*Secret)} - } else { - return EventUpdateSecret{Secret: m} - } -} - -func (m *Secret) EventDelete() Event { - return EventDeleteSecret{Secret: m} -} - -func SecretCheckID(v1, v2 *Secret) bool { - return v1.ID == v2.ID -} - -func SecretCheckIDPrefix(v1, v2 *Secret) bool { - return strings.HasPrefix(v2.ID, v1.ID) -} - -func SecretCheckName(v1, v2 *Secret) bool { - return v1.Spec.Annotations.Name == v2.Spec.Annotations.Name -} - -func SecretCheckNamePrefix(v1, v2 *Secret) bool { - return strings.HasPrefix(v2.Spec.Annotations.Name, v1.Spec.Annotations.Name) -} - -func SecretCheckCustom(v1, v2 *Secret) bool { - return checkCustom(v1.Spec.Annotations, v2.Spec.Annotations) -} - -func SecretCheckCustomPrefix(v1, v2 *Secret) bool { - return checkCustomPrefix(v1.Spec.Annotations, v2.Spec.Annotations) -} - -func ConvertSecretWatch(action WatchActionKind, filters []*SelectBy) ([]Event, error) { - var ( - m Secret - checkFuncs []SecretCheckFunc - ) - - for _, filter := range filters { - switch v := filter.By.(type) { - case *SelectBy_ID: - if m.ID != "" { - return nil, errConflictingFilters - } - m.ID = v.ID - checkFuncs = append(checkFuncs, SecretCheckID) - case *SelectBy_IDPrefix: - if m.ID != "" { - return nil, errConflictingFilters - } - m.ID = v.IDPrefix - checkFuncs = append(checkFuncs, SecretCheckIDPrefix) - case *SelectBy_Name: - if m.Spec.Annotations.Name != "" { - return nil, errConflictingFilters - } - m.Spec.Annotations.Name = v.Name - checkFuncs = append(checkFuncs, SecretCheckName) - case *SelectBy_NamePrefix: - if m.Spec.Annotations.Name != "" { - return nil, errConflictingFilters - } - m.Spec.Annotations.Name = v.NamePrefix - checkFuncs = append(checkFuncs, SecretCheckNamePrefix) - case *SelectBy_Custom: - if len(m.Spec.Annotations.Indices) != 0 { - return nil, errConflictingFilters - } - m.Spec.Annotations.Indices = []IndexEntry{{Key: v.Custom.Index, Val: v.Custom.Value}} - checkFuncs = append(checkFuncs, SecretCheckCustom) - case *SelectBy_CustomPrefix: - if len(m.Spec.Annotations.Indices) != 0 { - return nil, errConflictingFilters - } - m.Spec.Annotations.Indices = []IndexEntry{{Key: v.CustomPrefix.Index, Val: v.CustomPrefix.Value}} - checkFuncs = append(checkFuncs, SecretCheckCustomPrefix) - } - } - var events []Event - if (action & WatchActionKindCreate) != 0 { - events = append(events, EventCreateSecret{Secret: &m, Checks: checkFuncs}) - } - if (action & WatchActionKindUpdate) != 0 { - events = append(events, EventUpdateSecret{Secret: &m, Checks: checkFuncs}) - } - if (action & WatchActionKindRemove) != 0 { - events = append(events, EventDeleteSecret{Secret: &m, Checks: checkFuncs}) - } - if len(events) == 0 { - return nil, errUnrecognizedAction - } - return events, nil -} - -type SecretIndexerByID struct{} - -func (indexer SecretIndexerByID) FromArgs(args ...interface{}) ([]byte, error) { - return fromArgs(args...) -} -func (indexer SecretIndexerByID) PrefixFromArgs(args ...interface{}) ([]byte, error) { - return prefixFromArgs(args...) -} -func (indexer SecretIndexerByID) FromObject(obj interface{}) (bool, []byte, error) { - m := obj.(*Secret) - return true, []byte(m.ID + "\x00"), nil -} - -type SecretIndexerByName struct{} - -func (indexer SecretIndexerByName) FromArgs(args ...interface{}) ([]byte, error) { - return fromArgs(args...) -} -func (indexer SecretIndexerByName) PrefixFromArgs(args ...interface{}) ([]byte, error) { - return prefixFromArgs(args...) -} -func (indexer SecretIndexerByName) FromObject(obj interface{}) (bool, []byte, error) { - m := obj.(*Secret) - val := m.Spec.Annotations.Name - return true, []byte(strings.ToLower(val) + "\x00"), nil -} - -type SecretCustomIndexer struct{} - -func (indexer SecretCustomIndexer) FromArgs(args ...interface{}) ([]byte, error) { - return fromArgs(args...) -} -func (indexer SecretCustomIndexer) PrefixFromArgs(args ...interface{}) ([]byte, error) { - return prefixFromArgs(args...) -} -func (indexer SecretCustomIndexer) FromObject(obj interface{}) (bool, [][]byte, error) { - m := obj.(*Secret) - return customIndexer("", &m.Spec.Annotations) -} - -type ConfigCheckFunc func(t1, t2 *Config) bool - -type EventConfig interface { - IsEventConfig() bool -} - -type EventCreateConfig struct { - Config *Config - Checks []ConfigCheckFunc -} - -func (e EventCreateConfig) Matches(apiEvent github_com_docker_go_events.Event) bool { - typedEvent, ok := apiEvent.(EventCreateConfig) - if !ok { - return false - } - - for _, check := range e.Checks { - if !check(e.Config, typedEvent.Config) { - return false - } - } - return true -} - -func (e EventCreateConfig) IsEventCreate() bool { - return true -} - -func (e EventCreateConfig) IsEventConfig() bool { - return true -} - -type EventUpdateConfig struct { - Config *Config - OldConfig *Config - Checks []ConfigCheckFunc -} - -func (e EventUpdateConfig) Matches(apiEvent github_com_docker_go_events.Event) bool { - typedEvent, ok := apiEvent.(EventUpdateConfig) - if !ok { - return false - } - - for _, check := range e.Checks { - if !check(e.Config, typedEvent.Config) { - return false - } - } - return true -} - -func (e EventUpdateConfig) IsEventUpdate() bool { - return true -} - -func (e EventUpdateConfig) IsEventConfig() bool { - return true -} - -type EventDeleteConfig struct { - Config *Config - Checks []ConfigCheckFunc -} - -func (e EventDeleteConfig) Matches(apiEvent github_com_docker_go_events.Event) bool { - typedEvent, ok := apiEvent.(EventDeleteConfig) - if !ok { - return false - } - - for _, check := range e.Checks { - if !check(e.Config, typedEvent.Config) { - return false - } - } - return true -} - -func (e EventDeleteConfig) IsEventDelete() bool { - return true -} - -func (e EventDeleteConfig) IsEventConfig() bool { - return true -} - -func (m *Config) CopyStoreObject() StoreObject { - return m.Copy() -} - -func (m *Config) GetMeta() Meta { - return m.Meta -} - -func (m *Config) SetMeta(meta Meta) { - m.Meta = meta -} - -func (m *Config) GetID() string { - return m.ID -} - -func (m *Config) EventCreate() Event { - return EventCreateConfig{Config: m} -} - -func (m *Config) EventUpdate(oldObject StoreObject) Event { - if oldObject != nil { - return EventUpdateConfig{Config: m, OldConfig: oldObject.(*Config)} - } else { - return EventUpdateConfig{Config: m} - } -} - -func (m *Config) EventDelete() Event { - return EventDeleteConfig{Config: m} -} - -func ConfigCheckID(v1, v2 *Config) bool { - return v1.ID == v2.ID -} - -func ConfigCheckIDPrefix(v1, v2 *Config) bool { - return strings.HasPrefix(v2.ID, v1.ID) -} - -func ConfigCheckName(v1, v2 *Config) bool { - return v1.Spec.Annotations.Name == v2.Spec.Annotations.Name -} - -func ConfigCheckNamePrefix(v1, v2 *Config) bool { - return strings.HasPrefix(v2.Spec.Annotations.Name, v1.Spec.Annotations.Name) -} - -func ConfigCheckCustom(v1, v2 *Config) bool { - return checkCustom(v1.Spec.Annotations, v2.Spec.Annotations) -} - -func ConfigCheckCustomPrefix(v1, v2 *Config) bool { - return checkCustomPrefix(v1.Spec.Annotations, v2.Spec.Annotations) -} - -func ConvertConfigWatch(action WatchActionKind, filters []*SelectBy) ([]Event, error) { - var ( - m Config - checkFuncs []ConfigCheckFunc - ) - - for _, filter := range filters { - switch v := filter.By.(type) { - case *SelectBy_ID: - if m.ID != "" { - return nil, errConflictingFilters - } - m.ID = v.ID - checkFuncs = append(checkFuncs, ConfigCheckID) - case *SelectBy_IDPrefix: - if m.ID != "" { - return nil, errConflictingFilters - } - m.ID = v.IDPrefix - checkFuncs = append(checkFuncs, ConfigCheckIDPrefix) - case *SelectBy_Name: - if m.Spec.Annotations.Name != "" { - return nil, errConflictingFilters - } - m.Spec.Annotations.Name = v.Name - checkFuncs = append(checkFuncs, ConfigCheckName) - case *SelectBy_NamePrefix: - if m.Spec.Annotations.Name != "" { - return nil, errConflictingFilters - } - m.Spec.Annotations.Name = v.NamePrefix - checkFuncs = append(checkFuncs, ConfigCheckNamePrefix) - case *SelectBy_Custom: - if len(m.Spec.Annotations.Indices) != 0 { - return nil, errConflictingFilters - } - m.Spec.Annotations.Indices = []IndexEntry{{Key: v.Custom.Index, Val: v.Custom.Value}} - checkFuncs = append(checkFuncs, ConfigCheckCustom) - case *SelectBy_CustomPrefix: - if len(m.Spec.Annotations.Indices) != 0 { - return nil, errConflictingFilters - } - m.Spec.Annotations.Indices = []IndexEntry{{Key: v.CustomPrefix.Index, Val: v.CustomPrefix.Value}} - checkFuncs = append(checkFuncs, ConfigCheckCustomPrefix) - } - } - var events []Event - if (action & WatchActionKindCreate) != 0 { - events = append(events, EventCreateConfig{Config: &m, Checks: checkFuncs}) - } - if (action & WatchActionKindUpdate) != 0 { - events = append(events, EventUpdateConfig{Config: &m, Checks: checkFuncs}) - } - if (action & WatchActionKindRemove) != 0 { - events = append(events, EventDeleteConfig{Config: &m, Checks: checkFuncs}) - } - if len(events) == 0 { - return nil, errUnrecognizedAction - } - return events, nil -} - -type ConfigIndexerByID struct{} - -func (indexer ConfigIndexerByID) FromArgs(args ...interface{}) ([]byte, error) { - return fromArgs(args...) -} -func (indexer ConfigIndexerByID) PrefixFromArgs(args ...interface{}) ([]byte, error) { - return prefixFromArgs(args...) -} -func (indexer ConfigIndexerByID) FromObject(obj interface{}) (bool, []byte, error) { - m := obj.(*Config) - return true, []byte(m.ID + "\x00"), nil -} - -type ConfigIndexerByName struct{} - -func (indexer ConfigIndexerByName) FromArgs(args ...interface{}) ([]byte, error) { - return fromArgs(args...) -} -func (indexer ConfigIndexerByName) PrefixFromArgs(args ...interface{}) ([]byte, error) { - return prefixFromArgs(args...) -} -func (indexer ConfigIndexerByName) FromObject(obj interface{}) (bool, []byte, error) { - m := obj.(*Config) - val := m.Spec.Annotations.Name - return true, []byte(strings.ToLower(val) + "\x00"), nil -} - -type ConfigCustomIndexer struct{} - -func (indexer ConfigCustomIndexer) FromArgs(args ...interface{}) ([]byte, error) { - return fromArgs(args...) -} -func (indexer ConfigCustomIndexer) PrefixFromArgs(args ...interface{}) ([]byte, error) { - return prefixFromArgs(args...) -} -func (indexer ConfigCustomIndexer) FromObject(obj interface{}) (bool, [][]byte, error) { - m := obj.(*Config) - return customIndexer("", &m.Spec.Annotations) -} - -type ResourceCheckFunc func(t1, t2 *Resource) bool - -type EventResource interface { - IsEventResource() bool -} - -type EventCreateResource struct { - Resource *Resource - Checks []ResourceCheckFunc -} - -func (e EventCreateResource) Matches(apiEvent github_com_docker_go_events.Event) bool { - typedEvent, ok := apiEvent.(EventCreateResource) - if !ok { - return false - } - - for _, check := range e.Checks { - if !check(e.Resource, typedEvent.Resource) { - return false - } - } - return true -} - -func (e EventCreateResource) IsEventCreate() bool { - return true -} - -func (e EventCreateResource) IsEventResource() bool { - return true -} - -type EventUpdateResource struct { - Resource *Resource - OldResource *Resource - Checks []ResourceCheckFunc -} - -func (e EventUpdateResource) Matches(apiEvent github_com_docker_go_events.Event) bool { - typedEvent, ok := apiEvent.(EventUpdateResource) - if !ok { - return false - } - - for _, check := range e.Checks { - if !check(e.Resource, typedEvent.Resource) { - return false - } - } - return true -} - -func (e EventUpdateResource) IsEventUpdate() bool { - return true -} - -func (e EventUpdateResource) IsEventResource() bool { - return true -} - -type EventDeleteResource struct { - Resource *Resource - Checks []ResourceCheckFunc -} - -func (e EventDeleteResource) Matches(apiEvent github_com_docker_go_events.Event) bool { - typedEvent, ok := apiEvent.(EventDeleteResource) - if !ok { - return false - } - - for _, check := range e.Checks { - if !check(e.Resource, typedEvent.Resource) { - return false - } - } - return true -} - -func (e EventDeleteResource) IsEventDelete() bool { - return true -} - -func (e EventDeleteResource) IsEventResource() bool { - return true -} - -func (m *Resource) CopyStoreObject() StoreObject { - return m.Copy() -} - -func (m *Resource) GetMeta() Meta { - return m.Meta -} - -func (m *Resource) SetMeta(meta Meta) { - m.Meta = meta -} - -func (m *Resource) GetID() string { - return m.ID -} - -func (m *Resource) EventCreate() Event { - return EventCreateResource{Resource: m} -} - -func (m *Resource) EventUpdate(oldObject StoreObject) Event { - if oldObject != nil { - return EventUpdateResource{Resource: m, OldResource: oldObject.(*Resource)} - } else { - return EventUpdateResource{Resource: m} - } -} - -func (m *Resource) EventDelete() Event { - return EventDeleteResource{Resource: m} -} - -func ResourceCheckID(v1, v2 *Resource) bool { - return v1.ID == v2.ID -} - -func ResourceCheckIDPrefix(v1, v2 *Resource) bool { - return strings.HasPrefix(v2.ID, v1.ID) -} - -func ResourceCheckName(v1, v2 *Resource) bool { - return v1.Annotations.Name == v2.Annotations.Name -} - -func ResourceCheckNamePrefix(v1, v2 *Resource) bool { - return strings.HasPrefix(v2.Annotations.Name, v1.Annotations.Name) -} - -func ResourceCheckCustom(v1, v2 *Resource) bool { - return checkCustom(v1.Annotations, v2.Annotations) -} - -func ResourceCheckCustomPrefix(v1, v2 *Resource) bool { - return checkCustomPrefix(v1.Annotations, v2.Annotations) -} - -func ResourceCheckKind(v1, v2 *Resource) bool { - return v1.Kind == v2.Kind -} - -func ConvertResourceWatch(action WatchActionKind, filters []*SelectBy, kind string) ([]Event, error) { - var ( - m Resource - checkFuncs []ResourceCheckFunc - ) - m.Kind = kind - checkFuncs = append(checkFuncs, ResourceCheckKind) - - for _, filter := range filters { - switch v := filter.By.(type) { - case *SelectBy_ID: - if m.ID != "" { - return nil, errConflictingFilters - } - m.ID = v.ID - checkFuncs = append(checkFuncs, ResourceCheckID) - case *SelectBy_IDPrefix: - if m.ID != "" { - return nil, errConflictingFilters - } - m.ID = v.IDPrefix - checkFuncs = append(checkFuncs, ResourceCheckIDPrefix) - case *SelectBy_Name: - if m.Annotations.Name != "" { - return nil, errConflictingFilters - } - m.Annotations.Name = v.Name - checkFuncs = append(checkFuncs, ResourceCheckName) - case *SelectBy_NamePrefix: - if m.Annotations.Name != "" { - return nil, errConflictingFilters - } - m.Annotations.Name = v.NamePrefix - checkFuncs = append(checkFuncs, ResourceCheckNamePrefix) - case *SelectBy_Custom: - if len(m.Annotations.Indices) != 0 { - return nil, errConflictingFilters - } - m.Annotations.Indices = []IndexEntry{{Key: v.Custom.Index, Val: v.Custom.Value}} - checkFuncs = append(checkFuncs, ResourceCheckCustom) - case *SelectBy_CustomPrefix: - if len(m.Annotations.Indices) != 0 { - return nil, errConflictingFilters - } - m.Annotations.Indices = []IndexEntry{{Key: v.CustomPrefix.Index, Val: v.CustomPrefix.Value}} - checkFuncs = append(checkFuncs, ResourceCheckCustomPrefix) - } - } - var events []Event - if (action & WatchActionKindCreate) != 0 { - events = append(events, EventCreateResource{Resource: &m, Checks: checkFuncs}) - } - if (action & WatchActionKindUpdate) != 0 { - events = append(events, EventUpdateResource{Resource: &m, Checks: checkFuncs}) - } - if (action & WatchActionKindRemove) != 0 { - events = append(events, EventDeleteResource{Resource: &m, Checks: checkFuncs}) - } - if len(events) == 0 { - return nil, errUnrecognizedAction - } - return events, nil -} - -type ResourceIndexerByID struct{} - -func (indexer ResourceIndexerByID) FromArgs(args ...interface{}) ([]byte, error) { - return fromArgs(args...) -} -func (indexer ResourceIndexerByID) PrefixFromArgs(args ...interface{}) ([]byte, error) { - return prefixFromArgs(args...) -} -func (indexer ResourceIndexerByID) FromObject(obj interface{}) (bool, []byte, error) { - m := obj.(*Resource) - return true, []byte(m.ID + "\x00"), nil -} - -type ResourceIndexerByName struct{} - -func (indexer ResourceIndexerByName) FromArgs(args ...interface{}) ([]byte, error) { - return fromArgs(args...) -} -func (indexer ResourceIndexerByName) PrefixFromArgs(args ...interface{}) ([]byte, error) { - return prefixFromArgs(args...) -} -func (indexer ResourceIndexerByName) FromObject(obj interface{}) (bool, []byte, error) { - m := obj.(*Resource) - val := m.Annotations.Name - return true, []byte(strings.ToLower(val) + "\x00"), nil -} - -type ResourceCustomIndexer struct{} - -func (indexer ResourceCustomIndexer) FromArgs(args ...interface{}) ([]byte, error) { - return fromArgs(args...) -} -func (indexer ResourceCustomIndexer) PrefixFromArgs(args ...interface{}) ([]byte, error) { - return prefixFromArgs(args...) -} -func (indexer ResourceCustomIndexer) FromObject(obj interface{}) (bool, [][]byte, error) { - m := obj.(*Resource) - return customIndexer("", &m.Annotations) -} - -type ExtensionCheckFunc func(t1, t2 *Extension) bool - -type EventExtension interface { - IsEventExtension() bool -} - -type EventCreateExtension struct { - Extension *Extension - Checks []ExtensionCheckFunc -} - -func (e EventCreateExtension) Matches(apiEvent github_com_docker_go_events.Event) bool { - typedEvent, ok := apiEvent.(EventCreateExtension) - if !ok { - return false - } - - for _, check := range e.Checks { - if !check(e.Extension, typedEvent.Extension) { - return false - } - } - return true -} - -func (e EventCreateExtension) IsEventCreate() bool { - return true -} - -func (e EventCreateExtension) IsEventExtension() bool { - return true -} - -type EventUpdateExtension struct { - Extension *Extension - OldExtension *Extension - Checks []ExtensionCheckFunc -} - -func (e EventUpdateExtension) Matches(apiEvent github_com_docker_go_events.Event) bool { - typedEvent, ok := apiEvent.(EventUpdateExtension) - if !ok { - return false - } - - for _, check := range e.Checks { - if !check(e.Extension, typedEvent.Extension) { - return false - } - } - return true -} - -func (e EventUpdateExtension) IsEventUpdate() bool { - return true -} - -func (e EventUpdateExtension) IsEventExtension() bool { - return true -} - -type EventDeleteExtension struct { - Extension *Extension - Checks []ExtensionCheckFunc -} - -func (e EventDeleteExtension) Matches(apiEvent github_com_docker_go_events.Event) bool { - typedEvent, ok := apiEvent.(EventDeleteExtension) - if !ok { - return false - } - - for _, check := range e.Checks { - if !check(e.Extension, typedEvent.Extension) { - return false - } - } - return true -} - -func (e EventDeleteExtension) IsEventDelete() bool { - return true -} - -func (e EventDeleteExtension) IsEventExtension() bool { - return true -} - -func (m *Extension) CopyStoreObject() StoreObject { - return m.Copy() -} - -func (m *Extension) GetMeta() Meta { - return m.Meta -} - -func (m *Extension) SetMeta(meta Meta) { - m.Meta = meta -} - -func (m *Extension) GetID() string { - return m.ID -} - -func (m *Extension) EventCreate() Event { - return EventCreateExtension{Extension: m} -} - -func (m *Extension) EventUpdate(oldObject StoreObject) Event { - if oldObject != nil { - return EventUpdateExtension{Extension: m, OldExtension: oldObject.(*Extension)} - } else { - return EventUpdateExtension{Extension: m} - } -} - -func (m *Extension) EventDelete() Event { - return EventDeleteExtension{Extension: m} -} - -func ExtensionCheckID(v1, v2 *Extension) bool { - return v1.ID == v2.ID -} - -func ExtensionCheckIDPrefix(v1, v2 *Extension) bool { - return strings.HasPrefix(v2.ID, v1.ID) -} - -func ExtensionCheckName(v1, v2 *Extension) bool { - return v1.Annotations.Name == v2.Annotations.Name -} - -func ExtensionCheckNamePrefix(v1, v2 *Extension) bool { - return strings.HasPrefix(v2.Annotations.Name, v1.Annotations.Name) -} - -func ExtensionCheckCustom(v1, v2 *Extension) bool { - return checkCustom(v1.Annotations, v2.Annotations) -} - -func ExtensionCheckCustomPrefix(v1, v2 *Extension) bool { - return checkCustomPrefix(v1.Annotations, v2.Annotations) -} - -func ConvertExtensionWatch(action WatchActionKind, filters []*SelectBy) ([]Event, error) { - var ( - m Extension - checkFuncs []ExtensionCheckFunc - ) - - for _, filter := range filters { - switch v := filter.By.(type) { - case *SelectBy_ID: - if m.ID != "" { - return nil, errConflictingFilters - } - m.ID = v.ID - checkFuncs = append(checkFuncs, ExtensionCheckID) - case *SelectBy_IDPrefix: - if m.ID != "" { - return nil, errConflictingFilters - } - m.ID = v.IDPrefix - checkFuncs = append(checkFuncs, ExtensionCheckIDPrefix) - case *SelectBy_Name: - if m.Annotations.Name != "" { - return nil, errConflictingFilters - } - m.Annotations.Name = v.Name - checkFuncs = append(checkFuncs, ExtensionCheckName) - case *SelectBy_NamePrefix: - if m.Annotations.Name != "" { - return nil, errConflictingFilters - } - m.Annotations.Name = v.NamePrefix - checkFuncs = append(checkFuncs, ExtensionCheckNamePrefix) - case *SelectBy_Custom: - if len(m.Annotations.Indices) != 0 { - return nil, errConflictingFilters - } - m.Annotations.Indices = []IndexEntry{{Key: v.Custom.Index, Val: v.Custom.Value}} - checkFuncs = append(checkFuncs, ExtensionCheckCustom) - case *SelectBy_CustomPrefix: - if len(m.Annotations.Indices) != 0 { - return nil, errConflictingFilters - } - m.Annotations.Indices = []IndexEntry{{Key: v.CustomPrefix.Index, Val: v.CustomPrefix.Value}} - checkFuncs = append(checkFuncs, ExtensionCheckCustomPrefix) - } - } - var events []Event - if (action & WatchActionKindCreate) != 0 { - events = append(events, EventCreateExtension{Extension: &m, Checks: checkFuncs}) - } - if (action & WatchActionKindUpdate) != 0 { - events = append(events, EventUpdateExtension{Extension: &m, Checks: checkFuncs}) - } - if (action & WatchActionKindRemove) != 0 { - events = append(events, EventDeleteExtension{Extension: &m, Checks: checkFuncs}) - } - if len(events) == 0 { - return nil, errUnrecognizedAction - } - return events, nil -} - -type ExtensionIndexerByID struct{} - -func (indexer ExtensionIndexerByID) FromArgs(args ...interface{}) ([]byte, error) { - return fromArgs(args...) -} -func (indexer ExtensionIndexerByID) PrefixFromArgs(args ...interface{}) ([]byte, error) { - return prefixFromArgs(args...) -} -func (indexer ExtensionIndexerByID) FromObject(obj interface{}) (bool, []byte, error) { - m := obj.(*Extension) - return true, []byte(m.ID + "\x00"), nil -} - -type ExtensionIndexerByName struct{} - -func (indexer ExtensionIndexerByName) FromArgs(args ...interface{}) ([]byte, error) { - return fromArgs(args...) -} -func (indexer ExtensionIndexerByName) PrefixFromArgs(args ...interface{}) ([]byte, error) { - return prefixFromArgs(args...) -} -func (indexer ExtensionIndexerByName) FromObject(obj interface{}) (bool, []byte, error) { - m := obj.(*Extension) - val := m.Annotations.Name - return true, []byte(strings.ToLower(val) + "\x00"), nil -} - -type ExtensionCustomIndexer struct{} - -func (indexer ExtensionCustomIndexer) FromArgs(args ...interface{}) ([]byte, error) { - return fromArgs(args...) -} -func (indexer ExtensionCustomIndexer) PrefixFromArgs(args ...interface{}) ([]byte, error) { - return prefixFromArgs(args...) -} -func (indexer ExtensionCustomIndexer) FromObject(obj interface{}) (bool, [][]byte, error) { - m := obj.(*Extension) - return customIndexer("", &m.Annotations) -} - -type VolumeCheckFunc func(t1, t2 *Volume) bool - -type EventVolume interface { - IsEventVolume() bool -} - -type EventCreateVolume struct { - Volume *Volume - Checks []VolumeCheckFunc -} - -func (e EventCreateVolume) Matches(apiEvent github_com_docker_go_events.Event) bool { - typedEvent, ok := apiEvent.(EventCreateVolume) - if !ok { - return false - } - - for _, check := range e.Checks { - if !check(e.Volume, typedEvent.Volume) { - return false - } - } - return true -} - -func (e EventCreateVolume) IsEventCreate() bool { - return true -} - -func (e EventCreateVolume) IsEventVolume() bool { - return true -} - -type EventUpdateVolume struct { - Volume *Volume - OldVolume *Volume - Checks []VolumeCheckFunc -} - -func (e EventUpdateVolume) Matches(apiEvent github_com_docker_go_events.Event) bool { - typedEvent, ok := apiEvent.(EventUpdateVolume) - if !ok { - return false - } - - for _, check := range e.Checks { - if !check(e.Volume, typedEvent.Volume) { - return false - } - } - return true -} - -func (e EventUpdateVolume) IsEventUpdate() bool { - return true -} - -func (e EventUpdateVolume) IsEventVolume() bool { - return true -} - -type EventDeleteVolume struct { - Volume *Volume - Checks []VolumeCheckFunc -} - -func (e EventDeleteVolume) Matches(apiEvent github_com_docker_go_events.Event) bool { - typedEvent, ok := apiEvent.(EventDeleteVolume) - if !ok { - return false - } - - for _, check := range e.Checks { - if !check(e.Volume, typedEvent.Volume) { - return false - } - } - return true -} - -func (e EventDeleteVolume) IsEventDelete() bool { - return true -} - -func (e EventDeleteVolume) IsEventVolume() bool { - return true -} - -func (m *Volume) CopyStoreObject() StoreObject { - return m.Copy() -} - -func (m *Volume) GetMeta() Meta { - return m.Meta -} - -func (m *Volume) SetMeta(meta Meta) { - m.Meta = meta -} - -func (m *Volume) GetID() string { - return m.ID -} - -func (m *Volume) EventCreate() Event { - return EventCreateVolume{Volume: m} -} - -func (m *Volume) EventUpdate(oldObject StoreObject) Event { - if oldObject != nil { - return EventUpdateVolume{Volume: m, OldVolume: oldObject.(*Volume)} - } else { - return EventUpdateVolume{Volume: m} - } -} - -func (m *Volume) EventDelete() Event { - return EventDeleteVolume{Volume: m} -} - -func VolumeCheckID(v1, v2 *Volume) bool { - return v1.ID == v2.ID -} - -func VolumeCheckIDPrefix(v1, v2 *Volume) bool { - return strings.HasPrefix(v2.ID, v1.ID) -} - -func VolumeCheckName(v1, v2 *Volume) bool { - return v1.Spec.Annotations.Name == v2.Spec.Annotations.Name -} - -func VolumeCheckNamePrefix(v1, v2 *Volume) bool { - return strings.HasPrefix(v2.Spec.Annotations.Name, v1.Spec.Annotations.Name) -} - -func VolumeCheckCustom(v1, v2 *Volume) bool { - return checkCustom(v1.Spec.Annotations, v2.Spec.Annotations) -} - -func VolumeCheckCustomPrefix(v1, v2 *Volume) bool { - return checkCustomPrefix(v1.Spec.Annotations, v2.Spec.Annotations) -} - -func ConvertVolumeWatch(action WatchActionKind, filters []*SelectBy) ([]Event, error) { - var ( - m Volume - checkFuncs []VolumeCheckFunc - ) - - for _, filter := range filters { - switch v := filter.By.(type) { - case *SelectBy_ID: - if m.ID != "" { - return nil, errConflictingFilters - } - m.ID = v.ID - checkFuncs = append(checkFuncs, VolumeCheckID) - case *SelectBy_IDPrefix: - if m.ID != "" { - return nil, errConflictingFilters - } - m.ID = v.IDPrefix - checkFuncs = append(checkFuncs, VolumeCheckIDPrefix) - case *SelectBy_Name: - if m.Spec.Annotations.Name != "" { - return nil, errConflictingFilters - } - m.Spec.Annotations.Name = v.Name - checkFuncs = append(checkFuncs, VolumeCheckName) - case *SelectBy_NamePrefix: - if m.Spec.Annotations.Name != "" { - return nil, errConflictingFilters - } - m.Spec.Annotations.Name = v.NamePrefix - checkFuncs = append(checkFuncs, VolumeCheckNamePrefix) - case *SelectBy_Custom: - if len(m.Spec.Annotations.Indices) != 0 { - return nil, errConflictingFilters - } - m.Spec.Annotations.Indices = []IndexEntry{{Key: v.Custom.Index, Val: v.Custom.Value}} - checkFuncs = append(checkFuncs, VolumeCheckCustom) - case *SelectBy_CustomPrefix: - if len(m.Spec.Annotations.Indices) != 0 { - return nil, errConflictingFilters - } - m.Spec.Annotations.Indices = []IndexEntry{{Key: v.CustomPrefix.Index, Val: v.CustomPrefix.Value}} - checkFuncs = append(checkFuncs, VolumeCheckCustomPrefix) - } - } - var events []Event - if (action & WatchActionKindCreate) != 0 { - events = append(events, EventCreateVolume{Volume: &m, Checks: checkFuncs}) - } - if (action & WatchActionKindUpdate) != 0 { - events = append(events, EventUpdateVolume{Volume: &m, Checks: checkFuncs}) - } - if (action & WatchActionKindRemove) != 0 { - events = append(events, EventDeleteVolume{Volume: &m, Checks: checkFuncs}) - } - if len(events) == 0 { - return nil, errUnrecognizedAction - } - return events, nil -} - -type VolumeIndexerByID struct{} - -func (indexer VolumeIndexerByID) FromArgs(args ...interface{}) ([]byte, error) { - return fromArgs(args...) -} -func (indexer VolumeIndexerByID) PrefixFromArgs(args ...interface{}) ([]byte, error) { - return prefixFromArgs(args...) -} -func (indexer VolumeIndexerByID) FromObject(obj interface{}) (bool, []byte, error) { - m := obj.(*Volume) - return true, []byte(m.ID + "\x00"), nil -} - -type VolumeIndexerByName struct{} - -func (indexer VolumeIndexerByName) FromArgs(args ...interface{}) ([]byte, error) { - return fromArgs(args...) -} -func (indexer VolumeIndexerByName) PrefixFromArgs(args ...interface{}) ([]byte, error) { - return prefixFromArgs(args...) -} -func (indexer VolumeIndexerByName) FromObject(obj interface{}) (bool, []byte, error) { - m := obj.(*Volume) - val := m.Spec.Annotations.Name - return true, []byte(strings.ToLower(val) + "\x00"), nil -} - -type VolumeCustomIndexer struct{} - -func (indexer VolumeCustomIndexer) FromArgs(args ...interface{}) ([]byte, error) { - return fromArgs(args...) -} -func (indexer VolumeCustomIndexer) PrefixFromArgs(args ...interface{}) ([]byte, error) { - return prefixFromArgs(args...) -} -func (indexer VolumeCustomIndexer) FromObject(obj interface{}) (bool, [][]byte, error) { - m := obj.(*Volume) - return customIndexer("", &m.Spec.Annotations) -} -func NewStoreAction(c Event) (StoreAction, error) { - var sa StoreAction - switch v := c.(type) { - case EventCreateNode: - sa.Action = StoreActionKindCreate - sa.Target = &StoreAction_Node{Node: v.Node} - case EventUpdateNode: - sa.Action = StoreActionKindUpdate - sa.Target = &StoreAction_Node{Node: v.Node} - case EventDeleteNode: - sa.Action = StoreActionKindRemove - sa.Target = &StoreAction_Node{Node: v.Node} - case EventCreateService: - sa.Action = StoreActionKindCreate - sa.Target = &StoreAction_Service{Service: v.Service} - case EventUpdateService: - sa.Action = StoreActionKindUpdate - sa.Target = &StoreAction_Service{Service: v.Service} - case EventDeleteService: - sa.Action = StoreActionKindRemove - sa.Target = &StoreAction_Service{Service: v.Service} - case EventCreateTask: - sa.Action = StoreActionKindCreate - sa.Target = &StoreAction_Task{Task: v.Task} - case EventUpdateTask: - sa.Action = StoreActionKindUpdate - sa.Target = &StoreAction_Task{Task: v.Task} - case EventDeleteTask: - sa.Action = StoreActionKindRemove - sa.Target = &StoreAction_Task{Task: v.Task} - case EventCreateNetwork: - sa.Action = StoreActionKindCreate - sa.Target = &StoreAction_Network{Network: v.Network} - case EventUpdateNetwork: - sa.Action = StoreActionKindUpdate - sa.Target = &StoreAction_Network{Network: v.Network} - case EventDeleteNetwork: - sa.Action = StoreActionKindRemove - sa.Target = &StoreAction_Network{Network: v.Network} - case EventCreateCluster: - sa.Action = StoreActionKindCreate - sa.Target = &StoreAction_Cluster{Cluster: v.Cluster} - case EventUpdateCluster: - sa.Action = StoreActionKindUpdate - sa.Target = &StoreAction_Cluster{Cluster: v.Cluster} - case EventDeleteCluster: - sa.Action = StoreActionKindRemove - sa.Target = &StoreAction_Cluster{Cluster: v.Cluster} - case EventCreateSecret: - sa.Action = StoreActionKindCreate - sa.Target = &StoreAction_Secret{Secret: v.Secret} - case EventUpdateSecret: - sa.Action = StoreActionKindUpdate - sa.Target = &StoreAction_Secret{Secret: v.Secret} - case EventDeleteSecret: - sa.Action = StoreActionKindRemove - sa.Target = &StoreAction_Secret{Secret: v.Secret} - case EventCreateConfig: - sa.Action = StoreActionKindCreate - sa.Target = &StoreAction_Config{Config: v.Config} - case EventUpdateConfig: - sa.Action = StoreActionKindUpdate - sa.Target = &StoreAction_Config{Config: v.Config} - case EventDeleteConfig: - sa.Action = StoreActionKindRemove - sa.Target = &StoreAction_Config{Config: v.Config} - case EventCreateResource: - sa.Action = StoreActionKindCreate - sa.Target = &StoreAction_Resource{Resource: v.Resource} - case EventUpdateResource: - sa.Action = StoreActionKindUpdate - sa.Target = &StoreAction_Resource{Resource: v.Resource} - case EventDeleteResource: - sa.Action = StoreActionKindRemove - sa.Target = &StoreAction_Resource{Resource: v.Resource} - case EventCreateExtension: - sa.Action = StoreActionKindCreate - sa.Target = &StoreAction_Extension{Extension: v.Extension} - case EventUpdateExtension: - sa.Action = StoreActionKindUpdate - sa.Target = &StoreAction_Extension{Extension: v.Extension} - case EventDeleteExtension: - sa.Action = StoreActionKindRemove - sa.Target = &StoreAction_Extension{Extension: v.Extension} - case EventCreateVolume: - sa.Action = StoreActionKindCreate - sa.Target = &StoreAction_Volume{Volume: v.Volume} - case EventUpdateVolume: - sa.Action = StoreActionKindUpdate - sa.Target = &StoreAction_Volume{Volume: v.Volume} - case EventDeleteVolume: - sa.Action = StoreActionKindRemove - sa.Target = &StoreAction_Volume{Volume: v.Volume} - default: - return StoreAction{}, errUnknownStoreAction - } - return sa, nil -} - -func EventFromStoreAction(sa StoreAction, oldObject StoreObject) (Event, error) { - switch v := sa.Target.(type) { - case *StoreAction_Node: - switch sa.Action { - case StoreActionKindCreate: - return EventCreateNode{Node: v.Node}, nil - case StoreActionKindUpdate: - if oldObject != nil { - return EventUpdateNode{Node: v.Node, OldNode: oldObject.(*Node)}, nil - } else { - return EventUpdateNode{Node: v.Node}, nil - } - case StoreActionKindRemove: - return EventDeleteNode{Node: v.Node}, nil - } - case *StoreAction_Service: - switch sa.Action { - case StoreActionKindCreate: - return EventCreateService{Service: v.Service}, nil - case StoreActionKindUpdate: - if oldObject != nil { - return EventUpdateService{Service: v.Service, OldService: oldObject.(*Service)}, nil - } else { - return EventUpdateService{Service: v.Service}, nil - } - case StoreActionKindRemove: - return EventDeleteService{Service: v.Service}, nil - } - case *StoreAction_Task: - switch sa.Action { - case StoreActionKindCreate: - return EventCreateTask{Task: v.Task}, nil - case StoreActionKindUpdate: - if oldObject != nil { - return EventUpdateTask{Task: v.Task, OldTask: oldObject.(*Task)}, nil - } else { - return EventUpdateTask{Task: v.Task}, nil - } - case StoreActionKindRemove: - return EventDeleteTask{Task: v.Task}, nil - } - case *StoreAction_Network: - switch sa.Action { - case StoreActionKindCreate: - return EventCreateNetwork{Network: v.Network}, nil - case StoreActionKindUpdate: - if oldObject != nil { - return EventUpdateNetwork{Network: v.Network, OldNetwork: oldObject.(*Network)}, nil - } else { - return EventUpdateNetwork{Network: v.Network}, nil - } - case StoreActionKindRemove: - return EventDeleteNetwork{Network: v.Network}, nil - } - case *StoreAction_Cluster: - switch sa.Action { - case StoreActionKindCreate: - return EventCreateCluster{Cluster: v.Cluster}, nil - case StoreActionKindUpdate: - if oldObject != nil { - return EventUpdateCluster{Cluster: v.Cluster, OldCluster: oldObject.(*Cluster)}, nil - } else { - return EventUpdateCluster{Cluster: v.Cluster}, nil - } - case StoreActionKindRemove: - return EventDeleteCluster{Cluster: v.Cluster}, nil - } - case *StoreAction_Secret: - switch sa.Action { - case StoreActionKindCreate: - return EventCreateSecret{Secret: v.Secret}, nil - case StoreActionKindUpdate: - if oldObject != nil { - return EventUpdateSecret{Secret: v.Secret, OldSecret: oldObject.(*Secret)}, nil - } else { - return EventUpdateSecret{Secret: v.Secret}, nil - } - case StoreActionKindRemove: - return EventDeleteSecret{Secret: v.Secret}, nil - } - case *StoreAction_Config: - switch sa.Action { - case StoreActionKindCreate: - return EventCreateConfig{Config: v.Config}, nil - case StoreActionKindUpdate: - if oldObject != nil { - return EventUpdateConfig{Config: v.Config, OldConfig: oldObject.(*Config)}, nil - } else { - return EventUpdateConfig{Config: v.Config}, nil - } - case StoreActionKindRemove: - return EventDeleteConfig{Config: v.Config}, nil - } - case *StoreAction_Resource: - switch sa.Action { - case StoreActionKindCreate: - return EventCreateResource{Resource: v.Resource}, nil - case StoreActionKindUpdate: - if oldObject != nil { - return EventUpdateResource{Resource: v.Resource, OldResource: oldObject.(*Resource)}, nil - } else { - return EventUpdateResource{Resource: v.Resource}, nil - } - case StoreActionKindRemove: - return EventDeleteResource{Resource: v.Resource}, nil - } - case *StoreAction_Extension: - switch sa.Action { - case StoreActionKindCreate: - return EventCreateExtension{Extension: v.Extension}, nil - case StoreActionKindUpdate: - if oldObject != nil { - return EventUpdateExtension{Extension: v.Extension, OldExtension: oldObject.(*Extension)}, nil - } else { - return EventUpdateExtension{Extension: v.Extension}, nil - } - case StoreActionKindRemove: - return EventDeleteExtension{Extension: v.Extension}, nil - } - case *StoreAction_Volume: - switch sa.Action { - case StoreActionKindCreate: - return EventCreateVolume{Volume: v.Volume}, nil - case StoreActionKindUpdate: - if oldObject != nil { - return EventUpdateVolume{Volume: v.Volume, OldVolume: oldObject.(*Volume)}, nil - } else { - return EventUpdateVolume{Volume: v.Volume}, nil - } - case StoreActionKindRemove: - return EventDeleteVolume{Volume: v.Volume}, nil - } - } - return nil, errUnknownStoreAction -} - -func WatchMessageEvent(c Event) *WatchMessage_Event { - switch v := c.(type) { - case EventCreateNode: - return &WatchMessage_Event{Action: WatchActionKindCreate, Object: &Object{Object: &Object_Node{Node: v.Node}}} - case EventUpdateNode: - if v.OldNode != nil { - return &WatchMessage_Event{Action: WatchActionKindUpdate, Object: &Object{Object: &Object_Node{Node: v.Node}}, OldObject: &Object{Object: &Object_Node{Node: v.OldNode}}} - } else { - return &WatchMessage_Event{Action: WatchActionKindUpdate, Object: &Object{Object: &Object_Node{Node: v.Node}}} - } - case EventDeleteNode: - return &WatchMessage_Event{Action: WatchActionKindRemove, Object: &Object{Object: &Object_Node{Node: v.Node}}} - case EventCreateService: - return &WatchMessage_Event{Action: WatchActionKindCreate, Object: &Object{Object: &Object_Service{Service: v.Service}}} - case EventUpdateService: - if v.OldService != nil { - return &WatchMessage_Event{Action: WatchActionKindUpdate, Object: &Object{Object: &Object_Service{Service: v.Service}}, OldObject: &Object{Object: &Object_Service{Service: v.OldService}}} - } else { - return &WatchMessage_Event{Action: WatchActionKindUpdate, Object: &Object{Object: &Object_Service{Service: v.Service}}} - } - case EventDeleteService: - return &WatchMessage_Event{Action: WatchActionKindRemove, Object: &Object{Object: &Object_Service{Service: v.Service}}} - case EventCreateTask: - return &WatchMessage_Event{Action: WatchActionKindCreate, Object: &Object{Object: &Object_Task{Task: v.Task}}} - case EventUpdateTask: - if v.OldTask != nil { - return &WatchMessage_Event{Action: WatchActionKindUpdate, Object: &Object{Object: &Object_Task{Task: v.Task}}, OldObject: &Object{Object: &Object_Task{Task: v.OldTask}}} - } else { - return &WatchMessage_Event{Action: WatchActionKindUpdate, Object: &Object{Object: &Object_Task{Task: v.Task}}} - } - case EventDeleteTask: - return &WatchMessage_Event{Action: WatchActionKindRemove, Object: &Object{Object: &Object_Task{Task: v.Task}}} - case EventCreateNetwork: - return &WatchMessage_Event{Action: WatchActionKindCreate, Object: &Object{Object: &Object_Network{Network: v.Network}}} - case EventUpdateNetwork: - if v.OldNetwork != nil { - return &WatchMessage_Event{Action: WatchActionKindUpdate, Object: &Object{Object: &Object_Network{Network: v.Network}}, OldObject: &Object{Object: &Object_Network{Network: v.OldNetwork}}} - } else { - return &WatchMessage_Event{Action: WatchActionKindUpdate, Object: &Object{Object: &Object_Network{Network: v.Network}}} - } - case EventDeleteNetwork: - return &WatchMessage_Event{Action: WatchActionKindRemove, Object: &Object{Object: &Object_Network{Network: v.Network}}} - case EventCreateCluster: - return &WatchMessage_Event{Action: WatchActionKindCreate, Object: &Object{Object: &Object_Cluster{Cluster: v.Cluster}}} - case EventUpdateCluster: - if v.OldCluster != nil { - return &WatchMessage_Event{Action: WatchActionKindUpdate, Object: &Object{Object: &Object_Cluster{Cluster: v.Cluster}}, OldObject: &Object{Object: &Object_Cluster{Cluster: v.OldCluster}}} - } else { - return &WatchMessage_Event{Action: WatchActionKindUpdate, Object: &Object{Object: &Object_Cluster{Cluster: v.Cluster}}} - } - case EventDeleteCluster: - return &WatchMessage_Event{Action: WatchActionKindRemove, Object: &Object{Object: &Object_Cluster{Cluster: v.Cluster}}} - case EventCreateSecret: - return &WatchMessage_Event{Action: WatchActionKindCreate, Object: &Object{Object: &Object_Secret{Secret: v.Secret}}} - case EventUpdateSecret: - if v.OldSecret != nil { - return &WatchMessage_Event{Action: WatchActionKindUpdate, Object: &Object{Object: &Object_Secret{Secret: v.Secret}}, OldObject: &Object{Object: &Object_Secret{Secret: v.OldSecret}}} - } else { - return &WatchMessage_Event{Action: WatchActionKindUpdate, Object: &Object{Object: &Object_Secret{Secret: v.Secret}}} - } - case EventDeleteSecret: - return &WatchMessage_Event{Action: WatchActionKindRemove, Object: &Object{Object: &Object_Secret{Secret: v.Secret}}} - case EventCreateConfig: - return &WatchMessage_Event{Action: WatchActionKindCreate, Object: &Object{Object: &Object_Config{Config: v.Config}}} - case EventUpdateConfig: - if v.OldConfig != nil { - return &WatchMessage_Event{Action: WatchActionKindUpdate, Object: &Object{Object: &Object_Config{Config: v.Config}}, OldObject: &Object{Object: &Object_Config{Config: v.OldConfig}}} - } else { - return &WatchMessage_Event{Action: WatchActionKindUpdate, Object: &Object{Object: &Object_Config{Config: v.Config}}} - } - case EventDeleteConfig: - return &WatchMessage_Event{Action: WatchActionKindRemove, Object: &Object{Object: &Object_Config{Config: v.Config}}} - case EventCreateResource: - return &WatchMessage_Event{Action: WatchActionKindCreate, Object: &Object{Object: &Object_Resource{Resource: v.Resource}}} - case EventUpdateResource: - if v.OldResource != nil { - return &WatchMessage_Event{Action: WatchActionKindUpdate, Object: &Object{Object: &Object_Resource{Resource: v.Resource}}, OldObject: &Object{Object: &Object_Resource{Resource: v.OldResource}}} - } else { - return &WatchMessage_Event{Action: WatchActionKindUpdate, Object: &Object{Object: &Object_Resource{Resource: v.Resource}}} - } - case EventDeleteResource: - return &WatchMessage_Event{Action: WatchActionKindRemove, Object: &Object{Object: &Object_Resource{Resource: v.Resource}}} - case EventCreateExtension: - return &WatchMessage_Event{Action: WatchActionKindCreate, Object: &Object{Object: &Object_Extension{Extension: v.Extension}}} - case EventUpdateExtension: - if v.OldExtension != nil { - return &WatchMessage_Event{Action: WatchActionKindUpdate, Object: &Object{Object: &Object_Extension{Extension: v.Extension}}, OldObject: &Object{Object: &Object_Extension{Extension: v.OldExtension}}} - } else { - return &WatchMessage_Event{Action: WatchActionKindUpdate, Object: &Object{Object: &Object_Extension{Extension: v.Extension}}} - } - case EventDeleteExtension: - return &WatchMessage_Event{Action: WatchActionKindRemove, Object: &Object{Object: &Object_Extension{Extension: v.Extension}}} - case EventCreateVolume: - return &WatchMessage_Event{Action: WatchActionKindCreate, Object: &Object{Object: &Object_Volume{Volume: v.Volume}}} - case EventUpdateVolume: - if v.OldVolume != nil { - return &WatchMessage_Event{Action: WatchActionKindUpdate, Object: &Object{Object: &Object_Volume{Volume: v.Volume}}, OldObject: &Object{Object: &Object_Volume{Volume: v.OldVolume}}} - } else { - return &WatchMessage_Event{Action: WatchActionKindUpdate, Object: &Object{Object: &Object_Volume{Volume: v.Volume}}} - } - case EventDeleteVolume: - return &WatchMessage_Event{Action: WatchActionKindRemove, Object: &Object{Object: &Object_Volume{Volume: v.Volume}}} - } - return nil -} - -func ConvertWatchArgs(entries []*WatchRequest_WatchEntry) ([]Event, error) { - var events []Event - for _, entry := range entries { - var newEvents []Event - var err error - switch entry.Kind { - case "": - return nil, errNoKindSpecified - case "node": - newEvents, err = ConvertNodeWatch(entry.Action, entry.Filters) - case "service": - newEvents, err = ConvertServiceWatch(entry.Action, entry.Filters) - case "task": - newEvents, err = ConvertTaskWatch(entry.Action, entry.Filters) - case "network": - newEvents, err = ConvertNetworkWatch(entry.Action, entry.Filters) - case "cluster": - newEvents, err = ConvertClusterWatch(entry.Action, entry.Filters) - case "secret": - newEvents, err = ConvertSecretWatch(entry.Action, entry.Filters) - case "config": - newEvents, err = ConvertConfigWatch(entry.Action, entry.Filters) - default: - newEvents, err = ConvertResourceWatch(entry.Action, entry.Filters, entry.Kind) - case "extension": - newEvents, err = ConvertExtensionWatch(entry.Action, entry.Filters) - case "volume": - newEvents, err = ConvertVolumeWatch(entry.Action, entry.Filters) - } - if err != nil { - return nil, err - } - events = append(events, newEvents...) - } - return events, nil -} - -func (this *Meta) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&Meta{`, - `Version:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Version), "Version", "Version", 1), `&`, ``, 1) + `,`, - `CreatedAt:` + strings.Replace(fmt.Sprintf("%v", this.CreatedAt), "Timestamp", "types.Timestamp", 1) + `,`, - `UpdatedAt:` + strings.Replace(fmt.Sprintf("%v", this.UpdatedAt), "Timestamp", "types.Timestamp", 1) + `,`, - `}`, - }, "") - return s -} -func (this *Node) String() string { - if this == nil { - return "nil" - } - repeatedStringForAttachments := "[]*NetworkAttachment{" - for _, f := range this.Attachments { - repeatedStringForAttachments += strings.Replace(f.String(), "NetworkAttachment", "NetworkAttachment", 1) + "," - } - repeatedStringForAttachments += "}" - s := strings.Join([]string{`&Node{`, - `ID:` + fmt.Sprintf("%v", this.ID) + `,`, - `Meta:` + strings.Replace(strings.Replace(this.Meta.String(), "Meta", "Meta", 1), `&`, ``, 1) + `,`, - `Spec:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Spec), "NodeSpec", "NodeSpec", 1), `&`, ``, 1) + `,`, - `Description:` + strings.Replace(fmt.Sprintf("%v", this.Description), "NodeDescription", "NodeDescription", 1) + `,`, - `Status:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Status), "NodeStatus", "NodeStatus", 1), `&`, ``, 1) + `,`, - `ManagerStatus:` + strings.Replace(fmt.Sprintf("%v", this.ManagerStatus), "ManagerStatus", "ManagerStatus", 1) + `,`, - `Attachment:` + strings.Replace(this.Attachment.String(), "NetworkAttachment", "NetworkAttachment", 1) + `,`, - `Certificate:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Certificate), "Certificate", "Certificate", 1), `&`, ``, 1) + `,`, - `Role:` + fmt.Sprintf("%v", this.Role) + `,`, - `Attachments:` + repeatedStringForAttachments + `,`, - `VXLANUDPPort:` + fmt.Sprintf("%v", this.VXLANUDPPort) + `,`, - `}`, - }, "") - return s -} -func (this *Service) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&Service{`, - `ID:` + fmt.Sprintf("%v", this.ID) + `,`, - `Meta:` + strings.Replace(strings.Replace(this.Meta.String(), "Meta", "Meta", 1), `&`, ``, 1) + `,`, - `Spec:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Spec), "ServiceSpec", "ServiceSpec", 1), `&`, ``, 1) + `,`, - `Endpoint:` + strings.Replace(this.Endpoint.String(), "Endpoint", "Endpoint", 1) + `,`, - `UpdateStatus:` + strings.Replace(fmt.Sprintf("%v", this.UpdateStatus), "UpdateStatus", "UpdateStatus", 1) + `,`, - `PreviousSpec:` + strings.Replace(fmt.Sprintf("%v", this.PreviousSpec), "ServiceSpec", "ServiceSpec", 1) + `,`, - `PendingDelete:` + fmt.Sprintf("%v", this.PendingDelete) + `,`, - `SpecVersion:` + strings.Replace(fmt.Sprintf("%v", this.SpecVersion), "Version", "Version", 1) + `,`, - `PreviousSpecVersion:` + strings.Replace(fmt.Sprintf("%v", this.PreviousSpecVersion), "Version", "Version", 1) + `,`, - `JobStatus:` + strings.Replace(fmt.Sprintf("%v", this.JobStatus), "JobStatus", "JobStatus", 1) + `,`, - `}`, - }, "") - return s -} -func (this *Endpoint) String() string { - if this == nil { - return "nil" - } - repeatedStringForPorts := "[]*PortConfig{" - for _, f := range this.Ports { - repeatedStringForPorts += strings.Replace(fmt.Sprintf("%v", f), "PortConfig", "PortConfig", 1) + "," - } - repeatedStringForPorts += "}" - repeatedStringForVirtualIPs := "[]*Endpoint_VirtualIP{" - for _, f := range this.VirtualIPs { - repeatedStringForVirtualIPs += strings.Replace(fmt.Sprintf("%v", f), "Endpoint_VirtualIP", "Endpoint_VirtualIP", 1) + "," - } - repeatedStringForVirtualIPs += "}" - s := strings.Join([]string{`&Endpoint{`, - `Spec:` + strings.Replace(fmt.Sprintf("%v", this.Spec), "EndpointSpec", "EndpointSpec", 1) + `,`, - `Ports:` + repeatedStringForPorts + `,`, - `VirtualIPs:` + repeatedStringForVirtualIPs + `,`, - `}`, - }, "") - return s -} -func (this *Endpoint_VirtualIP) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&Endpoint_VirtualIP{`, - `NetworkID:` + fmt.Sprintf("%v", this.NetworkID) + `,`, - `Addr:` + fmt.Sprintf("%v", this.Addr) + `,`, - `}`, - }, "") - return s -} -func (this *Task) String() string { - if this == nil { - return "nil" - } - repeatedStringForNetworks := "[]*NetworkAttachment{" - for _, f := range this.Networks { - repeatedStringForNetworks += strings.Replace(f.String(), "NetworkAttachment", "NetworkAttachment", 1) + "," - } - repeatedStringForNetworks += "}" - repeatedStringForAssignedGenericResources := "[]*GenericResource{" - for _, f := range this.AssignedGenericResources { - repeatedStringForAssignedGenericResources += strings.Replace(fmt.Sprintf("%v", f), "GenericResource", "GenericResource", 1) + "," - } - repeatedStringForAssignedGenericResources += "}" - repeatedStringForVolumes := "[]*VolumeAttachment{" - for _, f := range this.Volumes { - repeatedStringForVolumes += strings.Replace(fmt.Sprintf("%v", f), "VolumeAttachment", "VolumeAttachment", 1) + "," - } - repeatedStringForVolumes += "}" - s := strings.Join([]string{`&Task{`, - `ID:` + fmt.Sprintf("%v", this.ID) + `,`, - `Meta:` + strings.Replace(strings.Replace(this.Meta.String(), "Meta", "Meta", 1), `&`, ``, 1) + `,`, - `Spec:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Spec), "TaskSpec", "TaskSpec", 1), `&`, ``, 1) + `,`, - `ServiceID:` + fmt.Sprintf("%v", this.ServiceID) + `,`, - `Slot:` + fmt.Sprintf("%v", this.Slot) + `,`, - `NodeID:` + fmt.Sprintf("%v", this.NodeID) + `,`, - `Annotations:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Annotations), "Annotations", "Annotations", 1), `&`, ``, 1) + `,`, - `ServiceAnnotations:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ServiceAnnotations), "Annotations", "Annotations", 1), `&`, ``, 1) + `,`, - `Status:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Status), "TaskStatus", "TaskStatus", 1), `&`, ``, 1) + `,`, - `DesiredState:` + fmt.Sprintf("%v", this.DesiredState) + `,`, - `Networks:` + repeatedStringForNetworks + `,`, - `Endpoint:` + strings.Replace(this.Endpoint.String(), "Endpoint", "Endpoint", 1) + `,`, - `LogDriver:` + strings.Replace(fmt.Sprintf("%v", this.LogDriver), "Driver", "Driver", 1) + `,`, - `SpecVersion:` + strings.Replace(fmt.Sprintf("%v", this.SpecVersion), "Version", "Version", 1) + `,`, - `AssignedGenericResources:` + repeatedStringForAssignedGenericResources + `,`, - `JobIteration:` + strings.Replace(fmt.Sprintf("%v", this.JobIteration), "Version", "Version", 1) + `,`, - `Volumes:` + repeatedStringForVolumes + `,`, - `}`, - }, "") - return s -} -func (this *NetworkAttachment) String() string { - if this == nil { - return "nil" - } - keysForDriverAttachmentOpts := make([]string, 0, len(this.DriverAttachmentOpts)) - for k, _ := range this.DriverAttachmentOpts { - keysForDriverAttachmentOpts = append(keysForDriverAttachmentOpts, k) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForDriverAttachmentOpts) - mapStringForDriverAttachmentOpts := "map[string]string{" - for _, k := range keysForDriverAttachmentOpts { - mapStringForDriverAttachmentOpts += fmt.Sprintf("%v: %v,", k, this.DriverAttachmentOpts[k]) - } - mapStringForDriverAttachmentOpts += "}" - s := strings.Join([]string{`&NetworkAttachment{`, - `Network:` + strings.Replace(this.Network.String(), "Network", "Network", 1) + `,`, - `Addresses:` + fmt.Sprintf("%v", this.Addresses) + `,`, - `Aliases:` + fmt.Sprintf("%v", this.Aliases) + `,`, - `DriverAttachmentOpts:` + mapStringForDriverAttachmentOpts + `,`, - `}`, - }, "") - return s -} -func (this *Network) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&Network{`, - `ID:` + fmt.Sprintf("%v", this.ID) + `,`, - `Meta:` + strings.Replace(strings.Replace(this.Meta.String(), "Meta", "Meta", 1), `&`, ``, 1) + `,`, - `Spec:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Spec), "NetworkSpec", "NetworkSpec", 1), `&`, ``, 1) + `,`, - `DriverState:` + strings.Replace(fmt.Sprintf("%v", this.DriverState), "Driver", "Driver", 1) + `,`, - `IPAM:` + strings.Replace(fmt.Sprintf("%v", this.IPAM), "IPAMOptions", "IPAMOptions", 1) + `,`, - `PendingDelete:` + fmt.Sprintf("%v", this.PendingDelete) + `,`, - `Extra:` + strings.Replace(fmt.Sprintf("%v", this.Extra), "Any", "types.Any", 1) + `,`, - `}`, - }, "") - return s -} -func (this *Cluster) String() string { - if this == nil { - return "nil" - } - repeatedStringForNetworkBootstrapKeys := "[]*EncryptionKey{" - for _, f := range this.NetworkBootstrapKeys { - repeatedStringForNetworkBootstrapKeys += strings.Replace(fmt.Sprintf("%v", f), "EncryptionKey", "EncryptionKey", 1) + "," - } - repeatedStringForNetworkBootstrapKeys += "}" - repeatedStringForUnlockKeys := "[]*EncryptionKey{" - for _, f := range this.UnlockKeys { - repeatedStringForUnlockKeys += strings.Replace(fmt.Sprintf("%v", f), "EncryptionKey", "EncryptionKey", 1) + "," - } - repeatedStringForUnlockKeys += "}" - keysForBlacklistedCertificates := make([]string, 0, len(this.BlacklistedCertificates)) - for k, _ := range this.BlacklistedCertificates { - keysForBlacklistedCertificates = append(keysForBlacklistedCertificates, k) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForBlacklistedCertificates) - mapStringForBlacklistedCertificates := "map[string]*BlacklistedCertificate{" - for _, k := range keysForBlacklistedCertificates { - mapStringForBlacklistedCertificates += fmt.Sprintf("%v: %v,", k, this.BlacklistedCertificates[k]) - } - mapStringForBlacklistedCertificates += "}" - s := strings.Join([]string{`&Cluster{`, - `ID:` + fmt.Sprintf("%v", this.ID) + `,`, - `Meta:` + strings.Replace(strings.Replace(this.Meta.String(), "Meta", "Meta", 1), `&`, ``, 1) + `,`, - `Spec:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Spec), "ClusterSpec", "ClusterSpec", 1), `&`, ``, 1) + `,`, - `RootCA:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.RootCA), "RootCA", "RootCA", 1), `&`, ``, 1) + `,`, - `NetworkBootstrapKeys:` + repeatedStringForNetworkBootstrapKeys + `,`, - `EncryptionKeyLamportClock:` + fmt.Sprintf("%v", this.EncryptionKeyLamportClock) + `,`, - `BlacklistedCertificates:` + mapStringForBlacklistedCertificates + `,`, - `UnlockKeys:` + repeatedStringForUnlockKeys + `,`, - `FIPS:` + fmt.Sprintf("%v", this.FIPS) + `,`, - `DefaultAddressPool:` + fmt.Sprintf("%v", this.DefaultAddressPool) + `,`, - `SubnetSize:` + fmt.Sprintf("%v", this.SubnetSize) + `,`, - `VXLANUDPPort:` + fmt.Sprintf("%v", this.VXLANUDPPort) + `,`, - `}`, - }, "") - return s -} -func (this *Secret) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&Secret{`, - `ID:` + fmt.Sprintf("%v", this.ID) + `,`, - `Meta:` + strings.Replace(strings.Replace(this.Meta.String(), "Meta", "Meta", 1), `&`, ``, 1) + `,`, - `Spec:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Spec), "SecretSpec", "SecretSpec", 1), `&`, ``, 1) + `,`, - `Internal:` + fmt.Sprintf("%v", this.Internal) + `,`, - `}`, - }, "") - return s -} -func (this *Config) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&Config{`, - `ID:` + fmt.Sprintf("%v", this.ID) + `,`, - `Meta:` + strings.Replace(strings.Replace(this.Meta.String(), "Meta", "Meta", 1), `&`, ``, 1) + `,`, - `Spec:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Spec), "ConfigSpec", "ConfigSpec", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s -} -func (this *Resource) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&Resource{`, - `ID:` + fmt.Sprintf("%v", this.ID) + `,`, - `Meta:` + strings.Replace(strings.Replace(this.Meta.String(), "Meta", "Meta", 1), `&`, ``, 1) + `,`, - `Annotations:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Annotations), "Annotations", "Annotations", 1), `&`, ``, 1) + `,`, - `Kind:` + fmt.Sprintf("%v", this.Kind) + `,`, - `Payload:` + strings.Replace(fmt.Sprintf("%v", this.Payload), "Any", "types.Any", 1) + `,`, - `}`, - }, "") - return s -} -func (this *Extension) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&Extension{`, - `ID:` + fmt.Sprintf("%v", this.ID) + `,`, - `Meta:` + strings.Replace(strings.Replace(this.Meta.String(), "Meta", "Meta", 1), `&`, ``, 1) + `,`, - `Annotations:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Annotations), "Annotations", "Annotations", 1), `&`, ``, 1) + `,`, - `Description:` + fmt.Sprintf("%v", this.Description) + `,`, - `}`, - }, "") - return s -} -func (this *Volume) String() string { - if this == nil { - return "nil" - } - repeatedStringForPublishStatus := "[]*VolumePublishStatus{" - for _, f := range this.PublishStatus { - repeatedStringForPublishStatus += strings.Replace(fmt.Sprintf("%v", f), "VolumePublishStatus", "VolumePublishStatus", 1) + "," - } - repeatedStringForPublishStatus += "}" - s := strings.Join([]string{`&Volume{`, - `ID:` + fmt.Sprintf("%v", this.ID) + `,`, - `Meta:` + strings.Replace(strings.Replace(this.Meta.String(), "Meta", "Meta", 1), `&`, ``, 1) + `,`, - `Spec:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Spec), "VolumeSpec", "VolumeSpec", 1), `&`, ``, 1) + `,`, - `PublishStatus:` + repeatedStringForPublishStatus + `,`, - `VolumeInfo:` + strings.Replace(fmt.Sprintf("%v", this.VolumeInfo), "VolumeInfo", "VolumeInfo", 1) + `,`, - `PendingDelete:` + fmt.Sprintf("%v", this.PendingDelete) + `,`, - `}`, - }, "") - return s -} -func valueToStringObjects(v interface{}) string { - rv := reflect.ValueOf(v) - if rv.IsNil() { - return "nil" - } - pv := reflect.Indirect(rv).Interface() - return fmt.Sprintf("*%v", pv) -} -func (m *Meta) 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 ErrIntOverflowObjects - } - 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: Meta: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Meta: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthObjects - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Version.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CreatedAt", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthObjects - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.CreatedAt == nil { - m.CreatedAt = &types.Timestamp{} - } - if err := m.CreatedAt.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field UpdatedAt", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthObjects - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.UpdatedAt == nil { - m.UpdatedAt = &types.Timestamp{} - } - if err := m.UpdatedAt.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipObjects(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthObjects - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Node) 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 ErrIntOverflowObjects - } - 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: Node: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Node: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - 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 ErrInvalidLengthObjects - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Meta", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthObjects - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Meta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthObjects - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Description", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthObjects - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Description == nil { - m.Description = &NodeDescription{} - } - if err := m.Description.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthObjects - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ManagerStatus", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthObjects - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.ManagerStatus == nil { - m.ManagerStatus = &ManagerStatus{} - } - if err := m.ManagerStatus.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Attachment", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthObjects - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Attachment == nil { - m.Attachment = &NetworkAttachment{} - } - if err := m.Attachment.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 8: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Certificate", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthObjects - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Certificate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 9: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Role", wireType) - } - m.Role = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Role |= NodeRole(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 10: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Attachments", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthObjects - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Attachments = append(m.Attachments, &NetworkAttachment{}) - if err := m.Attachments[len(m.Attachments)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 11: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field VXLANUDPPort", wireType) - } - m.VXLANUDPPort = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.VXLANUDPPort |= uint32(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipObjects(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthObjects - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Service) 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 ErrIntOverflowObjects - } - 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: Service: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Service: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - 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 ErrInvalidLengthObjects - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Meta", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthObjects - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Meta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthObjects - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Endpoint", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthObjects - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Endpoint == nil { - m.Endpoint = &Endpoint{} - } - if err := m.Endpoint.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field UpdateStatus", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthObjects - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.UpdateStatus == nil { - m.UpdateStatus = &UpdateStatus{} - } - if err := m.UpdateStatus.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PreviousSpec", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthObjects - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.PreviousSpec == nil { - m.PreviousSpec = &ServiceSpec{} - } - if err := m.PreviousSpec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 7: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PendingDelete", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.PendingDelete = bool(v != 0) - case 10: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SpecVersion", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthObjects - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.SpecVersion == nil { - m.SpecVersion = &Version{} - } - if err := m.SpecVersion.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 11: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PreviousSpecVersion", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthObjects - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.PreviousSpecVersion == nil { - m.PreviousSpecVersion = &Version{} - } - if err := m.PreviousSpecVersion.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 12: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field JobStatus", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthObjects - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.JobStatus == nil { - m.JobStatus = &JobStatus{} - } - if err := m.JobStatus.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipObjects(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthObjects - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Endpoint) 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 ErrIntOverflowObjects - } - 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: Endpoint: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Endpoint: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthObjects - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Spec == nil { - m.Spec = &EndpointSpec{} - } - if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Ports", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthObjects - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Ports = append(m.Ports, &PortConfig{}) - if err := m.Ports[len(m.Ports)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field VirtualIPs", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthObjects - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.VirtualIPs = append(m.VirtualIPs, &Endpoint_VirtualIP{}) - if err := m.VirtualIPs[len(m.VirtualIPs)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipObjects(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthObjects - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Endpoint_VirtualIP) 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 ErrIntOverflowObjects - } - 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: VirtualIP: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: VirtualIP: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NetworkID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - 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 ErrInvalidLengthObjects - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.NetworkID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Addr", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - 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 ErrInvalidLengthObjects - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Addr = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipObjects(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthObjects - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Task) 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 ErrIntOverflowObjects - } - 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: Task: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Task: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - 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 ErrInvalidLengthObjects - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Meta", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthObjects - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Meta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthObjects - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ServiceID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - 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 ErrInvalidLengthObjects - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ServiceID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 5: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Slot", wireType) - } - m.Slot = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Slot |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NodeID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - 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 ErrInvalidLengthObjects - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.NodeID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Annotations", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthObjects - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Annotations.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 8: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ServiceAnnotations", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthObjects - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.ServiceAnnotations.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 9: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthObjects - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 10: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field DesiredState", wireType) - } - m.DesiredState = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.DesiredState |= TaskState(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 11: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Networks", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthObjects - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Networks = append(m.Networks, &NetworkAttachment{}) - if err := m.Networks[len(m.Networks)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 12: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Endpoint", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthObjects - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Endpoint == nil { - m.Endpoint = &Endpoint{} - } - if err := m.Endpoint.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 13: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LogDriver", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthObjects - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.LogDriver == nil { - m.LogDriver = &Driver{} - } - if err := m.LogDriver.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 14: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SpecVersion", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthObjects - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.SpecVersion == nil { - m.SpecVersion = &Version{} - } - if err := m.SpecVersion.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 15: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AssignedGenericResources", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthObjects - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.AssignedGenericResources = append(m.AssignedGenericResources, &GenericResource{}) - if err := m.AssignedGenericResources[len(m.AssignedGenericResources)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 16: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field JobIteration", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthObjects - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.JobIteration == nil { - m.JobIteration = &Version{} - } - if err := m.JobIteration.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 17: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Volumes", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthObjects - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Volumes = append(m.Volumes, &VolumeAttachment{}) - if err := m.Volumes[len(m.Volumes)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipObjects(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthObjects - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *NetworkAttachment) 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 ErrIntOverflowObjects - } - 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: NetworkAttachment: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: NetworkAttachment: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Network", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthObjects - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Network == nil { - m.Network = &Network{} - } - if err := m.Network.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Addresses", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - 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 ErrInvalidLengthObjects - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Addresses = append(m.Addresses, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Aliases", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - 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 ErrInvalidLengthObjects - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Aliases = append(m.Aliases, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DriverAttachmentOpts", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthObjects - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.DriverAttachmentOpts == nil { - m.DriverAttachmentOpts = make(map[string]string) - } - var mapkey string - var mapvalue string - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { - return ErrInvalidLengthObjects - } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey < 0 { - return ErrInvalidLengthObjects - } - if postStringIndexmapkey > l { - return io.ErrUnexpectedEOF - } - mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - } else if fieldNum == 2 { - var stringLenmapvalue uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapvalue |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapvalue := int(stringLenmapvalue) - if intStringLenmapvalue < 0 { - return ErrInvalidLengthObjects - } - postStringIndexmapvalue := iNdEx + intStringLenmapvalue - if postStringIndexmapvalue < 0 { - return ErrInvalidLengthObjects - } - if postStringIndexmapvalue > l { - return io.ErrUnexpectedEOF - } - mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) - iNdEx = postStringIndexmapvalue - } else { - iNdEx = entryPreIndex - skippy, err := skipObjects(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthObjects - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - m.DriverAttachmentOpts[mapkey] = mapvalue - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipObjects(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthObjects - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Network) 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 ErrIntOverflowObjects - } - 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: Network: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Network: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - 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 ErrInvalidLengthObjects - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Meta", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthObjects - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Meta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthObjects - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DriverState", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthObjects - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.DriverState == nil { - m.DriverState = &Driver{} - } - if err := m.DriverState.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field IPAM", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthObjects - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.IPAM == nil { - m.IPAM = &IPAMOptions{} - } - if err := m.IPAM.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 6: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PendingDelete", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.PendingDelete = bool(v != 0) - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Extra", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthObjects - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Extra == nil { - m.Extra = &types.Any{} - } - if err := m.Extra.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipObjects(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthObjects - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Cluster) 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 ErrIntOverflowObjects - } - 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: Cluster: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Cluster: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - 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 ErrInvalidLengthObjects - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Meta", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthObjects - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Meta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthObjects - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RootCA", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthObjects - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.RootCA.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NetworkBootstrapKeys", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthObjects - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.NetworkBootstrapKeys = append(m.NetworkBootstrapKeys, &EncryptionKey{}) - if err := m.NetworkBootstrapKeys[len(m.NetworkBootstrapKeys)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 6: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field EncryptionKeyLamportClock", wireType) - } - m.EncryptionKeyLamportClock = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.EncryptionKeyLamportClock |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 8: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field BlacklistedCertificates", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthObjects - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.BlacklistedCertificates == nil { - m.BlacklistedCertificates = make(map[string]*BlacklistedCertificate) - } - var mapkey string - var mapvalue *BlacklistedCertificate - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { - return ErrInvalidLengthObjects - } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey < 0 { - return ErrInvalidLengthObjects - } - if postStringIndexmapkey > l { - return io.ErrUnexpectedEOF - } - mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - } else if fieldNum == 2 { - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if mapmsglen < 0 { - return ErrInvalidLengthObjects - } - postmsgIndex := iNdEx + mapmsglen - if postmsgIndex < 0 { - return ErrInvalidLengthObjects - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - mapvalue = &BlacklistedCertificate{} - if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - } else { - iNdEx = entryPreIndex - skippy, err := skipObjects(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthObjects - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - m.BlacklistedCertificates[mapkey] = mapvalue - iNdEx = postIndex - case 9: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field UnlockKeys", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthObjects - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.UnlockKeys = append(m.UnlockKeys, &EncryptionKey{}) - if err := m.UnlockKeys[len(m.UnlockKeys)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 10: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field FIPS", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.FIPS = bool(v != 0) - case 11: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DefaultAddressPool", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - 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 ErrInvalidLengthObjects - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.DefaultAddressPool = append(m.DefaultAddressPool, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 12: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field SubnetSize", wireType) - } - m.SubnetSize = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.SubnetSize |= uint32(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 13: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field VXLANUDPPort", wireType) - } - m.VXLANUDPPort = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.VXLANUDPPort |= uint32(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipObjects(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthObjects - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Secret) 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 ErrIntOverflowObjects - } - 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: Secret: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Secret: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - 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 ErrInvalidLengthObjects - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Meta", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthObjects - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Meta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthObjects - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Internal", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.Internal = bool(v != 0) - default: - iNdEx = preIndex - skippy, err := skipObjects(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthObjects - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Config) 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 ErrIntOverflowObjects - } - 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: Config: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Config: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - 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 ErrInvalidLengthObjects - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Meta", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthObjects - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Meta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthObjects - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipObjects(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthObjects - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Resource) 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 ErrIntOverflowObjects - } - 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: Resource: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Resource: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - 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 ErrInvalidLengthObjects - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Meta", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthObjects - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Meta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Annotations", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthObjects - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Annotations.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Kind", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - 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 ErrInvalidLengthObjects - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Kind = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Payload", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthObjects - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Payload == nil { - m.Payload = &types.Any{} - } - if err := m.Payload.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipObjects(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthObjects - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Extension) 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 ErrIntOverflowObjects - } - 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: Extension: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Extension: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - 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 ErrInvalidLengthObjects - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Meta", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthObjects - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Meta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Annotations", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthObjects - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Annotations.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Description", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - 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 ErrInvalidLengthObjects - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Description = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipObjects(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthObjects - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Volume) 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 ErrIntOverflowObjects - } - 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: Volume: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Volume: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - 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 ErrInvalidLengthObjects - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Meta", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthObjects - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Meta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthObjects - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PublishStatus", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthObjects - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.PublishStatus = append(m.PublishStatus, &VolumePublishStatus{}) - if err := m.PublishStatus[len(m.PublishStatus)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field VolumeInfo", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthObjects - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthObjects - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.VolumeInfo == nil { - m.VolumeInfo = &VolumeInfo{} - } - if err := m.VolumeInfo.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 6: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PendingDelete", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowObjects - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.PendingDelete = bool(v != 0) - default: - iNdEx = preIndex - skippy, err := skipObjects(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthObjects - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipObjects(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - depth := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowObjects - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowObjects - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - case 1: - iNdEx += 8 - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowObjects - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLengthObjects - } - iNdEx += length - case 3: - depth++ - case 4: - if depth == 0 { - return 0, ErrUnexpectedEndOfGroupObjects - } - depth-- - case 5: - iNdEx += 4 - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - if iNdEx < 0 { - return 0, ErrInvalidLengthObjects - } - if depth == 0 { - return iNdEx, nil - } - } - return 0, io.ErrUnexpectedEOF -} - -var ( - ErrInvalidLengthObjects = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowObjects = fmt.Errorf("proto: integer overflow") - ErrUnexpectedEndOfGroupObjects = fmt.Errorf("proto: unexpected end of group") -) diff --git a/api/objects.pb.storeobject.go b/api/objects.pb.storeobject.go new file mode 100644 index 0000000000..e639a3a875 --- /dev/null +++ b/api/objects.pb.storeobject.go @@ -0,0 +1,2915 @@ +// Code generated by protoc-gen-goswarm. DO NOT EDIT. + +package api + +import ( + go_events "github.com/docker/go-events" + strings "strings" +) + +type NodeCheckFunc func(t1, t2 *Node) bool + +type EventNode interface { + IsEventNode() bool +} + +type EventCreateNode struct { + Node *Node + Checks []NodeCheckFunc +} + +func (e EventCreateNode) Matches(apiEvent go_events.Event) bool { + typedEvent, ok := apiEvent.(EventCreateNode) + if !ok { + return false + } + + for _, check := range e.Checks { + if !check(e.Node, typedEvent.Node) { + return false + } + } + return true +} + +func (e EventCreateNode) IsEventCreate() bool { + return true +} + +func (e EventCreateNode) IsEventNode() bool { + return true +} + +type EventUpdateNode struct { + Node *Node + OldNode *Node + Checks []NodeCheckFunc +} + +func (e EventUpdateNode) Matches(apiEvent go_events.Event) bool { + typedEvent, ok := apiEvent.(EventUpdateNode) + if !ok { + return false + } + + for _, check := range e.Checks { + if !check(e.Node, typedEvent.Node) { + return false + } + } + return true +} + +func (e EventUpdateNode) IsEventUpdate() bool { + return true +} + +func (e EventUpdateNode) IsEventNode() bool { + return true +} + +type EventDeleteNode struct { + Node *Node + Checks []NodeCheckFunc +} + +func (e EventDeleteNode) Matches(apiEvent go_events.Event) bool { + typedEvent, ok := apiEvent.(EventDeleteNode) + if !ok { + return false + } + + for _, check := range e.Checks { + if !check(e.Node, typedEvent.Node) { + return false + } + } + return true +} + +func (e EventDeleteNode) IsEventDelete() bool { + return true +} + +func (e EventDeleteNode) IsEventNode() bool { + return true +} + +func (m *Node) CopyStoreObject() StoreObject { + return m.Copy() +} + +func (m *Node) SetMeta(meta *Meta) { + m.Meta = meta +} + +func (m *Node) EventCreate() Event { + return EventCreateNode{Node: m} +} + +func (m *Node) EventUpdate(oldObject StoreObject) Event { + if oldObject != nil { + return EventUpdateNode{Node: m, OldNode: oldObject.(*Node)} + } else { + return EventUpdateNode{Node: m} + } +} + +func (m *Node) EventDelete() Event { + return EventDeleteNode{Node: m} +} + +func NodeCheckID(v1, v2 *Node) bool { + return v1.ID == v2.ID +} + +func NodeCheckIDPrefix(v1, v2 *Node) bool { + return strings.HasPrefix(v2.ID, v1.ID) +} + +func NodeCheckName(v1, v2 *Node) bool { + if v1.Description == nil || v2.Description == nil { + return false + } + return v1.GetDescription().GetHostname() == v2.GetDescription().GetHostname() +} + +func NodeCheckNamePrefix(v1, v2 *Node) bool { + if v1.Description == nil || v2.Description == nil { + return false + } + return strings.HasPrefix(v2.GetDescription().GetHostname(), v1.GetDescription().GetHostname()) +} + +func NodeCheckCustom(v1, v2 *Node) bool { + return checkCustom(v1.GetSpec().GetAnnotations(), v2.GetSpec().GetAnnotations()) +} + +func NodeCheckCustomPrefix(v1, v2 *Node) bool { + return checkCustomPrefix(v1.GetSpec().GetAnnotations(), v2.GetSpec().GetAnnotations()) +} + +func NodeCheckRole(v1, v2 *Node) bool { + return v1.Role == v2.Role +} + +func NodeCheckMembership(v1, v2 *Node) bool { + return v1.Spec.Membership == v2.Spec.Membership +} + +func ConvertNodeWatch(action WatchActionKind, filters []*SelectBy) ([]Event, error) { + var ( + m Node + checkFuncs []NodeCheckFunc + hasRole bool + hasMembership bool + ) + m.Spec = &NodeSpec{Annotations: &Annotations{}} + + for _, filter := range filters { + switch v := filter.By.(type) { + case *SelectBy_ID: + if m.ID != "" { + return nil, errConflictingFilters + } + m.ID = v.ID + checkFuncs = append(checkFuncs, NodeCheckID) + case *SelectBy_IDPrefix: + if m.ID != "" { + return nil, errConflictingFilters + } + m.ID = v.IDPrefix + checkFuncs = append(checkFuncs, NodeCheckIDPrefix) + case *SelectBy_Name: + if m.Description != nil { + return nil, errConflictingFilters + } + m.Description = &NodeDescription{Hostname: v.Name} + checkFuncs = append(checkFuncs, NodeCheckName) + case *SelectBy_NamePrefix: + if m.Description != nil { + return nil, errConflictingFilters + } + m.Description = &NodeDescription{Hostname: v.NamePrefix} + checkFuncs = append(checkFuncs, NodeCheckNamePrefix) + case *SelectBy_Custom: + if len(m.Spec.Annotations.Indices) != 0 { + return nil, errConflictingFilters + } + m.Spec.Annotations.Indices = []*IndexEntry{{Key: v.Custom.Index, Val: v.Custom.Value}} + checkFuncs = append(checkFuncs, NodeCheckCustom) + case *SelectBy_CustomPrefix: + if len(m.Spec.Annotations.Indices) != 0 { + return nil, errConflictingFilters + } + m.Spec.Annotations.Indices = []*IndexEntry{{Key: v.CustomPrefix.Index, Val: v.CustomPrefix.Value}} + checkFuncs = append(checkFuncs, NodeCheckCustomPrefix) + case *SelectBy_Role: + if hasRole { + return nil, errConflictingFilters + } + hasRole = true + m.Role = v.Role + checkFuncs = append(checkFuncs, NodeCheckRole) + case *SelectBy_Membership: + if hasMembership { + return nil, errConflictingFilters + } + hasMembership = true + m.Spec.Membership = v.Membership + checkFuncs = append(checkFuncs, NodeCheckMembership) + } + } + var events []Event + if (action & WatchActionKindCreate) != 0 { + events = append(events, EventCreateNode{Node: &m, Checks: checkFuncs}) + } + if (action & WatchActionKindUpdate) != 0 { + events = append(events, EventUpdateNode{Node: &m, Checks: checkFuncs}) + } + if (action & WatchActionKindRemove) != 0 { + events = append(events, EventDeleteNode{Node: &m, Checks: checkFuncs}) + } + if len(events) == 0 { + return nil, errUnrecognizedAction + } + return events, nil +} + +type NodeIndexerByID struct{} + +func (indexer NodeIndexerByID) FromArgs(args ...interface{}) ([]byte, error) { + return fromArgs(args...) +} + +func (indexer NodeIndexerByID) PrefixFromArgs(args ...interface{}) ([]byte, error) { + return prefixFromArgs(args...) +} + +func (indexer NodeIndexerByID) FromObject(obj interface{}) (bool, []byte, error) { + m := obj.(*Node) + return true, []byte(m.ID + "\x00"), nil +} + +type NodeIndexerByName struct{} + +func (indexer NodeIndexerByName) FromArgs(args ...interface{}) ([]byte, error) { + return fromArgs(args...) +} + +func (indexer NodeIndexerByName) PrefixFromArgs(args ...interface{}) ([]byte, error) { + return prefixFromArgs(args...) +} + +func (indexer NodeIndexerByName) FromObject(obj interface{}) (bool, []byte, error) { + m := obj.(*Node) + val := m.GetSpec().GetAnnotations().GetName() + return true, []byte(strings.ToLower(val) + "\x00"), nil +} + +type NodeCustomIndexer struct{} + +func (indexer NodeCustomIndexer) FromArgs(args ...interface{}) ([]byte, error) { + return fromArgs(args...) +} + +func (indexer NodeCustomIndexer) PrefixFromArgs(args ...interface{}) ([]byte, error) { + return prefixFromArgs(args...) +} + +func (indexer NodeCustomIndexer) FromObject(obj interface{}) (bool, [][]byte, error) { + m := obj.(*Node) + return customIndexer("", m.GetSpec().GetAnnotations()) +} + +type ServiceCheckFunc func(t1, t2 *Service) bool + +type EventService interface { + IsEventService() bool +} + +type EventCreateService struct { + Service *Service + Checks []ServiceCheckFunc +} + +func (e EventCreateService) Matches(apiEvent go_events.Event) bool { + typedEvent, ok := apiEvent.(EventCreateService) + if !ok { + return false + } + + for _, check := range e.Checks { + if !check(e.Service, typedEvent.Service) { + return false + } + } + return true +} + +func (e EventCreateService) IsEventCreate() bool { + return true +} + +func (e EventCreateService) IsEventService() bool { + return true +} + +type EventUpdateService struct { + Service *Service + OldService *Service + Checks []ServiceCheckFunc +} + +func (e EventUpdateService) Matches(apiEvent go_events.Event) bool { + typedEvent, ok := apiEvent.(EventUpdateService) + if !ok { + return false + } + + for _, check := range e.Checks { + if !check(e.Service, typedEvent.Service) { + return false + } + } + return true +} + +func (e EventUpdateService) IsEventUpdate() bool { + return true +} + +func (e EventUpdateService) IsEventService() bool { + return true +} + +type EventDeleteService struct { + Service *Service + Checks []ServiceCheckFunc +} + +func (e EventDeleteService) Matches(apiEvent go_events.Event) bool { + typedEvent, ok := apiEvent.(EventDeleteService) + if !ok { + return false + } + + for _, check := range e.Checks { + if !check(e.Service, typedEvent.Service) { + return false + } + } + return true +} + +func (e EventDeleteService) IsEventDelete() bool { + return true +} + +func (e EventDeleteService) IsEventService() bool { + return true +} + +func (m *Service) CopyStoreObject() StoreObject { + return m.Copy() +} + +func (m *Service) SetMeta(meta *Meta) { + m.Meta = meta +} + +func (m *Service) EventCreate() Event { + return EventCreateService{Service: m} +} + +func (m *Service) EventUpdate(oldObject StoreObject) Event { + if oldObject != nil { + return EventUpdateService{Service: m, OldService: oldObject.(*Service)} + } else { + return EventUpdateService{Service: m} + } +} + +func (m *Service) EventDelete() Event { + return EventDeleteService{Service: m} +} + +func ServiceCheckID(v1, v2 *Service) bool { + return v1.ID == v2.ID +} + +func ServiceCheckIDPrefix(v1, v2 *Service) bool { + return strings.HasPrefix(v2.ID, v1.ID) +} + +func ServiceCheckName(v1, v2 *Service) bool { + return v1.GetSpec().GetAnnotations().GetName() == v2.GetSpec().GetAnnotations().GetName() +} + +func ServiceCheckNamePrefix(v1, v2 *Service) bool { + return strings.HasPrefix(v2.GetSpec().GetAnnotations().GetName(), v1.GetSpec().GetAnnotations().GetName()) +} + +func ServiceCheckCustom(v1, v2 *Service) bool { + return checkCustom(v1.GetSpec().GetAnnotations(), v2.GetSpec().GetAnnotations()) +} + +func ServiceCheckCustomPrefix(v1, v2 *Service) bool { + return checkCustomPrefix(v1.GetSpec().GetAnnotations(), v2.GetSpec().GetAnnotations()) +} + +func ConvertServiceWatch(action WatchActionKind, filters []*SelectBy) ([]Event, error) { + var ( + m Service + checkFuncs []ServiceCheckFunc + ) + m.Spec = &ServiceSpec{Annotations: &Annotations{}} + + for _, filter := range filters { + switch v := filter.By.(type) { + case *SelectBy_ID: + if m.ID != "" { + return nil, errConflictingFilters + } + m.ID = v.ID + checkFuncs = append(checkFuncs, ServiceCheckID) + case *SelectBy_IDPrefix: + if m.ID != "" { + return nil, errConflictingFilters + } + m.ID = v.IDPrefix + checkFuncs = append(checkFuncs, ServiceCheckIDPrefix) + case *SelectBy_Name: + if m.Spec.Annotations.Name != "" { + return nil, errConflictingFilters + } + m.Spec.Annotations.Name = v.Name + checkFuncs = append(checkFuncs, ServiceCheckName) + case *SelectBy_NamePrefix: + if m.Spec.Annotations.Name != "" { + return nil, errConflictingFilters + } + m.Spec.Annotations.Name = v.NamePrefix + checkFuncs = append(checkFuncs, ServiceCheckNamePrefix) + case *SelectBy_Custom: + if len(m.Spec.Annotations.Indices) != 0 { + return nil, errConflictingFilters + } + m.Spec.Annotations.Indices = []*IndexEntry{{Key: v.Custom.Index, Val: v.Custom.Value}} + checkFuncs = append(checkFuncs, ServiceCheckCustom) + case *SelectBy_CustomPrefix: + if len(m.Spec.Annotations.Indices) != 0 { + return nil, errConflictingFilters + } + m.Spec.Annotations.Indices = []*IndexEntry{{Key: v.CustomPrefix.Index, Val: v.CustomPrefix.Value}} + checkFuncs = append(checkFuncs, ServiceCheckCustomPrefix) + } + } + var events []Event + if (action & WatchActionKindCreate) != 0 { + events = append(events, EventCreateService{Service: &m, Checks: checkFuncs}) + } + if (action & WatchActionKindUpdate) != 0 { + events = append(events, EventUpdateService{Service: &m, Checks: checkFuncs}) + } + if (action & WatchActionKindRemove) != 0 { + events = append(events, EventDeleteService{Service: &m, Checks: checkFuncs}) + } + if len(events) == 0 { + return nil, errUnrecognizedAction + } + return events, nil +} + +type ServiceIndexerByID struct{} + +func (indexer ServiceIndexerByID) FromArgs(args ...interface{}) ([]byte, error) { + return fromArgs(args...) +} + +func (indexer ServiceIndexerByID) PrefixFromArgs(args ...interface{}) ([]byte, error) { + return prefixFromArgs(args...) +} + +func (indexer ServiceIndexerByID) FromObject(obj interface{}) (bool, []byte, error) { + m := obj.(*Service) + return true, []byte(m.ID + "\x00"), nil +} + +type ServiceIndexerByName struct{} + +func (indexer ServiceIndexerByName) FromArgs(args ...interface{}) ([]byte, error) { + return fromArgs(args...) +} + +func (indexer ServiceIndexerByName) PrefixFromArgs(args ...interface{}) ([]byte, error) { + return prefixFromArgs(args...) +} + +func (indexer ServiceIndexerByName) FromObject(obj interface{}) (bool, []byte, error) { + m := obj.(*Service) + val := m.GetSpec().GetAnnotations().GetName() + return true, []byte(strings.ToLower(val) + "\x00"), nil +} + +type ServiceCustomIndexer struct{} + +func (indexer ServiceCustomIndexer) FromArgs(args ...interface{}) ([]byte, error) { + return fromArgs(args...) +} + +func (indexer ServiceCustomIndexer) PrefixFromArgs(args ...interface{}) ([]byte, error) { + return prefixFromArgs(args...) +} + +func (indexer ServiceCustomIndexer) FromObject(obj interface{}) (bool, [][]byte, error) { + m := obj.(*Service) + return customIndexer("", m.GetSpec().GetAnnotations()) +} + +type TaskCheckFunc func(t1, t2 *Task) bool + +type EventTask interface { + IsEventTask() bool +} + +type EventCreateTask struct { + Task *Task + Checks []TaskCheckFunc +} + +func (e EventCreateTask) Matches(apiEvent go_events.Event) bool { + typedEvent, ok := apiEvent.(EventCreateTask) + if !ok { + return false + } + + for _, check := range e.Checks { + if !check(e.Task, typedEvent.Task) { + return false + } + } + return true +} + +func (e EventCreateTask) IsEventCreate() bool { + return true +} + +func (e EventCreateTask) IsEventTask() bool { + return true +} + +type EventUpdateTask struct { + Task *Task + OldTask *Task + Checks []TaskCheckFunc +} + +func (e EventUpdateTask) Matches(apiEvent go_events.Event) bool { + typedEvent, ok := apiEvent.(EventUpdateTask) + if !ok { + return false + } + + for _, check := range e.Checks { + if !check(e.Task, typedEvent.Task) { + return false + } + } + return true +} + +func (e EventUpdateTask) IsEventUpdate() bool { + return true +} + +func (e EventUpdateTask) IsEventTask() bool { + return true +} + +type EventDeleteTask struct { + Task *Task + Checks []TaskCheckFunc +} + +func (e EventDeleteTask) Matches(apiEvent go_events.Event) bool { + typedEvent, ok := apiEvent.(EventDeleteTask) + if !ok { + return false + } + + for _, check := range e.Checks { + if !check(e.Task, typedEvent.Task) { + return false + } + } + return true +} + +func (e EventDeleteTask) IsEventDelete() bool { + return true +} + +func (e EventDeleteTask) IsEventTask() bool { + return true +} + +func (m *Task) CopyStoreObject() StoreObject { + return m.Copy() +} + +func (m *Task) SetMeta(meta *Meta) { + m.Meta = meta +} + +func (m *Task) EventCreate() Event { + return EventCreateTask{Task: m} +} + +func (m *Task) EventUpdate(oldObject StoreObject) Event { + if oldObject != nil { + return EventUpdateTask{Task: m, OldTask: oldObject.(*Task)} + } else { + return EventUpdateTask{Task: m} + } +} + +func (m *Task) EventDelete() Event { + return EventDeleteTask{Task: m} +} + +func TaskCheckID(v1, v2 *Task) bool { + return v1.ID == v2.ID +} + +func TaskCheckIDPrefix(v1, v2 *Task) bool { + return strings.HasPrefix(v2.ID, v1.ID) +} + +func TaskCheckName(v1, v2 *Task) bool { + return v1.GetAnnotations().GetName() == v2.GetAnnotations().GetName() +} + +func TaskCheckNamePrefix(v1, v2 *Task) bool { + return strings.HasPrefix(v2.GetAnnotations().GetName(), v1.GetAnnotations().GetName()) +} + +func TaskCheckCustom(v1, v2 *Task) bool { + return checkCustom(v1.GetAnnotations(), v2.GetAnnotations()) +} + +func TaskCheckCustomPrefix(v1, v2 *Task) bool { + return checkCustomPrefix(v1.GetAnnotations(), v2.GetAnnotations()) +} + +func TaskCheckNodeID(v1, v2 *Task) bool { + return v1.NodeID == v2.NodeID +} + +func TaskCheckServiceID(v1, v2 *Task) bool { + return v1.ServiceID == v2.ServiceID +} + +func TaskCheckSlot(v1, v2 *Task) bool { + return v1.Slot == v2.Slot +} + +func TaskCheckDesiredState(v1, v2 *Task) bool { + return v1.DesiredState == v2.DesiredState +} + +func ConvertTaskWatch(action WatchActionKind, filters []*SelectBy) ([]Event, error) { + var ( + m Task + checkFuncs []TaskCheckFunc + hasDesiredState bool + ) + m.Annotations = &Annotations{} + + for _, filter := range filters { + switch v := filter.By.(type) { + case *SelectBy_ID: + if m.ID != "" { + return nil, errConflictingFilters + } + m.ID = v.ID + checkFuncs = append(checkFuncs, TaskCheckID) + case *SelectBy_IDPrefix: + if m.ID != "" { + return nil, errConflictingFilters + } + m.ID = v.IDPrefix + checkFuncs = append(checkFuncs, TaskCheckIDPrefix) + case *SelectBy_Name: + if m.Annotations.Name != "" { + return nil, errConflictingFilters + } + m.Annotations.Name = v.Name + checkFuncs = append(checkFuncs, TaskCheckName) + case *SelectBy_NamePrefix: + if m.Annotations.Name != "" { + return nil, errConflictingFilters + } + m.Annotations.Name = v.NamePrefix + checkFuncs = append(checkFuncs, TaskCheckNamePrefix) + case *SelectBy_Custom: + if len(m.Annotations.Indices) != 0 { + return nil, errConflictingFilters + } + m.Annotations.Indices = []*IndexEntry{{Key: v.Custom.Index, Val: v.Custom.Value}} + checkFuncs = append(checkFuncs, TaskCheckCustom) + case *SelectBy_CustomPrefix: + if len(m.Annotations.Indices) != 0 { + return nil, errConflictingFilters + } + m.Annotations.Indices = []*IndexEntry{{Key: v.CustomPrefix.Index, Val: v.CustomPrefix.Value}} + checkFuncs = append(checkFuncs, TaskCheckCustomPrefix) + case *SelectBy_ServiceID: + if m.ServiceID != "" { + return nil, errConflictingFilters + } + m.ServiceID = v.ServiceID + checkFuncs = append(checkFuncs, TaskCheckServiceID) + case *SelectBy_NodeID: + if m.NodeID != "" { + return nil, errConflictingFilters + } + m.NodeID = v.NodeID + checkFuncs = append(checkFuncs, TaskCheckNodeID) + case *SelectBy_Slot: + if m.Slot != 0 || m.ServiceID != "" { + return nil, errConflictingFilters + } + m.ServiceID = v.Slot.ServiceID + m.Slot = v.Slot.Slot + checkFuncs = append(checkFuncs, TaskCheckNodeID, TaskCheckSlot) + case *SelectBy_DesiredState: + if hasDesiredState { + return nil, errConflictingFilters + } + hasDesiredState = true + m.DesiredState = v.DesiredState + checkFuncs = append(checkFuncs, TaskCheckDesiredState) + } + } + var events []Event + if (action & WatchActionKindCreate) != 0 { + events = append(events, EventCreateTask{Task: &m, Checks: checkFuncs}) + } + if (action & WatchActionKindUpdate) != 0 { + events = append(events, EventUpdateTask{Task: &m, Checks: checkFuncs}) + } + if (action & WatchActionKindRemove) != 0 { + events = append(events, EventDeleteTask{Task: &m, Checks: checkFuncs}) + } + if len(events) == 0 { + return nil, errUnrecognizedAction + } + return events, nil +} + +type TaskIndexerByID struct{} + +func (indexer TaskIndexerByID) FromArgs(args ...interface{}) ([]byte, error) { + return fromArgs(args...) +} + +func (indexer TaskIndexerByID) PrefixFromArgs(args ...interface{}) ([]byte, error) { + return prefixFromArgs(args...) +} + +func (indexer TaskIndexerByID) FromObject(obj interface{}) (bool, []byte, error) { + m := obj.(*Task) + return true, []byte(m.ID + "\x00"), nil +} + +type TaskIndexerByName struct{} + +func (indexer TaskIndexerByName) FromArgs(args ...interface{}) ([]byte, error) { + return fromArgs(args...) +} + +func (indexer TaskIndexerByName) PrefixFromArgs(args ...interface{}) ([]byte, error) { + return prefixFromArgs(args...) +} + +func (indexer TaskIndexerByName) FromObject(obj interface{}) (bool, []byte, error) { + m := obj.(*Task) + val := m.GetAnnotations().GetName() + return true, []byte(strings.ToLower(val) + "\x00"), nil +} + +type TaskCustomIndexer struct{} + +func (indexer TaskCustomIndexer) FromArgs(args ...interface{}) ([]byte, error) { + return fromArgs(args...) +} + +func (indexer TaskCustomIndexer) PrefixFromArgs(args ...interface{}) ([]byte, error) { + return prefixFromArgs(args...) +} + +func (indexer TaskCustomIndexer) FromObject(obj interface{}) (bool, [][]byte, error) { + m := obj.(*Task) + return customIndexer("", m.GetAnnotations()) +} + +type NetworkCheckFunc func(t1, t2 *Network) bool + +type EventNetwork interface { + IsEventNetwork() bool +} + +type EventCreateNetwork struct { + Network *Network + Checks []NetworkCheckFunc +} + +func (e EventCreateNetwork) Matches(apiEvent go_events.Event) bool { + typedEvent, ok := apiEvent.(EventCreateNetwork) + if !ok { + return false + } + + for _, check := range e.Checks { + if !check(e.Network, typedEvent.Network) { + return false + } + } + return true +} + +func (e EventCreateNetwork) IsEventCreate() bool { + return true +} + +func (e EventCreateNetwork) IsEventNetwork() bool { + return true +} + +type EventUpdateNetwork struct { + Network *Network + OldNetwork *Network + Checks []NetworkCheckFunc +} + +func (e EventUpdateNetwork) Matches(apiEvent go_events.Event) bool { + typedEvent, ok := apiEvent.(EventUpdateNetwork) + if !ok { + return false + } + + for _, check := range e.Checks { + if !check(e.Network, typedEvent.Network) { + return false + } + } + return true +} + +func (e EventUpdateNetwork) IsEventUpdate() bool { + return true +} + +func (e EventUpdateNetwork) IsEventNetwork() bool { + return true +} + +type EventDeleteNetwork struct { + Network *Network + Checks []NetworkCheckFunc +} + +func (e EventDeleteNetwork) Matches(apiEvent go_events.Event) bool { + typedEvent, ok := apiEvent.(EventDeleteNetwork) + if !ok { + return false + } + + for _, check := range e.Checks { + if !check(e.Network, typedEvent.Network) { + return false + } + } + return true +} + +func (e EventDeleteNetwork) IsEventDelete() bool { + return true +} + +func (e EventDeleteNetwork) IsEventNetwork() bool { + return true +} + +func (m *Network) CopyStoreObject() StoreObject { + return m.Copy() +} + +func (m *Network) SetMeta(meta *Meta) { + m.Meta = meta +} + +func (m *Network) EventCreate() Event { + return EventCreateNetwork{Network: m} +} + +func (m *Network) EventUpdate(oldObject StoreObject) Event { + if oldObject != nil { + return EventUpdateNetwork{Network: m, OldNetwork: oldObject.(*Network)} + } else { + return EventUpdateNetwork{Network: m} + } +} + +func (m *Network) EventDelete() Event { + return EventDeleteNetwork{Network: m} +} + +func NetworkCheckID(v1, v2 *Network) bool { + return v1.ID == v2.ID +} + +func NetworkCheckIDPrefix(v1, v2 *Network) bool { + return strings.HasPrefix(v2.ID, v1.ID) +} + +func NetworkCheckName(v1, v2 *Network) bool { + return v1.GetSpec().GetAnnotations().GetName() == v2.GetSpec().GetAnnotations().GetName() +} + +func NetworkCheckNamePrefix(v1, v2 *Network) bool { + return strings.HasPrefix(v2.GetSpec().GetAnnotations().GetName(), v1.GetSpec().GetAnnotations().GetName()) +} + +func NetworkCheckCustom(v1, v2 *Network) bool { + return checkCustom(v1.GetSpec().GetAnnotations(), v2.GetSpec().GetAnnotations()) +} + +func NetworkCheckCustomPrefix(v1, v2 *Network) bool { + return checkCustomPrefix(v1.GetSpec().GetAnnotations(), v2.GetSpec().GetAnnotations()) +} + +func ConvertNetworkWatch(action WatchActionKind, filters []*SelectBy) ([]Event, error) { + var ( + m Network + checkFuncs []NetworkCheckFunc + ) + m.Spec = &NetworkSpec{Annotations: &Annotations{}} + + for _, filter := range filters { + switch v := filter.By.(type) { + case *SelectBy_ID: + if m.ID != "" { + return nil, errConflictingFilters + } + m.ID = v.ID + checkFuncs = append(checkFuncs, NetworkCheckID) + case *SelectBy_IDPrefix: + if m.ID != "" { + return nil, errConflictingFilters + } + m.ID = v.IDPrefix + checkFuncs = append(checkFuncs, NetworkCheckIDPrefix) + case *SelectBy_Name: + if m.Spec.Annotations.Name != "" { + return nil, errConflictingFilters + } + m.Spec.Annotations.Name = v.Name + checkFuncs = append(checkFuncs, NetworkCheckName) + case *SelectBy_NamePrefix: + if m.Spec.Annotations.Name != "" { + return nil, errConflictingFilters + } + m.Spec.Annotations.Name = v.NamePrefix + checkFuncs = append(checkFuncs, NetworkCheckNamePrefix) + case *SelectBy_Custom: + if len(m.Spec.Annotations.Indices) != 0 { + return nil, errConflictingFilters + } + m.Spec.Annotations.Indices = []*IndexEntry{{Key: v.Custom.Index, Val: v.Custom.Value}} + checkFuncs = append(checkFuncs, NetworkCheckCustom) + case *SelectBy_CustomPrefix: + if len(m.Spec.Annotations.Indices) != 0 { + return nil, errConflictingFilters + } + m.Spec.Annotations.Indices = []*IndexEntry{{Key: v.CustomPrefix.Index, Val: v.CustomPrefix.Value}} + checkFuncs = append(checkFuncs, NetworkCheckCustomPrefix) + } + } + var events []Event + if (action & WatchActionKindCreate) != 0 { + events = append(events, EventCreateNetwork{Network: &m, Checks: checkFuncs}) + } + if (action & WatchActionKindUpdate) != 0 { + events = append(events, EventUpdateNetwork{Network: &m, Checks: checkFuncs}) + } + if (action & WatchActionKindRemove) != 0 { + events = append(events, EventDeleteNetwork{Network: &m, Checks: checkFuncs}) + } + if len(events) == 0 { + return nil, errUnrecognizedAction + } + return events, nil +} + +type NetworkIndexerByID struct{} + +func (indexer NetworkIndexerByID) FromArgs(args ...interface{}) ([]byte, error) { + return fromArgs(args...) +} + +func (indexer NetworkIndexerByID) PrefixFromArgs(args ...interface{}) ([]byte, error) { + return prefixFromArgs(args...) +} + +func (indexer NetworkIndexerByID) FromObject(obj interface{}) (bool, []byte, error) { + m := obj.(*Network) + return true, []byte(m.ID + "\x00"), nil +} + +type NetworkIndexerByName struct{} + +func (indexer NetworkIndexerByName) FromArgs(args ...interface{}) ([]byte, error) { + return fromArgs(args...) +} + +func (indexer NetworkIndexerByName) PrefixFromArgs(args ...interface{}) ([]byte, error) { + return prefixFromArgs(args...) +} + +func (indexer NetworkIndexerByName) FromObject(obj interface{}) (bool, []byte, error) { + m := obj.(*Network) + val := m.GetSpec().GetAnnotations().GetName() + return true, []byte(strings.ToLower(val) + "\x00"), nil +} + +type NetworkCustomIndexer struct{} + +func (indexer NetworkCustomIndexer) FromArgs(args ...interface{}) ([]byte, error) { + return fromArgs(args...) +} + +func (indexer NetworkCustomIndexer) PrefixFromArgs(args ...interface{}) ([]byte, error) { + return prefixFromArgs(args...) +} + +func (indexer NetworkCustomIndexer) FromObject(obj interface{}) (bool, [][]byte, error) { + m := obj.(*Network) + return customIndexer("", m.GetSpec().GetAnnotations()) +} + +type ClusterCheckFunc func(t1, t2 *Cluster) bool + +type EventCluster interface { + IsEventCluster() bool +} + +type EventCreateCluster struct { + Cluster *Cluster + Checks []ClusterCheckFunc +} + +func (e EventCreateCluster) Matches(apiEvent go_events.Event) bool { + typedEvent, ok := apiEvent.(EventCreateCluster) + if !ok { + return false + } + + for _, check := range e.Checks { + if !check(e.Cluster, typedEvent.Cluster) { + return false + } + } + return true +} + +func (e EventCreateCluster) IsEventCreate() bool { + return true +} + +func (e EventCreateCluster) IsEventCluster() bool { + return true +} + +type EventUpdateCluster struct { + Cluster *Cluster + OldCluster *Cluster + Checks []ClusterCheckFunc +} + +func (e EventUpdateCluster) Matches(apiEvent go_events.Event) bool { + typedEvent, ok := apiEvent.(EventUpdateCluster) + if !ok { + return false + } + + for _, check := range e.Checks { + if !check(e.Cluster, typedEvent.Cluster) { + return false + } + } + return true +} + +func (e EventUpdateCluster) IsEventUpdate() bool { + return true +} + +func (e EventUpdateCluster) IsEventCluster() bool { + return true +} + +type EventDeleteCluster struct { + Cluster *Cluster + Checks []ClusterCheckFunc +} + +func (e EventDeleteCluster) Matches(apiEvent go_events.Event) bool { + typedEvent, ok := apiEvent.(EventDeleteCluster) + if !ok { + return false + } + + for _, check := range e.Checks { + if !check(e.Cluster, typedEvent.Cluster) { + return false + } + } + return true +} + +func (e EventDeleteCluster) IsEventDelete() bool { + return true +} + +func (e EventDeleteCluster) IsEventCluster() bool { + return true +} + +func (m *Cluster) CopyStoreObject() StoreObject { + return m.Copy() +} + +func (m *Cluster) SetMeta(meta *Meta) { + m.Meta = meta +} + +func (m *Cluster) EventCreate() Event { + return EventCreateCluster{Cluster: m} +} + +func (m *Cluster) EventUpdate(oldObject StoreObject) Event { + if oldObject != nil { + return EventUpdateCluster{Cluster: m, OldCluster: oldObject.(*Cluster)} + } else { + return EventUpdateCluster{Cluster: m} + } +} + +func (m *Cluster) EventDelete() Event { + return EventDeleteCluster{Cluster: m} +} + +func ClusterCheckID(v1, v2 *Cluster) bool { + return v1.ID == v2.ID +} + +func ClusterCheckIDPrefix(v1, v2 *Cluster) bool { + return strings.HasPrefix(v2.ID, v1.ID) +} + +func ClusterCheckName(v1, v2 *Cluster) bool { + return v1.GetSpec().GetAnnotations().GetName() == v2.GetSpec().GetAnnotations().GetName() +} + +func ClusterCheckNamePrefix(v1, v2 *Cluster) bool { + return strings.HasPrefix(v2.GetSpec().GetAnnotations().GetName(), v1.GetSpec().GetAnnotations().GetName()) +} + +func ClusterCheckCustom(v1, v2 *Cluster) bool { + return checkCustom(v1.GetSpec().GetAnnotations(), v2.GetSpec().GetAnnotations()) +} + +func ClusterCheckCustomPrefix(v1, v2 *Cluster) bool { + return checkCustomPrefix(v1.GetSpec().GetAnnotations(), v2.GetSpec().GetAnnotations()) +} + +func ConvertClusterWatch(action WatchActionKind, filters []*SelectBy) ([]Event, error) { + var ( + m Cluster + checkFuncs []ClusterCheckFunc + ) + m.Spec = &ClusterSpec{Annotations: &Annotations{}} + + for _, filter := range filters { + switch v := filter.By.(type) { + case *SelectBy_ID: + if m.ID != "" { + return nil, errConflictingFilters + } + m.ID = v.ID + checkFuncs = append(checkFuncs, ClusterCheckID) + case *SelectBy_IDPrefix: + if m.ID != "" { + return nil, errConflictingFilters + } + m.ID = v.IDPrefix + checkFuncs = append(checkFuncs, ClusterCheckIDPrefix) + case *SelectBy_Name: + if m.Spec.Annotations.Name != "" { + return nil, errConflictingFilters + } + m.Spec.Annotations.Name = v.Name + checkFuncs = append(checkFuncs, ClusterCheckName) + case *SelectBy_NamePrefix: + if m.Spec.Annotations.Name != "" { + return nil, errConflictingFilters + } + m.Spec.Annotations.Name = v.NamePrefix + checkFuncs = append(checkFuncs, ClusterCheckNamePrefix) + case *SelectBy_Custom: + if len(m.Spec.Annotations.Indices) != 0 { + return nil, errConflictingFilters + } + m.Spec.Annotations.Indices = []*IndexEntry{{Key: v.Custom.Index, Val: v.Custom.Value}} + checkFuncs = append(checkFuncs, ClusterCheckCustom) + case *SelectBy_CustomPrefix: + if len(m.Spec.Annotations.Indices) != 0 { + return nil, errConflictingFilters + } + m.Spec.Annotations.Indices = []*IndexEntry{{Key: v.CustomPrefix.Index, Val: v.CustomPrefix.Value}} + checkFuncs = append(checkFuncs, ClusterCheckCustomPrefix) + } + } + var events []Event + if (action & WatchActionKindCreate) != 0 { + events = append(events, EventCreateCluster{Cluster: &m, Checks: checkFuncs}) + } + if (action & WatchActionKindUpdate) != 0 { + events = append(events, EventUpdateCluster{Cluster: &m, Checks: checkFuncs}) + } + if (action & WatchActionKindRemove) != 0 { + events = append(events, EventDeleteCluster{Cluster: &m, Checks: checkFuncs}) + } + if len(events) == 0 { + return nil, errUnrecognizedAction + } + return events, nil +} + +type ClusterIndexerByID struct{} + +func (indexer ClusterIndexerByID) FromArgs(args ...interface{}) ([]byte, error) { + return fromArgs(args...) +} + +func (indexer ClusterIndexerByID) PrefixFromArgs(args ...interface{}) ([]byte, error) { + return prefixFromArgs(args...) +} + +func (indexer ClusterIndexerByID) FromObject(obj interface{}) (bool, []byte, error) { + m := obj.(*Cluster) + return true, []byte(m.ID + "\x00"), nil +} + +type ClusterIndexerByName struct{} + +func (indexer ClusterIndexerByName) FromArgs(args ...interface{}) ([]byte, error) { + return fromArgs(args...) +} + +func (indexer ClusterIndexerByName) PrefixFromArgs(args ...interface{}) ([]byte, error) { + return prefixFromArgs(args...) +} + +func (indexer ClusterIndexerByName) FromObject(obj interface{}) (bool, []byte, error) { + m := obj.(*Cluster) + val := m.GetSpec().GetAnnotations().GetName() + return true, []byte(strings.ToLower(val) + "\x00"), nil +} + +type ClusterCustomIndexer struct{} + +func (indexer ClusterCustomIndexer) FromArgs(args ...interface{}) ([]byte, error) { + return fromArgs(args...) +} + +func (indexer ClusterCustomIndexer) PrefixFromArgs(args ...interface{}) ([]byte, error) { + return prefixFromArgs(args...) +} + +func (indexer ClusterCustomIndexer) FromObject(obj interface{}) (bool, [][]byte, error) { + m := obj.(*Cluster) + return customIndexer("", m.GetSpec().GetAnnotations()) +} + +type SecretCheckFunc func(t1, t2 *Secret) bool + +type EventSecret interface { + IsEventSecret() bool +} + +type EventCreateSecret struct { + Secret *Secret + Checks []SecretCheckFunc +} + +func (e EventCreateSecret) Matches(apiEvent go_events.Event) bool { + typedEvent, ok := apiEvent.(EventCreateSecret) + if !ok { + return false + } + + for _, check := range e.Checks { + if !check(e.Secret, typedEvent.Secret) { + return false + } + } + return true +} + +func (e EventCreateSecret) IsEventCreate() bool { + return true +} + +func (e EventCreateSecret) IsEventSecret() bool { + return true +} + +type EventUpdateSecret struct { + Secret *Secret + OldSecret *Secret + Checks []SecretCheckFunc +} + +func (e EventUpdateSecret) Matches(apiEvent go_events.Event) bool { + typedEvent, ok := apiEvent.(EventUpdateSecret) + if !ok { + return false + } + + for _, check := range e.Checks { + if !check(e.Secret, typedEvent.Secret) { + return false + } + } + return true +} + +func (e EventUpdateSecret) IsEventUpdate() bool { + return true +} + +func (e EventUpdateSecret) IsEventSecret() bool { + return true +} + +type EventDeleteSecret struct { + Secret *Secret + Checks []SecretCheckFunc +} + +func (e EventDeleteSecret) Matches(apiEvent go_events.Event) bool { + typedEvent, ok := apiEvent.(EventDeleteSecret) + if !ok { + return false + } + + for _, check := range e.Checks { + if !check(e.Secret, typedEvent.Secret) { + return false + } + } + return true +} + +func (e EventDeleteSecret) IsEventDelete() bool { + return true +} + +func (e EventDeleteSecret) IsEventSecret() bool { + return true +} + +func (m *Secret) CopyStoreObject() StoreObject { + return m.Copy() +} + +func (m *Secret) SetMeta(meta *Meta) { + m.Meta = meta +} + +func (m *Secret) EventCreate() Event { + return EventCreateSecret{Secret: m} +} + +func (m *Secret) EventUpdate(oldObject StoreObject) Event { + if oldObject != nil { + return EventUpdateSecret{Secret: m, OldSecret: oldObject.(*Secret)} + } else { + return EventUpdateSecret{Secret: m} + } +} + +func (m *Secret) EventDelete() Event { + return EventDeleteSecret{Secret: m} +} + +func SecretCheckID(v1, v2 *Secret) bool { + return v1.ID == v2.ID +} + +func SecretCheckIDPrefix(v1, v2 *Secret) bool { + return strings.HasPrefix(v2.ID, v1.ID) +} + +func SecretCheckName(v1, v2 *Secret) bool { + return v1.GetSpec().GetAnnotations().GetName() == v2.GetSpec().GetAnnotations().GetName() +} + +func SecretCheckNamePrefix(v1, v2 *Secret) bool { + return strings.HasPrefix(v2.GetSpec().GetAnnotations().GetName(), v1.GetSpec().GetAnnotations().GetName()) +} + +func SecretCheckCustom(v1, v2 *Secret) bool { + return checkCustom(v1.GetSpec().GetAnnotations(), v2.GetSpec().GetAnnotations()) +} + +func SecretCheckCustomPrefix(v1, v2 *Secret) bool { + return checkCustomPrefix(v1.GetSpec().GetAnnotations(), v2.GetSpec().GetAnnotations()) +} + +func ConvertSecretWatch(action WatchActionKind, filters []*SelectBy) ([]Event, error) { + var ( + m Secret + checkFuncs []SecretCheckFunc + ) + m.Spec = &SecretSpec{Annotations: &Annotations{}} + + for _, filter := range filters { + switch v := filter.By.(type) { + case *SelectBy_ID: + if m.ID != "" { + return nil, errConflictingFilters + } + m.ID = v.ID + checkFuncs = append(checkFuncs, SecretCheckID) + case *SelectBy_IDPrefix: + if m.ID != "" { + return nil, errConflictingFilters + } + m.ID = v.IDPrefix + checkFuncs = append(checkFuncs, SecretCheckIDPrefix) + case *SelectBy_Name: + if m.Spec.Annotations.Name != "" { + return nil, errConflictingFilters + } + m.Spec.Annotations.Name = v.Name + checkFuncs = append(checkFuncs, SecretCheckName) + case *SelectBy_NamePrefix: + if m.Spec.Annotations.Name != "" { + return nil, errConflictingFilters + } + m.Spec.Annotations.Name = v.NamePrefix + checkFuncs = append(checkFuncs, SecretCheckNamePrefix) + case *SelectBy_Custom: + if len(m.Spec.Annotations.Indices) != 0 { + return nil, errConflictingFilters + } + m.Spec.Annotations.Indices = []*IndexEntry{{Key: v.Custom.Index, Val: v.Custom.Value}} + checkFuncs = append(checkFuncs, SecretCheckCustom) + case *SelectBy_CustomPrefix: + if len(m.Spec.Annotations.Indices) != 0 { + return nil, errConflictingFilters + } + m.Spec.Annotations.Indices = []*IndexEntry{{Key: v.CustomPrefix.Index, Val: v.CustomPrefix.Value}} + checkFuncs = append(checkFuncs, SecretCheckCustomPrefix) + } + } + var events []Event + if (action & WatchActionKindCreate) != 0 { + events = append(events, EventCreateSecret{Secret: &m, Checks: checkFuncs}) + } + if (action & WatchActionKindUpdate) != 0 { + events = append(events, EventUpdateSecret{Secret: &m, Checks: checkFuncs}) + } + if (action & WatchActionKindRemove) != 0 { + events = append(events, EventDeleteSecret{Secret: &m, Checks: checkFuncs}) + } + if len(events) == 0 { + return nil, errUnrecognizedAction + } + return events, nil +} + +type SecretIndexerByID struct{} + +func (indexer SecretIndexerByID) FromArgs(args ...interface{}) ([]byte, error) { + return fromArgs(args...) +} + +func (indexer SecretIndexerByID) PrefixFromArgs(args ...interface{}) ([]byte, error) { + return prefixFromArgs(args...) +} + +func (indexer SecretIndexerByID) FromObject(obj interface{}) (bool, []byte, error) { + m := obj.(*Secret) + return true, []byte(m.ID + "\x00"), nil +} + +type SecretIndexerByName struct{} + +func (indexer SecretIndexerByName) FromArgs(args ...interface{}) ([]byte, error) { + return fromArgs(args...) +} + +func (indexer SecretIndexerByName) PrefixFromArgs(args ...interface{}) ([]byte, error) { + return prefixFromArgs(args...) +} + +func (indexer SecretIndexerByName) FromObject(obj interface{}) (bool, []byte, error) { + m := obj.(*Secret) + val := m.GetSpec().GetAnnotations().GetName() + return true, []byte(strings.ToLower(val) + "\x00"), nil +} + +type SecretCustomIndexer struct{} + +func (indexer SecretCustomIndexer) FromArgs(args ...interface{}) ([]byte, error) { + return fromArgs(args...) +} + +func (indexer SecretCustomIndexer) PrefixFromArgs(args ...interface{}) ([]byte, error) { + return prefixFromArgs(args...) +} + +func (indexer SecretCustomIndexer) FromObject(obj interface{}) (bool, [][]byte, error) { + m := obj.(*Secret) + return customIndexer("", m.GetSpec().GetAnnotations()) +} + +type ConfigCheckFunc func(t1, t2 *Config) bool + +type EventConfig interface { + IsEventConfig() bool +} + +type EventCreateConfig struct { + Config *Config + Checks []ConfigCheckFunc +} + +func (e EventCreateConfig) Matches(apiEvent go_events.Event) bool { + typedEvent, ok := apiEvent.(EventCreateConfig) + if !ok { + return false + } + + for _, check := range e.Checks { + if !check(e.Config, typedEvent.Config) { + return false + } + } + return true +} + +func (e EventCreateConfig) IsEventCreate() bool { + return true +} + +func (e EventCreateConfig) IsEventConfig() bool { + return true +} + +type EventUpdateConfig struct { + Config *Config + OldConfig *Config + Checks []ConfigCheckFunc +} + +func (e EventUpdateConfig) Matches(apiEvent go_events.Event) bool { + typedEvent, ok := apiEvent.(EventUpdateConfig) + if !ok { + return false + } + + for _, check := range e.Checks { + if !check(e.Config, typedEvent.Config) { + return false + } + } + return true +} + +func (e EventUpdateConfig) IsEventUpdate() bool { + return true +} + +func (e EventUpdateConfig) IsEventConfig() bool { + return true +} + +type EventDeleteConfig struct { + Config *Config + Checks []ConfigCheckFunc +} + +func (e EventDeleteConfig) Matches(apiEvent go_events.Event) bool { + typedEvent, ok := apiEvent.(EventDeleteConfig) + if !ok { + return false + } + + for _, check := range e.Checks { + if !check(e.Config, typedEvent.Config) { + return false + } + } + return true +} + +func (e EventDeleteConfig) IsEventDelete() bool { + return true +} + +func (e EventDeleteConfig) IsEventConfig() bool { + return true +} + +func (m *Config) CopyStoreObject() StoreObject { + return m.Copy() +} + +func (m *Config) SetMeta(meta *Meta) { + m.Meta = meta +} + +func (m *Config) EventCreate() Event { + return EventCreateConfig{Config: m} +} + +func (m *Config) EventUpdate(oldObject StoreObject) Event { + if oldObject != nil { + return EventUpdateConfig{Config: m, OldConfig: oldObject.(*Config)} + } else { + return EventUpdateConfig{Config: m} + } +} + +func (m *Config) EventDelete() Event { + return EventDeleteConfig{Config: m} +} + +func ConfigCheckID(v1, v2 *Config) bool { + return v1.ID == v2.ID +} + +func ConfigCheckIDPrefix(v1, v2 *Config) bool { + return strings.HasPrefix(v2.ID, v1.ID) +} + +func ConfigCheckName(v1, v2 *Config) bool { + return v1.GetSpec().GetAnnotations().GetName() == v2.GetSpec().GetAnnotations().GetName() +} + +func ConfigCheckNamePrefix(v1, v2 *Config) bool { + return strings.HasPrefix(v2.GetSpec().GetAnnotations().GetName(), v1.GetSpec().GetAnnotations().GetName()) +} + +func ConfigCheckCustom(v1, v2 *Config) bool { + return checkCustom(v1.GetSpec().GetAnnotations(), v2.GetSpec().GetAnnotations()) +} + +func ConfigCheckCustomPrefix(v1, v2 *Config) bool { + return checkCustomPrefix(v1.GetSpec().GetAnnotations(), v2.GetSpec().GetAnnotations()) +} + +func ConvertConfigWatch(action WatchActionKind, filters []*SelectBy) ([]Event, error) { + var ( + m Config + checkFuncs []ConfigCheckFunc + ) + m.Spec = &ConfigSpec{Annotations: &Annotations{}} + + for _, filter := range filters { + switch v := filter.By.(type) { + case *SelectBy_ID: + if m.ID != "" { + return nil, errConflictingFilters + } + m.ID = v.ID + checkFuncs = append(checkFuncs, ConfigCheckID) + case *SelectBy_IDPrefix: + if m.ID != "" { + return nil, errConflictingFilters + } + m.ID = v.IDPrefix + checkFuncs = append(checkFuncs, ConfigCheckIDPrefix) + case *SelectBy_Name: + if m.Spec.Annotations.Name != "" { + return nil, errConflictingFilters + } + m.Spec.Annotations.Name = v.Name + checkFuncs = append(checkFuncs, ConfigCheckName) + case *SelectBy_NamePrefix: + if m.Spec.Annotations.Name != "" { + return nil, errConflictingFilters + } + m.Spec.Annotations.Name = v.NamePrefix + checkFuncs = append(checkFuncs, ConfigCheckNamePrefix) + case *SelectBy_Custom: + if len(m.Spec.Annotations.Indices) != 0 { + return nil, errConflictingFilters + } + m.Spec.Annotations.Indices = []*IndexEntry{{Key: v.Custom.Index, Val: v.Custom.Value}} + checkFuncs = append(checkFuncs, ConfigCheckCustom) + case *SelectBy_CustomPrefix: + if len(m.Spec.Annotations.Indices) != 0 { + return nil, errConflictingFilters + } + m.Spec.Annotations.Indices = []*IndexEntry{{Key: v.CustomPrefix.Index, Val: v.CustomPrefix.Value}} + checkFuncs = append(checkFuncs, ConfigCheckCustomPrefix) + } + } + var events []Event + if (action & WatchActionKindCreate) != 0 { + events = append(events, EventCreateConfig{Config: &m, Checks: checkFuncs}) + } + if (action & WatchActionKindUpdate) != 0 { + events = append(events, EventUpdateConfig{Config: &m, Checks: checkFuncs}) + } + if (action & WatchActionKindRemove) != 0 { + events = append(events, EventDeleteConfig{Config: &m, Checks: checkFuncs}) + } + if len(events) == 0 { + return nil, errUnrecognizedAction + } + return events, nil +} + +type ConfigIndexerByID struct{} + +func (indexer ConfigIndexerByID) FromArgs(args ...interface{}) ([]byte, error) { + return fromArgs(args...) +} + +func (indexer ConfigIndexerByID) PrefixFromArgs(args ...interface{}) ([]byte, error) { + return prefixFromArgs(args...) +} + +func (indexer ConfigIndexerByID) FromObject(obj interface{}) (bool, []byte, error) { + m := obj.(*Config) + return true, []byte(m.ID + "\x00"), nil +} + +type ConfigIndexerByName struct{} + +func (indexer ConfigIndexerByName) FromArgs(args ...interface{}) ([]byte, error) { + return fromArgs(args...) +} + +func (indexer ConfigIndexerByName) PrefixFromArgs(args ...interface{}) ([]byte, error) { + return prefixFromArgs(args...) +} + +func (indexer ConfigIndexerByName) FromObject(obj interface{}) (bool, []byte, error) { + m := obj.(*Config) + val := m.GetSpec().GetAnnotations().GetName() + return true, []byte(strings.ToLower(val) + "\x00"), nil +} + +type ConfigCustomIndexer struct{} + +func (indexer ConfigCustomIndexer) FromArgs(args ...interface{}) ([]byte, error) { + return fromArgs(args...) +} + +func (indexer ConfigCustomIndexer) PrefixFromArgs(args ...interface{}) ([]byte, error) { + return prefixFromArgs(args...) +} + +func (indexer ConfigCustomIndexer) FromObject(obj interface{}) (bool, [][]byte, error) { + m := obj.(*Config) + return customIndexer("", m.GetSpec().GetAnnotations()) +} + +type ResourceCheckFunc func(t1, t2 *Resource) bool + +type EventResource interface { + IsEventResource() bool +} + +type EventCreateResource struct { + Resource *Resource + Checks []ResourceCheckFunc +} + +func (e EventCreateResource) Matches(apiEvent go_events.Event) bool { + typedEvent, ok := apiEvent.(EventCreateResource) + if !ok { + return false + } + + for _, check := range e.Checks { + if !check(e.Resource, typedEvent.Resource) { + return false + } + } + return true +} + +func (e EventCreateResource) IsEventCreate() bool { + return true +} + +func (e EventCreateResource) IsEventResource() bool { + return true +} + +type EventUpdateResource struct { + Resource *Resource + OldResource *Resource + Checks []ResourceCheckFunc +} + +func (e EventUpdateResource) Matches(apiEvent go_events.Event) bool { + typedEvent, ok := apiEvent.(EventUpdateResource) + if !ok { + return false + } + + for _, check := range e.Checks { + if !check(e.Resource, typedEvent.Resource) { + return false + } + } + return true +} + +func (e EventUpdateResource) IsEventUpdate() bool { + return true +} + +func (e EventUpdateResource) IsEventResource() bool { + return true +} + +type EventDeleteResource struct { + Resource *Resource + Checks []ResourceCheckFunc +} + +func (e EventDeleteResource) Matches(apiEvent go_events.Event) bool { + typedEvent, ok := apiEvent.(EventDeleteResource) + if !ok { + return false + } + + for _, check := range e.Checks { + if !check(e.Resource, typedEvent.Resource) { + return false + } + } + return true +} + +func (e EventDeleteResource) IsEventDelete() bool { + return true +} + +func (e EventDeleteResource) IsEventResource() bool { + return true +} + +func (m *Resource) CopyStoreObject() StoreObject { + return m.Copy() +} + +func (m *Resource) SetMeta(meta *Meta) { + m.Meta = meta +} + +func (m *Resource) EventCreate() Event { + return EventCreateResource{Resource: m} +} + +func (m *Resource) EventUpdate(oldObject StoreObject) Event { + if oldObject != nil { + return EventUpdateResource{Resource: m, OldResource: oldObject.(*Resource)} + } else { + return EventUpdateResource{Resource: m} + } +} + +func (m *Resource) EventDelete() Event { + return EventDeleteResource{Resource: m} +} + +func ResourceCheckID(v1, v2 *Resource) bool { + return v1.ID == v2.ID +} + +func ResourceCheckIDPrefix(v1, v2 *Resource) bool { + return strings.HasPrefix(v2.ID, v1.ID) +} + +func ResourceCheckName(v1, v2 *Resource) bool { + return v1.GetAnnotations().GetName() == v2.GetAnnotations().GetName() +} + +func ResourceCheckNamePrefix(v1, v2 *Resource) bool { + return strings.HasPrefix(v2.GetAnnotations().GetName(), v1.GetAnnotations().GetName()) +} + +func ResourceCheckCustom(v1, v2 *Resource) bool { + return checkCustom(v1.GetAnnotations(), v2.GetAnnotations()) +} + +func ResourceCheckCustomPrefix(v1, v2 *Resource) bool { + return checkCustomPrefix(v1.GetAnnotations(), v2.GetAnnotations()) +} + +func ResourceCheckKind(v1, v2 *Resource) bool { + return v1.Kind == v2.Kind +} + +func ConvertResourceWatch(action WatchActionKind, filters []*SelectBy, kind string) ([]Event, error) { + var ( + m Resource + checkFuncs []ResourceCheckFunc + ) + m.Annotations = &Annotations{} + m.Kind = kind + checkFuncs = append(checkFuncs, ResourceCheckKind) + + for _, filter := range filters { + switch v := filter.By.(type) { + case *SelectBy_ID: + if m.ID != "" { + return nil, errConflictingFilters + } + m.ID = v.ID + checkFuncs = append(checkFuncs, ResourceCheckID) + case *SelectBy_IDPrefix: + if m.ID != "" { + return nil, errConflictingFilters + } + m.ID = v.IDPrefix + checkFuncs = append(checkFuncs, ResourceCheckIDPrefix) + case *SelectBy_Name: + if m.Annotations.Name != "" { + return nil, errConflictingFilters + } + m.Annotations.Name = v.Name + checkFuncs = append(checkFuncs, ResourceCheckName) + case *SelectBy_NamePrefix: + if m.Annotations.Name != "" { + return nil, errConflictingFilters + } + m.Annotations.Name = v.NamePrefix + checkFuncs = append(checkFuncs, ResourceCheckNamePrefix) + case *SelectBy_Custom: + if len(m.Annotations.Indices) != 0 { + return nil, errConflictingFilters + } + m.Annotations.Indices = []*IndexEntry{{Key: v.Custom.Index, Val: v.Custom.Value}} + checkFuncs = append(checkFuncs, ResourceCheckCustom) + case *SelectBy_CustomPrefix: + if len(m.Annotations.Indices) != 0 { + return nil, errConflictingFilters + } + m.Annotations.Indices = []*IndexEntry{{Key: v.CustomPrefix.Index, Val: v.CustomPrefix.Value}} + checkFuncs = append(checkFuncs, ResourceCheckCustomPrefix) + } + } + var events []Event + if (action & WatchActionKindCreate) != 0 { + events = append(events, EventCreateResource{Resource: &m, Checks: checkFuncs}) + } + if (action & WatchActionKindUpdate) != 0 { + events = append(events, EventUpdateResource{Resource: &m, Checks: checkFuncs}) + } + if (action & WatchActionKindRemove) != 0 { + events = append(events, EventDeleteResource{Resource: &m, Checks: checkFuncs}) + } + if len(events) == 0 { + return nil, errUnrecognizedAction + } + return events, nil +} + +type ResourceIndexerByID struct{} + +func (indexer ResourceIndexerByID) FromArgs(args ...interface{}) ([]byte, error) { + return fromArgs(args...) +} + +func (indexer ResourceIndexerByID) PrefixFromArgs(args ...interface{}) ([]byte, error) { + return prefixFromArgs(args...) +} + +func (indexer ResourceIndexerByID) FromObject(obj interface{}) (bool, []byte, error) { + m := obj.(*Resource) + return true, []byte(m.ID + "\x00"), nil +} + +type ResourceIndexerByName struct{} + +func (indexer ResourceIndexerByName) FromArgs(args ...interface{}) ([]byte, error) { + return fromArgs(args...) +} + +func (indexer ResourceIndexerByName) PrefixFromArgs(args ...interface{}) ([]byte, error) { + return prefixFromArgs(args...) +} + +func (indexer ResourceIndexerByName) FromObject(obj interface{}) (bool, []byte, error) { + m := obj.(*Resource) + val := m.GetAnnotations().GetName() + return true, []byte(strings.ToLower(val) + "\x00"), nil +} + +type ResourceCustomIndexer struct{} + +func (indexer ResourceCustomIndexer) FromArgs(args ...interface{}) ([]byte, error) { + return fromArgs(args...) +} + +func (indexer ResourceCustomIndexer) PrefixFromArgs(args ...interface{}) ([]byte, error) { + return prefixFromArgs(args...) +} + +func (indexer ResourceCustomIndexer) FromObject(obj interface{}) (bool, [][]byte, error) { + m := obj.(*Resource) + return customIndexer("", m.GetAnnotations()) +} + +type ExtensionCheckFunc func(t1, t2 *Extension) bool + +type EventExtension interface { + IsEventExtension() bool +} + +type EventCreateExtension struct { + Extension *Extension + Checks []ExtensionCheckFunc +} + +func (e EventCreateExtension) Matches(apiEvent go_events.Event) bool { + typedEvent, ok := apiEvent.(EventCreateExtension) + if !ok { + return false + } + + for _, check := range e.Checks { + if !check(e.Extension, typedEvent.Extension) { + return false + } + } + return true +} + +func (e EventCreateExtension) IsEventCreate() bool { + return true +} + +func (e EventCreateExtension) IsEventExtension() bool { + return true +} + +type EventUpdateExtension struct { + Extension *Extension + OldExtension *Extension + Checks []ExtensionCheckFunc +} + +func (e EventUpdateExtension) Matches(apiEvent go_events.Event) bool { + typedEvent, ok := apiEvent.(EventUpdateExtension) + if !ok { + return false + } + + for _, check := range e.Checks { + if !check(e.Extension, typedEvent.Extension) { + return false + } + } + return true +} + +func (e EventUpdateExtension) IsEventUpdate() bool { + return true +} + +func (e EventUpdateExtension) IsEventExtension() bool { + return true +} + +type EventDeleteExtension struct { + Extension *Extension + Checks []ExtensionCheckFunc +} + +func (e EventDeleteExtension) Matches(apiEvent go_events.Event) bool { + typedEvent, ok := apiEvent.(EventDeleteExtension) + if !ok { + return false + } + + for _, check := range e.Checks { + if !check(e.Extension, typedEvent.Extension) { + return false + } + } + return true +} + +func (e EventDeleteExtension) IsEventDelete() bool { + return true +} + +func (e EventDeleteExtension) IsEventExtension() bool { + return true +} + +func (m *Extension) CopyStoreObject() StoreObject { + return m.Copy() +} + +func (m *Extension) SetMeta(meta *Meta) { + m.Meta = meta +} + +func (m *Extension) EventCreate() Event { + return EventCreateExtension{Extension: m} +} + +func (m *Extension) EventUpdate(oldObject StoreObject) Event { + if oldObject != nil { + return EventUpdateExtension{Extension: m, OldExtension: oldObject.(*Extension)} + } else { + return EventUpdateExtension{Extension: m} + } +} + +func (m *Extension) EventDelete() Event { + return EventDeleteExtension{Extension: m} +} + +func ExtensionCheckID(v1, v2 *Extension) bool { + return v1.ID == v2.ID +} + +func ExtensionCheckIDPrefix(v1, v2 *Extension) bool { + return strings.HasPrefix(v2.ID, v1.ID) +} + +func ExtensionCheckName(v1, v2 *Extension) bool { + return v1.GetAnnotations().GetName() == v2.GetAnnotations().GetName() +} + +func ExtensionCheckNamePrefix(v1, v2 *Extension) bool { + return strings.HasPrefix(v2.GetAnnotations().GetName(), v1.GetAnnotations().GetName()) +} + +func ExtensionCheckCustom(v1, v2 *Extension) bool { + return checkCustom(v1.GetAnnotations(), v2.GetAnnotations()) +} + +func ExtensionCheckCustomPrefix(v1, v2 *Extension) bool { + return checkCustomPrefix(v1.GetAnnotations(), v2.GetAnnotations()) +} + +func ConvertExtensionWatch(action WatchActionKind, filters []*SelectBy) ([]Event, error) { + var ( + m Extension + checkFuncs []ExtensionCheckFunc + ) + m.Annotations = &Annotations{} + + for _, filter := range filters { + switch v := filter.By.(type) { + case *SelectBy_ID: + if m.ID != "" { + return nil, errConflictingFilters + } + m.ID = v.ID + checkFuncs = append(checkFuncs, ExtensionCheckID) + case *SelectBy_IDPrefix: + if m.ID != "" { + return nil, errConflictingFilters + } + m.ID = v.IDPrefix + checkFuncs = append(checkFuncs, ExtensionCheckIDPrefix) + case *SelectBy_Name: + if m.Annotations.Name != "" { + return nil, errConflictingFilters + } + m.Annotations.Name = v.Name + checkFuncs = append(checkFuncs, ExtensionCheckName) + case *SelectBy_NamePrefix: + if m.Annotations.Name != "" { + return nil, errConflictingFilters + } + m.Annotations.Name = v.NamePrefix + checkFuncs = append(checkFuncs, ExtensionCheckNamePrefix) + case *SelectBy_Custom: + if len(m.Annotations.Indices) != 0 { + return nil, errConflictingFilters + } + m.Annotations.Indices = []*IndexEntry{{Key: v.Custom.Index, Val: v.Custom.Value}} + checkFuncs = append(checkFuncs, ExtensionCheckCustom) + case *SelectBy_CustomPrefix: + if len(m.Annotations.Indices) != 0 { + return nil, errConflictingFilters + } + m.Annotations.Indices = []*IndexEntry{{Key: v.CustomPrefix.Index, Val: v.CustomPrefix.Value}} + checkFuncs = append(checkFuncs, ExtensionCheckCustomPrefix) + } + } + var events []Event + if (action & WatchActionKindCreate) != 0 { + events = append(events, EventCreateExtension{Extension: &m, Checks: checkFuncs}) + } + if (action & WatchActionKindUpdate) != 0 { + events = append(events, EventUpdateExtension{Extension: &m, Checks: checkFuncs}) + } + if (action & WatchActionKindRemove) != 0 { + events = append(events, EventDeleteExtension{Extension: &m, Checks: checkFuncs}) + } + if len(events) == 0 { + return nil, errUnrecognizedAction + } + return events, nil +} + +type ExtensionIndexerByID struct{} + +func (indexer ExtensionIndexerByID) FromArgs(args ...interface{}) ([]byte, error) { + return fromArgs(args...) +} + +func (indexer ExtensionIndexerByID) PrefixFromArgs(args ...interface{}) ([]byte, error) { + return prefixFromArgs(args...) +} + +func (indexer ExtensionIndexerByID) FromObject(obj interface{}) (bool, []byte, error) { + m := obj.(*Extension) + return true, []byte(m.ID + "\x00"), nil +} + +type ExtensionIndexerByName struct{} + +func (indexer ExtensionIndexerByName) FromArgs(args ...interface{}) ([]byte, error) { + return fromArgs(args...) +} + +func (indexer ExtensionIndexerByName) PrefixFromArgs(args ...interface{}) ([]byte, error) { + return prefixFromArgs(args...) +} + +func (indexer ExtensionIndexerByName) FromObject(obj interface{}) (bool, []byte, error) { + m := obj.(*Extension) + val := m.GetAnnotations().GetName() + return true, []byte(strings.ToLower(val) + "\x00"), nil +} + +type ExtensionCustomIndexer struct{} + +func (indexer ExtensionCustomIndexer) FromArgs(args ...interface{}) ([]byte, error) { + return fromArgs(args...) +} + +func (indexer ExtensionCustomIndexer) PrefixFromArgs(args ...interface{}) ([]byte, error) { + return prefixFromArgs(args...) +} + +func (indexer ExtensionCustomIndexer) FromObject(obj interface{}) (bool, [][]byte, error) { + m := obj.(*Extension) + return customIndexer("", m.GetAnnotations()) +} + +type VolumeCheckFunc func(t1, t2 *Volume) bool + +type EventVolume interface { + IsEventVolume() bool +} + +type EventCreateVolume struct { + Volume *Volume + Checks []VolumeCheckFunc +} + +func (e EventCreateVolume) Matches(apiEvent go_events.Event) bool { + typedEvent, ok := apiEvent.(EventCreateVolume) + if !ok { + return false + } + + for _, check := range e.Checks { + if !check(e.Volume, typedEvent.Volume) { + return false + } + } + return true +} + +func (e EventCreateVolume) IsEventCreate() bool { + return true +} + +func (e EventCreateVolume) IsEventVolume() bool { + return true +} + +type EventUpdateVolume struct { + Volume *Volume + OldVolume *Volume + Checks []VolumeCheckFunc +} + +func (e EventUpdateVolume) Matches(apiEvent go_events.Event) bool { + typedEvent, ok := apiEvent.(EventUpdateVolume) + if !ok { + return false + } + + for _, check := range e.Checks { + if !check(e.Volume, typedEvent.Volume) { + return false + } + } + return true +} + +func (e EventUpdateVolume) IsEventUpdate() bool { + return true +} + +func (e EventUpdateVolume) IsEventVolume() bool { + return true +} + +type EventDeleteVolume struct { + Volume *Volume + Checks []VolumeCheckFunc +} + +func (e EventDeleteVolume) Matches(apiEvent go_events.Event) bool { + typedEvent, ok := apiEvent.(EventDeleteVolume) + if !ok { + return false + } + + for _, check := range e.Checks { + if !check(e.Volume, typedEvent.Volume) { + return false + } + } + return true +} + +func (e EventDeleteVolume) IsEventDelete() bool { + return true +} + +func (e EventDeleteVolume) IsEventVolume() bool { + return true +} + +func (m *Volume) CopyStoreObject() StoreObject { + return m.Copy() +} + +func (m *Volume) SetMeta(meta *Meta) { + m.Meta = meta +} + +func (m *Volume) EventCreate() Event { + return EventCreateVolume{Volume: m} +} + +func (m *Volume) EventUpdate(oldObject StoreObject) Event { + if oldObject != nil { + return EventUpdateVolume{Volume: m, OldVolume: oldObject.(*Volume)} + } else { + return EventUpdateVolume{Volume: m} + } +} + +func (m *Volume) EventDelete() Event { + return EventDeleteVolume{Volume: m} +} + +func VolumeCheckID(v1, v2 *Volume) bool { + return v1.ID == v2.ID +} + +func VolumeCheckIDPrefix(v1, v2 *Volume) bool { + return strings.HasPrefix(v2.ID, v1.ID) +} + +func VolumeCheckName(v1, v2 *Volume) bool { + return v1.GetSpec().GetAnnotations().GetName() == v2.GetSpec().GetAnnotations().GetName() +} + +func VolumeCheckNamePrefix(v1, v2 *Volume) bool { + return strings.HasPrefix(v2.GetSpec().GetAnnotations().GetName(), v1.GetSpec().GetAnnotations().GetName()) +} + +func VolumeCheckCustom(v1, v2 *Volume) bool { + return checkCustom(v1.GetSpec().GetAnnotations(), v2.GetSpec().GetAnnotations()) +} + +func VolumeCheckCustomPrefix(v1, v2 *Volume) bool { + return checkCustomPrefix(v1.GetSpec().GetAnnotations(), v2.GetSpec().GetAnnotations()) +} + +func ConvertVolumeWatch(action WatchActionKind, filters []*SelectBy) ([]Event, error) { + var ( + m Volume + checkFuncs []VolumeCheckFunc + ) + m.Spec = &VolumeSpec{Annotations: &Annotations{}} + + for _, filter := range filters { + switch v := filter.By.(type) { + case *SelectBy_ID: + if m.ID != "" { + return nil, errConflictingFilters + } + m.ID = v.ID + checkFuncs = append(checkFuncs, VolumeCheckID) + case *SelectBy_IDPrefix: + if m.ID != "" { + return nil, errConflictingFilters + } + m.ID = v.IDPrefix + checkFuncs = append(checkFuncs, VolumeCheckIDPrefix) + case *SelectBy_Name: + if m.Spec.Annotations.Name != "" { + return nil, errConflictingFilters + } + m.Spec.Annotations.Name = v.Name + checkFuncs = append(checkFuncs, VolumeCheckName) + case *SelectBy_NamePrefix: + if m.Spec.Annotations.Name != "" { + return nil, errConflictingFilters + } + m.Spec.Annotations.Name = v.NamePrefix + checkFuncs = append(checkFuncs, VolumeCheckNamePrefix) + case *SelectBy_Custom: + if len(m.Spec.Annotations.Indices) != 0 { + return nil, errConflictingFilters + } + m.Spec.Annotations.Indices = []*IndexEntry{{Key: v.Custom.Index, Val: v.Custom.Value}} + checkFuncs = append(checkFuncs, VolumeCheckCustom) + case *SelectBy_CustomPrefix: + if len(m.Spec.Annotations.Indices) != 0 { + return nil, errConflictingFilters + } + m.Spec.Annotations.Indices = []*IndexEntry{{Key: v.CustomPrefix.Index, Val: v.CustomPrefix.Value}} + checkFuncs = append(checkFuncs, VolumeCheckCustomPrefix) + } + } + var events []Event + if (action & WatchActionKindCreate) != 0 { + events = append(events, EventCreateVolume{Volume: &m, Checks: checkFuncs}) + } + if (action & WatchActionKindUpdate) != 0 { + events = append(events, EventUpdateVolume{Volume: &m, Checks: checkFuncs}) + } + if (action & WatchActionKindRemove) != 0 { + events = append(events, EventDeleteVolume{Volume: &m, Checks: checkFuncs}) + } + if len(events) == 0 { + return nil, errUnrecognizedAction + } + return events, nil +} + +type VolumeIndexerByID struct{} + +func (indexer VolumeIndexerByID) FromArgs(args ...interface{}) ([]byte, error) { + return fromArgs(args...) +} + +func (indexer VolumeIndexerByID) PrefixFromArgs(args ...interface{}) ([]byte, error) { + return prefixFromArgs(args...) +} + +func (indexer VolumeIndexerByID) FromObject(obj interface{}) (bool, []byte, error) { + m := obj.(*Volume) + return true, []byte(m.ID + "\x00"), nil +} + +type VolumeIndexerByName struct{} + +func (indexer VolumeIndexerByName) FromArgs(args ...interface{}) ([]byte, error) { + return fromArgs(args...) +} + +func (indexer VolumeIndexerByName) PrefixFromArgs(args ...interface{}) ([]byte, error) { + return prefixFromArgs(args...) +} + +func (indexer VolumeIndexerByName) FromObject(obj interface{}) (bool, []byte, error) { + m := obj.(*Volume) + val := m.GetSpec().GetAnnotations().GetName() + return true, []byte(strings.ToLower(val) + "\x00"), nil +} + +type VolumeCustomIndexer struct{} + +func (indexer VolumeCustomIndexer) FromArgs(args ...interface{}) ([]byte, error) { + return fromArgs(args...) +} + +func (indexer VolumeCustomIndexer) PrefixFromArgs(args ...interface{}) ([]byte, error) { + return prefixFromArgs(args...) +} + +func (indexer VolumeCustomIndexer) FromObject(obj interface{}) (bool, [][]byte, error) { + m := obj.(*Volume) + return customIndexer("", m.GetSpec().GetAnnotations()) +} + +func NewStoreAction(c Event) (StoreAction, error) { + var sa StoreAction + switch v := c.(type) { + case EventCreateNode: + sa.Action = StoreActionKindCreate + sa.Target = &StoreAction_Node{Node: v.Node} + case EventUpdateNode: + sa.Action = StoreActionKindUpdate + sa.Target = &StoreAction_Node{Node: v.Node} + case EventDeleteNode: + sa.Action = StoreActionKindRemove + sa.Target = &StoreAction_Node{Node: v.Node} + case EventCreateService: + sa.Action = StoreActionKindCreate + sa.Target = &StoreAction_Service{Service: v.Service} + case EventUpdateService: + sa.Action = StoreActionKindUpdate + sa.Target = &StoreAction_Service{Service: v.Service} + case EventDeleteService: + sa.Action = StoreActionKindRemove + sa.Target = &StoreAction_Service{Service: v.Service} + case EventCreateTask: + sa.Action = StoreActionKindCreate + sa.Target = &StoreAction_Task{Task: v.Task} + case EventUpdateTask: + sa.Action = StoreActionKindUpdate + sa.Target = &StoreAction_Task{Task: v.Task} + case EventDeleteTask: + sa.Action = StoreActionKindRemove + sa.Target = &StoreAction_Task{Task: v.Task} + case EventCreateNetwork: + sa.Action = StoreActionKindCreate + sa.Target = &StoreAction_Network{Network: v.Network} + case EventUpdateNetwork: + sa.Action = StoreActionKindUpdate + sa.Target = &StoreAction_Network{Network: v.Network} + case EventDeleteNetwork: + sa.Action = StoreActionKindRemove + sa.Target = &StoreAction_Network{Network: v.Network} + case EventCreateCluster: + sa.Action = StoreActionKindCreate + sa.Target = &StoreAction_Cluster{Cluster: v.Cluster} + case EventUpdateCluster: + sa.Action = StoreActionKindUpdate + sa.Target = &StoreAction_Cluster{Cluster: v.Cluster} + case EventDeleteCluster: + sa.Action = StoreActionKindRemove + sa.Target = &StoreAction_Cluster{Cluster: v.Cluster} + case EventCreateSecret: + sa.Action = StoreActionKindCreate + sa.Target = &StoreAction_Secret{Secret: v.Secret} + case EventUpdateSecret: + sa.Action = StoreActionKindUpdate + sa.Target = &StoreAction_Secret{Secret: v.Secret} + case EventDeleteSecret: + sa.Action = StoreActionKindRemove + sa.Target = &StoreAction_Secret{Secret: v.Secret} + case EventCreateConfig: + sa.Action = StoreActionKindCreate + sa.Target = &StoreAction_Config{Config: v.Config} + case EventUpdateConfig: + sa.Action = StoreActionKindUpdate + sa.Target = &StoreAction_Config{Config: v.Config} + case EventDeleteConfig: + sa.Action = StoreActionKindRemove + sa.Target = &StoreAction_Config{Config: v.Config} + case EventCreateResource: + sa.Action = StoreActionKindCreate + sa.Target = &StoreAction_Resource{Resource: v.Resource} + case EventUpdateResource: + sa.Action = StoreActionKindUpdate + sa.Target = &StoreAction_Resource{Resource: v.Resource} + case EventDeleteResource: + sa.Action = StoreActionKindRemove + sa.Target = &StoreAction_Resource{Resource: v.Resource} + case EventCreateExtension: + sa.Action = StoreActionKindCreate + sa.Target = &StoreAction_Extension{Extension: v.Extension} + case EventUpdateExtension: + sa.Action = StoreActionKindUpdate + sa.Target = &StoreAction_Extension{Extension: v.Extension} + case EventDeleteExtension: + sa.Action = StoreActionKindRemove + sa.Target = &StoreAction_Extension{Extension: v.Extension} + case EventCreateVolume: + sa.Action = StoreActionKindCreate + sa.Target = &StoreAction_Volume{Volume: v.Volume} + case EventUpdateVolume: + sa.Action = StoreActionKindUpdate + sa.Target = &StoreAction_Volume{Volume: v.Volume} + case EventDeleteVolume: + sa.Action = StoreActionKindRemove + sa.Target = &StoreAction_Volume{Volume: v.Volume} + default: + return StoreAction{}, errUnknownStoreAction + } + return sa, nil +} + +func EventFromStoreAction(sa StoreAction, oldObject StoreObject) (Event, error) { + switch v := sa.Target.(type) { + case *StoreAction_Node: + switch sa.Action { + case StoreActionKindCreate: + return EventCreateNode{Node: v.Node}, nil + case StoreActionKindUpdate: + if oldObject != nil { + return EventUpdateNode{Node: v.Node, OldNode: oldObject.(*Node)}, nil + } else { + return EventUpdateNode{Node: v.Node}, nil + } + case StoreActionKindRemove: + return EventDeleteNode{Node: v.Node}, nil + } + case *StoreAction_Service: + switch sa.Action { + case StoreActionKindCreate: + return EventCreateService{Service: v.Service}, nil + case StoreActionKindUpdate: + if oldObject != nil { + return EventUpdateService{Service: v.Service, OldService: oldObject.(*Service)}, nil + } else { + return EventUpdateService{Service: v.Service}, nil + } + case StoreActionKindRemove: + return EventDeleteService{Service: v.Service}, nil + } + case *StoreAction_Task: + switch sa.Action { + case StoreActionKindCreate: + return EventCreateTask{Task: v.Task}, nil + case StoreActionKindUpdate: + if oldObject != nil { + return EventUpdateTask{Task: v.Task, OldTask: oldObject.(*Task)}, nil + } else { + return EventUpdateTask{Task: v.Task}, nil + } + case StoreActionKindRemove: + return EventDeleteTask{Task: v.Task}, nil + } + case *StoreAction_Network: + switch sa.Action { + case StoreActionKindCreate: + return EventCreateNetwork{Network: v.Network}, nil + case StoreActionKindUpdate: + if oldObject != nil { + return EventUpdateNetwork{Network: v.Network, OldNetwork: oldObject.(*Network)}, nil + } else { + return EventUpdateNetwork{Network: v.Network}, nil + } + case StoreActionKindRemove: + return EventDeleteNetwork{Network: v.Network}, nil + } + case *StoreAction_Cluster: + switch sa.Action { + case StoreActionKindCreate: + return EventCreateCluster{Cluster: v.Cluster}, nil + case StoreActionKindUpdate: + if oldObject != nil { + return EventUpdateCluster{Cluster: v.Cluster, OldCluster: oldObject.(*Cluster)}, nil + } else { + return EventUpdateCluster{Cluster: v.Cluster}, nil + } + case StoreActionKindRemove: + return EventDeleteCluster{Cluster: v.Cluster}, nil + } + case *StoreAction_Secret: + switch sa.Action { + case StoreActionKindCreate: + return EventCreateSecret{Secret: v.Secret}, nil + case StoreActionKindUpdate: + if oldObject != nil { + return EventUpdateSecret{Secret: v.Secret, OldSecret: oldObject.(*Secret)}, nil + } else { + return EventUpdateSecret{Secret: v.Secret}, nil + } + case StoreActionKindRemove: + return EventDeleteSecret{Secret: v.Secret}, nil + } + case *StoreAction_Config: + switch sa.Action { + case StoreActionKindCreate: + return EventCreateConfig{Config: v.Config}, nil + case StoreActionKindUpdate: + if oldObject != nil { + return EventUpdateConfig{Config: v.Config, OldConfig: oldObject.(*Config)}, nil + } else { + return EventUpdateConfig{Config: v.Config}, nil + } + case StoreActionKindRemove: + return EventDeleteConfig{Config: v.Config}, nil + } + case *StoreAction_Resource: + switch sa.Action { + case StoreActionKindCreate: + return EventCreateResource{Resource: v.Resource}, nil + case StoreActionKindUpdate: + if oldObject != nil { + return EventUpdateResource{Resource: v.Resource, OldResource: oldObject.(*Resource)}, nil + } else { + return EventUpdateResource{Resource: v.Resource}, nil + } + case StoreActionKindRemove: + return EventDeleteResource{Resource: v.Resource}, nil + } + case *StoreAction_Extension: + switch sa.Action { + case StoreActionKindCreate: + return EventCreateExtension{Extension: v.Extension}, nil + case StoreActionKindUpdate: + if oldObject != nil { + return EventUpdateExtension{Extension: v.Extension, OldExtension: oldObject.(*Extension)}, nil + } else { + return EventUpdateExtension{Extension: v.Extension}, nil + } + case StoreActionKindRemove: + return EventDeleteExtension{Extension: v.Extension}, nil + } + case *StoreAction_Volume: + switch sa.Action { + case StoreActionKindCreate: + return EventCreateVolume{Volume: v.Volume}, nil + case StoreActionKindUpdate: + if oldObject != nil { + return EventUpdateVolume{Volume: v.Volume, OldVolume: oldObject.(*Volume)}, nil + } else { + return EventUpdateVolume{Volume: v.Volume}, nil + } + case StoreActionKindRemove: + return EventDeleteVolume{Volume: v.Volume}, nil + } + } + return nil, errUnknownStoreAction +} + +func WatchMessageEvent(c Event) *WatchMessage_Event { + switch v := c.(type) { + case EventCreateNode: + return &WatchMessage_Event{Action: WatchActionKindCreate, Object: &Object{Object: &Object_Node{Node: v.Node}}} + case EventUpdateNode: + if v.OldNode != nil { + return &WatchMessage_Event{Action: WatchActionKindUpdate, Object: &Object{Object: &Object_Node{Node: v.Node}}, OldObject: &Object{Object: &Object_Node{Node: v.OldNode}}} + } else { + return &WatchMessage_Event{Action: WatchActionKindUpdate, Object: &Object{Object: &Object_Node{Node: v.Node}}} + } + case EventDeleteNode: + return &WatchMessage_Event{Action: WatchActionKindRemove, Object: &Object{Object: &Object_Node{Node: v.Node}}} + case EventCreateService: + return &WatchMessage_Event{Action: WatchActionKindCreate, Object: &Object{Object: &Object_Service{Service: v.Service}}} + case EventUpdateService: + if v.OldService != nil { + return &WatchMessage_Event{Action: WatchActionKindUpdate, Object: &Object{Object: &Object_Service{Service: v.Service}}, OldObject: &Object{Object: &Object_Service{Service: v.OldService}}} + } else { + return &WatchMessage_Event{Action: WatchActionKindUpdate, Object: &Object{Object: &Object_Service{Service: v.Service}}} + } + case EventDeleteService: + return &WatchMessage_Event{Action: WatchActionKindRemove, Object: &Object{Object: &Object_Service{Service: v.Service}}} + case EventCreateTask: + return &WatchMessage_Event{Action: WatchActionKindCreate, Object: &Object{Object: &Object_Task{Task: v.Task}}} + case EventUpdateTask: + if v.OldTask != nil { + return &WatchMessage_Event{Action: WatchActionKindUpdate, Object: &Object{Object: &Object_Task{Task: v.Task}}, OldObject: &Object{Object: &Object_Task{Task: v.OldTask}}} + } else { + return &WatchMessage_Event{Action: WatchActionKindUpdate, Object: &Object{Object: &Object_Task{Task: v.Task}}} + } + case EventDeleteTask: + return &WatchMessage_Event{Action: WatchActionKindRemove, Object: &Object{Object: &Object_Task{Task: v.Task}}} + case EventCreateNetwork: + return &WatchMessage_Event{Action: WatchActionKindCreate, Object: &Object{Object: &Object_Network{Network: v.Network}}} + case EventUpdateNetwork: + if v.OldNetwork != nil { + return &WatchMessage_Event{Action: WatchActionKindUpdate, Object: &Object{Object: &Object_Network{Network: v.Network}}, OldObject: &Object{Object: &Object_Network{Network: v.OldNetwork}}} + } else { + return &WatchMessage_Event{Action: WatchActionKindUpdate, Object: &Object{Object: &Object_Network{Network: v.Network}}} + } + case EventDeleteNetwork: + return &WatchMessage_Event{Action: WatchActionKindRemove, Object: &Object{Object: &Object_Network{Network: v.Network}}} + case EventCreateCluster: + return &WatchMessage_Event{Action: WatchActionKindCreate, Object: &Object{Object: &Object_Cluster{Cluster: v.Cluster}}} + case EventUpdateCluster: + if v.OldCluster != nil { + return &WatchMessage_Event{Action: WatchActionKindUpdate, Object: &Object{Object: &Object_Cluster{Cluster: v.Cluster}}, OldObject: &Object{Object: &Object_Cluster{Cluster: v.OldCluster}}} + } else { + return &WatchMessage_Event{Action: WatchActionKindUpdate, Object: &Object{Object: &Object_Cluster{Cluster: v.Cluster}}} + } + case EventDeleteCluster: + return &WatchMessage_Event{Action: WatchActionKindRemove, Object: &Object{Object: &Object_Cluster{Cluster: v.Cluster}}} + case EventCreateSecret: + return &WatchMessage_Event{Action: WatchActionKindCreate, Object: &Object{Object: &Object_Secret{Secret: v.Secret}}} + case EventUpdateSecret: + if v.OldSecret != nil { + return &WatchMessage_Event{Action: WatchActionKindUpdate, Object: &Object{Object: &Object_Secret{Secret: v.Secret}}, OldObject: &Object{Object: &Object_Secret{Secret: v.OldSecret}}} + } else { + return &WatchMessage_Event{Action: WatchActionKindUpdate, Object: &Object{Object: &Object_Secret{Secret: v.Secret}}} + } + case EventDeleteSecret: + return &WatchMessage_Event{Action: WatchActionKindRemove, Object: &Object{Object: &Object_Secret{Secret: v.Secret}}} + case EventCreateConfig: + return &WatchMessage_Event{Action: WatchActionKindCreate, Object: &Object{Object: &Object_Config{Config: v.Config}}} + case EventUpdateConfig: + if v.OldConfig != nil { + return &WatchMessage_Event{Action: WatchActionKindUpdate, Object: &Object{Object: &Object_Config{Config: v.Config}}, OldObject: &Object{Object: &Object_Config{Config: v.OldConfig}}} + } else { + return &WatchMessage_Event{Action: WatchActionKindUpdate, Object: &Object{Object: &Object_Config{Config: v.Config}}} + } + case EventDeleteConfig: + return &WatchMessage_Event{Action: WatchActionKindRemove, Object: &Object{Object: &Object_Config{Config: v.Config}}} + case EventCreateResource: + return &WatchMessage_Event{Action: WatchActionKindCreate, Object: &Object{Object: &Object_Resource{Resource: v.Resource}}} + case EventUpdateResource: + if v.OldResource != nil { + return &WatchMessage_Event{Action: WatchActionKindUpdate, Object: &Object{Object: &Object_Resource{Resource: v.Resource}}, OldObject: &Object{Object: &Object_Resource{Resource: v.OldResource}}} + } else { + return &WatchMessage_Event{Action: WatchActionKindUpdate, Object: &Object{Object: &Object_Resource{Resource: v.Resource}}} + } + case EventDeleteResource: + return &WatchMessage_Event{Action: WatchActionKindRemove, Object: &Object{Object: &Object_Resource{Resource: v.Resource}}} + case EventCreateExtension: + return &WatchMessage_Event{Action: WatchActionKindCreate, Object: &Object{Object: &Object_Extension{Extension: v.Extension}}} + case EventUpdateExtension: + if v.OldExtension != nil { + return &WatchMessage_Event{Action: WatchActionKindUpdate, Object: &Object{Object: &Object_Extension{Extension: v.Extension}}, OldObject: &Object{Object: &Object_Extension{Extension: v.OldExtension}}} + } else { + return &WatchMessage_Event{Action: WatchActionKindUpdate, Object: &Object{Object: &Object_Extension{Extension: v.Extension}}} + } + case EventDeleteExtension: + return &WatchMessage_Event{Action: WatchActionKindRemove, Object: &Object{Object: &Object_Extension{Extension: v.Extension}}} + case EventCreateVolume: + return &WatchMessage_Event{Action: WatchActionKindCreate, Object: &Object{Object: &Object_Volume{Volume: v.Volume}}} + case EventUpdateVolume: + if v.OldVolume != nil { + return &WatchMessage_Event{Action: WatchActionKindUpdate, Object: &Object{Object: &Object_Volume{Volume: v.Volume}}, OldObject: &Object{Object: &Object_Volume{Volume: v.OldVolume}}} + } else { + return &WatchMessage_Event{Action: WatchActionKindUpdate, Object: &Object{Object: &Object_Volume{Volume: v.Volume}}} + } + case EventDeleteVolume: + return &WatchMessage_Event{Action: WatchActionKindRemove, Object: &Object{Object: &Object_Volume{Volume: v.Volume}}} + } + return nil +} + +func ConvertWatchArgs(entries []*WatchRequest_WatchEntry) ([]Event, error) { + var events []Event + for _, entry := range entries { + var newEvents []Event + var err error + switch entry.Kind { + case "": + return nil, errNoKindSpecified + case "node": + newEvents, err = ConvertNodeWatch(entry.Action, entry.Filters) + case "service": + newEvents, err = ConvertServiceWatch(entry.Action, entry.Filters) + case "task": + newEvents, err = ConvertTaskWatch(entry.Action, entry.Filters) + case "network": + newEvents, err = ConvertNetworkWatch(entry.Action, entry.Filters) + case "cluster": + newEvents, err = ConvertClusterWatch(entry.Action, entry.Filters) + case "secret": + newEvents, err = ConvertSecretWatch(entry.Action, entry.Filters) + case "config": + newEvents, err = ConvertConfigWatch(entry.Action, entry.Filters) + default: + newEvents, err = ConvertResourceWatch(entry.Action, entry.Filters, entry.Kind) + case "extension": + newEvents, err = ConvertExtensionWatch(entry.Action, entry.Filters) + case "volume": + newEvents, err = ConvertVolumeWatch(entry.Action, entry.Filters) + } + if err != nil { + return nil, err + } + events = append(events, newEvents...) + } + return events, nil +} diff --git a/api/objects.proto b/api/objects.proto index 0da72c4d4c..f80b72ec74 100644 --- a/api/objects.proto +++ b/api/objects.proto @@ -2,12 +2,13 @@ syntax = "proto3"; package docker.swarmkit.v1; -import "github.com/docker/swarmkit/api/types.proto"; -import "github.com/docker/swarmkit/api/specs.proto"; +option go_package = "github.com/moby/swarmkit/v2/api"; + +import "api/types.proto"; +import "api/specs.proto"; import "google/protobuf/timestamp.proto"; -import "gogoproto/gogo.proto"; import "google/protobuf/any.proto"; -import "github.com/docker/swarmkit/protobuf/plugin/plugin.proto"; +import "protobuf/plugin/plugin.proto"; // This file contains definitions for all first-class objects in the cluster // API. Such types typically have a corresponding specification, with the @@ -16,7 +17,7 @@ import "github.com/docker/swarmkit/protobuf/plugin/plugin.proto"; // Meta contains metadata about objects. Every object contains a meta field. message Meta { // Version tracks the current version of the object. - Version version = 1 [(gogoproto.nullable) = false]; + Version version = 1; // Object timestamps. // Note: can't use stdtime because these fields are nullable. @@ -42,18 +43,18 @@ message Node { // ID specifies the identity of the node. string id = 1; - Meta meta = 2 [(gogoproto.nullable) = false]; + Meta meta = 2; // Spec defines the desired state of the node as specified by the user. // The system will honor this and will *never* modify it. - NodeSpec spec = 3 [(gogoproto.nullable) = false]; + NodeSpec spec = 3; // Description encapsulated the properties of the Node as reported by the // agent. NodeDescription description = 4; // Status provides the current status of the node, as seen by the manager. - NodeStatus status = 5 [(gogoproto.nullable) = false]; + NodeStatus status = 5; // ManagerStatus provides the current status of the node's manager // component, if the node is a manager. @@ -64,7 +65,7 @@ message Node { NetworkAttachment attachment = 7 [deprecated=true]; // Certificate is the TLS certificate issued for the node, if any. - Certificate certificate = 8 [(gogoproto.nullable) = false]; + Certificate certificate = 8; // Role is the *observed* role for this node. It differs from the // desired role set in Node.Spec.Role because the role here is only @@ -101,9 +102,9 @@ message Service { string id = 1; - Meta meta = 2 [(gogoproto.nullable) = false]; + Meta meta = 2; - ServiceSpec spec = 3 [(gogoproto.nullable) = false]; + ServiceSpec spec = 3; // SpecVersion versions Spec, to identify changes in the spec. Note that // this is not directly comparable to the service's Version. @@ -174,7 +175,7 @@ message Endpoint { // VirtualIPs specifies the IP addresses under which this endpoint will be // made available. - repeated VirtualIP virtual_ips = 3 [(gogoproto.customname) = "VirtualIPs"]; + repeated VirtualIP virtual_ips = 3 [(docker.protobuf.plugin.go_name) = "VirtualIPs"]; } // Task specifies the parameters for implementing a Spec. A task is effectively @@ -198,11 +199,11 @@ message Task { string id = 1; - Meta meta = 2 [(gogoproto.nullable) = false]; + Meta meta = 2; // Spec defines the desired state of the task as specified by the user. // The system will honor this and will *never* modify it. - TaskSpec spec = 3 [(gogoproto.nullable) = false]; + TaskSpec spec = 3; // SpecVersion is copied from Service, to identify which version of the // spec this task has. Note that this is not directly comparable to the @@ -230,16 +231,16 @@ message Task { // // NOTE(stevvooe): The preserves the ability for us to making naming // decisions for tasks in orchestrator, albeit, this is left empty for now. - Annotations annotations = 7 [(gogoproto.nullable) = false]; + Annotations annotations = 7; // ServiceAnnotations is a direct copy of the service name and labels when // this task is created. // // Labels set here will *not* be propagated to the runtime target, such as a // container. Use labels on the runtime target for that purpose. - Annotations service_annotations = 8 [(gogoproto.nullable) = false]; + Annotations service_annotations = 8; - TaskStatus status = 9 [(gogoproto.nullable) = false]; + TaskStatus status = 9; // DesiredState is the target state for the task. It is set to // TaskStateRunning when a task is first created, and changed to @@ -308,16 +309,16 @@ message Network { string id = 1; - Meta meta = 2 [(gogoproto.nullable) = false]; + Meta meta = 2; - NetworkSpec spec = 3 [(gogoproto.nullable) = false]; + NetworkSpec spec = 3; // Driver specific operational state provided by the network driver. Driver driver_state = 4; // Runtime state of IPAM options. This may not reflect the // ipam options from NetworkSpec. - IPAMOptions ipam = 5 [(gogoproto.customname) = "IPAM"]; + IPAMOptions ipam = 5 [(docker.protobuf.plugin.go_name) = "IPAM"]; // PendingDelete indicates that this network's deletion has been requested. // Services, as well as all service-level resources, can only be deleted @@ -354,12 +355,12 @@ message Cluster { string id = 1; - Meta meta = 2 [(gogoproto.nullable) = false]; + Meta meta = 2; - ClusterSpec spec = 3 [(gogoproto.nullable) = false]; + ClusterSpec spec = 3; // RootCA contains key material for the root CA. - RootCA root_ca = 4 [(gogoproto.nullable)=false, (gogoproto.customname) = "RootCA"]; + RootCA root_ca = 4 [(docker.protobuf.plugin.go_name) = "RootCA"]; // Symmetric encryption key distributed by the lead manager. Used by agents // for securing network bootstrapping and communication. @@ -386,7 +387,7 @@ message Cluster { // the format of the join tokens, and nodes that are not FIPS-enabled should // reject joining the cluster. Nodes that report themselves to be non-FIPS // should be rejected from the cluster. - bool fips = 10 [(gogoproto.customname) = "FIPS"]; + bool fips = 10 [(docker.protobuf.plugin.go_name) = "FIPS"]; // This field specifies default subnet pools for global scope networks. If // unspecified, Docker will use the predefined subnets as it works on older releases. @@ -417,11 +418,11 @@ message Secret { string id = 1; - Meta meta = 2 [(gogoproto.nullable) = false]; + Meta meta = 2; // Spec contains the actual secret data, as well as any context around the // secret data that the user provides. - SecretSpec spec = 3 [(gogoproto.nullable) = false]; + SecretSpec spec = 3; // Whether the secret is an internal secret (not set by a user) or not. bool internal = 4; @@ -443,11 +444,11 @@ message Config { string id = 1; - Meta meta = 2 [(gogoproto.nullable) = false]; + Meta meta = 2; // Spec contains the actual config data, as well as any context around the // config data that the user provides. - ConfigSpec spec = 3 [(gogoproto.nullable) = false]; + ConfigSpec spec = 3; } // Resource is a top-level object with externally defined content and indexing. @@ -466,11 +467,11 @@ message Resource { } }; - string id = 1 [(gogoproto.customname) = "ID"]; + string id = 1 [(docker.protobuf.plugin.go_name) = "ID"]; - Meta meta = 2 [(gogoproto.nullable) = false]; + Meta meta = 2; - Annotations annotations = 3 [(gogoproto.nullable) = false]; + Annotations annotations = 3; // Kind identifies this class of object. It is essentially a namespace // to keep IDs or indices from colliding between unrelated Resource @@ -496,11 +497,11 @@ message Extension { } }; - string id = 1 [(gogoproto.customname) = "ID"]; + string id = 1 [(docker.protobuf.plugin.go_name) = "ID"]; - Meta meta = 2 [(gogoproto.nullable) = false]; + Meta meta = 2; - Annotations annotations = 3 [(gogoproto.nullable) = false]; + Annotations annotations = 3; string description = 4; @@ -538,10 +539,10 @@ message Volume { // ID is the swarmkit-internal ID for this volume object. This has no // relation to the CSI volume identifier provided by the CSI Plugin. string id = 1; - Meta meta = 2 [(gogoproto.nullable) = false]; + Meta meta = 2; // Spec is the desired state of the Volume, as provided by the user. - VolumeSpec spec = 3 [(gogoproto.nullable) = false]; + VolumeSpec spec = 3; // PublishStatus is the status of the volume as it pertains to the various // nodes it is in use on. diff --git a/api/raft.pb.authwrapper.go b/api/raft.pb.authwrapper.go new file mode 100644 index 0000000000..3d9a65c1f5 --- /dev/null +++ b/api/raft.pb.authwrapper.go @@ -0,0 +1,71 @@ +// Code generated by protoc-gen-goswarm. DO NOT EDIT. + +package api + +import ( + context "context" +) + +type authenticatedWrapperRaftServer struct { + local RaftServer + authorize func(context.Context, []string) error +} + +func NewAuthenticatedWrapperRaftServer(local RaftServer, authorize func(context.Context, []string) error) RaftServer { + return &authenticatedWrapperRaftServer{ + local: local, + authorize: authorize, + } +} + +func (p *authenticatedWrapperRaftServer) ProcessRaftMessage(ctx context.Context, r *ProcessRaftMessageRequest) (*ProcessRaftMessageResponse, error) { + + if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { + return nil, err + } + return p.local.ProcessRaftMessage(ctx, r) +} + +func (p *authenticatedWrapperRaftServer) StreamRaftMessage(stream Raft_StreamRaftMessageServer) error { + + if err := p.authorize(stream.Context(), []string{"swarm-manager"}); err != nil { + return err + } + return p.local.StreamRaftMessage(stream) +} + +func (p *authenticatedWrapperRaftServer) ResolveAddress(ctx context.Context, r *ResolveAddressRequest) (*ResolveAddressResponse, error) { + + if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { + return nil, err + } + return p.local.ResolveAddress(ctx, r) +} + +type authenticatedWrapperRaftMembershipServer struct { + local RaftMembershipServer + authorize func(context.Context, []string) error +} + +func NewAuthenticatedWrapperRaftMembershipServer(local RaftMembershipServer, authorize func(context.Context, []string) error) RaftMembershipServer { + return &authenticatedWrapperRaftMembershipServer{ + local: local, + authorize: authorize, + } +} + +func (p *authenticatedWrapperRaftMembershipServer) Join(ctx context.Context, r *JoinRequest) (*JoinResponse, error) { + + if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { + return nil, err + } + return p.local.Join(ctx, r) +} + +func (p *authenticatedWrapperRaftMembershipServer) Leave(ctx context.Context, r *LeaveRequest) (*LeaveResponse, error) { + + if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { + return nil, err + } + return p.local.Leave(ctx, r) +} diff --git a/api/raft.pb.deepcopy.go b/api/raft.pb.deepcopy.go new file mode 100644 index 0000000000..c4fe0aaf48 --- /dev/null +++ b/api/raft.pb.deepcopy.go @@ -0,0 +1,257 @@ +// Code generated by protoc-gen-goswarm. DO NOT EDIT. + +package api + +import ( + deepcopy "github.com/moby/swarmkit/v2/api/deepcopy" +) + +func (m *RaftMember) Copy() *RaftMember { + if m == nil { + return nil + } + o := &RaftMember{} + o.CopyFrom(m) + return o +} + +func (m *RaftMember) CopyFrom(src interface{}) { + + o := src.(*RaftMember) + m.RaftID = o.RaftID + m.NodeID = o.NodeID + m.Addr = o.Addr + if o.Status != nil { + m.Status = &RaftMemberStatus{} + deepcopy.Copy(m.Status, o.Status) + } + +} + +func (m *JoinRequest) Copy() *JoinRequest { + if m == nil { + return nil + } + o := &JoinRequest{} + o.CopyFrom(m) + return o +} + +func (m *JoinRequest) CopyFrom(src interface{}) { + + o := src.(*JoinRequest) + m.Addr = o.Addr +} + +func (m *JoinResponse) Copy() *JoinResponse { + if m == nil { + return nil + } + o := &JoinResponse{} + o.CopyFrom(m) + return o +} + +func (m *JoinResponse) CopyFrom(src interface{}) { + + o := src.(*JoinResponse) + m.RaftID = o.RaftID + if o.Members != nil { + m.Members = make([]*RaftMember, len(o.Members)) + for i := range m.Members { + m.Members[i] = &RaftMember{} + deepcopy.Copy(m.Members[i], o.Members[i]) + } + } + + if o.RemovedMembers != nil { + m.RemovedMembers = make([]uint64, len(o.RemovedMembers)) + copy(m.RemovedMembers, o.RemovedMembers) + } + +} + +func (m *LeaveRequest) Copy() *LeaveRequest { + if m == nil { + return nil + } + o := &LeaveRequest{} + o.CopyFrom(m) + return o +} + +func (m *LeaveRequest) CopyFrom(src interface{}) { + + o := src.(*LeaveRequest) + if o.Node != nil { + m.Node = &RaftMember{} + deepcopy.Copy(m.Node, o.Node) + } + +} + +func (m *LeaveResponse) Copy() *LeaveResponse { + if m == nil { + return nil + } + o := &LeaveResponse{} + o.CopyFrom(m) + return o +} + +func (m *LeaveResponse) CopyFrom(src interface{}) {} + +func (m *ProcessRaftMessageResponse) Copy() *ProcessRaftMessageResponse { + if m == nil { + return nil + } + o := &ProcessRaftMessageResponse{} + o.CopyFrom(m) + return o +} + +func (m *ProcessRaftMessageResponse) CopyFrom(src interface{}) {} + +func (m *StreamRaftMessageResponse) Copy() *StreamRaftMessageResponse { + if m == nil { + return nil + } + o := &StreamRaftMessageResponse{} + o.CopyFrom(m) + return o +} + +func (m *StreamRaftMessageResponse) CopyFrom(src interface{}) {} + +func (m *ResolveAddressRequest) Copy() *ResolveAddressRequest { + if m == nil { + return nil + } + o := &ResolveAddressRequest{} + o.CopyFrom(m) + return o +} + +func (m *ResolveAddressRequest) CopyFrom(src interface{}) { + + o := src.(*ResolveAddressRequest) + m.RaftID = o.RaftID +} + +func (m *ResolveAddressResponse) Copy() *ResolveAddressResponse { + if m == nil { + return nil + } + o := &ResolveAddressResponse{} + o.CopyFrom(m) + return o +} + +func (m *ResolveAddressResponse) CopyFrom(src interface{}) { + + o := src.(*ResolveAddressResponse) + m.Addr = o.Addr +} + +func (m *InternalRaftRequest) Copy() *InternalRaftRequest { + if m == nil { + return nil + } + o := &InternalRaftRequest{} + o.CopyFrom(m) + return o +} + +func (m *InternalRaftRequest) CopyFrom(src interface{}) { + + o := src.(*InternalRaftRequest) + m.ID = o.ID + if o.Action != nil { + m.Action = make([]*StoreAction, len(o.Action)) + for i := range m.Action { + m.Action[i] = &StoreAction{} + deepcopy.Copy(m.Action[i], o.Action[i]) + } + } + +} + +func (m *StoreAction) Copy() *StoreAction { + if m == nil { + return nil + } + o := &StoreAction{} + o.CopyFrom(m) + return o +} + +func (m *StoreAction) CopyFrom(src interface{}) { + + o := src.(*StoreAction) + m.Action = o.Action + if o.Target != nil { + switch o.Target.(type) { + case *StoreAction_Node: + v := StoreAction_Node{ + Node: &Node{}, + } + deepcopy.Copy(v.Node, o.GetNode()) + m.Target = &v + case *StoreAction_Service: + v := StoreAction_Service{ + Service: &Service{}, + } + deepcopy.Copy(v.Service, o.GetService()) + m.Target = &v + case *StoreAction_Task: + v := StoreAction_Task{ + Task: &Task{}, + } + deepcopy.Copy(v.Task, o.GetTask()) + m.Target = &v + case *StoreAction_Network: + v := StoreAction_Network{ + Network: &Network{}, + } + deepcopy.Copy(v.Network, o.GetNetwork()) + m.Target = &v + case *StoreAction_Cluster: + v := StoreAction_Cluster{ + Cluster: &Cluster{}, + } + deepcopy.Copy(v.Cluster, o.GetCluster()) + m.Target = &v + case *StoreAction_Secret: + v := StoreAction_Secret{ + Secret: &Secret{}, + } + deepcopy.Copy(v.Secret, o.GetSecret()) + m.Target = &v + case *StoreAction_Resource: + v := StoreAction_Resource{ + Resource: &Resource{}, + } + deepcopy.Copy(v.Resource, o.GetResource()) + m.Target = &v + case *StoreAction_Extension: + v := StoreAction_Extension{ + Extension: &Extension{}, + } + deepcopy.Copy(v.Extension, o.GetExtension()) + m.Target = &v + case *StoreAction_Config: + v := StoreAction_Config{ + Config: &Config{}, + } + deepcopy.Copy(v.Config, o.GetConfig()) + m.Target = &v + case *StoreAction_Volume: + v := StoreAction_Volume{ + Volume: &Volume{}, + } + deepcopy.Copy(v.Volume, o.GetVolume()) + m.Target = &v + } + } + +} diff --git a/api/raft.pb.go b/api/raft.pb.go index c4904b4a34..b05561239e 100644 --- a/api/raft.pb.go +++ b/api/raft.pb.go @@ -1,73 +1,84 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: github.com/docker/swarmkit/api/raft.proto +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.11 +// protoc v3.21.12 +// source: api/raft.proto package api import ( - context "context" - fmt "fmt" - proto "github.com/gogo/protobuf/proto" - github_com_moby_swarmkit_v2_api_deepcopy "github.com/moby/swarmkit/v2/api/deepcopy" - raftselector "github.com/moby/swarmkit/v2/manager/raftselector" + _ "github.com/moby/swarmkit/v2/protobuf/plugin" raftpb "go.etcd.io/raft/v3/raftpb" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - metadata "google.golang.org/grpc/metadata" - peer "google.golang.org/grpc/peer" - status "google.golang.org/grpc/status" - io "io" - math "math" - math_bits "math/bits" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" - strings "strings" - rafttime "time" + sync "sync" + unsafe "unsafe" ) -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package +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) +) // StoreActionKind defines the operation to take on the store for the target of // a storage action. type StoreActionKind int32 const ( - StoreActionKindUnknown StoreActionKind = 0 + StoreActionKindUnknown StoreActionKind = 0 // default value, invalid StoreActionKindCreate StoreActionKind = 1 StoreActionKindUpdate StoreActionKind = 2 StoreActionKindRemove StoreActionKind = 3 ) -var StoreActionKind_name = map[int32]string{ - 0: "UNKNOWN", - 1: "STORE_ACTION_CREATE", - 2: "STORE_ACTION_UPDATE", - 3: "STORE_ACTION_REMOVE", -} +// Enum value maps for StoreActionKind. +var ( + StoreActionKind_name = map[int32]string{ + 0: "UNKNOWN", + 1: "STORE_ACTION_CREATE", + 2: "STORE_ACTION_UPDATE", + 3: "STORE_ACTION_REMOVE", + } + StoreActionKind_value = map[string]int32{ + "UNKNOWN": 0, + "STORE_ACTION_CREATE": 1, + "STORE_ACTION_UPDATE": 2, + "STORE_ACTION_REMOVE": 3, + } +) -var StoreActionKind_value = map[string]int32{ - "UNKNOWN": 0, - "STORE_ACTION_CREATE": 1, - "STORE_ACTION_UPDATE": 2, - "STORE_ACTION_REMOVE": 3, +func (x StoreActionKind) Enum() *StoreActionKind { + p := new(StoreActionKind) + *p = x + return p } func (x StoreActionKind) String() string { - return proto.EnumName(StoreActionKind_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (StoreActionKind) Descriptor() protoreflect.EnumDescriptor { + return file_api_raft_proto_enumTypes[0].Descriptor() +} + +func (StoreActionKind) Type() protoreflect.EnumType { + return &file_api_raft_proto_enumTypes[0] +} + +func (x StoreActionKind) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } +// Deprecated: Use StoreActionKind.Descriptor instead. func (StoreActionKind) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_d2c32e1e3c930c15, []int{0} + return file_api_raft_proto_rawDescGZIP(), []int{0} } type RaftMember struct { + state protoimpl.MessageState `protogen:"open.v1"` // RaftID specifies the internal ID used by the manager in a raft context, it can never be modified // and is used only for information purposes RaftID uint64 `protobuf:"varint,1,opt,name=raft_id,json=raftId,proto3" json:"raft_id,omitempty"` @@ -76,79 +87,116 @@ type RaftMember struct { // Addr specifies the address of the member Addr string `protobuf:"bytes,3,opt,name=addr,proto3" json:"addr,omitempty"` // Status provides the current status of the manager from the perspective of another manager. - Status RaftMemberStatus `protobuf:"bytes,4,opt,name=status,proto3" json:"status"` + Status *RaftMemberStatus `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *RaftMember) Reset() { *m = RaftMember{} } -func (*RaftMember) ProtoMessage() {} -func (*RaftMember) Descriptor() ([]byte, []int) { - return fileDescriptor_d2c32e1e3c930c15, []int{0} +func (x *RaftMember) Reset() { + *x = RaftMember{} + mi := &file_api_raft_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *RaftMember) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + +func (x *RaftMember) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *RaftMember) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_RaftMember.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (*RaftMember) ProtoMessage() {} + +func (x *RaftMember) ProtoReflect() protoreflect.Message { + mi := &file_api_raft_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) +} + +// Deprecated: Use RaftMember.ProtoReflect.Descriptor instead. +func (*RaftMember) Descriptor() ([]byte, []int) { + return file_api_raft_proto_rawDescGZIP(), []int{0} } -func (m *RaftMember) XXX_Merge(src proto.Message) { - xxx_messageInfo_RaftMember.Merge(m, src) + +func (x *RaftMember) GetRaftID() uint64 { + if x != nil { + return x.RaftID + } + return 0 } -func (m *RaftMember) XXX_Size() int { - return m.Size() + +func (x *RaftMember) GetNodeID() string { + if x != nil { + return x.NodeID + } + return "" } -func (m *RaftMember) XXX_DiscardUnknown() { - xxx_messageInfo_RaftMember.DiscardUnknown(m) + +func (x *RaftMember) GetAddr() string { + if x != nil { + return x.Addr + } + return "" } -var xxx_messageInfo_RaftMember proto.InternalMessageInfo +func (x *RaftMember) GetStatus() *RaftMemberStatus { + if x != nil { + return x.Status + } + return nil +} type JoinRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` // Addr specifies the address of the member - Addr string `protobuf:"bytes,1,opt,name=addr,proto3" json:"addr,omitempty"` + Addr string `protobuf:"bytes,1,opt,name=addr,proto3" json:"addr,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *JoinRequest) Reset() { *m = JoinRequest{} } -func (*JoinRequest) ProtoMessage() {} -func (*JoinRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d2c32e1e3c930c15, []int{1} +func (x *JoinRequest) Reset() { + *x = JoinRequest{} + mi := &file_api_raft_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *JoinRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + +func (x *JoinRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *JoinRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_JoinRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (*JoinRequest) ProtoMessage() {} + +func (x *JoinRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_raft_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *JoinRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_JoinRequest.Merge(m, src) -} -func (m *JoinRequest) XXX_Size() int { - return m.Size() -} -func (m *JoinRequest) XXX_DiscardUnknown() { - xxx_messageInfo_JoinRequest.DiscardUnknown(m) + +// Deprecated: Use JoinRequest.ProtoReflect.Descriptor instead. +func (*JoinRequest) Descriptor() ([]byte, []int) { + return file_api_raft_proto_rawDescGZIP(), []int{1} } -var xxx_messageInfo_JoinRequest proto.InternalMessageInfo +func (x *JoinRequest) GetAddr() string { + if x != nil { + return x.Addr + } + return "" +} type JoinResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` // RaftID is the ID assigned to the new member. RaftID uint64 `protobuf:"varint,1,opt,name=raft_id,json=raftId,proto3" json:"raft_id,omitempty"` // Members is the membership set of the cluster. @@ -156,373 +204,454 @@ type JoinResponse struct { // RemovedMembers is a list of members that have been removed from // the cluster, so the new node can avoid communicating with them. RemovedMembers []uint64 `protobuf:"varint,3,rep,name=removed_members,json=removedMembers,proto3" json:"removed_members,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *JoinResponse) Reset() { *m = JoinResponse{} } -func (*JoinResponse) ProtoMessage() {} -func (*JoinResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d2c32e1e3c930c15, []int{2} +func (x *JoinResponse) Reset() { + *x = JoinResponse{} + mi := &file_api_raft_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *JoinResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + +func (x *JoinResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *JoinResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_JoinResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (*JoinResponse) ProtoMessage() {} + +func (x *JoinResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_raft_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *JoinResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_JoinResponse.Merge(m, src) + +// Deprecated: Use JoinResponse.ProtoReflect.Descriptor instead. +func (*JoinResponse) Descriptor() ([]byte, []int) { + return file_api_raft_proto_rawDescGZIP(), []int{2} } -func (m *JoinResponse) XXX_Size() int { - return m.Size() + +func (x *JoinResponse) GetRaftID() uint64 { + if x != nil { + return x.RaftID + } + return 0 } -func (m *JoinResponse) XXX_DiscardUnknown() { - xxx_messageInfo_JoinResponse.DiscardUnknown(m) + +func (x *JoinResponse) GetMembers() []*RaftMember { + if x != nil { + return x.Members + } + return nil } -var xxx_messageInfo_JoinResponse proto.InternalMessageInfo +func (x *JoinResponse) GetRemovedMembers() []uint64 { + if x != nil { + return x.RemovedMembers + } + return nil +} type LeaveRequest struct { - Node *RaftMember `protobuf:"bytes,1,opt,name=node,proto3" json:"node,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Node *RaftMember `protobuf:"bytes,1,opt,name=node,proto3" json:"node,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *LeaveRequest) Reset() { *m = LeaveRequest{} } -func (*LeaveRequest) ProtoMessage() {} -func (*LeaveRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d2c32e1e3c930c15, []int{3} +func (x *LeaveRequest) Reset() { + *x = LeaveRequest{} + mi := &file_api_raft_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *LeaveRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + +func (x *LeaveRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *LeaveRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_LeaveRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (*LeaveRequest) ProtoMessage() {} + +func (x *LeaveRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_raft_proto_msgTypes[3] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *LeaveRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_LeaveRequest.Merge(m, src) -} -func (m *LeaveRequest) XXX_Size() int { - return m.Size() -} -func (m *LeaveRequest) XXX_DiscardUnknown() { - xxx_messageInfo_LeaveRequest.DiscardUnknown(m) + +// Deprecated: Use LeaveRequest.ProtoReflect.Descriptor instead. +func (*LeaveRequest) Descriptor() ([]byte, []int) { + return file_api_raft_proto_rawDescGZIP(), []int{3} } -var xxx_messageInfo_LeaveRequest proto.InternalMessageInfo +func (x *LeaveRequest) GetNode() *RaftMember { + if x != nil { + return x.Node + } + return nil +} type LeaveResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *LeaveResponse) Reset() { *m = LeaveResponse{} } -func (*LeaveResponse) ProtoMessage() {} -func (*LeaveResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d2c32e1e3c930c15, []int{4} +func (x *LeaveResponse) Reset() { + *x = LeaveResponse{} + mi := &file_api_raft_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *LeaveResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + +func (x *LeaveResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *LeaveResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_LeaveResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (*LeaveResponse) ProtoMessage() {} + +func (x *LeaveResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_raft_proto_msgTypes[4] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } -} -func (m *LeaveResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_LeaveResponse.Merge(m, src) -} -func (m *LeaveResponse) XXX_Size() int { - return m.Size() -} -func (m *LeaveResponse) XXX_DiscardUnknown() { - xxx_messageInfo_LeaveResponse.DiscardUnknown(m) + return mi.MessageOf(x) } -var xxx_messageInfo_LeaveResponse proto.InternalMessageInfo +// Deprecated: Use LeaveResponse.ProtoReflect.Descriptor instead. +func (*LeaveResponse) Descriptor() ([]byte, []int) { + return file_api_raft_proto_rawDescGZIP(), []int{4} +} type ProcessRaftMessageRequest struct { - Message *raftpb.Message `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Message *raftpb.Message `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *ProcessRaftMessageRequest) Reset() { *m = ProcessRaftMessageRequest{} } -func (*ProcessRaftMessageRequest) ProtoMessage() {} -func (*ProcessRaftMessageRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d2c32e1e3c930c15, []int{5} +func (x *ProcessRaftMessageRequest) Reset() { + *x = ProcessRaftMessageRequest{} + mi := &file_api_raft_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *ProcessRaftMessageRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + +func (x *ProcessRaftMessageRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ProcessRaftMessageRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ProcessRaftMessageRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (*ProcessRaftMessageRequest) ProtoMessage() {} + +func (x *ProcessRaftMessageRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_raft_proto_msgTypes[5] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *ProcessRaftMessageRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_ProcessRaftMessageRequest.Merge(m, src) -} -func (m *ProcessRaftMessageRequest) XXX_Size() int { - return m.Size() -} -func (m *ProcessRaftMessageRequest) XXX_DiscardUnknown() { - xxx_messageInfo_ProcessRaftMessageRequest.DiscardUnknown(m) + +// Deprecated: Use ProcessRaftMessageRequest.ProtoReflect.Descriptor instead. +func (*ProcessRaftMessageRequest) Descriptor() ([]byte, []int) { + return file_api_raft_proto_rawDescGZIP(), []int{5} } -var xxx_messageInfo_ProcessRaftMessageRequest proto.InternalMessageInfo +func (x *ProcessRaftMessageRequest) GetMessage() *raftpb.Message { + if x != nil { + return x.Message + } + return nil +} type ProcessRaftMessageResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *ProcessRaftMessageResponse) Reset() { *m = ProcessRaftMessageResponse{} } -func (*ProcessRaftMessageResponse) ProtoMessage() {} -func (*ProcessRaftMessageResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d2c32e1e3c930c15, []int{6} +func (x *ProcessRaftMessageResponse) Reset() { + *x = ProcessRaftMessageResponse{} + mi := &file_api_raft_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *ProcessRaftMessageResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + +func (x *ProcessRaftMessageResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ProcessRaftMessageResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ProcessRaftMessageResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (*ProcessRaftMessageResponse) ProtoMessage() {} + +func (x *ProcessRaftMessageResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_raft_proto_msgTypes[6] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } -} -func (m *ProcessRaftMessageResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_ProcessRaftMessageResponse.Merge(m, src) -} -func (m *ProcessRaftMessageResponse) XXX_Size() int { - return m.Size() -} -func (m *ProcessRaftMessageResponse) XXX_DiscardUnknown() { - xxx_messageInfo_ProcessRaftMessageResponse.DiscardUnknown(m) + return mi.MessageOf(x) } -var xxx_messageInfo_ProcessRaftMessageResponse proto.InternalMessageInfo +// Deprecated: Use ProcessRaftMessageResponse.ProtoReflect.Descriptor instead. +func (*ProcessRaftMessageResponse) Descriptor() ([]byte, []int) { + return file_api_raft_proto_rawDescGZIP(), []int{6} +} // Raft message streaming request. type StreamRaftMessageRequest struct { - Message *raftpb.Message `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Message *raftpb.Message `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *StreamRaftMessageRequest) Reset() { *m = StreamRaftMessageRequest{} } -func (*StreamRaftMessageRequest) ProtoMessage() {} -func (*StreamRaftMessageRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d2c32e1e3c930c15, []int{7} +func (x *StreamRaftMessageRequest) Reset() { + *x = StreamRaftMessageRequest{} + mi := &file_api_raft_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *StreamRaftMessageRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + +func (x *StreamRaftMessageRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *StreamRaftMessageRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_StreamRaftMessageRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (*StreamRaftMessageRequest) ProtoMessage() {} + +func (x *StreamRaftMessageRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_raft_proto_msgTypes[7] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *StreamRaftMessageRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_StreamRaftMessageRequest.Merge(m, src) -} -func (m *StreamRaftMessageRequest) XXX_Size() int { - return m.Size() -} -func (m *StreamRaftMessageRequest) XXX_DiscardUnknown() { - xxx_messageInfo_StreamRaftMessageRequest.DiscardUnknown(m) + +// Deprecated: Use StreamRaftMessageRequest.ProtoReflect.Descriptor instead. +func (*StreamRaftMessageRequest) Descriptor() ([]byte, []int) { + return file_api_raft_proto_rawDescGZIP(), []int{7} } -var xxx_messageInfo_StreamRaftMessageRequest proto.InternalMessageInfo +func (x *StreamRaftMessageRequest) GetMessage() *raftpb.Message { + if x != nil { + return x.Message + } + return nil +} // Raft message streaming response. type StreamRaftMessageResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *StreamRaftMessageResponse) Reset() { *m = StreamRaftMessageResponse{} } -func (*StreamRaftMessageResponse) ProtoMessage() {} -func (*StreamRaftMessageResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d2c32e1e3c930c15, []int{8} +func (x *StreamRaftMessageResponse) Reset() { + *x = StreamRaftMessageResponse{} + mi := &file_api_raft_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *StreamRaftMessageResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + +func (x *StreamRaftMessageResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *StreamRaftMessageResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_StreamRaftMessageResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (*StreamRaftMessageResponse) ProtoMessage() {} + +func (x *StreamRaftMessageResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_raft_proto_msgTypes[8] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } -} -func (m *StreamRaftMessageResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_StreamRaftMessageResponse.Merge(m, src) -} -func (m *StreamRaftMessageResponse) XXX_Size() int { - return m.Size() -} -func (m *StreamRaftMessageResponse) XXX_DiscardUnknown() { - xxx_messageInfo_StreamRaftMessageResponse.DiscardUnknown(m) + return mi.MessageOf(x) } -var xxx_messageInfo_StreamRaftMessageResponse proto.InternalMessageInfo +// Deprecated: Use StreamRaftMessageResponse.ProtoReflect.Descriptor instead. +func (*StreamRaftMessageResponse) Descriptor() ([]byte, []int) { + return file_api_raft_proto_rawDescGZIP(), []int{8} +} type ResolveAddressRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` // raft_id is the ID to resolve to an address. - RaftID uint64 `protobuf:"varint,1,opt,name=raft_id,json=raftId,proto3" json:"raft_id,omitempty"` + RaftID uint64 `protobuf:"varint,1,opt,name=raft_id,json=raftId,proto3" json:"raft_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *ResolveAddressRequest) Reset() { *m = ResolveAddressRequest{} } -func (*ResolveAddressRequest) ProtoMessage() {} -func (*ResolveAddressRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d2c32e1e3c930c15, []int{9} +func (x *ResolveAddressRequest) Reset() { + *x = ResolveAddressRequest{} + mi := &file_api_raft_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *ResolveAddressRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + +func (x *ResolveAddressRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ResolveAddressRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ResolveAddressRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (*ResolveAddressRequest) ProtoMessage() {} + +func (x *ResolveAddressRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_raft_proto_msgTypes[9] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *ResolveAddressRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_ResolveAddressRequest.Merge(m, src) -} -func (m *ResolveAddressRequest) XXX_Size() int { - return m.Size() -} -func (m *ResolveAddressRequest) XXX_DiscardUnknown() { - xxx_messageInfo_ResolveAddressRequest.DiscardUnknown(m) + +// Deprecated: Use ResolveAddressRequest.ProtoReflect.Descriptor instead. +func (*ResolveAddressRequest) Descriptor() ([]byte, []int) { + return file_api_raft_proto_rawDescGZIP(), []int{9} } -var xxx_messageInfo_ResolveAddressRequest proto.InternalMessageInfo +func (x *ResolveAddressRequest) GetRaftID() uint64 { + if x != nil { + return x.RaftID + } + return 0 +} type ResolveAddressResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` // Addr specifies the address of the member - Addr string `protobuf:"bytes,1,opt,name=addr,proto3" json:"addr,omitempty"` + Addr string `protobuf:"bytes,1,opt,name=addr,proto3" json:"addr,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *ResolveAddressResponse) Reset() { *m = ResolveAddressResponse{} } -func (*ResolveAddressResponse) ProtoMessage() {} -func (*ResolveAddressResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d2c32e1e3c930c15, []int{10} +func (x *ResolveAddressResponse) Reset() { + *x = ResolveAddressResponse{} + mi := &file_api_raft_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *ResolveAddressResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + +func (x *ResolveAddressResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ResolveAddressResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ResolveAddressResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (*ResolveAddressResponse) ProtoMessage() {} + +func (x *ResolveAddressResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_raft_proto_msgTypes[10] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *ResolveAddressResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_ResolveAddressResponse.Merge(m, src) -} -func (m *ResolveAddressResponse) XXX_Size() int { - return m.Size() -} -func (m *ResolveAddressResponse) XXX_DiscardUnknown() { - xxx_messageInfo_ResolveAddressResponse.DiscardUnknown(m) + +// Deprecated: Use ResolveAddressResponse.ProtoReflect.Descriptor instead. +func (*ResolveAddressResponse) Descriptor() ([]byte, []int) { + return file_api_raft_proto_rawDescGZIP(), []int{10} } -var xxx_messageInfo_ResolveAddressResponse proto.InternalMessageInfo +func (x *ResolveAddressResponse) GetAddr() string { + if x != nil { + return x.Addr + } + return "" +} // Contains one of many protobuf encoded objects to replicate // over the raft backend with a request ID to track when the // action is effectively applied type InternalRaftRequest struct { - ID uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` - Action []StoreAction `protobuf:"bytes,2,rep,name=action,proto3" json:"action"` + state protoimpl.MessageState `protogen:"open.v1"` + ID uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + Action []*StoreAction `protobuf:"bytes,2,rep,name=action,proto3" json:"action,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *InternalRaftRequest) Reset() { *m = InternalRaftRequest{} } -func (*InternalRaftRequest) ProtoMessage() {} -func (*InternalRaftRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d2c32e1e3c930c15, []int{11} +func (x *InternalRaftRequest) Reset() { + *x = InternalRaftRequest{} + mi := &file_api_raft_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *InternalRaftRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + +func (x *InternalRaftRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *InternalRaftRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_InternalRaftRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (*InternalRaftRequest) ProtoMessage() {} + +func (x *InternalRaftRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_raft_proto_msgTypes[11] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *InternalRaftRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_InternalRaftRequest.Merge(m, src) -} -func (m *InternalRaftRequest) XXX_Size() int { - return m.Size() + +// Deprecated: Use InternalRaftRequest.ProtoReflect.Descriptor instead. +func (*InternalRaftRequest) Descriptor() ([]byte, []int) { + return file_api_raft_proto_rawDescGZIP(), []int{11} } -func (m *InternalRaftRequest) XXX_DiscardUnknown() { - xxx_messageInfo_InternalRaftRequest.DiscardUnknown(m) + +func (x *InternalRaftRequest) GetID() uint64 { + if x != nil { + return x.ID + } + return 0 } -var xxx_messageInfo_InternalRaftRequest proto.InternalMessageInfo +func (x *InternalRaftRequest) GetAction() []*StoreAction { + if x != nil { + return x.Action + } + return nil +} // StoreAction defines a target and operation to apply on the storage system. type StoreAction struct { - Action StoreActionKind `protobuf:"varint,1,opt,name=action,proto3,enum=docker.swarmkit.v1.StoreActionKind" json:"action,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Action StoreActionKind `protobuf:"varint,1,opt,name=action,proto3,enum=docker.swarmkit.v1.StoreActionKind" json:"action,omitempty"` // Types that are valid to be assigned to Target: + // // *StoreAction_Node // *StoreAction_Service // *StoreAction_Task @@ -533,4047 +662,386 @@ type StoreAction struct { // *StoreAction_Extension // *StoreAction_Config // *StoreAction_Volume - Target isStoreAction_Target `protobuf_oneof:"target"` + Target isStoreAction_Target `protobuf_oneof:"target"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *StoreAction) Reset() { *m = StoreAction{} } -func (*StoreAction) ProtoMessage() {} -func (*StoreAction) Descriptor() ([]byte, []int) { - return fileDescriptor_d2c32e1e3c930c15, []int{12} +func (x *StoreAction) Reset() { + *x = StoreAction{} + mi := &file_api_raft_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *StoreAction) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + +func (x *StoreAction) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *StoreAction) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_StoreAction.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (*StoreAction) ProtoMessage() {} + +func (x *StoreAction) ProtoReflect() protoreflect.Message { + mi := &file_api_raft_proto_msgTypes[12] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } -} -func (m *StoreAction) XXX_Merge(src proto.Message) { - xxx_messageInfo_StoreAction.Merge(m, src) -} -func (m *StoreAction) XXX_Size() int { - return m.Size() -} -func (m *StoreAction) XXX_DiscardUnknown() { - xxx_messageInfo_StoreAction.DiscardUnknown(m) + return mi.MessageOf(x) } -var xxx_messageInfo_StoreAction proto.InternalMessageInfo - -type isStoreAction_Target interface { - isStoreAction_Target() - MarshalTo([]byte) (int, error) - Size() int +// Deprecated: Use StoreAction.ProtoReflect.Descriptor instead. +func (*StoreAction) Descriptor() ([]byte, []int) { + return file_api_raft_proto_rawDescGZIP(), []int{12} } -type StoreAction_Node struct { - Node *Node `protobuf:"bytes,2,opt,name=node,proto3,oneof" json:"node,omitempty"` -} -type StoreAction_Service struct { - Service *Service `protobuf:"bytes,3,opt,name=service,proto3,oneof" json:"service,omitempty"` -} -type StoreAction_Task struct { - Task *Task `protobuf:"bytes,4,opt,name=task,proto3,oneof" json:"task,omitempty"` -} -type StoreAction_Network struct { - Network *Network `protobuf:"bytes,5,opt,name=network,proto3,oneof" json:"network,omitempty"` -} -type StoreAction_Cluster struct { - Cluster *Cluster `protobuf:"bytes,6,opt,name=cluster,proto3,oneof" json:"cluster,omitempty"` -} -type StoreAction_Secret struct { - Secret *Secret `protobuf:"bytes,7,opt,name=secret,proto3,oneof" json:"secret,omitempty"` -} -type StoreAction_Resource struct { - Resource *Resource `protobuf:"bytes,8,opt,name=resource,proto3,oneof" json:"resource,omitempty"` -} -type StoreAction_Extension struct { - Extension *Extension `protobuf:"bytes,9,opt,name=extension,proto3,oneof" json:"extension,omitempty"` -} -type StoreAction_Config struct { - Config *Config `protobuf:"bytes,10,opt,name=config,proto3,oneof" json:"config,omitempty"` -} -type StoreAction_Volume struct { - Volume *Volume `protobuf:"bytes,11,opt,name=volume,proto3,oneof" json:"volume,omitempty"` +func (x *StoreAction) GetAction() StoreActionKind { + if x != nil { + return x.Action + } + return StoreActionKindUnknown } -func (*StoreAction_Node) isStoreAction_Target() {} -func (*StoreAction_Service) isStoreAction_Target() {} -func (*StoreAction_Task) isStoreAction_Target() {} -func (*StoreAction_Network) isStoreAction_Target() {} -func (*StoreAction_Cluster) isStoreAction_Target() {} -func (*StoreAction_Secret) isStoreAction_Target() {} -func (*StoreAction_Resource) isStoreAction_Target() {} -func (*StoreAction_Extension) isStoreAction_Target() {} -func (*StoreAction_Config) isStoreAction_Target() {} -func (*StoreAction_Volume) isStoreAction_Target() {} - -func (m *StoreAction) GetTarget() isStoreAction_Target { - if m != nil { - return m.Target +func (x *StoreAction) GetTarget() isStoreAction_Target { + if x != nil { + return x.Target } return nil } -func (m *StoreAction) GetNode() *Node { - if x, ok := m.GetTarget().(*StoreAction_Node); ok { - return x.Node +func (x *StoreAction) GetNode() *Node { + if x != nil { + if x, ok := x.Target.(*StoreAction_Node); ok { + return x.Node + } } return nil } -func (m *StoreAction) GetService() *Service { - if x, ok := m.GetTarget().(*StoreAction_Service); ok { - return x.Service +func (x *StoreAction) GetService() *Service { + if x != nil { + if x, ok := x.Target.(*StoreAction_Service); ok { + return x.Service + } } return nil } -func (m *StoreAction) GetTask() *Task { - if x, ok := m.GetTarget().(*StoreAction_Task); ok { - return x.Task +func (x *StoreAction) GetTask() *Task { + if x != nil { + if x, ok := x.Target.(*StoreAction_Task); ok { + return x.Task + } } return nil } -func (m *StoreAction) GetNetwork() *Network { - if x, ok := m.GetTarget().(*StoreAction_Network); ok { - return x.Network +func (x *StoreAction) GetNetwork() *Network { + if x != nil { + if x, ok := x.Target.(*StoreAction_Network); ok { + return x.Network + } } return nil } -func (m *StoreAction) GetCluster() *Cluster { - if x, ok := m.GetTarget().(*StoreAction_Cluster); ok { - return x.Cluster +func (x *StoreAction) GetCluster() *Cluster { + if x != nil { + if x, ok := x.Target.(*StoreAction_Cluster); ok { + return x.Cluster + } } return nil } -func (m *StoreAction) GetSecret() *Secret { - if x, ok := m.GetTarget().(*StoreAction_Secret); ok { - return x.Secret +func (x *StoreAction) GetSecret() *Secret { + if x != nil { + if x, ok := x.Target.(*StoreAction_Secret); ok { + return x.Secret + } } return nil } -func (m *StoreAction) GetResource() *Resource { - if x, ok := m.GetTarget().(*StoreAction_Resource); ok { - return x.Resource +func (x *StoreAction) GetResource() *Resource { + if x != nil { + if x, ok := x.Target.(*StoreAction_Resource); ok { + return x.Resource + } } return nil } -func (m *StoreAction) GetExtension() *Extension { - if x, ok := m.GetTarget().(*StoreAction_Extension); ok { - return x.Extension +func (x *StoreAction) GetExtension() *Extension { + if x != nil { + if x, ok := x.Target.(*StoreAction_Extension); ok { + return x.Extension + } } return nil } -func (m *StoreAction) GetConfig() *Config { - if x, ok := m.GetTarget().(*StoreAction_Config); ok { - return x.Config +func (x *StoreAction) GetConfig() *Config { + if x != nil { + if x, ok := x.Target.(*StoreAction_Config); ok { + return x.Config + } } return nil } -func (m *StoreAction) GetVolume() *Volume { - if x, ok := m.GetTarget().(*StoreAction_Volume); ok { - return x.Volume +func (x *StoreAction) GetVolume() *Volume { + if x != nil { + if x, ok := x.Target.(*StoreAction_Volume); ok { + return x.Volume + } } return nil } -// XXX_OneofWrappers is for the internal use of the proto package. -func (*StoreAction) XXX_OneofWrappers() []interface{} { - return []interface{}{ - (*StoreAction_Node)(nil), - (*StoreAction_Service)(nil), - (*StoreAction_Task)(nil), - (*StoreAction_Network)(nil), - (*StoreAction_Cluster)(nil), - (*StoreAction_Secret)(nil), - (*StoreAction_Resource)(nil), - (*StoreAction_Extension)(nil), - (*StoreAction_Config)(nil), - (*StoreAction_Volume)(nil), - } +type isStoreAction_Target interface { + isStoreAction_Target() } -func init() { - proto.RegisterEnum("docker.swarmkit.v1.StoreActionKind", StoreActionKind_name, StoreActionKind_value) - proto.RegisterType((*RaftMember)(nil), "docker.swarmkit.v1.RaftMember") - proto.RegisterType((*JoinRequest)(nil), "docker.swarmkit.v1.JoinRequest") - proto.RegisterType((*JoinResponse)(nil), "docker.swarmkit.v1.JoinResponse") - proto.RegisterType((*LeaveRequest)(nil), "docker.swarmkit.v1.LeaveRequest") - proto.RegisterType((*LeaveResponse)(nil), "docker.swarmkit.v1.LeaveResponse") - proto.RegisterType((*ProcessRaftMessageRequest)(nil), "docker.swarmkit.v1.ProcessRaftMessageRequest") - proto.RegisterType((*ProcessRaftMessageResponse)(nil), "docker.swarmkit.v1.ProcessRaftMessageResponse") - proto.RegisterType((*StreamRaftMessageRequest)(nil), "docker.swarmkit.v1.StreamRaftMessageRequest") - proto.RegisterType((*StreamRaftMessageResponse)(nil), "docker.swarmkit.v1.StreamRaftMessageResponse") - proto.RegisterType((*ResolveAddressRequest)(nil), "docker.swarmkit.v1.ResolveAddressRequest") - proto.RegisterType((*ResolveAddressResponse)(nil), "docker.swarmkit.v1.ResolveAddressResponse") - proto.RegisterType((*InternalRaftRequest)(nil), "docker.swarmkit.v1.InternalRaftRequest") - proto.RegisterType((*StoreAction)(nil), "docker.swarmkit.v1.StoreAction") +type StoreAction_Node struct { + Node *Node `protobuf:"bytes,2,opt,name=node,proto3,oneof"` } -func init() { - proto.RegisterFile("github.com/docker/swarmkit/api/raft.proto", fileDescriptor_d2c32e1e3c930c15) +type StoreAction_Service struct { + Service *Service `protobuf:"bytes,3,opt,name=service,proto3,oneof"` } -var fileDescriptor_d2c32e1e3c930c15 = []byte{ - // 1044 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x96, 0x41, 0x73, 0xdb, 0x44, - 0x14, 0xc7, 0x25, 0x5b, 0x75, 0x9a, 0xe7, 0x36, 0x09, 0x5b, 0x12, 0x14, 0xb5, 0x28, 0xae, 0x9b, - 0x19, 0x9c, 0x90, 0xc8, 0x83, 0xcb, 0x4c, 0x99, 0x42, 0x0f, 0x71, 0xe2, 0x99, 0x98, 0xb4, 0x4e, - 0x47, 0x49, 0x4a, 0x6f, 0x41, 0x96, 0x36, 0xae, 0xb0, 0xad, 0x35, 0xbb, 0x6b, 0x07, 0x2e, 0x4c, - 0x8f, 0x90, 0x13, 0x37, 0x18, 0x66, 0x3a, 0x1c, 0xe0, 0xdc, 0x0f, 0xc0, 0x27, 0xc8, 0x70, 0xea, - 0x8d, 0x9e, 0x32, 0xd4, 0xb9, 0xc3, 0x17, 0xe0, 0xc0, 0xec, 0x4a, 0x4a, 0x42, 0x22, 0x3b, 0x3e, - 0x70, 0xf2, 0x8e, 0xf7, 0xf7, 0x7f, 0xff, 0xb7, 0xbb, 0x6f, 0xdf, 0x0a, 0x16, 0x1a, 0x3e, 0x7f, - 0xd6, 0xad, 0x5b, 0x2e, 0x69, 0x17, 0x3d, 0xe2, 0x36, 0x31, 0x2d, 0xb2, 0x7d, 0x87, 0xb6, 0x9b, - 0x3e, 0x2f, 0x3a, 0x1d, 0xbf, 0x48, 0x9d, 0x3d, 0x6e, 0x75, 0x28, 0xe1, 0x04, 0xa1, 0x70, 0xde, - 0x8a, 0xe7, 0xad, 0xde, 0x07, 0xc6, 0xd2, 0x25, 0x72, 0x52, 0xff, 0x02, 0xbb, 0x9c, 0x85, 0x11, - 0x8c, 0xc5, 0x4b, 0x68, 0xfe, 0x75, 0x07, 0xc7, 0xec, 0x7c, 0x83, 0x58, 0x98, 0xbb, 0x9e, 0xe5, - 0x13, 0x99, 0x44, 0xb1, 0x77, 0x57, 0xfe, 0x76, 0xea, 0x67, 0x72, 0x32, 0xde, 0x6e, 0x90, 0x06, - 0x91, 0xc3, 0xa2, 0x18, 0x45, 0xff, 0xde, 0x1b, 0xe2, 0x23, 0x89, 0x7a, 0x77, 0xaf, 0xd8, 0x69, - 0x75, 0x1b, 0x7e, 0x10, 0xfd, 0x84, 0xc2, 0xfc, 0x4b, 0x15, 0xc0, 0x76, 0xf6, 0xf8, 0x23, 0xdc, - 0xae, 0x63, 0x8a, 0xee, 0xc0, 0x98, 0xf0, 0xda, 0xf5, 0x3d, 0x5d, 0xcd, 0xa9, 0x05, 0xad, 0x0c, - 0xfd, 0xa3, 0xb9, 0x8c, 0x00, 0xaa, 0x6b, 0x76, 0x46, 0x4c, 0x55, 0x3d, 0x01, 0x05, 0xc4, 0xc3, - 0x02, 0x4a, 0xe5, 0xd4, 0xc2, 0x78, 0x08, 0xd5, 0x88, 0x87, 0x05, 0x24, 0xa6, 0xaa, 0x1e, 0x42, - 0xa0, 0x39, 0x9e, 0x47, 0xf5, 0xb4, 0x20, 0x6c, 0x39, 0x46, 0x65, 0xc8, 0x30, 0xee, 0xf0, 0x2e, - 0xd3, 0xb5, 0x9c, 0x5a, 0xc8, 0x96, 0xe6, 0xad, 0x8b, 0x1b, 0x6c, 0x9d, 0x66, 0xb3, 0x25, 0xd9, - 0xb2, 0x76, 0x78, 0x34, 0xa7, 0xd8, 0x91, 0x32, 0x7f, 0x1b, 0xb2, 0x9f, 0x12, 0x3f, 0xb0, 0xf1, - 0x97, 0x5d, 0xcc, 0xf8, 0x89, 0x8d, 0x7a, 0x6a, 0x93, 0xff, 0x49, 0x85, 0x6b, 0x21, 0xc3, 0x3a, - 0x24, 0x60, 0x78, 0xb4, 0x55, 0x7d, 0x04, 0x63, 0x6d, 0x69, 0xcb, 0xf4, 0x54, 0x2e, 0x5d, 0xc8, - 0x96, 0xcc, 0xe1, 0xd9, 0xd9, 0x31, 0x8e, 0xde, 0x87, 0x49, 0x8a, 0xdb, 0xa4, 0x87, 0xbd, 0xdd, - 0x38, 0x42, 0x3a, 0x97, 0x2e, 0x68, 0xe5, 0xd4, 0x94, 0x62, 0x4f, 0x44, 0x53, 0xa1, 0x88, 0xe5, - 0xcb, 0x70, 0xed, 0x21, 0x76, 0x7a, 0x38, 0x5e, 0x40, 0x09, 0x34, 0xb1, 0x63, 0x32, 0xb1, 0xcb, - 0x3d, 0x25, 0x9b, 0x9f, 0x84, 0xeb, 0x51, 0x8c, 0x70, 0x81, 0xf9, 0x87, 0x30, 0xfb, 0x98, 0x12, - 0x17, 0x33, 0x16, 0xb2, 0x8c, 0x39, 0x8d, 0x13, 0x87, 0x05, 0xb1, 0x30, 0xf9, 0x4f, 0x64, 0x32, - 0x69, 0x85, 0x65, 0x65, 0xc5, 0x60, 0x3c, 0x7f, 0x5f, 0x7b, 0xfe, 0x43, 0x5e, 0xc9, 0xdf, 0x02, - 0x23, 0x29, 0x5a, 0xe4, 0xb5, 0x01, 0xfa, 0x16, 0xa7, 0xd8, 0x69, 0xff, 0x1f, 0x56, 0x37, 0x61, - 0x36, 0x21, 0x58, 0xe4, 0xf4, 0x09, 0x4c, 0xdb, 0x98, 0x91, 0x56, 0x0f, 0xaf, 0x78, 0x1e, 0x15, - 0xe9, 0x44, 0x36, 0xa3, 0x9c, 0x67, 0x7e, 0x09, 0x66, 0xce, 0xab, 0xa3, 0x72, 0x48, 0xaa, 0x99, - 0x16, 0xdc, 0xa8, 0x06, 0x1c, 0xd3, 0xc0, 0x69, 0x89, 0x38, 0xb1, 0xd3, 0x0c, 0xa4, 0x4e, 0x4c, - 0x32, 0xfd, 0xa3, 0xb9, 0x54, 0x75, 0xcd, 0x4e, 0xf9, 0x1e, 0x7a, 0x00, 0x19, 0xc7, 0xe5, 0x3e, - 0x09, 0xa2, 0x5a, 0x99, 0x4b, 0x3a, 0xb7, 0x2d, 0x4e, 0x28, 0x5e, 0x91, 0x58, 0x5c, 0xc4, 0xa1, - 0x28, 0xff, 0x8f, 0x06, 0xd9, 0x33, 0xb3, 0xe8, 0xe3, 0x93, 0x70, 0xc2, 0x6a, 0xa2, 0x74, 0xe7, - 0x92, 0x70, 0x1b, 0x7e, 0xe0, 0xc5, 0xc1, 0x90, 0x15, 0x55, 0x50, 0x4a, 0xee, 0xb8, 0x9e, 0x24, - 0x15, 0x77, 0x73, 0x5d, 0x09, 0xab, 0x07, 0xdd, 0x83, 0x31, 0x86, 0x69, 0xcf, 0x77, 0xb1, 0xbc, - 0x9c, 0xd9, 0xd2, 0xcd, 0x44, 0xb7, 0x10, 0x59, 0x57, 0xec, 0x98, 0x16, 0x46, 0xdc, 0x61, 0xcd, - 0xe8, 0xf2, 0x26, 0x1a, 0x6d, 0x3b, 0xac, 0x29, 0x8c, 0x04, 0x27, 0x8c, 0x02, 0xcc, 0xf7, 0x09, - 0x6d, 0xea, 0x57, 0x06, 0x1b, 0xd5, 0x42, 0x44, 0x18, 0x45, 0xb4, 0x10, 0xba, 0xad, 0x2e, 0xe3, - 0x98, 0xea, 0x99, 0xc1, 0xc2, 0xd5, 0x10, 0x11, 0xc2, 0x88, 0x46, 0x1f, 0x42, 0x86, 0x61, 0x97, - 0x62, 0xae, 0x8f, 0x49, 0x9d, 0x91, 0xbc, 0x32, 0x41, 0xac, 0x8b, 0x96, 0x22, 0x47, 0xe8, 0x3e, - 0x5c, 0xa5, 0x98, 0x91, 0x2e, 0x75, 0xb1, 0x7e, 0x55, 0xea, 0x6e, 0x25, 0x5e, 0xc3, 0x88, 0x59, - 0x57, 0xec, 0x13, 0x1e, 0x3d, 0x80, 0x71, 0xfc, 0x15, 0xc7, 0x01, 0x13, 0x87, 0x37, 0x2e, 0xc5, - 0xef, 0x26, 0x89, 0x2b, 0x31, 0xb4, 0xae, 0xd8, 0xa7, 0x0a, 0x91, 0xb0, 0x4b, 0x82, 0x3d, 0xbf, - 0xa1, 0xc3, 0xe0, 0x84, 0x57, 0x25, 0x21, 0x12, 0x0e, 0x59, 0xa1, 0xea, 0x91, 0x56, 0xb7, 0x8d, - 0xf5, 0xec, 0x60, 0xd5, 0x13, 0x49, 0x08, 0x55, 0xc8, 0x96, 0xaf, 0x42, 0x86, 0x3b, 0xb4, 0x81, - 0xf9, 0xe2, 0xdf, 0x2a, 0x4c, 0x9e, 0xab, 0x26, 0xf4, 0x1e, 0x8c, 0xed, 0xd4, 0x36, 0x6a, 0x9b, - 0x9f, 0xd5, 0xa6, 0x14, 0xc3, 0x38, 0x78, 0x91, 0x9b, 0x39, 0x47, 0xec, 0x04, 0xcd, 0x80, 0xec, - 0x07, 0xa8, 0x04, 0x37, 0xb6, 0xb6, 0x37, 0xed, 0xca, 0xee, 0xca, 0xea, 0x76, 0x75, 0xb3, 0xb6, - 0xbb, 0x6a, 0x57, 0x56, 0xb6, 0x2b, 0x53, 0xaa, 0x31, 0x7b, 0xf0, 0x22, 0x37, 0x7d, 0x4e, 0xb4, - 0x4a, 0xb1, 0xc3, 0xf1, 0x05, 0xcd, 0xce, 0xe3, 0x35, 0xa1, 0x49, 0x25, 0x6a, 0x76, 0x3a, 0x5e, - 0x92, 0xc6, 0xae, 0x3c, 0xda, 0x7c, 0x52, 0x99, 0x4a, 0x27, 0x6a, 0x6c, 0xd9, 0x64, 0x8d, 0x77, - 0xbe, 0xfd, 0xc5, 0x54, 0x7e, 0xfb, 0xd5, 0x3c, 0xbf, 0xba, 0xd2, 0xcf, 0x69, 0xd0, 0xc4, 0xbd, - 0x46, 0x07, 0x2a, 0xa0, 0x8b, 0xcd, 0x0d, 0x2d, 0x27, 0xed, 0xe0, 0xc0, 0x96, 0x6a, 0x58, 0xa3, - 0xe2, 0x51, 0x27, 0x9b, 0xfe, 0xfd, 0xe5, 0x5f, 0x3f, 0xa6, 0x26, 0xe1, 0xba, 0xe4, 0x97, 0xdb, - 0x4e, 0xe0, 0x34, 0x30, 0x45, 0xdf, 0xa9, 0xf0, 0xd6, 0x85, 0xf6, 0x87, 0x96, 0x92, 0x2f, 0x7f, - 0x72, 0xcb, 0x35, 0x96, 0x47, 0xa4, 0x87, 0x66, 0x52, 0x50, 0xd1, 0x37, 0x30, 0xf1, 0xdf, 0x76, - 0x89, 0x16, 0x06, 0x5d, 0x82, 0x0b, 0x0d, 0xd9, 0x58, 0x1c, 0x05, 0x1d, 0x9a, 0x41, 0xe9, 0x0f, - 0x15, 0x26, 0x4e, 0x1f, 0x3a, 0xf6, 0xcc, 0xef, 0xa0, 0xcf, 0x41, 0x13, 0xcf, 0x38, 0x4a, 0x6c, - 0xae, 0x67, 0x3e, 0x02, 0x8c, 0xdc, 0x60, 0x60, 0xf8, 0x01, 0xb8, 0x70, 0x45, 0x3e, 0xa4, 0x28, - 0x31, 0xc2, 0xd9, 0x77, 0xda, 0xb8, 0x3d, 0x84, 0x18, 0x6a, 0x52, 0x9e, 0x3f, 0x7c, 0x63, 0x2a, - 0xaf, 0xdf, 0x98, 0xca, 0xf3, 0xbe, 0xa9, 0x1e, 0xf6, 0x4d, 0xf5, 0x55, 0xdf, 0x54, 0xff, 0xec, - 0x9b, 0xea, 0xf7, 0xc7, 0xa6, 0xf2, 0xea, 0xd8, 0x54, 0x5e, 0x1f, 0x9b, 0xca, 0xd3, 0xf4, 0x53, - 0xad, 0x9e, 0x91, 0xdf, 0x64, 0x77, 0xff, 0x0d, 0x00, 0x00, 0xff, 0xff, 0x32, 0xf6, 0xf1, 0xe7, - 0xa3, 0x0a, 0x00, 0x00, +type StoreAction_Task struct { + Task *Task `protobuf:"bytes,4,opt,name=task,proto3,oneof"` } -type authenticatedWrapperRaftServer struct { - local RaftServer - authorize func(context.Context, []string) error +type StoreAction_Network struct { + Network *Network `protobuf:"bytes,5,opt,name=network,proto3,oneof"` } -func NewAuthenticatedWrapperRaftServer(local RaftServer, authorize func(context.Context, []string) error) RaftServer { - return &authenticatedWrapperRaftServer{ - local: local, - authorize: authorize, - } +type StoreAction_Cluster struct { + Cluster *Cluster `protobuf:"bytes,6,opt,name=cluster,proto3,oneof"` } -func (p *authenticatedWrapperRaftServer) ProcessRaftMessage(ctx context.Context, r *ProcessRaftMessageRequest) (*ProcessRaftMessageResponse, error) { - - if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { - return nil, err - } - return p.local.ProcessRaftMessage(ctx, r) +type StoreAction_Secret struct { + Secret *Secret `protobuf:"bytes,7,opt,name=secret,proto3,oneof"` } -func (p *authenticatedWrapperRaftServer) StreamRaftMessage(stream Raft_StreamRaftMessageServer) error { - - if err := p.authorize(stream.Context(), []string{"swarm-manager"}); err != nil { - return err - } - return p.local.StreamRaftMessage(stream) +type StoreAction_Resource struct { + Resource *Resource `protobuf:"bytes,8,opt,name=resource,proto3,oneof"` } -func (p *authenticatedWrapperRaftServer) ResolveAddress(ctx context.Context, r *ResolveAddressRequest) (*ResolveAddressResponse, error) { - - if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { - return nil, err - } - return p.local.ResolveAddress(ctx, r) +type StoreAction_Extension struct { + Extension *Extension `protobuf:"bytes,9,opt,name=extension,proto3,oneof"` } -type authenticatedWrapperRaftMembershipServer struct { - local RaftMembershipServer - authorize func(context.Context, []string) error +type StoreAction_Config struct { + Config *Config `protobuf:"bytes,10,opt,name=config,proto3,oneof"` } -func NewAuthenticatedWrapperRaftMembershipServer(local RaftMembershipServer, authorize func(context.Context, []string) error) RaftMembershipServer { - return &authenticatedWrapperRaftMembershipServer{ - local: local, - authorize: authorize, - } +type StoreAction_Volume struct { + Volume *Volume `protobuf:"bytes,11,opt,name=volume,proto3,oneof"` } -func (p *authenticatedWrapperRaftMembershipServer) Join(ctx context.Context, r *JoinRequest) (*JoinResponse, error) { +func (*StoreAction_Node) isStoreAction_Target() {} - if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { - return nil, err - } - return p.local.Join(ctx, r) -} +func (*StoreAction_Service) isStoreAction_Target() {} -func (p *authenticatedWrapperRaftMembershipServer) Leave(ctx context.Context, r *LeaveRequest) (*LeaveResponse, error) { +func (*StoreAction_Task) isStoreAction_Target() {} - if err := p.authorize(ctx, []string{"swarm-manager"}); err != nil { - return nil, err - } - return p.local.Leave(ctx, r) -} +func (*StoreAction_Network) isStoreAction_Target() {} -func (m *RaftMember) Copy() *RaftMember { - if m == nil { - return nil - } - o := &RaftMember{} - o.CopyFrom(m) - return o -} +func (*StoreAction_Cluster) isStoreAction_Target() {} -func (m *RaftMember) CopyFrom(src interface{}) { +func (*StoreAction_Secret) isStoreAction_Target() {} - o := src.(*RaftMember) - *m = *o - github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Status, &o.Status) -} +func (*StoreAction_Resource) isStoreAction_Target() {} -func (m *JoinRequest) Copy() *JoinRequest { - if m == nil { - return nil - } - o := &JoinRequest{} - o.CopyFrom(m) - return o -} - -func (m *JoinRequest) CopyFrom(src interface{}) { - - o := src.(*JoinRequest) - *m = *o -} - -func (m *JoinResponse) Copy() *JoinResponse { - if m == nil { - return nil - } - o := &JoinResponse{} - o.CopyFrom(m) - return o -} - -func (m *JoinResponse) CopyFrom(src interface{}) { - - o := src.(*JoinResponse) - *m = *o - if o.Members != nil { - m.Members = make([]*RaftMember, len(o.Members)) - for i := range m.Members { - m.Members[i] = &RaftMember{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Members[i], o.Members[i]) - } - } - - if o.RemovedMembers != nil { - m.RemovedMembers = make([]uint64, len(o.RemovedMembers)) - copy(m.RemovedMembers, o.RemovedMembers) - } - -} - -func (m *LeaveRequest) Copy() *LeaveRequest { - if m == nil { - return nil - } - o := &LeaveRequest{} - o.CopyFrom(m) - return o -} - -func (m *LeaveRequest) CopyFrom(src interface{}) { - - o := src.(*LeaveRequest) - *m = *o - if o.Node != nil { - m.Node = &RaftMember{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Node, o.Node) - } -} - -func (m *LeaveResponse) Copy() *LeaveResponse { - if m == nil { - return nil - } - o := &LeaveResponse{} - o.CopyFrom(m) - return o -} - -func (m *LeaveResponse) CopyFrom(src interface{}) {} -func (m *ProcessRaftMessageResponse) Copy() *ProcessRaftMessageResponse { - if m == nil { - return nil - } - o := &ProcessRaftMessageResponse{} - o.CopyFrom(m) - return o -} - -func (m *ProcessRaftMessageResponse) CopyFrom(src interface{}) {} -func (m *StreamRaftMessageResponse) Copy() *StreamRaftMessageResponse { - if m == nil { - return nil - } - o := &StreamRaftMessageResponse{} - o.CopyFrom(m) - return o -} - -func (m *StreamRaftMessageResponse) CopyFrom(src interface{}) {} -func (m *ResolveAddressRequest) Copy() *ResolveAddressRequest { - if m == nil { - return nil - } - o := &ResolveAddressRequest{} - o.CopyFrom(m) - return o -} - -func (m *ResolveAddressRequest) CopyFrom(src interface{}) { - - o := src.(*ResolveAddressRequest) - *m = *o -} - -func (m *ResolveAddressResponse) Copy() *ResolveAddressResponse { - if m == nil { - return nil - } - o := &ResolveAddressResponse{} - o.CopyFrom(m) - return o -} - -func (m *ResolveAddressResponse) CopyFrom(src interface{}) { - - o := src.(*ResolveAddressResponse) - *m = *o -} - -func (m *InternalRaftRequest) Copy() *InternalRaftRequest { - if m == nil { - return nil - } - o := &InternalRaftRequest{} - o.CopyFrom(m) - return o -} - -func (m *InternalRaftRequest) CopyFrom(src interface{}) { - - o := src.(*InternalRaftRequest) - *m = *o - if o.Action != nil { - m.Action = make([]StoreAction, len(o.Action)) - for i := range m.Action { - github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Action[i], &o.Action[i]) - } - } - -} - -func (m *StoreAction) Copy() *StoreAction { - if m == nil { - return nil - } - o := &StoreAction{} - o.CopyFrom(m) - return o -} - -func (m *StoreAction) CopyFrom(src interface{}) { - - o := src.(*StoreAction) - *m = *o - if o.Target != nil { - switch o.Target.(type) { - case *StoreAction_Node: - v := StoreAction_Node{ - Node: &Node{}, - } - github_com_moby_swarmkit_v2_api_deepcopy.Copy(v.Node, o.GetNode()) - m.Target = &v - case *StoreAction_Service: - v := StoreAction_Service{ - Service: &Service{}, - } - github_com_moby_swarmkit_v2_api_deepcopy.Copy(v.Service, o.GetService()) - m.Target = &v - case *StoreAction_Task: - v := StoreAction_Task{ - Task: &Task{}, - } - github_com_moby_swarmkit_v2_api_deepcopy.Copy(v.Task, o.GetTask()) - m.Target = &v - case *StoreAction_Network: - v := StoreAction_Network{ - Network: &Network{}, - } - github_com_moby_swarmkit_v2_api_deepcopy.Copy(v.Network, o.GetNetwork()) - m.Target = &v - case *StoreAction_Cluster: - v := StoreAction_Cluster{ - Cluster: &Cluster{}, - } - github_com_moby_swarmkit_v2_api_deepcopy.Copy(v.Cluster, o.GetCluster()) - m.Target = &v - case *StoreAction_Secret: - v := StoreAction_Secret{ - Secret: &Secret{}, - } - github_com_moby_swarmkit_v2_api_deepcopy.Copy(v.Secret, o.GetSecret()) - m.Target = &v - case *StoreAction_Resource: - v := StoreAction_Resource{ - Resource: &Resource{}, - } - github_com_moby_swarmkit_v2_api_deepcopy.Copy(v.Resource, o.GetResource()) - m.Target = &v - case *StoreAction_Extension: - v := StoreAction_Extension{ - Extension: &Extension{}, - } - github_com_moby_swarmkit_v2_api_deepcopy.Copy(v.Extension, o.GetExtension()) - m.Target = &v - case *StoreAction_Config: - v := StoreAction_Config{ - Config: &Config{}, - } - github_com_moby_swarmkit_v2_api_deepcopy.Copy(v.Config, o.GetConfig()) - m.Target = &v - case *StoreAction_Volume: - v := StoreAction_Volume{ - Volume: &Volume{}, - } - github_com_moby_swarmkit_v2_api_deepcopy.Copy(v.Volume, o.GetVolume()) - m.Target = &v - } - } - -} - -// Reference imports to suppress errors if they are not otherwise used. -var _ context.Context -var _ grpc.ClientConn - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 - -// RaftClient is the client API for Raft service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. -type RaftClient interface { - // ProcessRaftMessage sends a raft message to be processed on a raft member, it is - // called from the RaftMember willing to send a message to its destination ('To' field) - ProcessRaftMessage(ctx context.Context, in *ProcessRaftMessageRequest, opts ...grpc.CallOption) (*ProcessRaftMessageResponse, error) - // StreamRaftMessage accepts a stream of raft messages of type StreamRaftMessageRequest - // to be processed on a raft member, returning a StreamRaftMessageResponse - // when processing of the streamed messages is complete. A single stream corresponds - // to a single raft message, which may be disassembled and streamed as individual messages. - // It is called from the Raft leader, which uses it to stream messages to a raft member. - StreamRaftMessage(ctx context.Context, opts ...grpc.CallOption) (Raft_StreamRaftMessageClient, error) - // ResolveAddress returns the address where the node with the given ID can be reached. - ResolveAddress(ctx context.Context, in *ResolveAddressRequest, opts ...grpc.CallOption) (*ResolveAddressResponse, error) -} - -type raftClient struct { - cc *grpc.ClientConn -} - -func NewRaftClient(cc *grpc.ClientConn) RaftClient { - return &raftClient{cc} -} - -func (c *raftClient) ProcessRaftMessage(ctx context.Context, in *ProcessRaftMessageRequest, opts ...grpc.CallOption) (*ProcessRaftMessageResponse, error) { - out := new(ProcessRaftMessageResponse) - err := c.cc.Invoke(ctx, "/docker.swarmkit.v1.Raft/ProcessRaftMessage", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *raftClient) StreamRaftMessage(ctx context.Context, opts ...grpc.CallOption) (Raft_StreamRaftMessageClient, error) { - stream, err := c.cc.NewStream(ctx, &_Raft_serviceDesc.Streams[0], "/docker.swarmkit.v1.Raft/StreamRaftMessage", opts...) - if err != nil { - return nil, err - } - x := &raftStreamRaftMessageClient{stream} - return x, nil -} - -type Raft_StreamRaftMessageClient interface { - Send(*StreamRaftMessageRequest) error - CloseAndRecv() (*StreamRaftMessageResponse, error) - grpc.ClientStream -} - -type raftStreamRaftMessageClient struct { - grpc.ClientStream -} - -func (x *raftStreamRaftMessageClient) Send(m *StreamRaftMessageRequest) error { - return x.ClientStream.SendMsg(m) -} - -func (x *raftStreamRaftMessageClient) CloseAndRecv() (*StreamRaftMessageResponse, error) { - if err := x.ClientStream.CloseSend(); err != nil { - return nil, err - } - m := new(StreamRaftMessageResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} - -func (c *raftClient) ResolveAddress(ctx context.Context, in *ResolveAddressRequest, opts ...grpc.CallOption) (*ResolveAddressResponse, error) { - out := new(ResolveAddressResponse) - err := c.cc.Invoke(ctx, "/docker.swarmkit.v1.Raft/ResolveAddress", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// RaftServer is the server API for Raft service. -type RaftServer interface { - // ProcessRaftMessage sends a raft message to be processed on a raft member, it is - // called from the RaftMember willing to send a message to its destination ('To' field) - ProcessRaftMessage(context.Context, *ProcessRaftMessageRequest) (*ProcessRaftMessageResponse, error) - // StreamRaftMessage accepts a stream of raft messages of type StreamRaftMessageRequest - // to be processed on a raft member, returning a StreamRaftMessageResponse - // when processing of the streamed messages is complete. A single stream corresponds - // to a single raft message, which may be disassembled and streamed as individual messages. - // It is called from the Raft leader, which uses it to stream messages to a raft member. - StreamRaftMessage(Raft_StreamRaftMessageServer) error - // ResolveAddress returns the address where the node with the given ID can be reached. - ResolveAddress(context.Context, *ResolveAddressRequest) (*ResolveAddressResponse, error) -} - -// UnimplementedRaftServer can be embedded to have forward compatible implementations. -type UnimplementedRaftServer struct { -} - -func (*UnimplementedRaftServer) ProcessRaftMessage(ctx context.Context, req *ProcessRaftMessageRequest) (*ProcessRaftMessageResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ProcessRaftMessage not implemented") -} -func (*UnimplementedRaftServer) StreamRaftMessage(srv Raft_StreamRaftMessageServer) error { - return status.Errorf(codes.Unimplemented, "method StreamRaftMessage not implemented") -} -func (*UnimplementedRaftServer) ResolveAddress(ctx context.Context, req *ResolveAddressRequest) (*ResolveAddressResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ResolveAddress not implemented") -} - -func RegisterRaftServer(s *grpc.Server, srv RaftServer) { - s.RegisterService(&_Raft_serviceDesc, srv) -} - -func _Raft_ProcessRaftMessage_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ProcessRaftMessageRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(RaftServer).ProcessRaftMessage(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/docker.swarmkit.v1.Raft/ProcessRaftMessage", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(RaftServer).ProcessRaftMessage(ctx, req.(*ProcessRaftMessageRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Raft_StreamRaftMessage_Handler(srv interface{}, stream grpc.ServerStream) error { - return srv.(RaftServer).StreamRaftMessage(&raftStreamRaftMessageServer{stream}) -} - -type Raft_StreamRaftMessageServer interface { - SendAndClose(*StreamRaftMessageResponse) error - Recv() (*StreamRaftMessageRequest, error) - grpc.ServerStream -} - -type raftStreamRaftMessageServer struct { - grpc.ServerStream -} - -func (x *raftStreamRaftMessageServer) SendAndClose(m *StreamRaftMessageResponse) error { - return x.ServerStream.SendMsg(m) -} - -func (x *raftStreamRaftMessageServer) Recv() (*StreamRaftMessageRequest, error) { - m := new(StreamRaftMessageRequest) - if err := x.ServerStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} - -func _Raft_ResolveAddress_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ResolveAddressRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(RaftServer).ResolveAddress(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/docker.swarmkit.v1.Raft/ResolveAddress", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(RaftServer).ResolveAddress(ctx, req.(*ResolveAddressRequest)) - } - return interceptor(ctx, in, info, handler) -} - -var _Raft_serviceDesc = grpc.ServiceDesc{ - ServiceName: "docker.swarmkit.v1.Raft", - HandlerType: (*RaftServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "ProcessRaftMessage", - Handler: _Raft_ProcessRaftMessage_Handler, - }, - { - MethodName: "ResolveAddress", - Handler: _Raft_ResolveAddress_Handler, - }, - }, - Streams: []grpc.StreamDesc{ - { - StreamName: "StreamRaftMessage", - Handler: _Raft_StreamRaftMessage_Handler, - ClientStreams: true, - }, - }, - Metadata: "github.com/docker/swarmkit/api/raft.proto", -} - -// RaftMembershipClient is the client API for RaftMembership service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. -type RaftMembershipClient interface { - // Join adds a RaftMember to the raft cluster. - Join(ctx context.Context, in *JoinRequest, opts ...grpc.CallOption) (*JoinResponse, error) - // Leave removes a RaftMember from the raft cluster. - Leave(ctx context.Context, in *LeaveRequest, opts ...grpc.CallOption) (*LeaveResponse, error) -} - -type raftMembershipClient struct { - cc *grpc.ClientConn -} - -func NewRaftMembershipClient(cc *grpc.ClientConn) RaftMembershipClient { - return &raftMembershipClient{cc} -} - -func (c *raftMembershipClient) Join(ctx context.Context, in *JoinRequest, opts ...grpc.CallOption) (*JoinResponse, error) { - out := new(JoinResponse) - err := c.cc.Invoke(ctx, "/docker.swarmkit.v1.RaftMembership/Join", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *raftMembershipClient) Leave(ctx context.Context, in *LeaveRequest, opts ...grpc.CallOption) (*LeaveResponse, error) { - out := new(LeaveResponse) - err := c.cc.Invoke(ctx, "/docker.swarmkit.v1.RaftMembership/Leave", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// RaftMembershipServer is the server API for RaftMembership service. -type RaftMembershipServer interface { - // Join adds a RaftMember to the raft cluster. - Join(context.Context, *JoinRequest) (*JoinResponse, error) - // Leave removes a RaftMember from the raft cluster. - Leave(context.Context, *LeaveRequest) (*LeaveResponse, error) -} - -// UnimplementedRaftMembershipServer can be embedded to have forward compatible implementations. -type UnimplementedRaftMembershipServer struct { -} - -func (*UnimplementedRaftMembershipServer) Join(ctx context.Context, req *JoinRequest) (*JoinResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Join not implemented") -} -func (*UnimplementedRaftMembershipServer) Leave(ctx context.Context, req *LeaveRequest) (*LeaveResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Leave not implemented") -} +func (*StoreAction_Extension) isStoreAction_Target() {} -func RegisterRaftMembershipServer(s *grpc.Server, srv RaftMembershipServer) { - s.RegisterService(&_RaftMembership_serviceDesc, srv) -} +func (*StoreAction_Config) isStoreAction_Target() {} + +func (*StoreAction_Volume) isStoreAction_Target() {} + +var File_api_raft_proto protoreflect.FileDescriptor + +const file_api_raft_proto_rawDesc = "" + + "\n" + + "\x0eapi/raft.proto\x12\x12docker.swarmkit.v1\x1a\x11api/objects.proto\x1a\x0fapi/types.proto\x1a$go.etcd.io/raft/v3/raftpb/raft.proto\x1a\x1cprotobuf/plugin/plugin.proto\"\x90\x01\n" + + "\n" + + "RaftMember\x12\x17\n" + + "\araft_id\x18\x01 \x01(\x04R\x06raftId\x12\x17\n" + + "\anode_id\x18\x02 \x01(\tR\x06nodeId\x12\x12\n" + + "\x04addr\x18\x03 \x01(\tR\x04addr\x12<\n" + + "\x06status\x18\x04 \x01(\v2$.docker.swarmkit.v1.RaftMemberStatusR\x06status\"!\n" + + "\vJoinRequest\x12\x12\n" + + "\x04addr\x18\x01 \x01(\tR\x04addr\"\x8e\x01\n" + + "\fJoinResponse\x12\x17\n" + + "\araft_id\x18\x01 \x01(\x04R\x06raftId\x128\n" + + "\amembers\x18\x02 \x03(\v2\x1e.docker.swarmkit.v1.RaftMemberR\amembers\x12+\n" + + "\x0fremoved_members\x18\x03 \x03(\x04B\x02\x10\x00R\x0eremovedMembers\"B\n" + + "\fLeaveRequest\x122\n" + + "\x04node\x18\x01 \x01(\v2\x1e.docker.swarmkit.v1.RaftMemberR\x04node\"\x0f\n" + + "\rLeaveResponse\"L\n" + + "\x19ProcessRaftMessageRequest\x12)\n" + + "\amessage\x18\x01 \x01(\v2\x0f.raftpb.MessageR\amessage:\x04\x80\x97\"\x00\"\x1c\n" + + "\x1aProcessRaftMessageResponse\"K\n" + + "\x18StreamRaftMessageRequest\x12)\n" + + "\amessage\x18\x01 \x01(\v2\x0f.raftpb.MessageR\amessage:\x04\x80\x97\"\x00\"\x1b\n" + + "\x19StreamRaftMessageResponse\"0\n" + + "\x15ResolveAddressRequest\x12\x17\n" + + "\araft_id\x18\x01 \x01(\x04R\x06raftId\",\n" + + "\x16ResolveAddressResponse\x12\x12\n" + + "\x04addr\x18\x01 \x01(\tR\x04addr\"^\n" + + "\x13InternalRaftRequest\x12\x0e\n" + + "\x02id\x18\x01 \x01(\x04R\x02id\x127\n" + + "\x06action\x18\x02 \x03(\v2\x1f.docker.swarmkit.v1.StoreActionR\x06action\"\xfc\x04\n" + + "\vStoreAction\x12;\n" + + "\x06action\x18\x01 \x01(\x0e2#.docker.swarmkit.v1.StoreActionKindR\x06action\x12.\n" + + "\x04node\x18\x02 \x01(\v2\x18.docker.swarmkit.v1.NodeH\x00R\x04node\x127\n" + + "\aservice\x18\x03 \x01(\v2\x1b.docker.swarmkit.v1.ServiceH\x00R\aservice\x12.\n" + + "\x04task\x18\x04 \x01(\v2\x18.docker.swarmkit.v1.TaskH\x00R\x04task\x127\n" + + "\anetwork\x18\x05 \x01(\v2\x1b.docker.swarmkit.v1.NetworkH\x00R\anetwork\x127\n" + + "\acluster\x18\x06 \x01(\v2\x1b.docker.swarmkit.v1.ClusterH\x00R\acluster\x124\n" + + "\x06secret\x18\a \x01(\v2\x1a.docker.swarmkit.v1.SecretH\x00R\x06secret\x12:\n" + + "\bresource\x18\b \x01(\v2\x1c.docker.swarmkit.v1.ResourceH\x00R\bresource\x12=\n" + + "\textension\x18\t \x01(\v2\x1d.docker.swarmkit.v1.ExtensionH\x00R\textension\x124\n" + + "\x06config\x18\n" + + " \x01(\v2\x1a.docker.swarmkit.v1.ConfigH\x00R\x06config\x124\n" + + "\x06volume\x18\v \x01(\v2\x1a.docker.swarmkit.v1.VolumeH\x00R\x06volumeB\b\n" + + "\x06target*\xeb\x01\n" + + "\x0fStoreActionKind\x12'\n" + + "\aUNKNOWN\x10\x00\x1a\x1a\xa2\x97\"\x16StoreActionKindUnknown\x122\n" + + "\x13STORE_ACTION_CREATE\x10\x01\x1a\x19\xa2\x97\"\x15StoreActionKindCreate\x122\n" + + "\x13STORE_ACTION_UPDATE\x10\x02\x1a\x19\xa2\x97\"\x15StoreActionKindUpdate\x122\n" + + "\x13STORE_ACTION_REMOVE\x10\x03\x1a\x19\xa2\x97\"\x15StoreActionKindRemove\x1a\x13\x9a\x97\"\x0fStoreActionKind2\x9f\x03\n" + + "\x04Raft\x12\x8a\x01\n" + + "\x12ProcessRaftMessage\x12-.docker.swarmkit.v1.ProcessRaftMessageRequest\x1a..docker.swarmkit.v1.ProcessRaftMessageResponse\"\x15ʮ\xee\x98\x02\x0f\n" + + "\rswarm-manager\x12\x89\x01\n" + + "\x11StreamRaftMessage\x12,.docker.swarmkit.v1.StreamRaftMessageRequest\x1a-.docker.swarmkit.v1.StreamRaftMessageResponse\"\x15ʮ\xee\x98\x02\x0f\n" + + "\rswarm-manager(\x01\x12~\n" + + "\x0eResolveAddress\x12).docker.swarmkit.v1.ResolveAddressRequest\x1a*.docker.swarmkit.v1.ResolveAddressResponse\"\x15ʮ\xee\x98\x02\x0f\n" + + "\rswarm-manager2\xd7\x01\n" + + "\x0eRaftMembership\x12`\n" + + "\x04Join\x12\x1f.docker.swarmkit.v1.JoinRequest\x1a .docker.swarmkit.v1.JoinResponse\"\x15ʮ\xee\x98\x02\x0f\n" + + "\rswarm-manager\x12c\n" + + "\x05Leave\x12 .docker.swarmkit.v1.LeaveRequest\x1a!.docker.swarmkit.v1.LeaveResponse\"\x15ʮ\xee\x98\x02\x0f\n" + + "\rswarm-managerB!Z\x1fgithub.com/moby/swarmkit/v2/apiX\x03b\x06proto3" -func _RaftMembership_Join_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(JoinRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(RaftMembershipServer).Join(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/docker.swarmkit.v1.RaftMembership/Join", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(RaftMembershipServer).Join(ctx, req.(*JoinRequest)) - } - return interceptor(ctx, in, info, handler) -} +var ( + file_api_raft_proto_rawDescOnce sync.Once + file_api_raft_proto_rawDescData []byte +) -func _RaftMembership_Leave_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(LeaveRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(RaftMembershipServer).Leave(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/docker.swarmkit.v1.RaftMembership/Leave", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(RaftMembershipServer).Leave(ctx, req.(*LeaveRequest)) +func file_api_raft_proto_rawDescGZIP() []byte { + file_api_raft_proto_rawDescOnce.Do(func() { + file_api_raft_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_api_raft_proto_rawDesc), len(file_api_raft_proto_rawDesc))) + }) + return file_api_raft_proto_rawDescData +} + +var file_api_raft_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_api_raft_proto_msgTypes = make([]protoimpl.MessageInfo, 13) +var file_api_raft_proto_goTypes = []any{ + (StoreActionKind)(0), // 0: docker.swarmkit.v1.StoreActionKind + (*RaftMember)(nil), // 1: docker.swarmkit.v1.RaftMember + (*JoinRequest)(nil), // 2: docker.swarmkit.v1.JoinRequest + (*JoinResponse)(nil), // 3: docker.swarmkit.v1.JoinResponse + (*LeaveRequest)(nil), // 4: docker.swarmkit.v1.LeaveRequest + (*LeaveResponse)(nil), // 5: docker.swarmkit.v1.LeaveResponse + (*ProcessRaftMessageRequest)(nil), // 6: docker.swarmkit.v1.ProcessRaftMessageRequest + (*ProcessRaftMessageResponse)(nil), // 7: docker.swarmkit.v1.ProcessRaftMessageResponse + (*StreamRaftMessageRequest)(nil), // 8: docker.swarmkit.v1.StreamRaftMessageRequest + (*StreamRaftMessageResponse)(nil), // 9: docker.swarmkit.v1.StreamRaftMessageResponse + (*ResolveAddressRequest)(nil), // 10: docker.swarmkit.v1.ResolveAddressRequest + (*ResolveAddressResponse)(nil), // 11: docker.swarmkit.v1.ResolveAddressResponse + (*InternalRaftRequest)(nil), // 12: docker.swarmkit.v1.InternalRaftRequest + (*StoreAction)(nil), // 13: docker.swarmkit.v1.StoreAction + (*RaftMemberStatus)(nil), // 14: docker.swarmkit.v1.RaftMemberStatus + (*raftpb.Message)(nil), // 15: raftpb.Message + (*Node)(nil), // 16: docker.swarmkit.v1.Node + (*Service)(nil), // 17: docker.swarmkit.v1.Service + (*Task)(nil), // 18: docker.swarmkit.v1.Task + (*Network)(nil), // 19: docker.swarmkit.v1.Network + (*Cluster)(nil), // 20: docker.swarmkit.v1.Cluster + (*Secret)(nil), // 21: docker.swarmkit.v1.Secret + (*Resource)(nil), // 22: docker.swarmkit.v1.Resource + (*Extension)(nil), // 23: docker.swarmkit.v1.Extension + (*Config)(nil), // 24: docker.swarmkit.v1.Config + (*Volume)(nil), // 25: docker.swarmkit.v1.Volume +} +var file_api_raft_proto_depIdxs = []int32{ + 14, // 0: docker.swarmkit.v1.RaftMember.status:type_name -> docker.swarmkit.v1.RaftMemberStatus + 1, // 1: docker.swarmkit.v1.JoinResponse.members:type_name -> docker.swarmkit.v1.RaftMember + 1, // 2: docker.swarmkit.v1.LeaveRequest.node:type_name -> docker.swarmkit.v1.RaftMember + 15, // 3: docker.swarmkit.v1.ProcessRaftMessageRequest.message:type_name -> raftpb.Message + 15, // 4: docker.swarmkit.v1.StreamRaftMessageRequest.message:type_name -> raftpb.Message + 13, // 5: docker.swarmkit.v1.InternalRaftRequest.action:type_name -> docker.swarmkit.v1.StoreAction + 0, // 6: docker.swarmkit.v1.StoreAction.action:type_name -> docker.swarmkit.v1.StoreActionKind + 16, // 7: docker.swarmkit.v1.StoreAction.node:type_name -> docker.swarmkit.v1.Node + 17, // 8: docker.swarmkit.v1.StoreAction.service:type_name -> docker.swarmkit.v1.Service + 18, // 9: docker.swarmkit.v1.StoreAction.task:type_name -> docker.swarmkit.v1.Task + 19, // 10: docker.swarmkit.v1.StoreAction.network:type_name -> docker.swarmkit.v1.Network + 20, // 11: docker.swarmkit.v1.StoreAction.cluster:type_name -> docker.swarmkit.v1.Cluster + 21, // 12: docker.swarmkit.v1.StoreAction.secret:type_name -> docker.swarmkit.v1.Secret + 22, // 13: docker.swarmkit.v1.StoreAction.resource:type_name -> docker.swarmkit.v1.Resource + 23, // 14: docker.swarmkit.v1.StoreAction.extension:type_name -> docker.swarmkit.v1.Extension + 24, // 15: docker.swarmkit.v1.StoreAction.config:type_name -> docker.swarmkit.v1.Config + 25, // 16: docker.swarmkit.v1.StoreAction.volume:type_name -> docker.swarmkit.v1.Volume + 6, // 17: docker.swarmkit.v1.Raft.ProcessRaftMessage:input_type -> docker.swarmkit.v1.ProcessRaftMessageRequest + 8, // 18: docker.swarmkit.v1.Raft.StreamRaftMessage:input_type -> docker.swarmkit.v1.StreamRaftMessageRequest + 10, // 19: docker.swarmkit.v1.Raft.ResolveAddress:input_type -> docker.swarmkit.v1.ResolveAddressRequest + 2, // 20: docker.swarmkit.v1.RaftMembership.Join:input_type -> docker.swarmkit.v1.JoinRequest + 4, // 21: docker.swarmkit.v1.RaftMembership.Leave:input_type -> docker.swarmkit.v1.LeaveRequest + 7, // 22: docker.swarmkit.v1.Raft.ProcessRaftMessage:output_type -> docker.swarmkit.v1.ProcessRaftMessageResponse + 9, // 23: docker.swarmkit.v1.Raft.StreamRaftMessage:output_type -> docker.swarmkit.v1.StreamRaftMessageResponse + 11, // 24: docker.swarmkit.v1.Raft.ResolveAddress:output_type -> docker.swarmkit.v1.ResolveAddressResponse + 3, // 25: docker.swarmkit.v1.RaftMembership.Join:output_type -> docker.swarmkit.v1.JoinResponse + 5, // 26: docker.swarmkit.v1.RaftMembership.Leave:output_type -> docker.swarmkit.v1.LeaveResponse + 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 +} + +func init() { file_api_raft_proto_init() } +func file_api_raft_proto_init() { + if File_api_raft_proto != nil { + return + } + file_api_objects_proto_init() + file_api_types_proto_init() + file_api_raft_proto_msgTypes[12].OneofWrappers = []any{ + (*StoreAction_Node)(nil), + (*StoreAction_Service)(nil), + (*StoreAction_Task)(nil), + (*StoreAction_Network)(nil), + (*StoreAction_Cluster)(nil), + (*StoreAction_Secret)(nil), + (*StoreAction_Resource)(nil), + (*StoreAction_Extension)(nil), + (*StoreAction_Config)(nil), + (*StoreAction_Volume)(nil), } - return interceptor(ctx, in, info, handler) -} - -var _RaftMembership_serviceDesc = grpc.ServiceDesc{ - ServiceName: "docker.swarmkit.v1.RaftMembership", - HandlerType: (*RaftMembershipServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "Join", - Handler: _RaftMembership_Join_Handler, + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_api_raft_proto_rawDesc), len(file_api_raft_proto_rawDesc)), + NumEnums: 1, + NumMessages: 13, + NumExtensions: 0, + NumServices: 2, }, - { - MethodName: "Leave", - Handler: _RaftMembership_Leave_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "github.com/docker/swarmkit/api/raft.proto", -} - -func (m *RaftMember) 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 *RaftMember) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *RaftMember) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintRaft(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - if len(m.Addr) > 0 { - i -= len(m.Addr) - copy(dAtA[i:], m.Addr) - i = encodeVarintRaft(dAtA, i, uint64(len(m.Addr))) - i-- - dAtA[i] = 0x1a - } - if len(m.NodeID) > 0 { - i -= len(m.NodeID) - copy(dAtA[i:], m.NodeID) - i = encodeVarintRaft(dAtA, i, uint64(len(m.NodeID))) - i-- - dAtA[i] = 0x12 - } - if m.RaftID != 0 { - i = encodeVarintRaft(dAtA, i, uint64(m.RaftID)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *JoinRequest) 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 *JoinRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *JoinRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Addr) > 0 { - i -= len(m.Addr) - copy(dAtA[i:], m.Addr) - i = encodeVarintRaft(dAtA, i, uint64(len(m.Addr))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *JoinResponse) 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 *JoinResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) + GoTypes: file_api_raft_proto_goTypes, + DependencyIndexes: file_api_raft_proto_depIdxs, + EnumInfos: file_api_raft_proto_enumTypes, + MessageInfos: file_api_raft_proto_msgTypes, + }.Build() + File_api_raft_proto = out.File + file_api_raft_proto_goTypes = nil + file_api_raft_proto_depIdxs = nil } - -func (m *JoinResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.RemovedMembers) > 0 { - for iNdEx := len(m.RemovedMembers) - 1; iNdEx >= 0; iNdEx-- { - i = encodeVarintRaft(dAtA, i, uint64(m.RemovedMembers[iNdEx])) - i-- - dAtA[i] = 0x18 - } - } - if len(m.Members) > 0 { - for iNdEx := len(m.Members) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Members[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintRaft(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - } - if m.RaftID != 0 { - i = encodeVarintRaft(dAtA, i, uint64(m.RaftID)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *LeaveRequest) 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 *LeaveRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *LeaveRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Node != nil { - { - size, err := m.Node.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintRaft(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *LeaveResponse) 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 *LeaveResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *LeaveResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil -} - -func (m *ProcessRaftMessageRequest) 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 *ProcessRaftMessageRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ProcessRaftMessageRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Message != nil { - { - size, err := m.Message.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintRaft(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *ProcessRaftMessageResponse) 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 *ProcessRaftMessageResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ProcessRaftMessageResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil -} - -func (m *StreamRaftMessageRequest) 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 *StreamRaftMessageRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *StreamRaftMessageRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Message != nil { - { - size, err := m.Message.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintRaft(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *StreamRaftMessageResponse) 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 *StreamRaftMessageResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *StreamRaftMessageResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil -} - -func (m *ResolveAddressRequest) 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 *ResolveAddressRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ResolveAddressRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.RaftID != 0 { - i = encodeVarintRaft(dAtA, i, uint64(m.RaftID)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *ResolveAddressResponse) 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 *ResolveAddressResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ResolveAddressResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Addr) > 0 { - i -= len(m.Addr) - copy(dAtA[i:], m.Addr) - i = encodeVarintRaft(dAtA, i, uint64(len(m.Addr))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *InternalRaftRequest) 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 *InternalRaftRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *InternalRaftRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Action) > 0 { - for iNdEx := len(m.Action) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Action[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintRaft(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - } - if m.ID != 0 { - i = encodeVarintRaft(dAtA, i, uint64(m.ID)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *StoreAction) 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 *StoreAction) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *StoreAction) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Target != nil { - { - size := m.Target.Size() - i -= size - if _, err := m.Target.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - } - } - if m.Action != 0 { - i = encodeVarintRaft(dAtA, i, uint64(m.Action)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *StoreAction_Node) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *StoreAction_Node) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - if m.Node != nil { - { - size, err := m.Node.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintRaft(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - return len(dAtA) - i, nil -} -func (m *StoreAction_Service) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *StoreAction_Service) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - if m.Service != nil { - { - size, err := m.Service.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintRaft(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - } - return len(dAtA) - i, nil -} -func (m *StoreAction_Task) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *StoreAction_Task) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - if m.Task != nil { - { - size, err := m.Task.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintRaft(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - } - return len(dAtA) - i, nil -} -func (m *StoreAction_Network) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *StoreAction_Network) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - if m.Network != nil { - { - size, err := m.Network.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintRaft(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x2a - } - return len(dAtA) - i, nil -} -func (m *StoreAction_Cluster) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *StoreAction_Cluster) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - if m.Cluster != nil { - { - size, err := m.Cluster.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintRaft(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x32 - } - return len(dAtA) - i, nil -} -func (m *StoreAction_Secret) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *StoreAction_Secret) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - if m.Secret != nil { - { - size, err := m.Secret.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintRaft(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x3a - } - return len(dAtA) - i, nil -} -func (m *StoreAction_Resource) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *StoreAction_Resource) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - if m.Resource != nil { - { - size, err := m.Resource.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintRaft(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x42 - } - return len(dAtA) - i, nil -} -func (m *StoreAction_Extension) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *StoreAction_Extension) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - if m.Extension != nil { - { - size, err := m.Extension.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintRaft(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x4a - } - return len(dAtA) - i, nil -} -func (m *StoreAction_Config) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *StoreAction_Config) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - if m.Config != nil { - { - size, err := m.Config.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintRaft(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x52 - } - return len(dAtA) - i, nil -} -func (m *StoreAction_Volume) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *StoreAction_Volume) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - if m.Volume != nil { - { - size, err := m.Volume.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintRaft(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x5a - } - return len(dAtA) - i, nil -} -func encodeVarintRaft(dAtA []byte, offset int, v uint64) int { - offset -= sovRaft(v) - base := offset - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return base -} - -type raftProxyRaftServer struct { - local RaftServer - connSelector raftselector.ConnProvider - localCtxMods, remoteCtxMods []func(context.Context) (context.Context, error) -} - -func NewRaftProxyRaftServer(local RaftServer, connSelector raftselector.ConnProvider, localCtxMod, remoteCtxMod func(context.Context) (context.Context, error)) RaftServer { - redirectChecker := func(ctx context.Context) (context.Context, error) { - p, ok := peer.FromContext(ctx) - if !ok { - return ctx, status.Errorf(codes.InvalidArgument, "remote addr is not found in context") - } - addr := p.Addr.String() - md, ok := metadata.FromIncomingContext(ctx) - if ok && len(md["redirect"]) != 0 { - return ctx, status.Errorf(codes.ResourceExhausted, "more than one redirect to leader from: %s", md["redirect"]) - } - if !ok { - md = metadata.New(map[string]string{}) - } - md["redirect"] = append(md["redirect"], addr) - return metadata.NewOutgoingContext(ctx, md), nil - } - remoteMods := []func(context.Context) (context.Context, error){redirectChecker} - remoteMods = append(remoteMods, remoteCtxMod) - - var localMods []func(context.Context) (context.Context, error) - if localCtxMod != nil { - localMods = []func(context.Context) (context.Context, error){localCtxMod} - } - - return &raftProxyRaftServer{ - local: local, - connSelector: connSelector, - localCtxMods: localMods, - remoteCtxMods: remoteMods, - } -} -func (p *raftProxyRaftServer) runCtxMods(ctx context.Context, ctxMods []func(context.Context) (context.Context, error)) (context.Context, error) { - var err error - for _, mod := range ctxMods { - ctx, err = mod(ctx) - if err != nil { - return ctx, err - } - } - return ctx, nil -} -func (p *raftProxyRaftServer) pollNewLeaderConn(ctx context.Context) (*grpc.ClientConn, error) { - ticker := rafttime.NewTicker(500 * rafttime.Millisecond) - defer ticker.Stop() - for { - select { - case <-ticker.C: - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - return nil, err - } - - client := NewHealthClient(conn) - - resp, err := client.Check(ctx, &HealthCheckRequest{Service: "Raft"}) - if err != nil || resp.Status != HealthCheckResponse_SERVING { - continue - } - return conn, nil - case <-ctx.Done(): - return nil, ctx.Err() - } - } -} - -func (p *raftProxyRaftServer) ProcessRaftMessage(ctx context.Context, r *ProcessRaftMessageRequest) (*ProcessRaftMessageResponse, error) { - - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return nil, err - } - return p.local.ProcessRaftMessage(ctx, r) - } - return nil, err - } - modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return nil, err - } - - resp, err := NewRaftClient(conn).ProcessRaftMessage(modCtx, r) - if err != nil { - if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { - return resp, err - } - conn, err := p.pollNewLeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - return p.local.ProcessRaftMessage(ctx, r) - } - return nil, err - } - return NewRaftClient(conn).ProcessRaftMessage(modCtx, r) - } - return resp, err -} - -type Raft_StreamRaftMessageServerWrapper struct { - Raft_StreamRaftMessageServer - ctx context.Context -} - -func (s Raft_StreamRaftMessageServerWrapper) Context() context.Context { - return s.ctx -} - -func (p *raftProxyRaftServer) StreamRaftMessage(stream Raft_StreamRaftMessageServer) error { - ctx := stream.Context() - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return err - } - streamWrapper := Raft_StreamRaftMessageServerWrapper{ - Raft_StreamRaftMessageServer: stream, - ctx: ctx, - } - return p.local.StreamRaftMessage(streamWrapper) - } - return err - } - ctx, err = p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return err - } - clientStream, err := NewRaftClient(conn).StreamRaftMessage(ctx) - - if err != nil { - return err - } - - for { - msg, err := stream.Recv() - if err == io.EOF { - break - } - if err != nil { - return err - } - if err := clientStream.Send(msg); err != nil { - return err - } - } - - reply, err := clientStream.CloseAndRecv() - if err != nil { - return err - } - - return stream.SendAndClose(reply) -} - -func (p *raftProxyRaftServer) ResolveAddress(ctx context.Context, r *ResolveAddressRequest) (*ResolveAddressResponse, error) { - - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return nil, err - } - return p.local.ResolveAddress(ctx, r) - } - return nil, err - } - modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return nil, err - } - - resp, err := NewRaftClient(conn).ResolveAddress(modCtx, r) - if err != nil { - if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { - return resp, err - } - conn, err := p.pollNewLeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - return p.local.ResolveAddress(ctx, r) - } - return nil, err - } - return NewRaftClient(conn).ResolveAddress(modCtx, r) - } - return resp, err -} - -type raftProxyRaftMembershipServer struct { - local RaftMembershipServer - connSelector raftselector.ConnProvider - localCtxMods, remoteCtxMods []func(context.Context) (context.Context, error) -} - -func NewRaftProxyRaftMembershipServer(local RaftMembershipServer, connSelector raftselector.ConnProvider, localCtxMod, remoteCtxMod func(context.Context) (context.Context, error)) RaftMembershipServer { - redirectChecker := func(ctx context.Context) (context.Context, error) { - p, ok := peer.FromContext(ctx) - if !ok { - return ctx, status.Errorf(codes.InvalidArgument, "remote addr is not found in context") - } - addr := p.Addr.String() - md, ok := metadata.FromIncomingContext(ctx) - if ok && len(md["redirect"]) != 0 { - return ctx, status.Errorf(codes.ResourceExhausted, "more than one redirect to leader from: %s", md["redirect"]) - } - if !ok { - md = metadata.New(map[string]string{}) - } - md["redirect"] = append(md["redirect"], addr) - return metadata.NewOutgoingContext(ctx, md), nil - } - remoteMods := []func(context.Context) (context.Context, error){redirectChecker} - remoteMods = append(remoteMods, remoteCtxMod) - - var localMods []func(context.Context) (context.Context, error) - if localCtxMod != nil { - localMods = []func(context.Context) (context.Context, error){localCtxMod} - } - - return &raftProxyRaftMembershipServer{ - local: local, - connSelector: connSelector, - localCtxMods: localMods, - remoteCtxMods: remoteMods, - } -} -func (p *raftProxyRaftMembershipServer) runCtxMods(ctx context.Context, ctxMods []func(context.Context) (context.Context, error)) (context.Context, error) { - var err error - for _, mod := range ctxMods { - ctx, err = mod(ctx) - if err != nil { - return ctx, err - } - } - return ctx, nil -} -func (p *raftProxyRaftMembershipServer) pollNewLeaderConn(ctx context.Context) (*grpc.ClientConn, error) { - ticker := rafttime.NewTicker(500 * rafttime.Millisecond) - defer ticker.Stop() - for { - select { - case <-ticker.C: - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - return nil, err - } - - client := NewHealthClient(conn) - - resp, err := client.Check(ctx, &HealthCheckRequest{Service: "Raft"}) - if err != nil || resp.Status != HealthCheckResponse_SERVING { - continue - } - return conn, nil - case <-ctx.Done(): - return nil, ctx.Err() - } - } -} - -func (p *raftProxyRaftMembershipServer) Join(ctx context.Context, r *JoinRequest) (*JoinResponse, error) { - - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return nil, err - } - return p.local.Join(ctx, r) - } - return nil, err - } - modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return nil, err - } - - resp, err := NewRaftMembershipClient(conn).Join(modCtx, r) - if err != nil { - if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { - return resp, err - } - conn, err := p.pollNewLeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - return p.local.Join(ctx, r) - } - return nil, err - } - return NewRaftMembershipClient(conn).Join(modCtx, r) - } - return resp, err -} - -func (p *raftProxyRaftMembershipServer) Leave(ctx context.Context, r *LeaveRequest) (*LeaveResponse, error) { - - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return nil, err - } - return p.local.Leave(ctx, r) - } - return nil, err - } - modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return nil, err - } - - resp, err := NewRaftMembershipClient(conn).Leave(modCtx, r) - if err != nil { - if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { - return resp, err - } - conn, err := p.pollNewLeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - return p.local.Leave(ctx, r) - } - return nil, err - } - return NewRaftMembershipClient(conn).Leave(modCtx, r) - } - return resp, err -} - -func (m *RaftMember) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.RaftID != 0 { - n += 1 + sovRaft(uint64(m.RaftID)) - } - l = len(m.NodeID) - if l > 0 { - n += 1 + l + sovRaft(uint64(l)) - } - l = len(m.Addr) - if l > 0 { - n += 1 + l + sovRaft(uint64(l)) - } - l = m.Status.Size() - n += 1 + l + sovRaft(uint64(l)) - return n -} - -func (m *JoinRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Addr) - if l > 0 { - n += 1 + l + sovRaft(uint64(l)) - } - return n -} - -func (m *JoinResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.RaftID != 0 { - n += 1 + sovRaft(uint64(m.RaftID)) - } - if len(m.Members) > 0 { - for _, e := range m.Members { - l = e.Size() - n += 1 + l + sovRaft(uint64(l)) - } - } - if len(m.RemovedMembers) > 0 { - for _, e := range m.RemovedMembers { - n += 1 + sovRaft(uint64(e)) - } - } - return n -} - -func (m *LeaveRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Node != nil { - l = m.Node.Size() - n += 1 + l + sovRaft(uint64(l)) - } - return n -} - -func (m *LeaveResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - return n -} - -func (m *ProcessRaftMessageRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Message != nil { - l = m.Message.Size() - n += 1 + l + sovRaft(uint64(l)) - } - return n -} - -func (m *ProcessRaftMessageResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - return n -} - -func (m *StreamRaftMessageRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Message != nil { - l = m.Message.Size() - n += 1 + l + sovRaft(uint64(l)) - } - return n -} - -func (m *StreamRaftMessageResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - return n -} - -func (m *ResolveAddressRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.RaftID != 0 { - n += 1 + sovRaft(uint64(m.RaftID)) - } - return n -} - -func (m *ResolveAddressResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Addr) - if l > 0 { - n += 1 + l + sovRaft(uint64(l)) - } - return n -} - -func (m *InternalRaftRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.ID != 0 { - n += 1 + sovRaft(uint64(m.ID)) - } - if len(m.Action) > 0 { - for _, e := range m.Action { - l = e.Size() - n += 1 + l + sovRaft(uint64(l)) - } - } - return n -} - -func (m *StoreAction) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Action != 0 { - n += 1 + sovRaft(uint64(m.Action)) - } - if m.Target != nil { - n += m.Target.Size() - } - return n -} - -func (m *StoreAction_Node) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Node != nil { - l = m.Node.Size() - n += 1 + l + sovRaft(uint64(l)) - } - return n -} -func (m *StoreAction_Service) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Service != nil { - l = m.Service.Size() - n += 1 + l + sovRaft(uint64(l)) - } - return n -} -func (m *StoreAction_Task) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Task != nil { - l = m.Task.Size() - n += 1 + l + sovRaft(uint64(l)) - } - return n -} -func (m *StoreAction_Network) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Network != nil { - l = m.Network.Size() - n += 1 + l + sovRaft(uint64(l)) - } - return n -} -func (m *StoreAction_Cluster) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Cluster != nil { - l = m.Cluster.Size() - n += 1 + l + sovRaft(uint64(l)) - } - return n -} -func (m *StoreAction_Secret) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Secret != nil { - l = m.Secret.Size() - n += 1 + l + sovRaft(uint64(l)) - } - return n -} -func (m *StoreAction_Resource) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Resource != nil { - l = m.Resource.Size() - n += 1 + l + sovRaft(uint64(l)) - } - return n -} -func (m *StoreAction_Extension) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Extension != nil { - l = m.Extension.Size() - n += 1 + l + sovRaft(uint64(l)) - } - return n -} -func (m *StoreAction_Config) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Config != nil { - l = m.Config.Size() - n += 1 + l + sovRaft(uint64(l)) - } - return n -} -func (m *StoreAction_Volume) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Volume != nil { - l = m.Volume.Size() - n += 1 + l + sovRaft(uint64(l)) - } - return n -} - -func sovRaft(x uint64) (n int) { - return (math_bits.Len64(x|1) + 6) / 7 -} -func sozRaft(x uint64) (n int) { - return sovRaft(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (this *RaftMember) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&RaftMember{`, - `RaftID:` + fmt.Sprintf("%v", this.RaftID) + `,`, - `NodeID:` + fmt.Sprintf("%v", this.NodeID) + `,`, - `Addr:` + fmt.Sprintf("%v", this.Addr) + `,`, - `Status:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Status), "RaftMemberStatus", "RaftMemberStatus", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s -} -func (this *JoinRequest) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&JoinRequest{`, - `Addr:` + fmt.Sprintf("%v", this.Addr) + `,`, - `}`, - }, "") - return s -} -func (this *JoinResponse) String() string { - if this == nil { - return "nil" - } - repeatedStringForMembers := "[]*RaftMember{" - for _, f := range this.Members { - repeatedStringForMembers += strings.Replace(f.String(), "RaftMember", "RaftMember", 1) + "," - } - repeatedStringForMembers += "}" - s := strings.Join([]string{`&JoinResponse{`, - `RaftID:` + fmt.Sprintf("%v", this.RaftID) + `,`, - `Members:` + repeatedStringForMembers + `,`, - `RemovedMembers:` + fmt.Sprintf("%v", this.RemovedMembers) + `,`, - `}`, - }, "") - return s -} -func (this *LeaveRequest) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&LeaveRequest{`, - `Node:` + strings.Replace(this.Node.String(), "RaftMember", "RaftMember", 1) + `,`, - `}`, - }, "") - return s -} -func (this *LeaveResponse) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&LeaveResponse{`, - `}`, - }, "") - return s -} -func (this *ProcessRaftMessageRequest) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&ProcessRaftMessageRequest{`, - `Message:` + strings.Replace(fmt.Sprintf("%v", this.Message), "Message", "raftpb.Message", 1) + `,`, - `}`, - }, "") - return s -} -func (this *ProcessRaftMessageResponse) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&ProcessRaftMessageResponse{`, - `}`, - }, "") - return s -} -func (this *StreamRaftMessageRequest) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&StreamRaftMessageRequest{`, - `Message:` + strings.Replace(fmt.Sprintf("%v", this.Message), "Message", "raftpb.Message", 1) + `,`, - `}`, - }, "") - return s -} -func (this *StreamRaftMessageResponse) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&StreamRaftMessageResponse{`, - `}`, - }, "") - return s -} -func (this *ResolveAddressRequest) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&ResolveAddressRequest{`, - `RaftID:` + fmt.Sprintf("%v", this.RaftID) + `,`, - `}`, - }, "") - return s -} -func (this *ResolveAddressResponse) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&ResolveAddressResponse{`, - `Addr:` + fmt.Sprintf("%v", this.Addr) + `,`, - `}`, - }, "") - return s -} -func (this *InternalRaftRequest) String() string { - if this == nil { - return "nil" - } - repeatedStringForAction := "[]StoreAction{" - for _, f := range this.Action { - repeatedStringForAction += strings.Replace(strings.Replace(f.String(), "StoreAction", "StoreAction", 1), `&`, ``, 1) + "," - } - repeatedStringForAction += "}" - s := strings.Join([]string{`&InternalRaftRequest{`, - `ID:` + fmt.Sprintf("%v", this.ID) + `,`, - `Action:` + repeatedStringForAction + `,`, - `}`, - }, "") - return s -} -func (this *StoreAction) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&StoreAction{`, - `Action:` + fmt.Sprintf("%v", this.Action) + `,`, - `Target:` + fmt.Sprintf("%v", this.Target) + `,`, - `}`, - }, "") - return s -} -func (this *StoreAction_Node) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&StoreAction_Node{`, - `Node:` + strings.Replace(fmt.Sprintf("%v", this.Node), "Node", "Node", 1) + `,`, - `}`, - }, "") - return s -} -func (this *StoreAction_Service) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&StoreAction_Service{`, - `Service:` + strings.Replace(fmt.Sprintf("%v", this.Service), "Service", "Service", 1) + `,`, - `}`, - }, "") - return s -} -func (this *StoreAction_Task) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&StoreAction_Task{`, - `Task:` + strings.Replace(fmt.Sprintf("%v", this.Task), "Task", "Task", 1) + `,`, - `}`, - }, "") - return s -} -func (this *StoreAction_Network) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&StoreAction_Network{`, - `Network:` + strings.Replace(fmt.Sprintf("%v", this.Network), "Network", "Network", 1) + `,`, - `}`, - }, "") - return s -} -func (this *StoreAction_Cluster) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&StoreAction_Cluster{`, - `Cluster:` + strings.Replace(fmt.Sprintf("%v", this.Cluster), "Cluster", "Cluster", 1) + `,`, - `}`, - }, "") - return s -} -func (this *StoreAction_Secret) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&StoreAction_Secret{`, - `Secret:` + strings.Replace(fmt.Sprintf("%v", this.Secret), "Secret", "Secret", 1) + `,`, - `}`, - }, "") - return s -} -func (this *StoreAction_Resource) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&StoreAction_Resource{`, - `Resource:` + strings.Replace(fmt.Sprintf("%v", this.Resource), "Resource", "Resource", 1) + `,`, - `}`, - }, "") - return s -} -func (this *StoreAction_Extension) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&StoreAction_Extension{`, - `Extension:` + strings.Replace(fmt.Sprintf("%v", this.Extension), "Extension", "Extension", 1) + `,`, - `}`, - }, "") - return s -} -func (this *StoreAction_Config) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&StoreAction_Config{`, - `Config:` + strings.Replace(fmt.Sprintf("%v", this.Config), "Config", "Config", 1) + `,`, - `}`, - }, "") - return s -} -func (this *StoreAction_Volume) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&StoreAction_Volume{`, - `Volume:` + strings.Replace(fmt.Sprintf("%v", this.Volume), "Volume", "Volume", 1) + `,`, - `}`, - }, "") - return s -} -func valueToStringRaft(v interface{}) string { - rv := reflect.ValueOf(v) - if rv.IsNil() { - return "nil" - } - pv := reflect.Indirect(rv).Interface() - return fmt.Sprintf("*%v", pv) -} -func (m *RaftMember) 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 ErrIntOverflowRaft - } - 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: RaftMember: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RaftMember: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field RaftID", wireType) - } - m.RaftID = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaft - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.RaftID |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NodeID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaft - } - 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 ErrInvalidLengthRaft - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthRaft - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.NodeID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Addr", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaft - } - 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 ErrInvalidLengthRaft - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthRaft - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Addr = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaft - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRaft - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRaft - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRaft(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthRaft - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *JoinRequest) 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 ErrIntOverflowRaft - } - 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: JoinRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: JoinRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Addr", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaft - } - 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 ErrInvalidLengthRaft - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthRaft - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Addr = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRaft(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthRaft - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *JoinResponse) 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 ErrIntOverflowRaft - } - 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: JoinResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: JoinResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field RaftID", wireType) - } - m.RaftID = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaft - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.RaftID |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Members", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaft - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRaft - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRaft - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Members = append(m.Members, &RaftMember{}) - if err := m.Members[len(m.Members)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType == 0 { - var v uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaft - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.RemovedMembers = append(m.RemovedMembers, v) - } else if wireType == 2 { - var packedLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaft - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - packedLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if packedLen < 0 { - return ErrInvalidLengthRaft - } - postIndex := iNdEx + packedLen - if postIndex < 0 { - return ErrInvalidLengthRaft - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - var elementCount int - var count int - for _, integer := range dAtA[iNdEx:postIndex] { - if integer < 128 { - count++ - } - } - elementCount = count - if elementCount != 0 && len(m.RemovedMembers) == 0 { - m.RemovedMembers = make([]uint64, 0, elementCount) - } - for iNdEx < postIndex { - var v uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaft - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.RemovedMembers = append(m.RemovedMembers, v) - } - } else { - return fmt.Errorf("proto: wrong wireType = %d for field RemovedMembers", wireType) - } - default: - iNdEx = preIndex - skippy, err := skipRaft(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthRaft - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *LeaveRequest) 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 ErrIntOverflowRaft - } - 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: LeaveRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: LeaveRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Node", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaft - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRaft - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRaft - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Node == nil { - m.Node = &RaftMember{} - } - if err := m.Node.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRaft(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthRaft - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *LeaveResponse) 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 ErrIntOverflowRaft - } - 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: LeaveResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: LeaveResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipRaft(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthRaft - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ProcessRaftMessageRequest) 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 ErrIntOverflowRaft - } - 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: ProcessRaftMessageRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ProcessRaftMessageRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaft - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRaft - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRaft - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Message == nil { - m.Message = &raftpb.Message{} - } - if err := m.Message.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRaft(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthRaft - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ProcessRaftMessageResponse) 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 ErrIntOverflowRaft - } - 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: ProcessRaftMessageResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ProcessRaftMessageResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipRaft(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthRaft - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *StreamRaftMessageRequest) 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 ErrIntOverflowRaft - } - 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: StreamRaftMessageRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: StreamRaftMessageRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaft - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRaft - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRaft - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Message == nil { - m.Message = &raftpb.Message{} - } - if err := m.Message.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRaft(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthRaft - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *StreamRaftMessageResponse) 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 ErrIntOverflowRaft - } - 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: StreamRaftMessageResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: StreamRaftMessageResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipRaft(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthRaft - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ResolveAddressRequest) 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 ErrIntOverflowRaft - } - 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: ResolveAddressRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ResolveAddressRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field RaftID", wireType) - } - m.RaftID = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaft - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.RaftID |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipRaft(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthRaft - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ResolveAddressResponse) 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 ErrIntOverflowRaft - } - 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: ResolveAddressResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ResolveAddressResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Addr", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaft - } - 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 ErrInvalidLengthRaft - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthRaft - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Addr = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRaft(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthRaft - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *InternalRaftRequest) 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 ErrIntOverflowRaft - } - 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: InternalRaftRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: InternalRaftRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType) - } - m.ID = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaft - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ID |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Action", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaft - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRaft - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRaft - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Action = append(m.Action, StoreAction{}) - if err := m.Action[len(m.Action)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRaft(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthRaft - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *StoreAction) 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 ErrIntOverflowRaft - } - 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: StoreAction: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: StoreAction: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Action", wireType) - } - m.Action = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaft - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Action |= StoreActionKind(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Node", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaft - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRaft - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRaft - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &Node{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.Target = &StoreAction_Node{v} - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Service", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaft - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRaft - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRaft - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &Service{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.Target = &StoreAction_Service{v} - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Task", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaft - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRaft - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRaft - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &Task{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.Target = &StoreAction_Task{v} - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Network", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaft - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRaft - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRaft - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &Network{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.Target = &StoreAction_Network{v} - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Cluster", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaft - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRaft - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRaft - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &Cluster{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.Target = &StoreAction_Cluster{v} - iNdEx = postIndex - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Secret", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaft - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRaft - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRaft - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &Secret{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.Target = &StoreAction_Secret{v} - iNdEx = postIndex - case 8: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Resource", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaft - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRaft - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRaft - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &Resource{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.Target = &StoreAction_Resource{v} - iNdEx = postIndex - case 9: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Extension", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaft - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRaft - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRaft - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &Extension{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.Target = &StoreAction_Extension{v} - iNdEx = postIndex - case 10: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Config", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaft - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRaft - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRaft - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &Config{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.Target = &StoreAction_Config{v} - iNdEx = postIndex - case 11: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Volume", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRaft - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRaft - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRaft - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &Volume{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.Target = &StoreAction_Volume{v} - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRaft(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthRaft - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipRaft(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - depth := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowRaft - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowRaft - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - case 1: - iNdEx += 8 - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowRaft - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLengthRaft - } - iNdEx += length - case 3: - depth++ - case 4: - if depth == 0 { - return 0, ErrUnexpectedEndOfGroupRaft - } - depth-- - case 5: - iNdEx += 4 - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - if iNdEx < 0 { - return 0, ErrInvalidLengthRaft - } - if depth == 0 { - return iNdEx, nil - } - } - return 0, io.ErrUnexpectedEOF -} - -var ( - ErrInvalidLengthRaft = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowRaft = fmt.Errorf("proto: integer overflow") - ErrUnexpectedEndOfGroupRaft = fmt.Errorf("proto: unexpected end of group") -) diff --git a/api/raft.pb.raftproxy.go b/api/raft.pb.raftproxy.go new file mode 100644 index 0000000000..f5f24b739d --- /dev/null +++ b/api/raft.pb.raftproxy.go @@ -0,0 +1,357 @@ +// Code generated by protoc-gen-goswarm. DO NOT EDIT. + +package api + +import ( + context "context" + raftselector "github.com/moby/swarmkit/v2/manager/raftselector" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + metadata "google.golang.org/grpc/metadata" + peer "google.golang.org/grpc/peer" + status "google.golang.org/grpc/status" + io "io" + strings "strings" + time "time" +) + +type raftProxyRaftServer struct { + local RaftServer + connSelector raftselector.ConnProvider + localCtxMods, remoteCtxMods []func(context.Context) (context.Context, error) +} + +func NewRaftProxyRaftServer(local RaftServer, connSelector raftselector.ConnProvider, localCtxMod, remoteCtxMod func(context.Context) (context.Context, error)) RaftServer { + redirectChecker := func(ctx context.Context) (context.Context, error) { + p, ok := peer.FromContext(ctx) + if !ok { + return ctx, status.Errorf(codes.InvalidArgument, "remote addr is not found in context") + } + addr := p.Addr.String() + md, ok := metadata.FromIncomingContext(ctx) + if ok && len(md["redirect"]) != 0 { + return ctx, status.Errorf(codes.ResourceExhausted, "more than one redirect to leader from: %s", md["redirect"]) + } + if !ok { + md = metadata.New(map[string]string{}) + } + md["redirect"] = append(md["redirect"], addr) + return metadata.NewOutgoingContext(ctx, md), nil + } + remoteMods := []func(context.Context) (context.Context, error){redirectChecker} + remoteMods = append(remoteMods, remoteCtxMod) + + var localMods []func(context.Context) (context.Context, error) + if localCtxMod != nil { + localMods = []func(context.Context) (context.Context, error){localCtxMod} + } + + return &raftProxyRaftServer{ + local: local, + connSelector: connSelector, + localCtxMods: localMods, + remoteCtxMods: remoteMods, + } +} +func (p *raftProxyRaftServer) runCtxMods(ctx context.Context, ctxMods []func(context.Context) (context.Context, error)) (context.Context, error) { + var err error + for _, mod := range ctxMods { + ctx, err = mod(ctx) + if err != nil { + return ctx, err + } + } + return ctx, nil +} +func (p *raftProxyRaftServer) pollNewLeaderConn(ctx context.Context) (*grpc.ClientConn, error) { + ticker := time.NewTicker(500 * time.Millisecond) + defer ticker.Stop() + for { + select { + case <-ticker.C: + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + return nil, err + } + + client := NewHealthClient(conn) + + resp, err := client.Check(ctx, &HealthCheckRequest{Service: "Raft"}) + if err != nil || resp.Status != HealthCheckResponse_SERVING { + continue + } + return conn, nil + case <-ctx.Done(): + return nil, ctx.Err() + } + } +} + +func (p *raftProxyRaftServer) ProcessRaftMessage(ctx context.Context, r *ProcessRaftMessageRequest) (*ProcessRaftMessageResponse, error) { + + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return nil, err + } + return p.local.ProcessRaftMessage(ctx, r) + } + return nil, err + } + modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return nil, err + } + + resp, err := NewRaftClient(conn).ProcessRaftMessage(modCtx, r) + if err != nil { + if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { + return resp, err + } + conn, err := p.pollNewLeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + return p.local.ProcessRaftMessage(ctx, r) + } + return nil, err + } + return NewRaftClient(conn).ProcessRaftMessage(modCtx, r) + } + return resp, err +} + +type Raft_StreamRaftMessageServerWrapper struct { + Raft_StreamRaftMessageServer + ctx context.Context +} + +func (s Raft_StreamRaftMessageServerWrapper) Context() context.Context { + return s.ctx +} + +func (p *raftProxyRaftServer) StreamRaftMessage(stream Raft_StreamRaftMessageServer) error { + ctx := stream.Context() + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return err + } + streamWrapper := Raft_StreamRaftMessageServerWrapper{ + Raft_StreamRaftMessageServer: stream, + ctx: ctx, + } + return p.local.StreamRaftMessage(streamWrapper) + } + return err + } + ctx, err = p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return err + } + clientStream, err := NewRaftClient(conn).StreamRaftMessage(ctx) + + if err != nil { + return err + } + + for { + msg, err := stream.Recv() + if err == io.EOF { + break + } + if err != nil { + return err + } + if err := clientStream.Send(msg); err != nil { + return err + } + } + + reply, err := clientStream.CloseAndRecv() + if err != nil { + return err + } + + return stream.SendAndClose(reply) +} + +func (p *raftProxyRaftServer) ResolveAddress(ctx context.Context, r *ResolveAddressRequest) (*ResolveAddressResponse, error) { + + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return nil, err + } + return p.local.ResolveAddress(ctx, r) + } + return nil, err + } + modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return nil, err + } + + resp, err := NewRaftClient(conn).ResolveAddress(modCtx, r) + if err != nil { + if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { + return resp, err + } + conn, err := p.pollNewLeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + return p.local.ResolveAddress(ctx, r) + } + return nil, err + } + return NewRaftClient(conn).ResolveAddress(modCtx, r) + } + return resp, err +} + +type raftProxyRaftMembershipServer struct { + local RaftMembershipServer + connSelector raftselector.ConnProvider + localCtxMods, remoteCtxMods []func(context.Context) (context.Context, error) +} + +func NewRaftProxyRaftMembershipServer(local RaftMembershipServer, connSelector raftselector.ConnProvider, localCtxMod, remoteCtxMod func(context.Context) (context.Context, error)) RaftMembershipServer { + redirectChecker := func(ctx context.Context) (context.Context, error) { + p, ok := peer.FromContext(ctx) + if !ok { + return ctx, status.Errorf(codes.InvalidArgument, "remote addr is not found in context") + } + addr := p.Addr.String() + md, ok := metadata.FromIncomingContext(ctx) + if ok && len(md["redirect"]) != 0 { + return ctx, status.Errorf(codes.ResourceExhausted, "more than one redirect to leader from: %s", md["redirect"]) + } + if !ok { + md = metadata.New(map[string]string{}) + } + md["redirect"] = append(md["redirect"], addr) + return metadata.NewOutgoingContext(ctx, md), nil + } + remoteMods := []func(context.Context) (context.Context, error){redirectChecker} + remoteMods = append(remoteMods, remoteCtxMod) + + var localMods []func(context.Context) (context.Context, error) + if localCtxMod != nil { + localMods = []func(context.Context) (context.Context, error){localCtxMod} + } + + return &raftProxyRaftMembershipServer{ + local: local, + connSelector: connSelector, + localCtxMods: localMods, + remoteCtxMods: remoteMods, + } +} +func (p *raftProxyRaftMembershipServer) runCtxMods(ctx context.Context, ctxMods []func(context.Context) (context.Context, error)) (context.Context, error) { + var err error + for _, mod := range ctxMods { + ctx, err = mod(ctx) + if err != nil { + return ctx, err + } + } + return ctx, nil +} +func (p *raftProxyRaftMembershipServer) pollNewLeaderConn(ctx context.Context) (*grpc.ClientConn, error) { + ticker := time.NewTicker(500 * time.Millisecond) + defer ticker.Stop() + for { + select { + case <-ticker.C: + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + return nil, err + } + + client := NewHealthClient(conn) + + resp, err := client.Check(ctx, &HealthCheckRequest{Service: "Raft"}) + if err != nil || resp.Status != HealthCheckResponse_SERVING { + continue + } + return conn, nil + case <-ctx.Done(): + return nil, ctx.Err() + } + } +} + +func (p *raftProxyRaftMembershipServer) Join(ctx context.Context, r *JoinRequest) (*JoinResponse, error) { + + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return nil, err + } + return p.local.Join(ctx, r) + } + return nil, err + } + modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return nil, err + } + + resp, err := NewRaftMembershipClient(conn).Join(modCtx, r) + if err != nil { + if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { + return resp, err + } + conn, err := p.pollNewLeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + return p.local.Join(ctx, r) + } + return nil, err + } + return NewRaftMembershipClient(conn).Join(modCtx, r) + } + return resp, err +} + +func (p *raftProxyRaftMembershipServer) Leave(ctx context.Context, r *LeaveRequest) (*LeaveResponse, error) { + + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return nil, err + } + return p.local.Leave(ctx, r) + } + return nil, err + } + modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return nil, err + } + + resp, err := NewRaftMembershipClient(conn).Leave(modCtx, r) + if err != nil { + if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { + return resp, err + } + conn, err := p.pollNewLeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + return p.local.Leave(ctx, r) + } + return nil, err + } + return NewRaftMembershipClient(conn).Leave(modCtx, r) + } + return resp, err +} diff --git a/api/raft.proto b/api/raft.proto index de98df3e2f..b6e3367444 100644 --- a/api/raft.proto +++ b/api/raft.proto @@ -2,11 +2,13 @@ syntax = "proto3"; package docker.swarmkit.v1; -import "github.com/docker/swarmkit/api/objects.proto"; -import "github.com/docker/swarmkit/api/types.proto"; +option go_package = "github.com/moby/swarmkit/v2/api"; + +import "api/objects.proto"; +import "api/types.proto"; import "go.etcd.io/raft/v3/raftpb/raft.proto"; -import weak "gogoproto/gogo.proto"; -import weak "github.com/docker/swarmkit/protobuf/plugin/plugin.proto"; + +import weak "protobuf/plugin/plugin.proto"; // Raft defines the RPC communication between raft nodes. service Raft { @@ -58,7 +60,7 @@ message RaftMember { string addr = 3; // Status provides the current status of the manager from the perspective of another manager. - RaftMemberStatus status = 4 [(gogoproto.nullable) = false]; + RaftMemberStatus status = 4; } message JoinRequest { @@ -116,7 +118,7 @@ message ResolveAddressResponse { message InternalRaftRequest { uint64 id = 1; - repeated StoreAction action = 2 [(gogoproto.nullable) = false]; + repeated StoreAction action = 2; } // TODO(stevvooe): Storage actions may belong in another protobuf file. They @@ -125,12 +127,11 @@ message InternalRaftRequest { // StoreActionKind defines the operation to take on the store for the target of // a storage action. enum StoreActionKind { - option (gogoproto.goproto_enum_prefix) = false; - option (gogoproto.enum_customname) = "StoreActionKind"; - UNKNOWN = 0 [(gogoproto.enumvalue_customname) = "StoreActionKindUnknown"]; // default value, invalid - STORE_ACTION_CREATE = 1 [(gogoproto.enumvalue_customname) = "StoreActionKindCreate"]; - STORE_ACTION_UPDATE = 2 [(gogoproto.enumvalue_customname) = "StoreActionKindUpdate"]; - STORE_ACTION_REMOVE = 3 [(gogoproto.enumvalue_customname) = "StoreActionKindRemove"]; + option (docker.protobuf.plugin.go_enum_name) = "StoreActionKind"; + UNKNOWN = 0 [(docker.protobuf.plugin.go_enum_value_name) = "StoreActionKindUnknown"]; // default value, invalid + STORE_ACTION_CREATE = 1 [(docker.protobuf.plugin.go_enum_value_name) = "StoreActionKindCreate"]; + STORE_ACTION_UPDATE = 2 [(docker.protobuf.plugin.go_enum_value_name) = "StoreActionKindUpdate"]; + STORE_ACTION_REMOVE = 3 [(docker.protobuf.plugin.go_enum_value_name) = "StoreActionKindRemove"]; } // StoreAction defines a target and operation to apply on the storage system. diff --git a/api/raft_grpc.pb.go b/api/raft_grpc.pb.go new file mode 100644 index 0000000000..ee17e80f99 --- /dev/null +++ b/api/raft_grpc.pb.go @@ -0,0 +1,359 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.6.2 +// - protoc v3.21.12 +// source: api/raft.proto + +package api + +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.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 + +const ( + Raft_ProcessRaftMessage_FullMethodName = "/docker.swarmkit.v1.Raft/ProcessRaftMessage" + Raft_StreamRaftMessage_FullMethodName = "/docker.swarmkit.v1.Raft/StreamRaftMessage" + Raft_ResolveAddress_FullMethodName = "/docker.swarmkit.v1.Raft/ResolveAddress" +) + +// RaftClient is the client API for Raft 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. +// +// Raft defines the RPC communication between raft nodes. +type RaftClient interface { + // ProcessRaftMessage sends a raft message to be processed on a raft member, it is + // called from the RaftMember willing to send a message to its destination ('To' field) + ProcessRaftMessage(ctx context.Context, in *ProcessRaftMessageRequest, opts ...grpc.CallOption) (*ProcessRaftMessageResponse, error) + // StreamRaftMessage accepts a stream of raft messages of type StreamRaftMessageRequest + // to be processed on a raft member, returning a StreamRaftMessageResponse + // when processing of the streamed messages is complete. A single stream corresponds + // to a single raft message, which may be disassembled and streamed as individual messages. + // It is called from the Raft leader, which uses it to stream messages to a raft member. + StreamRaftMessage(ctx context.Context, opts ...grpc.CallOption) (grpc.ClientStreamingClient[StreamRaftMessageRequest, StreamRaftMessageResponse], error) + // ResolveAddress returns the address where the node with the given ID can be reached. + ResolveAddress(ctx context.Context, in *ResolveAddressRequest, opts ...grpc.CallOption) (*ResolveAddressResponse, error) +} + +type raftClient struct { + cc grpc.ClientConnInterface +} + +func NewRaftClient(cc grpc.ClientConnInterface) RaftClient { + return &raftClient{cc} +} + +func (c *raftClient) ProcessRaftMessage(ctx context.Context, in *ProcessRaftMessageRequest, opts ...grpc.CallOption) (*ProcessRaftMessageResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(ProcessRaftMessageResponse) + err := c.cc.Invoke(ctx, Raft_ProcessRaftMessage_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *raftClient) StreamRaftMessage(ctx context.Context, opts ...grpc.CallOption) (grpc.ClientStreamingClient[StreamRaftMessageRequest, StreamRaftMessageResponse], error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + stream, err := c.cc.NewStream(ctx, &Raft_ServiceDesc.Streams[0], Raft_StreamRaftMessage_FullMethodName, cOpts...) + if err != nil { + return nil, err + } + x := &grpc.GenericClientStream[StreamRaftMessageRequest, StreamRaftMessageResponse]{ClientStream: stream} + return x, nil +} + +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type Raft_StreamRaftMessageClient = grpc.ClientStreamingClient[StreamRaftMessageRequest, StreamRaftMessageResponse] + +func (c *raftClient) ResolveAddress(ctx context.Context, in *ResolveAddressRequest, opts ...grpc.CallOption) (*ResolveAddressResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(ResolveAddressResponse) + err := c.cc.Invoke(ctx, Raft_ResolveAddress_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +// RaftServer is the server API for Raft service. +// All implementations should embed UnimplementedRaftServer +// for forward compatibility. +// +// Raft defines the RPC communication between raft nodes. +type RaftServer interface { + // ProcessRaftMessage sends a raft message to be processed on a raft member, it is + // called from the RaftMember willing to send a message to its destination ('To' field) + ProcessRaftMessage(context.Context, *ProcessRaftMessageRequest) (*ProcessRaftMessageResponse, error) + // StreamRaftMessage accepts a stream of raft messages of type StreamRaftMessageRequest + // to be processed on a raft member, returning a StreamRaftMessageResponse + // when processing of the streamed messages is complete. A single stream corresponds + // to a single raft message, which may be disassembled and streamed as individual messages. + // It is called from the Raft leader, which uses it to stream messages to a raft member. + StreamRaftMessage(grpc.ClientStreamingServer[StreamRaftMessageRequest, StreamRaftMessageResponse]) error + // ResolveAddress returns the address where the node with the given ID can be reached. + ResolveAddress(context.Context, *ResolveAddressRequest) (*ResolveAddressResponse, error) +} + +// UnimplementedRaftServer should be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedRaftServer struct{} + +func (UnimplementedRaftServer) ProcessRaftMessage(context.Context, *ProcessRaftMessageRequest) (*ProcessRaftMessageResponse, error) { + return nil, status.Error(codes.Unimplemented, "method ProcessRaftMessage not implemented") +} +func (UnimplementedRaftServer) StreamRaftMessage(grpc.ClientStreamingServer[StreamRaftMessageRequest, StreamRaftMessageResponse]) error { + return status.Error(codes.Unimplemented, "method StreamRaftMessage not implemented") +} +func (UnimplementedRaftServer) ResolveAddress(context.Context, *ResolveAddressRequest) (*ResolveAddressResponse, error) { + return nil, status.Error(codes.Unimplemented, "method ResolveAddress not implemented") +} +func (UnimplementedRaftServer) testEmbeddedByValue() {} + +// UnsafeRaftServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to RaftServer will +// result in compilation errors. +type UnsafeRaftServer interface { + mustEmbedUnimplementedRaftServer() +} + +func RegisterRaftServer(s grpc.ServiceRegistrar, srv RaftServer) { + // If the following call panics, it indicates UnimplementedRaftServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } + s.RegisterService(&Raft_ServiceDesc, srv) +} + +func _Raft_ProcessRaftMessage_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ProcessRaftMessageRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RaftServer).ProcessRaftMessage(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Raft_ProcessRaftMessage_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RaftServer).ProcessRaftMessage(ctx, req.(*ProcessRaftMessageRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Raft_StreamRaftMessage_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(RaftServer).StreamRaftMessage(&grpc.GenericServerStream[StreamRaftMessageRequest, StreamRaftMessageResponse]{ServerStream: stream}) +} + +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type Raft_StreamRaftMessageServer = grpc.ClientStreamingServer[StreamRaftMessageRequest, StreamRaftMessageResponse] + +func _Raft_ResolveAddress_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ResolveAddressRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RaftServer).ResolveAddress(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Raft_ResolveAddress_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RaftServer).ResolveAddress(ctx, req.(*ResolveAddressRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// Raft_ServiceDesc is the grpc.ServiceDesc for Raft service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Raft_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "docker.swarmkit.v1.Raft", + HandlerType: (*RaftServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "ProcessRaftMessage", + Handler: _Raft_ProcessRaftMessage_Handler, + }, + { + MethodName: "ResolveAddress", + Handler: _Raft_ResolveAddress_Handler, + }, + }, + Streams: []grpc.StreamDesc{ + { + StreamName: "StreamRaftMessage", + Handler: _Raft_StreamRaftMessage_Handler, + ClientStreams: true, + }, + }, + Metadata: "api/raft.proto", +} + +const ( + RaftMembership_Join_FullMethodName = "/docker.swarmkit.v1.RaftMembership/Join" + RaftMembership_Leave_FullMethodName = "/docker.swarmkit.v1.RaftMembership/Leave" +) + +// RaftMembershipClient is the client API for RaftMembership 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. +// +// RaftMembership defines RPCs for adding and removing members from the +// cluster. These RPCs must always run on the leader, so they are in a separate +// service to support the raft proxy. +type RaftMembershipClient interface { + // Join adds a RaftMember to the raft cluster. + Join(ctx context.Context, in *JoinRequest, opts ...grpc.CallOption) (*JoinResponse, error) + // Leave removes a RaftMember from the raft cluster. + Leave(ctx context.Context, in *LeaveRequest, opts ...grpc.CallOption) (*LeaveResponse, error) +} + +type raftMembershipClient struct { + cc grpc.ClientConnInterface +} + +func NewRaftMembershipClient(cc grpc.ClientConnInterface) RaftMembershipClient { + return &raftMembershipClient{cc} +} + +func (c *raftMembershipClient) Join(ctx context.Context, in *JoinRequest, opts ...grpc.CallOption) (*JoinResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(JoinResponse) + err := c.cc.Invoke(ctx, RaftMembership_Join_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *raftMembershipClient) Leave(ctx context.Context, in *LeaveRequest, opts ...grpc.CallOption) (*LeaveResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(LeaveResponse) + err := c.cc.Invoke(ctx, RaftMembership_Leave_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +// RaftMembershipServer is the server API for RaftMembership service. +// All implementations should embed UnimplementedRaftMembershipServer +// for forward compatibility. +// +// RaftMembership defines RPCs for adding and removing members from the +// cluster. These RPCs must always run on the leader, so they are in a separate +// service to support the raft proxy. +type RaftMembershipServer interface { + // Join adds a RaftMember to the raft cluster. + Join(context.Context, *JoinRequest) (*JoinResponse, error) + // Leave removes a RaftMember from the raft cluster. + Leave(context.Context, *LeaveRequest) (*LeaveResponse, error) +} + +// UnimplementedRaftMembershipServer should be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedRaftMembershipServer struct{} + +func (UnimplementedRaftMembershipServer) Join(context.Context, *JoinRequest) (*JoinResponse, error) { + return nil, status.Error(codes.Unimplemented, "method Join not implemented") +} +func (UnimplementedRaftMembershipServer) Leave(context.Context, *LeaveRequest) (*LeaveResponse, error) { + return nil, status.Error(codes.Unimplemented, "method Leave not implemented") +} +func (UnimplementedRaftMembershipServer) testEmbeddedByValue() {} + +// UnsafeRaftMembershipServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to RaftMembershipServer will +// result in compilation errors. +type UnsafeRaftMembershipServer interface { + mustEmbedUnimplementedRaftMembershipServer() +} + +func RegisterRaftMembershipServer(s grpc.ServiceRegistrar, srv RaftMembershipServer) { + // If the following call panics, it indicates UnimplementedRaftMembershipServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } + s.RegisterService(&RaftMembership_ServiceDesc, srv) +} + +func _RaftMembership_Join_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(JoinRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RaftMembershipServer).Join(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: RaftMembership_Join_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RaftMembershipServer).Join(ctx, req.(*JoinRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _RaftMembership_Leave_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(LeaveRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RaftMembershipServer).Leave(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: RaftMembership_Leave_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RaftMembershipServer).Leave(ctx, req.(*LeaveRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// RaftMembership_ServiceDesc is the grpc.ServiceDesc for RaftMembership service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var RaftMembership_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "docker.swarmkit.v1.RaftMembership", + HandlerType: (*RaftMembershipServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Join", + Handler: _RaftMembership_Join_Handler, + }, + { + MethodName: "Leave", + Handler: _RaftMembership_Leave_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "api/raft.proto", +} diff --git a/api/resource.pb.authwrapper.go b/api/resource.pb.authwrapper.go new file mode 100644 index 0000000000..dc5dd000dc --- /dev/null +++ b/api/resource.pb.authwrapper.go @@ -0,0 +1,35 @@ +// Code generated by protoc-gen-goswarm. DO NOT EDIT. + +package api + +import ( + context "context" +) + +type authenticatedWrapperResourceAllocatorServer struct { + local ResourceAllocatorServer + authorize func(context.Context, []string) error +} + +func NewAuthenticatedWrapperResourceAllocatorServer(local ResourceAllocatorServer, authorize func(context.Context, []string) error) ResourceAllocatorServer { + return &authenticatedWrapperResourceAllocatorServer{ + local: local, + authorize: authorize, + } +} + +func (p *authenticatedWrapperResourceAllocatorServer) AttachNetwork(ctx context.Context, r *AttachNetworkRequest) (*AttachNetworkResponse, error) { + + if err := p.authorize(ctx, []string{"swarm-worker", "swarm-manager"}); err != nil { + return nil, err + } + return p.local.AttachNetwork(ctx, r) +} + +func (p *authenticatedWrapperResourceAllocatorServer) DetachNetwork(ctx context.Context, r *DetachNetworkRequest) (*DetachNetworkResponse, error) { + + if err := p.authorize(ctx, []string{"swarm-worker", "swarm-manager"}); err != nil { + return nil, err + } + return p.local.DetachNetwork(ctx, r) +} diff --git a/api/resource.pb.deepcopy.go b/api/resource.pb.deepcopy.go new file mode 100644 index 0000000000..95c4796a4f --- /dev/null +++ b/api/resource.pb.deepcopy.go @@ -0,0 +1,68 @@ +// Code generated by protoc-gen-goswarm. DO NOT EDIT. + +package api + +import ( + deepcopy "github.com/moby/swarmkit/v2/api/deepcopy" +) + +func (m *AttachNetworkRequest) Copy() *AttachNetworkRequest { + if m == nil { + return nil + } + o := &AttachNetworkRequest{} + o.CopyFrom(m) + return o +} + +func (m *AttachNetworkRequest) CopyFrom(src interface{}) { + + o := src.(*AttachNetworkRequest) + if o.Config != nil { + m.Config = &NetworkAttachmentConfig{} + deepcopy.Copy(m.Config, o.Config) + } + + m.ContainerID = o.ContainerID +} + +func (m *AttachNetworkResponse) Copy() *AttachNetworkResponse { + if m == nil { + return nil + } + o := &AttachNetworkResponse{} + o.CopyFrom(m) + return o +} + +func (m *AttachNetworkResponse) CopyFrom(src interface{}) { + + o := src.(*AttachNetworkResponse) + m.AttachmentID = o.AttachmentID +} + +func (m *DetachNetworkRequest) Copy() *DetachNetworkRequest { + if m == nil { + return nil + } + o := &DetachNetworkRequest{} + o.CopyFrom(m) + return o +} + +func (m *DetachNetworkRequest) CopyFrom(src interface{}) { + + o := src.(*DetachNetworkRequest) + m.AttachmentID = o.AttachmentID +} + +func (m *DetachNetworkResponse) Copy() *DetachNetworkResponse { + if m == nil { + return nil + } + o := &DetachNetworkResponse{} + o.CopyFrom(m) + return o +} + +func (m *DetachNetworkResponse) CopyFrom(src interface{}) {} diff --git a/api/resource.pb.go b/api/resource.pb.go index 3466e44073..30a1dd57d6 100644 --- a/api/resource.pb.go +++ b/api/resource.pb.go @@ -1,1227 +1,278 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: github.com/docker/swarmkit/api/resource.proto +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.11 +// protoc v3.21.12 +// source: api/resource.proto package api import ( - context "context" - fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" - github_com_moby_swarmkit_v2_api_deepcopy "github.com/moby/swarmkit/v2/api/deepcopy" - raftselector "github.com/moby/swarmkit/v2/manager/raftselector" _ "github.com/moby/swarmkit/v2/protobuf/plugin" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - metadata "google.golang.org/grpc/metadata" - peer "google.golang.org/grpc/peer" - status "google.golang.org/grpc/status" - io "io" - math "math" - math_bits "math/bits" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" - strings "strings" - rafttime "time" + sync "sync" + unsafe "unsafe" ) -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package +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 AttachNetworkRequest struct { - Config *NetworkAttachmentConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` - ContainerID string `protobuf:"bytes,2,opt,name=container_id,json=containerId,proto3" json:"container_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Config *NetworkAttachmentConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` + ContainerID string `protobuf:"bytes,2,opt,name=container_id,json=containerId,proto3" json:"container_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *AttachNetworkRequest) Reset() { *m = AttachNetworkRequest{} } -func (*AttachNetworkRequest) ProtoMessage() {} -func (*AttachNetworkRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_909455b1b868ddb9, []int{0} -} -func (m *AttachNetworkRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *AttachNetworkRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_AttachNetworkRequest.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 (x *AttachNetworkRequest) Reset() { + *x = AttachNetworkRequest{} + mi := &file_api_resource_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *AttachNetworkRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_AttachNetworkRequest.Merge(m, src) -} -func (m *AttachNetworkRequest) XXX_Size() int { - return m.Size() -} -func (m *AttachNetworkRequest) XXX_DiscardUnknown() { - xxx_messageInfo_AttachNetworkRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_AttachNetworkRequest proto.InternalMessageInfo -type AttachNetworkResponse struct { - AttachmentID string `protobuf:"bytes,1,opt,name=attachment_id,json=attachmentId,proto3" json:"attachment_id,omitempty"` +func (x *AttachNetworkRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *AttachNetworkResponse) Reset() { *m = AttachNetworkResponse{} } -func (*AttachNetworkResponse) ProtoMessage() {} -func (*AttachNetworkResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_909455b1b868ddb9, []int{1} -} -func (m *AttachNetworkResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *AttachNetworkResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_AttachNetworkResponse.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 *AttachNetworkResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_AttachNetworkResponse.Merge(m, src) -} -func (m *AttachNetworkResponse) XXX_Size() int { - return m.Size() -} -func (m *AttachNetworkResponse) XXX_DiscardUnknown() { - xxx_messageInfo_AttachNetworkResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_AttachNetworkResponse proto.InternalMessageInfo - -type DetachNetworkRequest struct { - AttachmentID string `protobuf:"bytes,1,opt,name=attachment_id,json=attachmentId,proto3" json:"attachment_id,omitempty"` -} - -func (m *DetachNetworkRequest) Reset() { *m = DetachNetworkRequest{} } -func (*DetachNetworkRequest) ProtoMessage() {} -func (*DetachNetworkRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_909455b1b868ddb9, []int{2} -} -func (m *DetachNetworkRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *DetachNetworkRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_DetachNetworkRequest.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 *DetachNetworkRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_DetachNetworkRequest.Merge(m, src) -} -func (m *DetachNetworkRequest) XXX_Size() int { - return m.Size() -} -func (m *DetachNetworkRequest) XXX_DiscardUnknown() { - xxx_messageInfo_DetachNetworkRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_DetachNetworkRequest proto.InternalMessageInfo - -type DetachNetworkResponse struct { -} +func (*AttachNetworkRequest) ProtoMessage() {} -func (m *DetachNetworkResponse) Reset() { *m = DetachNetworkResponse{} } -func (*DetachNetworkResponse) ProtoMessage() {} -func (*DetachNetworkResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_909455b1b868ddb9, []int{3} -} -func (m *DetachNetworkResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *DetachNetworkResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_DetachNetworkResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err +func (x *AttachNetworkRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_resource_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } -} -func (m *DetachNetworkResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_DetachNetworkResponse.Merge(m, src) -} -func (m *DetachNetworkResponse) XXX_Size() int { - return m.Size() -} -func (m *DetachNetworkResponse) XXX_DiscardUnknown() { - xxx_messageInfo_DetachNetworkResponse.DiscardUnknown(m) + return mi.MessageOf(x) } -var xxx_messageInfo_DetachNetworkResponse proto.InternalMessageInfo - -func init() { - proto.RegisterType((*AttachNetworkRequest)(nil), "docker.swarmkit.v1.AttachNetworkRequest") - proto.RegisterType((*AttachNetworkResponse)(nil), "docker.swarmkit.v1.AttachNetworkResponse") - proto.RegisterType((*DetachNetworkRequest)(nil), "docker.swarmkit.v1.DetachNetworkRequest") - proto.RegisterType((*DetachNetworkResponse)(nil), "docker.swarmkit.v1.DetachNetworkResponse") -} - -func init() { - proto.RegisterFile("github.com/docker/swarmkit/api/resource.proto", fileDescriptor_909455b1b868ddb9) -} - -var fileDescriptor_909455b1b868ddb9 = []byte{ - // 411 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x92, 0x3f, 0x6f, 0xda, 0x40, - 0x18, 0xc6, 0x7d, 0x0c, 0x48, 0x3d, 0x8c, 0xda, 0x5a, 0xa0, 0x22, 0xa4, 0x1e, 0xc8, 0xed, 0x40, - 0x5b, 0x61, 0xab, 0x54, 0x55, 0x67, 0xfe, 0x2c, 0x1e, 0xca, 0xe0, 0x2f, 0x50, 0x1d, 0xf6, 0x61, - 0x2c, 0xb0, 0xcf, 0x3d, 0x9f, 0x83, 0xb2, 0x65, 0xcd, 0x94, 0x8c, 0xf9, 0x0e, 0x91, 0xf2, 0x39, - 0x50, 0x26, 0x46, 0x26, 0x14, 0xcc, 0x9e, 0xcf, 0x10, 0xe1, 0x33, 0x20, 0x88, 0x95, 0xa0, 0x4c, - 0x3e, 0x9f, 0x9f, 0xe7, 0x79, 0x7f, 0xef, 0xfb, 0x1a, 0x36, 0x1d, 0x97, 0x8f, 0xa2, 0x81, 0x66, - 0x51, 0x4f, 0xb7, 0xa9, 0x35, 0x26, 0x4c, 0x0f, 0xa7, 0x98, 0x79, 0x63, 0x97, 0xeb, 0x38, 0x70, - 0x75, 0x46, 0x42, 0x1a, 0x31, 0x8b, 0x68, 0x01, 0xa3, 0x9c, 0x2a, 0x8a, 0xd0, 0x68, 0x5b, 0x8d, - 0x76, 0xf6, 0xb3, 0xfa, 0xfd, 0x95, 0x08, 0x7e, 0x1e, 0x90, 0x50, 0xf8, 0xab, 0x25, 0x87, 0x3a, - 0x34, 0x39, 0xea, 0x9b, 0x53, 0x7a, 0xfb, 0xe7, 0x85, 0x84, 0x44, 0x31, 0x88, 0x86, 0x7a, 0x30, - 0x89, 0x1c, 0xd7, 0x4f, 0x1f, 0xc2, 0xa8, 0x5e, 0x01, 0x58, 0x6a, 0x73, 0x8e, 0xad, 0x51, 0x9f, - 0xf0, 0x29, 0x65, 0x63, 0x93, 0xfc, 0x8f, 0x48, 0xc8, 0x95, 0x2e, 0xcc, 0x5b, 0xd4, 0x1f, 0xba, - 0x4e, 0x05, 0xd4, 0x41, 0xa3, 0xd0, 0xfa, 0xa1, 0x3d, 0x07, 0xd7, 0x52, 0x8f, 0x08, 0xf0, 0x88, - 0xcf, 0xbb, 0x89, 0xc5, 0x4c, 0xad, 0x4a, 0x0b, 0xca, 0x16, 0xf5, 0x39, 0x76, 0x7d, 0xc2, 0xfe, - 0xb9, 0x76, 0x25, 0x57, 0x07, 0x8d, 0x77, 0x9d, 0xf7, 0xf1, 0xb2, 0x56, 0xe8, 0x6e, 0xef, 0x8d, - 0x9e, 0x59, 0xd8, 0x89, 0x0c, 0x5b, 0xed, 0xc3, 0xf2, 0x11, 0x50, 0x18, 0x50, 0x3f, 0x24, 0xca, - 0x6f, 0x58, 0xc4, 0xbb, 0x42, 0x9b, 0x34, 0x90, 0xa4, 0x7d, 0x88, 0x97, 0x35, 0x79, 0x4f, 0x60, - 0xf4, 0x4c, 0x79, 0x2f, 0x33, 0x6c, 0xf5, 0x2f, 0x2c, 0xf5, 0x48, 0x46, 0x83, 0x6f, 0x8c, 0xfb, - 0x04, 0xcb, 0x47, 0x71, 0x02, 0xaf, 0x75, 0x9b, 0x83, 0x1f, 0xcd, 0x74, 0xd7, 0xed, 0xc9, 0x84, - 0x5a, 0x98, 0x53, 0xa6, 0x5c, 0x02, 0x58, 0x3c, 0x68, 0x47, 0x69, 0x64, 0x0d, 0x32, 0x6b, 0x05, - 0xd5, 0x6f, 0x27, 0x28, 0x45, 0x71, 0xf5, 0xcb, 0xfd, 0xdd, 0xe3, 0x4d, 0xee, 0x33, 0x94, 0x13, - 0x69, 0x73, 0xf3, 0x8d, 0x30, 0x58, 0x14, 0x6f, 0x1e, 0xf6, 0xb1, 0x43, 0x04, 0xcb, 0x01, 0x7b, - 0x36, 0x4b, 0xd6, 0xb4, 0xb2, 0x59, 0x32, 0x07, 0x71, 0x12, 0x4b, 0xe7, 0xeb, 0x6c, 0x85, 0xa4, - 0xc5, 0x0a, 0x49, 0x17, 0x31, 0x02, 0xb3, 0x18, 0x81, 0x79, 0x8c, 0xc0, 0x43, 0x8c, 0xc0, 0xf5, - 0x1a, 0x49, 0xf3, 0x35, 0x92, 0x16, 0x6b, 0x24, 0x0d, 0xf2, 0xc9, 0x4f, 0xfa, 0xeb, 0x29, 0x00, - 0x00, 0xff, 0xff, 0x9d, 0x2f, 0x31, 0x83, 0x64, 0x03, 0x00, 0x00, -} - -type authenticatedWrapperResourceAllocatorServer struct { - local ResourceAllocatorServer - authorize func(context.Context, []string) error -} - -func NewAuthenticatedWrapperResourceAllocatorServer(local ResourceAllocatorServer, authorize func(context.Context, []string) error) ResourceAllocatorServer { - return &authenticatedWrapperResourceAllocatorServer{ - local: local, - authorize: authorize, - } -} - -func (p *authenticatedWrapperResourceAllocatorServer) AttachNetwork(ctx context.Context, r *AttachNetworkRequest) (*AttachNetworkResponse, error) { - - if err := p.authorize(ctx, []string{"swarm-worker", "swarm-manager"}); err != nil { - return nil, err - } - return p.local.AttachNetwork(ctx, r) -} - -func (p *authenticatedWrapperResourceAllocatorServer) DetachNetwork(ctx context.Context, r *DetachNetworkRequest) (*DetachNetworkResponse, error) { - - if err := p.authorize(ctx, []string{"swarm-worker", "swarm-manager"}); err != nil { - return nil, err - } - return p.local.DetachNetwork(ctx, r) -} - -func (m *AttachNetworkRequest) Copy() *AttachNetworkRequest { - if m == nil { - return nil - } - o := &AttachNetworkRequest{} - o.CopyFrom(m) - return o -} - -func (m *AttachNetworkRequest) CopyFrom(src interface{}) { - - o := src.(*AttachNetworkRequest) - *m = *o - if o.Config != nil { - m.Config = &NetworkAttachmentConfig{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Config, o.Config) - } -} - -func (m *AttachNetworkResponse) Copy() *AttachNetworkResponse { - if m == nil { - return nil - } - o := &AttachNetworkResponse{} - o.CopyFrom(m) - return o -} - -func (m *AttachNetworkResponse) CopyFrom(src interface{}) { - - o := src.(*AttachNetworkResponse) - *m = *o -} - -func (m *DetachNetworkRequest) Copy() *DetachNetworkRequest { - if m == nil { - return nil - } - o := &DetachNetworkRequest{} - o.CopyFrom(m) - return o -} - -func (m *DetachNetworkRequest) CopyFrom(src interface{}) { - - o := src.(*DetachNetworkRequest) - *m = *o -} - -func (m *DetachNetworkResponse) Copy() *DetachNetworkResponse { - if m == nil { - return nil - } - o := &DetachNetworkResponse{} - o.CopyFrom(m) - return o -} - -func (m *DetachNetworkResponse) CopyFrom(src interface{}) {} - -// Reference imports to suppress errors if they are not otherwise used. -var _ context.Context -var _ grpc.ClientConn - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 - -// ResourceAllocatorClient is the client API for ResourceAllocator service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. -type ResourceAllocatorClient interface { - AttachNetwork(ctx context.Context, in *AttachNetworkRequest, opts ...grpc.CallOption) (*AttachNetworkResponse, error) - DetachNetwork(ctx context.Context, in *DetachNetworkRequest, opts ...grpc.CallOption) (*DetachNetworkResponse, error) -} - -type resourceAllocatorClient struct { - cc *grpc.ClientConn -} - -func NewResourceAllocatorClient(cc *grpc.ClientConn) ResourceAllocatorClient { - return &resourceAllocatorClient{cc} +// Deprecated: Use AttachNetworkRequest.ProtoReflect.Descriptor instead. +func (*AttachNetworkRequest) Descriptor() ([]byte, []int) { + return file_api_resource_proto_rawDescGZIP(), []int{0} } -func (c *resourceAllocatorClient) AttachNetwork(ctx context.Context, in *AttachNetworkRequest, opts ...grpc.CallOption) (*AttachNetworkResponse, error) { - out := new(AttachNetworkResponse) - err := c.cc.Invoke(ctx, "/docker.swarmkit.v1.ResourceAllocator/AttachNetwork", in, out, opts...) - if err != nil { - return nil, err +func (x *AttachNetworkRequest) GetConfig() *NetworkAttachmentConfig { + if x != nil { + return x.Config } - return out, nil + return nil } -func (c *resourceAllocatorClient) DetachNetwork(ctx context.Context, in *DetachNetworkRequest, opts ...grpc.CallOption) (*DetachNetworkResponse, error) { - out := new(DetachNetworkResponse) - err := c.cc.Invoke(ctx, "/docker.swarmkit.v1.ResourceAllocator/DetachNetwork", in, out, opts...) - if err != nil { - return nil, err +func (x *AttachNetworkRequest) GetContainerID() string { + if x != nil { + return x.ContainerID } - return out, nil -} - -// ResourceAllocatorServer is the server API for ResourceAllocator service. -type ResourceAllocatorServer interface { - AttachNetwork(context.Context, *AttachNetworkRequest) (*AttachNetworkResponse, error) - DetachNetwork(context.Context, *DetachNetworkRequest) (*DetachNetworkResponse, error) -} - -// UnimplementedResourceAllocatorServer can be embedded to have forward compatible implementations. -type UnimplementedResourceAllocatorServer struct { -} - -func (*UnimplementedResourceAllocatorServer) AttachNetwork(ctx context.Context, req *AttachNetworkRequest) (*AttachNetworkResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method AttachNetwork not implemented") -} -func (*UnimplementedResourceAllocatorServer) DetachNetwork(ctx context.Context, req *DetachNetworkRequest) (*DetachNetworkResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method DetachNetwork not implemented") -} - -func RegisterResourceAllocatorServer(s *grpc.Server, srv ResourceAllocatorServer) { - s.RegisterService(&_ResourceAllocator_serviceDesc, srv) + return "" } -func _ResourceAllocator_AttachNetwork_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(AttachNetworkRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ResourceAllocatorServer).AttachNetwork(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/docker.swarmkit.v1.ResourceAllocator/AttachNetwork", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ResourceAllocatorServer).AttachNetwork(ctx, req.(*AttachNetworkRequest)) - } - return interceptor(ctx, in, info, handler) +type AttachNetworkResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + AttachmentID string `protobuf:"bytes,1,opt,name=attachment_id,json=attachmentId,proto3" json:"attachment_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func _ResourceAllocator_DetachNetwork_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(DetachNetworkRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ResourceAllocatorServer).DetachNetwork(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/docker.swarmkit.v1.ResourceAllocator/DetachNetwork", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ResourceAllocatorServer).DetachNetwork(ctx, req.(*DetachNetworkRequest)) - } - return interceptor(ctx, in, info, handler) +func (x *AttachNetworkResponse) Reset() { + *x = AttachNetworkResponse{} + mi := &file_api_resource_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -var _ResourceAllocator_serviceDesc = grpc.ServiceDesc{ - ServiceName: "docker.swarmkit.v1.ResourceAllocator", - HandlerType: (*ResourceAllocatorServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "AttachNetwork", - Handler: _ResourceAllocator_AttachNetwork_Handler, - }, - { - MethodName: "DetachNetwork", - Handler: _ResourceAllocator_DetachNetwork_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "github.com/docker/swarmkit/api/resource.proto", +func (x *AttachNetworkResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *AttachNetworkRequest) 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 *AttachNetworkRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} +func (*AttachNetworkResponse) ProtoMessage() {} -func (m *AttachNetworkRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.ContainerID) > 0 { - i -= len(m.ContainerID) - copy(dAtA[i:], m.ContainerID) - i = encodeVarintResource(dAtA, i, uint64(len(m.ContainerID))) - i-- - dAtA[i] = 0x12 - } - if m.Config != nil { - { - size, err := m.Config.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintResource(dAtA, i, uint64(size)) +func (x *AttachNetworkResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_resource_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *AttachNetworkResponse) 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 *AttachNetworkResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *AttachNetworkResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.AttachmentID) > 0 { - i -= len(m.AttachmentID) - copy(dAtA[i:], m.AttachmentID) - i = encodeVarintResource(dAtA, i, uint64(len(m.AttachmentID))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *DetachNetworkRequest) 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 *DetachNetworkRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *DetachNetworkRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.AttachmentID) > 0 { - i -= len(m.AttachmentID) - copy(dAtA[i:], m.AttachmentID) - i = encodeVarintResource(dAtA, i, uint64(len(m.AttachmentID))) - i-- - dAtA[i] = 0xa + return ms } - return len(dAtA) - i, nil + return mi.MessageOf(x) } -func (m *DetachNetworkResponse) 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 *DetachNetworkResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *DetachNetworkResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil +// Deprecated: Use AttachNetworkResponse.ProtoReflect.Descriptor instead. +func (*AttachNetworkResponse) Descriptor() ([]byte, []int) { + return file_api_resource_proto_rawDescGZIP(), []int{1} } -func encodeVarintResource(dAtA []byte, offset int, v uint64) int { - offset -= sovResource(v) - base := offset - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ +func (x *AttachNetworkResponse) GetAttachmentID() string { + if x != nil { + return x.AttachmentID } - dAtA[offset] = uint8(v) - return base -} - -type raftProxyResourceAllocatorServer struct { - local ResourceAllocatorServer - connSelector raftselector.ConnProvider - localCtxMods, remoteCtxMods []func(context.Context) (context.Context, error) + return "" } -func NewRaftProxyResourceAllocatorServer(local ResourceAllocatorServer, connSelector raftselector.ConnProvider, localCtxMod, remoteCtxMod func(context.Context) (context.Context, error)) ResourceAllocatorServer { - redirectChecker := func(ctx context.Context) (context.Context, error) { - p, ok := peer.FromContext(ctx) - if !ok { - return ctx, status.Errorf(codes.InvalidArgument, "remote addr is not found in context") - } - addr := p.Addr.String() - md, ok := metadata.FromIncomingContext(ctx) - if ok && len(md["redirect"]) != 0 { - return ctx, status.Errorf(codes.ResourceExhausted, "more than one redirect to leader from: %s", md["redirect"]) - } - if !ok { - md = metadata.New(map[string]string{}) - } - md["redirect"] = append(md["redirect"], addr) - return metadata.NewOutgoingContext(ctx, md), nil - } - remoteMods := []func(context.Context) (context.Context, error){redirectChecker} - remoteMods = append(remoteMods, remoteCtxMod) - - var localMods []func(context.Context) (context.Context, error) - if localCtxMod != nil { - localMods = []func(context.Context) (context.Context, error){localCtxMod} - } - - return &raftProxyResourceAllocatorServer{ - local: local, - connSelector: connSelector, - localCtxMods: localMods, - remoteCtxMods: remoteMods, - } -} -func (p *raftProxyResourceAllocatorServer) runCtxMods(ctx context.Context, ctxMods []func(context.Context) (context.Context, error)) (context.Context, error) { - var err error - for _, mod := range ctxMods { - ctx, err = mod(ctx) - if err != nil { - return ctx, err - } - } - return ctx, nil +type DetachNetworkRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + AttachmentID string `protobuf:"bytes,1,opt,name=attachment_id,json=attachmentId,proto3" json:"attachment_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (p *raftProxyResourceAllocatorServer) pollNewLeaderConn(ctx context.Context) (*grpc.ClientConn, error) { - ticker := rafttime.NewTicker(500 * rafttime.Millisecond) - defer ticker.Stop() - for { - select { - case <-ticker.C: - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - return nil, err - } - client := NewHealthClient(conn) - - resp, err := client.Check(ctx, &HealthCheckRequest{Service: "Raft"}) - if err != nil || resp.Status != HealthCheckResponse_SERVING { - continue - } - return conn, nil - case <-ctx.Done(): - return nil, ctx.Err() - } - } +func (x *DetachNetworkRequest) Reset() { + *x = DetachNetworkRequest{} + mi := &file_api_resource_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (p *raftProxyResourceAllocatorServer) AttachNetwork(ctx context.Context, r *AttachNetworkRequest) (*AttachNetworkResponse, error) { - - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return nil, err - } - return p.local.AttachNetwork(ctx, r) - } - return nil, err - } - modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return nil, err - } - - resp, err := NewResourceAllocatorClient(conn).AttachNetwork(modCtx, r) - if err != nil { - if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { - return resp, err - } - conn, err := p.pollNewLeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - return p.local.AttachNetwork(ctx, r) - } - return nil, err - } - return NewResourceAllocatorClient(conn).AttachNetwork(modCtx, r) - } - return resp, err +func (x *DetachNetworkRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (p *raftProxyResourceAllocatorServer) DetachNetwork(ctx context.Context, r *DetachNetworkRequest) (*DetachNetworkResponse, error) { - - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return nil, err - } - return p.local.DetachNetwork(ctx, r) - } - return nil, err - } - modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return nil, err - } +func (*DetachNetworkRequest) ProtoMessage() {} - resp, err := NewResourceAllocatorClient(conn).DetachNetwork(modCtx, r) - if err != nil { - if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { - return resp, err - } - conn, err := p.pollNewLeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - return p.local.DetachNetwork(ctx, r) - } - return nil, err +func (x *DetachNetworkRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_resource_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return NewResourceAllocatorClient(conn).DetachNetwork(modCtx, r) + return ms } - return resp, err + return mi.MessageOf(x) } -func (m *AttachNetworkRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Config != nil { - l = m.Config.Size() - n += 1 + l + sovResource(uint64(l)) - } - l = len(m.ContainerID) - if l > 0 { - n += 1 + l + sovResource(uint64(l)) - } - return n +// Deprecated: Use DetachNetworkRequest.ProtoReflect.Descriptor instead. +func (*DetachNetworkRequest) Descriptor() ([]byte, []int) { + return file_api_resource_proto_rawDescGZIP(), []int{2} } -func (m *AttachNetworkResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.AttachmentID) - if l > 0 { - n += 1 + l + sovResource(uint64(l)) +func (x *DetachNetworkRequest) GetAttachmentID() string { + if x != nil { + return x.AttachmentID } - return n + return "" } -func (m *DetachNetworkRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.AttachmentID) - if l > 0 { - n += 1 + l + sovResource(uint64(l)) - } - return n +type DetachNetworkResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *DetachNetworkResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - return n +func (x *DetachNetworkResponse) Reset() { + *x = DetachNetworkResponse{} + mi := &file_api_resource_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func sovResource(x uint64) (n int) { - return (math_bits.Len64(x|1) + 6) / 7 -} -func sozResource(x uint64) (n int) { - return sovResource(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (this *AttachNetworkRequest) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&AttachNetworkRequest{`, - `Config:` + strings.Replace(fmt.Sprintf("%v", this.Config), "NetworkAttachmentConfig", "NetworkAttachmentConfig", 1) + `,`, - `ContainerID:` + fmt.Sprintf("%v", this.ContainerID) + `,`, - `}`, - }, "") - return s -} -func (this *AttachNetworkResponse) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&AttachNetworkResponse{`, - `AttachmentID:` + fmt.Sprintf("%v", this.AttachmentID) + `,`, - `}`, - }, "") - return s -} -func (this *DetachNetworkRequest) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&DetachNetworkRequest{`, - `AttachmentID:` + fmt.Sprintf("%v", this.AttachmentID) + `,`, - `}`, - }, "") - return s +func (x *DetachNetworkResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (this *DetachNetworkResponse) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&DetachNetworkResponse{`, - `}`, - }, "") - return s -} -func valueToStringResource(v interface{}) string { - rv := reflect.ValueOf(v) - if rv.IsNil() { - return "nil" - } - pv := reflect.Indirect(rv).Interface() - return fmt.Sprintf("*%v", pv) -} -func (m *AttachNetworkRequest) 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 ErrIntOverflowResource - } - 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: AttachNetworkRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: AttachNetworkRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Config", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowResource - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthResource - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthResource - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Config == nil { - m.Config = &NetworkAttachmentConfig{} - } - if err := m.Config.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ContainerID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowResource - } - 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 ErrInvalidLengthResource - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthResource - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ContainerID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipResource(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthResource - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *AttachNetworkResponse) 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 ErrIntOverflowResource - } - 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: AttachNetworkResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: AttachNetworkResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AttachmentID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowResource - } - 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 ErrInvalidLengthResource - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthResource - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.AttachmentID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipResource(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthResource - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } +func (*DetachNetworkResponse) ProtoMessage() {} - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *DetachNetworkRequest) 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 ErrIntOverflowResource - } - 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: DetachNetworkRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: DetachNetworkRequest: illegal tag %d (wire type %d)", fieldNum, wire) +func (x *DetachNetworkResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_resource_proto_msgTypes[3] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AttachmentID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowResource - } - 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 ErrInvalidLengthResource - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthResource - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.AttachmentID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipResource(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthResource - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF + return ms } - return nil + return mi.MessageOf(x) } -func (m *DetachNetworkResponse) 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 ErrIntOverflowResource - } - 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: DetachNetworkResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: DetachNetworkResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipResource(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthResource - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipResource(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - depth := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowResource - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowResource - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - case 1: - iNdEx += 8 - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowResource - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLengthResource - } - iNdEx += length - case 3: - depth++ - case 4: - if depth == 0 { - return 0, ErrUnexpectedEndOfGroupResource - } - depth-- - case 5: - iNdEx += 4 - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - if iNdEx < 0 { - return 0, ErrInvalidLengthResource - } - if depth == 0 { - return iNdEx, nil - } - } - return 0, io.ErrUnexpectedEOF -} +// Deprecated: Use DetachNetworkResponse.ProtoReflect.Descriptor instead. +func (*DetachNetworkResponse) Descriptor() ([]byte, []int) { + return file_api_resource_proto_rawDescGZIP(), []int{3} +} + +var File_api_resource_proto protoreflect.FileDescriptor + +const file_api_resource_proto_rawDesc = "" + + "\n" + + "\x12api/resource.proto\x12\x12docker.swarmkit.v1\x1a\x0fapi/types.proto\x1a\x1cprotobuf/plugin/plugin.proto\"~\n" + + "\x14AttachNetworkRequest\x12C\n" + + "\x06config\x18\x01 \x01(\v2+.docker.swarmkit.v1.NetworkAttachmentConfigR\x06config\x12!\n" + + "\fcontainer_id\x18\x02 \x01(\tR\vcontainerId\"<\n" + + "\x15AttachNetworkResponse\x12#\n" + + "\rattachment_id\x18\x01 \x01(\tR\fattachmentId\";\n" + + "\x14DetachNetworkRequest\x12#\n" + + "\rattachment_id\x18\x01 \x01(\tR\fattachmentId\"\x17\n" + + "\x15DetachNetworkResponse2\xab\x02\n" + + "\x11ResourceAllocator\x12\x89\x01\n" + + "\rAttachNetwork\x12(.docker.swarmkit.v1.AttachNetworkRequest\x1a).docker.swarmkit.v1.AttachNetworkResponse\"#ʮ\xee\x98\x02\x1d\n" + + "\fswarm-worker\n" + + "\rswarm-manager\x12\x89\x01\n" + + "\rDetachNetwork\x12(.docker.swarmkit.v1.DetachNetworkRequest\x1a).docker.swarmkit.v1.DetachNetworkResponse\"#ʮ\xee\x98\x02\x1d\n" + + "\fswarm-worker\n" + + "\rswarm-managerB!Z\x1fgithub.com/moby/swarmkit/v2/apib\x06proto3" var ( - ErrInvalidLengthResource = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowResource = fmt.Errorf("proto: integer overflow") - ErrUnexpectedEndOfGroupResource = fmt.Errorf("proto: unexpected end of group") + file_api_resource_proto_rawDescOnce sync.Once + file_api_resource_proto_rawDescData []byte ) + +func file_api_resource_proto_rawDescGZIP() []byte { + file_api_resource_proto_rawDescOnce.Do(func() { + file_api_resource_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_api_resource_proto_rawDesc), len(file_api_resource_proto_rawDesc))) + }) + return file_api_resource_proto_rawDescData +} + +var file_api_resource_proto_msgTypes = make([]protoimpl.MessageInfo, 4) +var file_api_resource_proto_goTypes = []any{ + (*AttachNetworkRequest)(nil), // 0: docker.swarmkit.v1.AttachNetworkRequest + (*AttachNetworkResponse)(nil), // 1: docker.swarmkit.v1.AttachNetworkResponse + (*DetachNetworkRequest)(nil), // 2: docker.swarmkit.v1.DetachNetworkRequest + (*DetachNetworkResponse)(nil), // 3: docker.swarmkit.v1.DetachNetworkResponse + (*NetworkAttachmentConfig)(nil), // 4: docker.swarmkit.v1.NetworkAttachmentConfig +} +var file_api_resource_proto_depIdxs = []int32{ + 4, // 0: docker.swarmkit.v1.AttachNetworkRequest.config:type_name -> docker.swarmkit.v1.NetworkAttachmentConfig + 0, // 1: docker.swarmkit.v1.ResourceAllocator.AttachNetwork:input_type -> docker.swarmkit.v1.AttachNetworkRequest + 2, // 2: docker.swarmkit.v1.ResourceAllocator.DetachNetwork:input_type -> docker.swarmkit.v1.DetachNetworkRequest + 1, // 3: docker.swarmkit.v1.ResourceAllocator.AttachNetwork:output_type -> docker.swarmkit.v1.AttachNetworkResponse + 3, // 4: docker.swarmkit.v1.ResourceAllocator.DetachNetwork:output_type -> docker.swarmkit.v1.DetachNetworkResponse + 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 +} + +func init() { file_api_resource_proto_init() } +func file_api_resource_proto_init() { + if File_api_resource_proto != nil { + return + } + file_api_types_proto_init() + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_api_resource_proto_rawDesc), len(file_api_resource_proto_rawDesc)), + NumEnums: 0, + NumMessages: 4, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_api_resource_proto_goTypes, + DependencyIndexes: file_api_resource_proto_depIdxs, + MessageInfos: file_api_resource_proto_msgTypes, + }.Build() + File_api_resource_proto = out.File + file_api_resource_proto_goTypes = nil + file_api_resource_proto_depIdxs = nil +} diff --git a/api/resource.pb.raftproxy.go b/api/resource.pb.raftproxy.go new file mode 100644 index 0000000000..479b025f24 --- /dev/null +++ b/api/resource.pb.raftproxy.go @@ -0,0 +1,157 @@ +// Code generated by protoc-gen-goswarm. DO NOT EDIT. + +package api + +import ( + context "context" + raftselector "github.com/moby/swarmkit/v2/manager/raftselector" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + metadata "google.golang.org/grpc/metadata" + peer "google.golang.org/grpc/peer" + status "google.golang.org/grpc/status" + strings "strings" + time "time" +) + +type raftProxyResourceAllocatorServer struct { + local ResourceAllocatorServer + connSelector raftselector.ConnProvider + localCtxMods, remoteCtxMods []func(context.Context) (context.Context, error) +} + +func NewRaftProxyResourceAllocatorServer(local ResourceAllocatorServer, connSelector raftselector.ConnProvider, localCtxMod, remoteCtxMod func(context.Context) (context.Context, error)) ResourceAllocatorServer { + redirectChecker := func(ctx context.Context) (context.Context, error) { + p, ok := peer.FromContext(ctx) + if !ok { + return ctx, status.Errorf(codes.InvalidArgument, "remote addr is not found in context") + } + addr := p.Addr.String() + md, ok := metadata.FromIncomingContext(ctx) + if ok && len(md["redirect"]) != 0 { + return ctx, status.Errorf(codes.ResourceExhausted, "more than one redirect to leader from: %s", md["redirect"]) + } + if !ok { + md = metadata.New(map[string]string{}) + } + md["redirect"] = append(md["redirect"], addr) + return metadata.NewOutgoingContext(ctx, md), nil + } + remoteMods := []func(context.Context) (context.Context, error){redirectChecker} + remoteMods = append(remoteMods, remoteCtxMod) + + var localMods []func(context.Context) (context.Context, error) + if localCtxMod != nil { + localMods = []func(context.Context) (context.Context, error){localCtxMod} + } + + return &raftProxyResourceAllocatorServer{ + local: local, + connSelector: connSelector, + localCtxMods: localMods, + remoteCtxMods: remoteMods, + } +} +func (p *raftProxyResourceAllocatorServer) runCtxMods(ctx context.Context, ctxMods []func(context.Context) (context.Context, error)) (context.Context, error) { + var err error + for _, mod := range ctxMods { + ctx, err = mod(ctx) + if err != nil { + return ctx, err + } + } + return ctx, nil +} +func (p *raftProxyResourceAllocatorServer) pollNewLeaderConn(ctx context.Context) (*grpc.ClientConn, error) { + ticker := time.NewTicker(500 * time.Millisecond) + defer ticker.Stop() + for { + select { + case <-ticker.C: + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + return nil, err + } + + client := NewHealthClient(conn) + + resp, err := client.Check(ctx, &HealthCheckRequest{Service: "Raft"}) + if err != nil || resp.Status != HealthCheckResponse_SERVING { + continue + } + return conn, nil + case <-ctx.Done(): + return nil, ctx.Err() + } + } +} + +func (p *raftProxyResourceAllocatorServer) AttachNetwork(ctx context.Context, r *AttachNetworkRequest) (*AttachNetworkResponse, error) { + + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return nil, err + } + return p.local.AttachNetwork(ctx, r) + } + return nil, err + } + modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return nil, err + } + + resp, err := NewResourceAllocatorClient(conn).AttachNetwork(modCtx, r) + if err != nil { + if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { + return resp, err + } + conn, err := p.pollNewLeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + return p.local.AttachNetwork(ctx, r) + } + return nil, err + } + return NewResourceAllocatorClient(conn).AttachNetwork(modCtx, r) + } + return resp, err +} + +func (p *raftProxyResourceAllocatorServer) DetachNetwork(ctx context.Context, r *DetachNetworkRequest) (*DetachNetworkResponse, error) { + + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return nil, err + } + return p.local.DetachNetwork(ctx, r) + } + return nil, err + } + modCtx, err := p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return nil, err + } + + resp, err := NewResourceAllocatorClient(conn).DetachNetwork(modCtx, r) + if err != nil { + if !strings.Contains(err.Error(), "is closing") && !strings.Contains(err.Error(), "the connection is unavailable") && !strings.Contains(err.Error(), "connection error") { + return resp, err + } + conn, err := p.pollNewLeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + return p.local.DetachNetwork(ctx, r) + } + return nil, err + } + return NewResourceAllocatorClient(conn).DetachNetwork(modCtx, r) + } + return resp, err +} diff --git a/api/resource.proto b/api/resource.proto index ecaa749ee7..ad49fe8b99 100644 --- a/api/resource.proto +++ b/api/resource.proto @@ -2,9 +2,10 @@ syntax = "proto3"; package docker.swarmkit.v1; -import "github.com/docker/swarmkit/api/types.proto"; -import "gogoproto/gogo.proto"; -import "github.com/docker/swarmkit/protobuf/plugin/plugin.proto"; +option go_package = "github.com/moby/swarmkit/v2/api"; + +import "api/types.proto"; +import "protobuf/plugin/plugin.proto"; // Allocator is the API provided by a manager group for agents to control the allocation of certain entities. // diff --git a/api/resource_grpc.pb.go b/api/resource_grpc.pb.go new file mode 100644 index 0000000000..5dc28b87d9 --- /dev/null +++ b/api/resource_grpc.pb.go @@ -0,0 +1,165 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.6.2 +// - protoc v3.21.12 +// source: api/resource.proto + +package api + +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.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 + +const ( + ResourceAllocator_AttachNetwork_FullMethodName = "/docker.swarmkit.v1.ResourceAllocator/AttachNetwork" + ResourceAllocator_DetachNetwork_FullMethodName = "/docker.swarmkit.v1.ResourceAllocator/DetachNetwork" +) + +// ResourceAllocatorClient is the client API for ResourceAllocator 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. +// +// Allocator is the API provided by a manager group for agents to control the allocation of certain entities. +// +// API methods on this service are used only by agent nodes. +type ResourceAllocatorClient interface { + AttachNetwork(ctx context.Context, in *AttachNetworkRequest, opts ...grpc.CallOption) (*AttachNetworkResponse, error) + DetachNetwork(ctx context.Context, in *DetachNetworkRequest, opts ...grpc.CallOption) (*DetachNetworkResponse, error) +} + +type resourceAllocatorClient struct { + cc grpc.ClientConnInterface +} + +func NewResourceAllocatorClient(cc grpc.ClientConnInterface) ResourceAllocatorClient { + return &resourceAllocatorClient{cc} +} + +func (c *resourceAllocatorClient) AttachNetwork(ctx context.Context, in *AttachNetworkRequest, opts ...grpc.CallOption) (*AttachNetworkResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(AttachNetworkResponse) + err := c.cc.Invoke(ctx, ResourceAllocator_AttachNetwork_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *resourceAllocatorClient) DetachNetwork(ctx context.Context, in *DetachNetworkRequest, opts ...grpc.CallOption) (*DetachNetworkResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(DetachNetworkResponse) + err := c.cc.Invoke(ctx, ResourceAllocator_DetachNetwork_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +// ResourceAllocatorServer is the server API for ResourceAllocator service. +// All implementations should embed UnimplementedResourceAllocatorServer +// for forward compatibility. +// +// Allocator is the API provided by a manager group for agents to control the allocation of certain entities. +// +// API methods on this service are used only by agent nodes. +type ResourceAllocatorServer interface { + AttachNetwork(context.Context, *AttachNetworkRequest) (*AttachNetworkResponse, error) + DetachNetwork(context.Context, *DetachNetworkRequest) (*DetachNetworkResponse, error) +} + +// UnimplementedResourceAllocatorServer should be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedResourceAllocatorServer struct{} + +func (UnimplementedResourceAllocatorServer) AttachNetwork(context.Context, *AttachNetworkRequest) (*AttachNetworkResponse, error) { + return nil, status.Error(codes.Unimplemented, "method AttachNetwork not implemented") +} +func (UnimplementedResourceAllocatorServer) DetachNetwork(context.Context, *DetachNetworkRequest) (*DetachNetworkResponse, error) { + return nil, status.Error(codes.Unimplemented, "method DetachNetwork not implemented") +} +func (UnimplementedResourceAllocatorServer) testEmbeddedByValue() {} + +// UnsafeResourceAllocatorServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to ResourceAllocatorServer will +// result in compilation errors. +type UnsafeResourceAllocatorServer interface { + mustEmbedUnimplementedResourceAllocatorServer() +} + +func RegisterResourceAllocatorServer(s grpc.ServiceRegistrar, srv ResourceAllocatorServer) { + // If the following call panics, it indicates UnimplementedResourceAllocatorServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } + s.RegisterService(&ResourceAllocator_ServiceDesc, srv) +} + +func _ResourceAllocator_AttachNetwork_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AttachNetworkRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ResourceAllocatorServer).AttachNetwork(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ResourceAllocator_AttachNetwork_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ResourceAllocatorServer).AttachNetwork(ctx, req.(*AttachNetworkRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ResourceAllocator_DetachNetwork_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DetachNetworkRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ResourceAllocatorServer).DetachNetwork(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ResourceAllocator_DetachNetwork_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ResourceAllocatorServer).DetachNetwork(ctx, req.(*DetachNetworkRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// ResourceAllocator_ServiceDesc is the grpc.ServiceDesc for ResourceAllocator service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var ResourceAllocator_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "docker.swarmkit.v1.ResourceAllocator", + HandlerType: (*ResourceAllocatorServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "AttachNetwork", + Handler: _ResourceAllocator_AttachNetwork_Handler, + }, + { + MethodName: "DetachNetwork", + Handler: _ResourceAllocator_DetachNetwork_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "api/resource.proto", +} diff --git a/api/snapshot.pb.deepcopy.go b/api/snapshot.pb.deepcopy.go new file mode 100644 index 0000000000..c561de4383 --- /dev/null +++ b/api/snapshot.pb.deepcopy.go @@ -0,0 +1,153 @@ +// Code generated by protoc-gen-goswarm. DO NOT EDIT. + +package api + +import ( + deepcopy "github.com/moby/swarmkit/v2/api/deepcopy" +) + +func (m *StoreSnapshot) Copy() *StoreSnapshot { + if m == nil { + return nil + } + o := &StoreSnapshot{} + o.CopyFrom(m) + return o +} + +func (m *StoreSnapshot) CopyFrom(src interface{}) { + + o := src.(*StoreSnapshot) + if o.Nodes != nil { + m.Nodes = make([]*Node, len(o.Nodes)) + for i := range m.Nodes { + m.Nodes[i] = &Node{} + deepcopy.Copy(m.Nodes[i], o.Nodes[i]) + } + } + + if o.Services != nil { + m.Services = make([]*Service, len(o.Services)) + for i := range m.Services { + m.Services[i] = &Service{} + deepcopy.Copy(m.Services[i], o.Services[i]) + } + } + + if o.Networks != nil { + m.Networks = make([]*Network, len(o.Networks)) + for i := range m.Networks { + m.Networks[i] = &Network{} + deepcopy.Copy(m.Networks[i], o.Networks[i]) + } + } + + if o.Tasks != nil { + m.Tasks = make([]*Task, len(o.Tasks)) + for i := range m.Tasks { + m.Tasks[i] = &Task{} + deepcopy.Copy(m.Tasks[i], o.Tasks[i]) + } + } + + if o.Clusters != nil { + m.Clusters = make([]*Cluster, len(o.Clusters)) + for i := range m.Clusters { + m.Clusters[i] = &Cluster{} + deepcopy.Copy(m.Clusters[i], o.Clusters[i]) + } + } + + if o.Secrets != nil { + m.Secrets = make([]*Secret, len(o.Secrets)) + for i := range m.Secrets { + m.Secrets[i] = &Secret{} + deepcopy.Copy(m.Secrets[i], o.Secrets[i]) + } + } + + if o.Resources != nil { + m.Resources = make([]*Resource, len(o.Resources)) + for i := range m.Resources { + m.Resources[i] = &Resource{} + deepcopy.Copy(m.Resources[i], o.Resources[i]) + } + } + + if o.Extensions != nil { + m.Extensions = make([]*Extension, len(o.Extensions)) + for i := range m.Extensions { + m.Extensions[i] = &Extension{} + deepcopy.Copy(m.Extensions[i], o.Extensions[i]) + } + } + + if o.Configs != nil { + m.Configs = make([]*Config, len(o.Configs)) + for i := range m.Configs { + m.Configs[i] = &Config{} + deepcopy.Copy(m.Configs[i], o.Configs[i]) + } + } + + if o.Volumes != nil { + m.Volumes = make([]*Volume, len(o.Volumes)) + for i := range m.Volumes { + m.Volumes[i] = &Volume{} + deepcopy.Copy(m.Volumes[i], o.Volumes[i]) + } + } + +} + +func (m *ClusterSnapshot) Copy() *ClusterSnapshot { + if m == nil { + return nil + } + o := &ClusterSnapshot{} + o.CopyFrom(m) + return o +} + +func (m *ClusterSnapshot) CopyFrom(src interface{}) { + + o := src.(*ClusterSnapshot) + if o.Members != nil { + m.Members = make([]*RaftMember, len(o.Members)) + for i := range m.Members { + m.Members[i] = &RaftMember{} + deepcopy.Copy(m.Members[i], o.Members[i]) + } + } + + if o.Removed != nil { + m.Removed = make([]uint64, len(o.Removed)) + copy(m.Removed, o.Removed) + } + +} + +func (m *Snapshot) Copy() *Snapshot { + if m == nil { + return nil + } + o := &Snapshot{} + o.CopyFrom(m) + return o +} + +func (m *Snapshot) CopyFrom(src interface{}) { + + o := src.(*Snapshot) + m.Version = o.Version + if o.Membership != nil { + m.Membership = &ClusterSnapshot{} + deepcopy.Copy(m.Membership, o.Membership) + } + + if o.Store != nil { + m.Store = &StoreSnapshot{} + deepcopy.Copy(m.Store, o.Store) + } + +} diff --git a/api/snapshot.pb.go b/api/snapshot.pb.go index 7ab5d978d0..83a9875f45 100644 --- a/api/snapshot.pb.go +++ b/api/snapshot.pb.go @@ -1,29 +1,25 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: github.com/docker/swarmkit/api/snapshot.proto +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.11 +// protoc v3.21.12 +// source: api/snapshot.proto package api import ( - fmt "fmt" - proto "github.com/gogo/protobuf/proto" - github_com_moby_swarmkit_v2_api_deepcopy "github.com/moby/swarmkit/v2/api/deepcopy" - io "io" - math "math" - math_bits "math/bits" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" - strings "strings" + sync "sync" + unsafe "unsafe" ) -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package +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 Snapshot_Version int32 @@ -32,1580 +28,380 @@ const ( Snapshot_V0 Snapshot_Version = 0 ) -var Snapshot_Version_name = map[int32]string{ - 0: "V0", -} +// Enum value maps for Snapshot_Version. +var ( + Snapshot_Version_name = map[int32]string{ + 0: "V0", + } + Snapshot_Version_value = map[string]int32{ + "V0": 0, + } +) -var Snapshot_Version_value = map[string]int32{ - "V0": 0, +func (x Snapshot_Version) Enum() *Snapshot_Version { + p := new(Snapshot_Version) + *p = x + return p } func (x Snapshot_Version) String() string { - return proto.EnumName(Snapshot_Version_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } -func (Snapshot_Version) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_c5cad0b62cecd9af, []int{2, 0} +func (Snapshot_Version) Descriptor() protoreflect.EnumDescriptor { + return file_api_snapshot_proto_enumTypes[0].Descriptor() } -// StoreSnapshot is used to store snapshots of the store. -type StoreSnapshot struct { - Nodes []*Node `protobuf:"bytes,1,rep,name=nodes,proto3" json:"nodes,omitempty"` - Services []*Service `protobuf:"bytes,2,rep,name=services,proto3" json:"services,omitempty"` - Networks []*Network `protobuf:"bytes,3,rep,name=networks,proto3" json:"networks,omitempty"` - Tasks []*Task `protobuf:"bytes,4,rep,name=tasks,proto3" json:"tasks,omitempty"` - Clusters []*Cluster `protobuf:"bytes,5,rep,name=clusters,proto3" json:"clusters,omitempty"` - Secrets []*Secret `protobuf:"bytes,6,rep,name=secrets,proto3" json:"secrets,omitempty"` - Resources []*Resource `protobuf:"bytes,7,rep,name=resources,proto3" json:"resources,omitempty"` - Extensions []*Extension `protobuf:"bytes,8,rep,name=extensions,proto3" json:"extensions,omitempty"` - Configs []*Config `protobuf:"bytes,9,rep,name=configs,proto3" json:"configs,omitempty"` - Volumes []*Volume `protobuf:"bytes,10,rep,name=volumes,proto3" json:"volumes,omitempty"` +func (Snapshot_Version) Type() protoreflect.EnumType { + return &file_api_snapshot_proto_enumTypes[0] } -func (m *StoreSnapshot) Reset() { *m = StoreSnapshot{} } -func (*StoreSnapshot) ProtoMessage() {} -func (*StoreSnapshot) Descriptor() ([]byte, []int) { - return fileDescriptor_c5cad0b62cecd9af, []int{0} -} -func (m *StoreSnapshot) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *StoreSnapshot) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_StoreSnapshot.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 *StoreSnapshot) XXX_Merge(src proto.Message) { - xxx_messageInfo_StoreSnapshot.Merge(m, src) -} -func (m *StoreSnapshot) XXX_Size() int { - return m.Size() -} -func (m *StoreSnapshot) XXX_DiscardUnknown() { - xxx_messageInfo_StoreSnapshot.DiscardUnknown(m) +func (x Snapshot_Version) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } -var xxx_messageInfo_StoreSnapshot proto.InternalMessageInfo - -// ClusterSnapshot stores cluster membership information in snapshots. -type ClusterSnapshot struct { - Members []*RaftMember `protobuf:"bytes,1,rep,name=members,proto3" json:"members,omitempty"` - Removed []uint64 `protobuf:"varint,2,rep,name=removed,proto3" json:"removed,omitempty"` +// Deprecated: Use Snapshot_Version.Descriptor instead. +func (Snapshot_Version) EnumDescriptor() ([]byte, []int) { + return file_api_snapshot_proto_rawDescGZIP(), []int{2, 0} } -func (m *ClusterSnapshot) Reset() { *m = ClusterSnapshot{} } -func (*ClusterSnapshot) ProtoMessage() {} -func (*ClusterSnapshot) Descriptor() ([]byte, []int) { - return fileDescriptor_c5cad0b62cecd9af, []int{1} -} -func (m *ClusterSnapshot) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ClusterSnapshot) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ClusterSnapshot.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 *ClusterSnapshot) XXX_Merge(src proto.Message) { - xxx_messageInfo_ClusterSnapshot.Merge(m, src) -} -func (m *ClusterSnapshot) XXX_Size() int { - return m.Size() -} -func (m *ClusterSnapshot) XXX_DiscardUnknown() { - xxx_messageInfo_ClusterSnapshot.DiscardUnknown(m) +// StoreSnapshot is used to store snapshots of the store. +type StoreSnapshot struct { + state protoimpl.MessageState `protogen:"open.v1"` + Nodes []*Node `protobuf:"bytes,1,rep,name=nodes,proto3" json:"nodes,omitempty"` + Services []*Service `protobuf:"bytes,2,rep,name=services,proto3" json:"services,omitempty"` + Networks []*Network `protobuf:"bytes,3,rep,name=networks,proto3" json:"networks,omitempty"` + Tasks []*Task `protobuf:"bytes,4,rep,name=tasks,proto3" json:"tasks,omitempty"` + Clusters []*Cluster `protobuf:"bytes,5,rep,name=clusters,proto3" json:"clusters,omitempty"` + Secrets []*Secret `protobuf:"bytes,6,rep,name=secrets,proto3" json:"secrets,omitempty"` + Resources []*Resource `protobuf:"bytes,7,rep,name=resources,proto3" json:"resources,omitempty"` + Extensions []*Extension `protobuf:"bytes,8,rep,name=extensions,proto3" json:"extensions,omitempty"` + Configs []*Config `protobuf:"bytes,9,rep,name=configs,proto3" json:"configs,omitempty"` + Volumes []*Volume `protobuf:"bytes,10,rep,name=volumes,proto3" json:"volumes,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -var xxx_messageInfo_ClusterSnapshot proto.InternalMessageInfo - -type Snapshot struct { - Version Snapshot_Version `protobuf:"varint,1,opt,name=version,proto3,enum=docker.swarmkit.v1.Snapshot_Version" json:"version,omitempty"` - Membership ClusterSnapshot `protobuf:"bytes,2,opt,name=membership,proto3" json:"membership"` - Store StoreSnapshot `protobuf:"bytes,3,opt,name=store,proto3" json:"store"` +func (x *StoreSnapshot) Reset() { + *x = StoreSnapshot{} + mi := &file_api_snapshot_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *Snapshot) Reset() { *m = Snapshot{} } -func (*Snapshot) ProtoMessage() {} -func (*Snapshot) Descriptor() ([]byte, []int) { - return fileDescriptor_c5cad0b62cecd9af, []int{2} -} -func (m *Snapshot) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Snapshot) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_Snapshot.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 *Snapshot) XXX_Merge(src proto.Message) { - xxx_messageInfo_Snapshot.Merge(m, src) -} -func (m *Snapshot) XXX_Size() int { - return m.Size() -} -func (m *Snapshot) XXX_DiscardUnknown() { - xxx_messageInfo_Snapshot.DiscardUnknown(m) +func (x *StoreSnapshot) String() string { + return protoimpl.X.MessageStringOf(x) } -var xxx_messageInfo_Snapshot proto.InternalMessageInfo - -func init() { - proto.RegisterEnum("docker.swarmkit.v1.Snapshot_Version", Snapshot_Version_name, Snapshot_Version_value) - proto.RegisterType((*StoreSnapshot)(nil), "docker.swarmkit.v1.StoreSnapshot") - proto.RegisterType((*ClusterSnapshot)(nil), "docker.swarmkit.v1.ClusterSnapshot") - proto.RegisterType((*Snapshot)(nil), "docker.swarmkit.v1.Snapshot") -} +func (*StoreSnapshot) ProtoMessage() {} -func init() { - proto.RegisterFile("github.com/docker/swarmkit/api/snapshot.proto", fileDescriptor_c5cad0b62cecd9af) +func (x *StoreSnapshot) ProtoReflect() protoreflect.Message { + mi := &file_api_snapshot_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var fileDescriptor_c5cad0b62cecd9af = []byte{ - // 523 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x93, 0x41, 0x8f, 0x12, 0x31, - 0x14, 0xc7, 0x67, 0x58, 0x60, 0xd8, 0x6e, 0xd4, 0xb5, 0xf1, 0xd0, 0xe0, 0x5a, 0x11, 0xf7, 0x80, - 0x89, 0x0e, 0x8a, 0x26, 0x1a, 0x93, 0xf5, 0xc0, 0xc6, 0x83, 0x07, 0xf7, 0x50, 0x0c, 0xf1, 0x3a, - 0x0c, 0x05, 0x46, 0x76, 0xa6, 0xa4, 0xaf, 0xb0, 0x1e, 0xfd, 0x08, 0x7e, 0x1b, 0xbf, 0x02, 0xc7, - 0x3d, 0xee, 0xc9, 0xb8, 0x70, 0xf0, 0x6b, 0x98, 0xb6, 0x53, 0x24, 0x71, 0x70, 0x6f, 0x93, 0xe6, - 0xf7, 0x7b, 0xef, 0xdf, 0xce, 0x7b, 0xe8, 0xd9, 0x38, 0x51, 0x93, 0xf9, 0x20, 0x8c, 0x45, 0xda, - 0x1e, 0x8a, 0x78, 0xca, 0x65, 0x1b, 0x2e, 0x22, 0x99, 0x4e, 0x13, 0xd5, 0x8e, 0x66, 0x49, 0x1b, - 0xb2, 0x68, 0x06, 0x13, 0xa1, 0xc2, 0x99, 0x14, 0x4a, 0x60, 0x6c, 0x99, 0xd0, 0x31, 0xe1, 0xe2, - 0x45, 0xfd, 0xe9, 0x0d, 0x25, 0xc4, 0xe0, 0x0b, 0x8f, 0x15, 0xd8, 0x0a, 0xf5, 0x27, 0x37, 0xd0, - 0x32, 0x1a, 0xe5, 0xcd, 0xea, 0xf7, 0xc6, 0x62, 0x2c, 0xcc, 0x67, 0x5b, 0x7f, 0xd9, 0xd3, 0xe6, - 0x8f, 0x32, 0xba, 0xd5, 0x53, 0x42, 0xf2, 0x5e, 0x1e, 0x0d, 0x87, 0xa8, 0x92, 0x89, 0x21, 0x07, - 0xe2, 0x37, 0xf6, 0x5a, 0x07, 0x1d, 0x12, 0xfe, 0x1b, 0x32, 0x3c, 0x13, 0x43, 0xce, 0x2c, 0x86, - 0x5f, 0xa3, 0x1a, 0x70, 0xb9, 0x48, 0x62, 0x0e, 0xa4, 0x64, 0x94, 0xfb, 0x45, 0x4a, 0xcf, 0x32, - 0x6c, 0x03, 0x6b, 0x31, 0xe3, 0xea, 0x42, 0xc8, 0x29, 0x90, 0xbd, 0xdd, 0xe2, 0x99, 0x65, 0xd8, - 0x06, 0xd6, 0x09, 0x55, 0x04, 0x53, 0x20, 0xe5, 0xdd, 0x09, 0x3f, 0x45, 0x30, 0x65, 0x16, 0xd3, - 0x8d, 0xe2, 0xf3, 0x39, 0x28, 0x2e, 0x81, 0x54, 0x76, 0x37, 0x3a, 0xb5, 0x0c, 0xdb, 0xc0, 0xf8, - 0x15, 0x0a, 0x80, 0xc7, 0x92, 0x2b, 0x20, 0x55, 0xe3, 0xd5, 0x8b, 0x6f, 0xa6, 0x11, 0xe6, 0x50, - 0xfc, 0x16, 0xed, 0x4b, 0x0e, 0x62, 0x2e, 0xf5, 0x8b, 0x04, 0xc6, 0x3b, 0x2a, 0xf2, 0x58, 0x0e, - 0xb1, 0xbf, 0x38, 0x3e, 0x41, 0x88, 0x7f, 0x55, 0x3c, 0x83, 0x44, 0x64, 0x40, 0x6a, 0x46, 0x7e, - 0x50, 0x24, 0xbf, 0x77, 0x14, 0xdb, 0x12, 0x74, 0xe0, 0x58, 0x64, 0xa3, 0x64, 0x0c, 0x64, 0x7f, - 0x77, 0xe0, 0x53, 0x83, 0x30, 0x87, 0x6a, 0x6b, 0x21, 0xce, 0xe7, 0x29, 0x07, 0x82, 0x76, 0x5b, - 0x7d, 0x83, 0x30, 0x87, 0x36, 0x13, 0x74, 0x27, 0x7f, 0xb1, 0xcd, 0xe8, 0xbc, 0x41, 0x41, 0xca, - 0xd3, 0x81, 0x7e, 0x67, 0x3b, 0x3c, 0xb4, 0xf0, 0xde, 0xd1, 0x48, 0x7d, 0x34, 0x18, 0x73, 0x38, - 0x3e, 0x42, 0x81, 0xe4, 0xa9, 0x58, 0xf0, 0xa1, 0x99, 0xa1, 0x72, 0xb7, 0x74, 0xe8, 0x31, 0x77, - 0xd4, 0xfc, 0xed, 0xa3, 0xda, 0xa6, 0xc9, 0x3b, 0x14, 0x2c, 0xb8, 0xd4, 0xf7, 0x25, 0x7e, 0xc3, - 0x6f, 0xdd, 0xee, 0x1c, 0x17, 0xfe, 0x14, 0xb7, 0x69, 0x7d, 0xcb, 0x32, 0x27, 0xe1, 0x0f, 0x08, - 0xe5, 0x5d, 0x27, 0xc9, 0x8c, 0x94, 0x1a, 0x7e, 0xeb, 0xa0, 0xf3, 0xf8, 0x3f, 0xf3, 0xe0, 0x2a, - 0x75, 0xcb, 0xcb, 0x9f, 0x0f, 0x3d, 0xb6, 0x25, 0xe3, 0x13, 0x54, 0x01, 0xbd, 0x3b, 0x64, 0xcf, - 0x54, 0x79, 0x54, 0x18, 0x64, 0x7b, 0xb9, 0xf2, 0x1a, 0xd6, 0x6a, 0xde, 0x45, 0x41, 0x9e, 0x0e, - 0x57, 0x51, 0xa9, 0xff, 0xfc, 0xd0, 0xeb, 0x1e, 0x2f, 0xaf, 0xa9, 0x77, 0x75, 0x4d, 0xbd, 0x6f, - 0x2b, 0xea, 0x2f, 0x57, 0xd4, 0xbf, 0x5c, 0x51, 0xff, 0xd7, 0x8a, 0xfa, 0xdf, 0xd7, 0xd4, 0xbb, - 0x5c, 0x53, 0xef, 0x6a, 0x4d, 0xbd, 0xcf, 0xa5, 0x41, 0xd5, 0x6c, 0xef, 0xcb, 0x3f, 0x01, 0x00, - 0x00, 0xff, 0xff, 0x27, 0xb3, 0xad, 0x75, 0x71, 0x04, 0x00, 0x00, +// Deprecated: Use StoreSnapshot.ProtoReflect.Descriptor instead. +func (*StoreSnapshot) Descriptor() ([]byte, []int) { + return file_api_snapshot_proto_rawDescGZIP(), []int{0} } -func (m *StoreSnapshot) Copy() *StoreSnapshot { - if m == nil { - return nil +func (x *StoreSnapshot) GetNodes() []*Node { + if x != nil { + return x.Nodes } - o := &StoreSnapshot{} - o.CopyFrom(m) - return o + return nil } -func (m *StoreSnapshot) CopyFrom(src interface{}) { - - o := src.(*StoreSnapshot) - *m = *o - if o.Nodes != nil { - m.Nodes = make([]*Node, len(o.Nodes)) - for i := range m.Nodes { - m.Nodes[i] = &Node{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Nodes[i], o.Nodes[i]) - } - } - - if o.Services != nil { - m.Services = make([]*Service, len(o.Services)) - for i := range m.Services { - m.Services[i] = &Service{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Services[i], o.Services[i]) - } - } - - if o.Networks != nil { - m.Networks = make([]*Network, len(o.Networks)) - for i := range m.Networks { - m.Networks[i] = &Network{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Networks[i], o.Networks[i]) - } - } - - if o.Tasks != nil { - m.Tasks = make([]*Task, len(o.Tasks)) - for i := range m.Tasks { - m.Tasks[i] = &Task{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Tasks[i], o.Tasks[i]) - } - } - - if o.Clusters != nil { - m.Clusters = make([]*Cluster, len(o.Clusters)) - for i := range m.Clusters { - m.Clusters[i] = &Cluster{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Clusters[i], o.Clusters[i]) - } +func (x *StoreSnapshot) GetServices() []*Service { + if x != nil { + return x.Services } + return nil +} - if o.Secrets != nil { - m.Secrets = make([]*Secret, len(o.Secrets)) - for i := range m.Secrets { - m.Secrets[i] = &Secret{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Secrets[i], o.Secrets[i]) - } - } - - if o.Resources != nil { - m.Resources = make([]*Resource, len(o.Resources)) - for i := range m.Resources { - m.Resources[i] = &Resource{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Resources[i], o.Resources[i]) - } +func (x *StoreSnapshot) GetNetworks() []*Network { + if x != nil { + return x.Networks } + return nil +} - if o.Extensions != nil { - m.Extensions = make([]*Extension, len(o.Extensions)) - for i := range m.Extensions { - m.Extensions[i] = &Extension{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Extensions[i], o.Extensions[i]) - } +func (x *StoreSnapshot) GetTasks() []*Task { + if x != nil { + return x.Tasks } + return nil +} - if o.Configs != nil { - m.Configs = make([]*Config, len(o.Configs)) - for i := range m.Configs { - m.Configs[i] = &Config{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Configs[i], o.Configs[i]) - } +func (x *StoreSnapshot) GetClusters() []*Cluster { + if x != nil { + return x.Clusters } + return nil +} - if o.Volumes != nil { - m.Volumes = make([]*Volume, len(o.Volumes)) - for i := range m.Volumes { - m.Volumes[i] = &Volume{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Volumes[i], o.Volumes[i]) - } +func (x *StoreSnapshot) GetSecrets() []*Secret { + if x != nil { + return x.Secrets } - + return nil } -func (m *ClusterSnapshot) Copy() *ClusterSnapshot { - if m == nil { - return nil +func (x *StoreSnapshot) GetResources() []*Resource { + if x != nil { + return x.Resources } - o := &ClusterSnapshot{} - o.CopyFrom(m) - return o + return nil } -func (m *ClusterSnapshot) CopyFrom(src interface{}) { - - o := src.(*ClusterSnapshot) - *m = *o - if o.Members != nil { - m.Members = make([]*RaftMember, len(o.Members)) - for i := range m.Members { - m.Members[i] = &RaftMember{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Members[i], o.Members[i]) - } +func (x *StoreSnapshot) GetExtensions() []*Extension { + if x != nil { + return x.Extensions } + return nil +} - if o.Removed != nil { - m.Removed = make([]uint64, len(o.Removed)) - copy(m.Removed, o.Removed) +func (x *StoreSnapshot) GetConfigs() []*Config { + if x != nil { + return x.Configs } - + return nil } -func (m *Snapshot) Copy() *Snapshot { - if m == nil { - return nil +func (x *StoreSnapshot) GetVolumes() []*Volume { + if x != nil { + return x.Volumes } - o := &Snapshot{} - o.CopyFrom(m) - return o + return nil } -func (m *Snapshot) CopyFrom(src interface{}) { - - o := src.(*Snapshot) - *m = *o - github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Membership, &o.Membership) - github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Store, &o.Store) +// ClusterSnapshot stores cluster membership information in snapshots. +type ClusterSnapshot struct { + state protoimpl.MessageState `protogen:"open.v1"` + Members []*RaftMember `protobuf:"bytes,1,rep,name=members,proto3" json:"members,omitempty"` + Removed []uint64 `protobuf:"varint,2,rep,name=removed,proto3" json:"removed,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *StoreSnapshot) 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 (x *ClusterSnapshot) Reset() { + *x = ClusterSnapshot{} + mi := &file_api_snapshot_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *StoreSnapshot) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) +func (x *ClusterSnapshot) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *StoreSnapshot) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Volumes) > 0 { - for iNdEx := len(m.Volumes) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Volumes[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSnapshot(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x52 - } - } - if len(m.Configs) > 0 { - for iNdEx := len(m.Configs) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Configs[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSnapshot(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x4a - } - } - if len(m.Extensions) > 0 { - for iNdEx := len(m.Extensions) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Extensions[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSnapshot(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x42 - } - } - if len(m.Resources) > 0 { - for iNdEx := len(m.Resources) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Resources[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSnapshot(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x3a - } - } - if len(m.Secrets) > 0 { - for iNdEx := len(m.Secrets) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Secrets[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSnapshot(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x32 - } - } - if len(m.Clusters) > 0 { - for iNdEx := len(m.Clusters) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Clusters[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSnapshot(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x2a - } - } - if len(m.Tasks) > 0 { - for iNdEx := len(m.Tasks) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Tasks[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSnapshot(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - } - } - if len(m.Networks) > 0 { - for iNdEx := len(m.Networks) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Networks[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSnapshot(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - } - } - if len(m.Services) > 0 { - for iNdEx := len(m.Services) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Services[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSnapshot(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - } - if len(m.Nodes) > 0 { - for iNdEx := len(m.Nodes) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Nodes[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSnapshot(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} +func (*ClusterSnapshot) ProtoMessage() {} -func (m *ClusterSnapshot) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err +func (x *ClusterSnapshot) ProtoReflect() protoreflect.Message { + mi := &file_api_snapshot_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return dAtA[:n], nil + return mi.MessageOf(x) } -func (m *ClusterSnapshot) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) +// Deprecated: Use ClusterSnapshot.ProtoReflect.Descriptor instead. +func (*ClusterSnapshot) Descriptor() ([]byte, []int) { + return file_api_snapshot_proto_rawDescGZIP(), []int{1} } -func (m *ClusterSnapshot) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Removed) > 0 { - for iNdEx := len(m.Removed) - 1; iNdEx >= 0; iNdEx-- { - i = encodeVarintSnapshot(dAtA, i, uint64(m.Removed[iNdEx])) - i-- - dAtA[i] = 0x10 - } +func (x *ClusterSnapshot) GetMembers() []*RaftMember { + if x != nil { + return x.Members } - if len(m.Members) > 0 { - for iNdEx := len(m.Members) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Members[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSnapshot(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil + return nil } -func (m *Snapshot) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err +func (x *ClusterSnapshot) GetRemoved() []uint64 { + if x != nil { + return x.Removed } - return dAtA[:n], nil + return nil } -func (m *Snapshot) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) +type Snapshot struct { + state protoimpl.MessageState `protogen:"open.v1"` + Version Snapshot_Version `protobuf:"varint,1,opt,name=version,proto3,enum=docker.swarmkit.v1.Snapshot_Version" json:"version,omitempty"` + Membership *ClusterSnapshot `protobuf:"bytes,2,opt,name=membership,proto3" json:"membership,omitempty"` + Store *StoreSnapshot `protobuf:"bytes,3,opt,name=store,proto3" json:"store,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *Snapshot) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size, err := m.Store.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSnapshot(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - { - size, err := m.Membership.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSnapshot(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - if m.Version != 0 { - i = encodeVarintSnapshot(dAtA, i, uint64(m.Version)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil +func (x *Snapshot) Reset() { + *x = Snapshot{} + mi := &file_api_snapshot_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func encodeVarintSnapshot(dAtA []byte, offset int, v uint64) int { - offset -= sovSnapshot(v) - base := offset - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return base -} -func (m *StoreSnapshot) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Nodes) > 0 { - for _, e := range m.Nodes { - l = e.Size() - n += 1 + l + sovSnapshot(uint64(l)) - } - } - if len(m.Services) > 0 { - for _, e := range m.Services { - l = e.Size() - n += 1 + l + sovSnapshot(uint64(l)) - } - } - if len(m.Networks) > 0 { - for _, e := range m.Networks { - l = e.Size() - n += 1 + l + sovSnapshot(uint64(l)) - } - } - if len(m.Tasks) > 0 { - for _, e := range m.Tasks { - l = e.Size() - n += 1 + l + sovSnapshot(uint64(l)) - } - } - if len(m.Clusters) > 0 { - for _, e := range m.Clusters { - l = e.Size() - n += 1 + l + sovSnapshot(uint64(l)) - } - } - if len(m.Secrets) > 0 { - for _, e := range m.Secrets { - l = e.Size() - n += 1 + l + sovSnapshot(uint64(l)) - } - } - if len(m.Resources) > 0 { - for _, e := range m.Resources { - l = e.Size() - n += 1 + l + sovSnapshot(uint64(l)) - } - } - if len(m.Extensions) > 0 { - for _, e := range m.Extensions { - l = e.Size() - n += 1 + l + sovSnapshot(uint64(l)) - } - } - if len(m.Configs) > 0 { - for _, e := range m.Configs { - l = e.Size() - n += 1 + l + sovSnapshot(uint64(l)) - } - } - if len(m.Volumes) > 0 { - for _, e := range m.Volumes { - l = e.Size() - n += 1 + l + sovSnapshot(uint64(l)) - } - } - return n +func (x *Snapshot) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ClusterSnapshot) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Members) > 0 { - for _, e := range m.Members { - l = e.Size() - n += 1 + l + sovSnapshot(uint64(l)) - } - } - if len(m.Removed) > 0 { - for _, e := range m.Removed { - n += 1 + sovSnapshot(uint64(e)) +func (*Snapshot) ProtoMessage() {} + +func (x *Snapshot) ProtoReflect() protoreflect.Message { + mi := &file_api_snapshot_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } + return ms } - return n + return mi.MessageOf(x) } -func (m *Snapshot) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Version != 0 { - n += 1 + sovSnapshot(uint64(m.Version)) - } - l = m.Membership.Size() - n += 1 + l + sovSnapshot(uint64(l)) - l = m.Store.Size() - n += 1 + l + sovSnapshot(uint64(l)) - return n +// Deprecated: Use Snapshot.ProtoReflect.Descriptor instead. +func (*Snapshot) Descriptor() ([]byte, []int) { + return file_api_snapshot_proto_rawDescGZIP(), []int{2} } -func sovSnapshot(x uint64) (n int) { - return (math_bits.Len64(x|1) + 6) / 7 -} -func sozSnapshot(x uint64) (n int) { - return sovSnapshot(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (this *StoreSnapshot) String() string { - if this == nil { - return "nil" - } - repeatedStringForNodes := "[]*Node{" - for _, f := range this.Nodes { - repeatedStringForNodes += strings.Replace(fmt.Sprintf("%v", f), "Node", "Node", 1) + "," - } - repeatedStringForNodes += "}" - repeatedStringForServices := "[]*Service{" - for _, f := range this.Services { - repeatedStringForServices += strings.Replace(fmt.Sprintf("%v", f), "Service", "Service", 1) + "," - } - repeatedStringForServices += "}" - repeatedStringForNetworks := "[]*Network{" - for _, f := range this.Networks { - repeatedStringForNetworks += strings.Replace(fmt.Sprintf("%v", f), "Network", "Network", 1) + "," - } - repeatedStringForNetworks += "}" - repeatedStringForTasks := "[]*Task{" - for _, f := range this.Tasks { - repeatedStringForTasks += strings.Replace(fmt.Sprintf("%v", f), "Task", "Task", 1) + "," - } - repeatedStringForTasks += "}" - repeatedStringForClusters := "[]*Cluster{" - for _, f := range this.Clusters { - repeatedStringForClusters += strings.Replace(fmt.Sprintf("%v", f), "Cluster", "Cluster", 1) + "," +func (x *Snapshot) GetVersion() Snapshot_Version { + if x != nil { + return x.Version } - repeatedStringForClusters += "}" - repeatedStringForSecrets := "[]*Secret{" - for _, f := range this.Secrets { - repeatedStringForSecrets += strings.Replace(fmt.Sprintf("%v", f), "Secret", "Secret", 1) + "," - } - repeatedStringForSecrets += "}" - repeatedStringForResources := "[]*Resource{" - for _, f := range this.Resources { - repeatedStringForResources += strings.Replace(fmt.Sprintf("%v", f), "Resource", "Resource", 1) + "," - } - repeatedStringForResources += "}" - repeatedStringForExtensions := "[]*Extension{" - for _, f := range this.Extensions { - repeatedStringForExtensions += strings.Replace(fmt.Sprintf("%v", f), "Extension", "Extension", 1) + "," - } - repeatedStringForExtensions += "}" - repeatedStringForConfigs := "[]*Config{" - for _, f := range this.Configs { - repeatedStringForConfigs += strings.Replace(fmt.Sprintf("%v", f), "Config", "Config", 1) + "," - } - repeatedStringForConfigs += "}" - repeatedStringForVolumes := "[]*Volume{" - for _, f := range this.Volumes { - repeatedStringForVolumes += strings.Replace(fmt.Sprintf("%v", f), "Volume", "Volume", 1) + "," - } - repeatedStringForVolumes += "}" - s := strings.Join([]string{`&StoreSnapshot{`, - `Nodes:` + repeatedStringForNodes + `,`, - `Services:` + repeatedStringForServices + `,`, - `Networks:` + repeatedStringForNetworks + `,`, - `Tasks:` + repeatedStringForTasks + `,`, - `Clusters:` + repeatedStringForClusters + `,`, - `Secrets:` + repeatedStringForSecrets + `,`, - `Resources:` + repeatedStringForResources + `,`, - `Extensions:` + repeatedStringForExtensions + `,`, - `Configs:` + repeatedStringForConfigs + `,`, - `Volumes:` + repeatedStringForVolumes + `,`, - `}`, - }, "") - return s + return Snapshot_V0 } -func (this *ClusterSnapshot) String() string { - if this == nil { - return "nil" - } - repeatedStringForMembers := "[]*RaftMember{" - for _, f := range this.Members { - repeatedStringForMembers += strings.Replace(fmt.Sprintf("%v", f), "RaftMember", "RaftMember", 1) + "," - } - repeatedStringForMembers += "}" - s := strings.Join([]string{`&ClusterSnapshot{`, - `Members:` + repeatedStringForMembers + `,`, - `Removed:` + fmt.Sprintf("%v", this.Removed) + `,`, - `}`, - }, "") - return s -} -func (this *Snapshot) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&Snapshot{`, - `Version:` + fmt.Sprintf("%v", this.Version) + `,`, - `Membership:` + strings.Replace(strings.Replace(this.Membership.String(), "ClusterSnapshot", "ClusterSnapshot", 1), `&`, ``, 1) + `,`, - `Store:` + strings.Replace(strings.Replace(this.Store.String(), "StoreSnapshot", "StoreSnapshot", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s -} -func valueToStringSnapshot(v interface{}) string { - rv := reflect.ValueOf(v) - if rv.IsNil() { - return "nil" - } - pv := reflect.Indirect(rv).Interface() - return fmt.Sprintf("*%v", pv) -} -func (m *StoreSnapshot) 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 ErrIntOverflowSnapshot - } - 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: StoreSnapshot: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: StoreSnapshot: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Nodes", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSnapshot - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSnapshot - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSnapshot - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Nodes = append(m.Nodes, &Node{}) - if err := m.Nodes[len(m.Nodes)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Services", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSnapshot - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSnapshot - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSnapshot - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Services = append(m.Services, &Service{}) - if err := m.Services[len(m.Services)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Networks", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSnapshot - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSnapshot - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSnapshot - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Networks = append(m.Networks, &Network{}) - if err := m.Networks[len(m.Networks)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Tasks", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSnapshot - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSnapshot - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSnapshot - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Tasks = append(m.Tasks, &Task{}) - if err := m.Tasks[len(m.Tasks)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Clusters", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSnapshot - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSnapshot - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSnapshot - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Clusters = append(m.Clusters, &Cluster{}) - if err := m.Clusters[len(m.Clusters)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Secrets", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSnapshot - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSnapshot - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSnapshot - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Secrets = append(m.Secrets, &Secret{}) - if err := m.Secrets[len(m.Secrets)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Resources", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSnapshot - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSnapshot - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSnapshot - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Resources = append(m.Resources, &Resource{}) - if err := m.Resources[len(m.Resources)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 8: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Extensions", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSnapshot - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSnapshot - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSnapshot - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Extensions = append(m.Extensions, &Extension{}) - if err := m.Extensions[len(m.Extensions)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 9: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Configs", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSnapshot - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSnapshot - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSnapshot - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Configs = append(m.Configs, &Config{}) - if err := m.Configs[len(m.Configs)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 10: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Volumes", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSnapshot - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSnapshot - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSnapshot - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Volumes = append(m.Volumes, &Volume{}) - if err := m.Volumes[len(m.Volumes)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipSnapshot(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthSnapshot - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - if iNdEx > l { - return io.ErrUnexpectedEOF +func (x *Snapshot) GetMembership() *ClusterSnapshot { + if x != nil { + return x.Membership } return nil } -func (m *ClusterSnapshot) 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 ErrIntOverflowSnapshot - } - 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: ClusterSnapshot: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ClusterSnapshot: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Members", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSnapshot - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSnapshot - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSnapshot - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Members = append(m.Members, &RaftMember{}) - if err := m.Members[len(m.Members)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType == 0 { - var v uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSnapshot - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.Removed = append(m.Removed, v) - } else if wireType == 2 { - var packedLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSnapshot - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - packedLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if packedLen < 0 { - return ErrInvalidLengthSnapshot - } - postIndex := iNdEx + packedLen - if postIndex < 0 { - return ErrInvalidLengthSnapshot - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - var elementCount int - var count int - for _, integer := range dAtA[iNdEx:postIndex] { - if integer < 128 { - count++ - } - } - elementCount = count - if elementCount != 0 && len(m.Removed) == 0 { - m.Removed = make([]uint64, 0, elementCount) - } - for iNdEx < postIndex { - var v uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSnapshot - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.Removed = append(m.Removed, v) - } - } else { - return fmt.Errorf("proto: wrong wireType = %d for field Removed", wireType) - } - default: - iNdEx = preIndex - skippy, err := skipSnapshot(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthSnapshot - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - if iNdEx > l { - return io.ErrUnexpectedEOF +func (x *Snapshot) GetStore() *StoreSnapshot { + if x != nil { + return x.Store } return nil } -func (m *Snapshot) 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 ErrIntOverflowSnapshot - } - 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: Snapshot: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Snapshot: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) - } - m.Version = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSnapshot - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Version |= Snapshot_Version(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Membership", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSnapshot - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSnapshot - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSnapshot - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Membership.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Store", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSnapshot - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSnapshot - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSnapshot - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Store.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipSnapshot(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthSnapshot - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipSnapshot(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - depth := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowSnapshot - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowSnapshot - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - case 1: - iNdEx += 8 - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowSnapshot - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLengthSnapshot - } - iNdEx += length - case 3: - depth++ - case 4: - if depth == 0 { - return 0, ErrUnexpectedEndOfGroupSnapshot - } - depth-- - case 5: - iNdEx += 4 - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - if iNdEx < 0 { - return 0, ErrInvalidLengthSnapshot - } - if depth == 0 { - return iNdEx, nil - } - } - return 0, io.ErrUnexpectedEOF -} +var File_api_snapshot_proto protoreflect.FileDescriptor + +const file_api_snapshot_proto_rawDesc = "" + + "\n" + + "\x12api/snapshot.proto\x12\x12docker.swarmkit.v1\x1a\x11api/objects.proto\x1a\x0eapi/raft.proto\"\xb7\x04\n" + + "\rStoreSnapshot\x12.\n" + + "\x05nodes\x18\x01 \x03(\v2\x18.docker.swarmkit.v1.NodeR\x05nodes\x127\n" + + "\bservices\x18\x02 \x03(\v2\x1b.docker.swarmkit.v1.ServiceR\bservices\x127\n" + + "\bnetworks\x18\x03 \x03(\v2\x1b.docker.swarmkit.v1.NetworkR\bnetworks\x12.\n" + + "\x05tasks\x18\x04 \x03(\v2\x18.docker.swarmkit.v1.TaskR\x05tasks\x127\n" + + "\bclusters\x18\x05 \x03(\v2\x1b.docker.swarmkit.v1.ClusterR\bclusters\x124\n" + + "\asecrets\x18\x06 \x03(\v2\x1a.docker.swarmkit.v1.SecretR\asecrets\x12:\n" + + "\tresources\x18\a \x03(\v2\x1c.docker.swarmkit.v1.ResourceR\tresources\x12=\n" + + "\n" + + "extensions\x18\b \x03(\v2\x1d.docker.swarmkit.v1.ExtensionR\n" + + "extensions\x124\n" + + "\aconfigs\x18\t \x03(\v2\x1a.docker.swarmkit.v1.ConfigR\aconfigs\x124\n" + + "\avolumes\x18\n" + + " \x03(\v2\x1a.docker.swarmkit.v1.VolumeR\avolumes\"i\n" + + "\x0fClusterSnapshot\x128\n" + + "\amembers\x18\x01 \x03(\v2\x1e.docker.swarmkit.v1.RaftMemberR\amembers\x12\x1c\n" + + "\aremoved\x18\x02 \x03(\x04B\x02\x10\x00R\aremoved\"\xdb\x01\n" + + "\bSnapshot\x12>\n" + + "\aversion\x18\x01 \x01(\x0e2$.docker.swarmkit.v1.Snapshot.VersionR\aversion\x12C\n" + + "\n" + + "membership\x18\x02 \x01(\v2#.docker.swarmkit.v1.ClusterSnapshotR\n" + + "membership\x127\n" + + "\x05store\x18\x03 \x01(\v2!.docker.swarmkit.v1.StoreSnapshotR\x05store\"\x11\n" + + "\aVersion\x12\x06\n" + + "\x02V0\x10\x00B!Z\x1fgithub.com/moby/swarmkit/v2/apib\x06proto3" var ( - ErrInvalidLengthSnapshot = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowSnapshot = fmt.Errorf("proto: integer overflow") - ErrUnexpectedEndOfGroupSnapshot = fmt.Errorf("proto: unexpected end of group") + file_api_snapshot_proto_rawDescOnce sync.Once + file_api_snapshot_proto_rawDescData []byte ) + +func file_api_snapshot_proto_rawDescGZIP() []byte { + file_api_snapshot_proto_rawDescOnce.Do(func() { + file_api_snapshot_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_api_snapshot_proto_rawDesc), len(file_api_snapshot_proto_rawDesc))) + }) + return file_api_snapshot_proto_rawDescData +} + +var file_api_snapshot_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_api_snapshot_proto_msgTypes = make([]protoimpl.MessageInfo, 3) +var file_api_snapshot_proto_goTypes = []any{ + (Snapshot_Version)(0), // 0: docker.swarmkit.v1.Snapshot.Version + (*StoreSnapshot)(nil), // 1: docker.swarmkit.v1.StoreSnapshot + (*ClusterSnapshot)(nil), // 2: docker.swarmkit.v1.ClusterSnapshot + (*Snapshot)(nil), // 3: docker.swarmkit.v1.Snapshot + (*Node)(nil), // 4: docker.swarmkit.v1.Node + (*Service)(nil), // 5: docker.swarmkit.v1.Service + (*Network)(nil), // 6: docker.swarmkit.v1.Network + (*Task)(nil), // 7: docker.swarmkit.v1.Task + (*Cluster)(nil), // 8: docker.swarmkit.v1.Cluster + (*Secret)(nil), // 9: docker.swarmkit.v1.Secret + (*Resource)(nil), // 10: docker.swarmkit.v1.Resource + (*Extension)(nil), // 11: docker.swarmkit.v1.Extension + (*Config)(nil), // 12: docker.swarmkit.v1.Config + (*Volume)(nil), // 13: docker.swarmkit.v1.Volume + (*RaftMember)(nil), // 14: docker.swarmkit.v1.RaftMember +} +var file_api_snapshot_proto_depIdxs = []int32{ + 4, // 0: docker.swarmkit.v1.StoreSnapshot.nodes:type_name -> docker.swarmkit.v1.Node + 5, // 1: docker.swarmkit.v1.StoreSnapshot.services:type_name -> docker.swarmkit.v1.Service + 6, // 2: docker.swarmkit.v1.StoreSnapshot.networks:type_name -> docker.swarmkit.v1.Network + 7, // 3: docker.swarmkit.v1.StoreSnapshot.tasks:type_name -> docker.swarmkit.v1.Task + 8, // 4: docker.swarmkit.v1.StoreSnapshot.clusters:type_name -> docker.swarmkit.v1.Cluster + 9, // 5: docker.swarmkit.v1.StoreSnapshot.secrets:type_name -> docker.swarmkit.v1.Secret + 10, // 6: docker.swarmkit.v1.StoreSnapshot.resources:type_name -> docker.swarmkit.v1.Resource + 11, // 7: docker.swarmkit.v1.StoreSnapshot.extensions:type_name -> docker.swarmkit.v1.Extension + 12, // 8: docker.swarmkit.v1.StoreSnapshot.configs:type_name -> docker.swarmkit.v1.Config + 13, // 9: docker.swarmkit.v1.StoreSnapshot.volumes:type_name -> docker.swarmkit.v1.Volume + 14, // 10: docker.swarmkit.v1.ClusterSnapshot.members:type_name -> docker.swarmkit.v1.RaftMember + 0, // 11: docker.swarmkit.v1.Snapshot.version:type_name -> docker.swarmkit.v1.Snapshot.Version + 2, // 12: docker.swarmkit.v1.Snapshot.membership:type_name -> docker.swarmkit.v1.ClusterSnapshot + 1, // 13: docker.swarmkit.v1.Snapshot.store:type_name -> docker.swarmkit.v1.StoreSnapshot + 14, // [14:14] is the sub-list for method output_type + 14, // [14:14] 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_api_snapshot_proto_init() } +func file_api_snapshot_proto_init() { + if File_api_snapshot_proto != nil { + return + } + file_api_objects_proto_init() + file_api_raft_proto_init() + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_api_snapshot_proto_rawDesc), len(file_api_snapshot_proto_rawDesc)), + NumEnums: 1, + NumMessages: 3, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_api_snapshot_proto_goTypes, + DependencyIndexes: file_api_snapshot_proto_depIdxs, + EnumInfos: file_api_snapshot_proto_enumTypes, + MessageInfos: file_api_snapshot_proto_msgTypes, + }.Build() + File_api_snapshot_proto = out.File + file_api_snapshot_proto_goTypes = nil + file_api_snapshot_proto_depIdxs = nil +} diff --git a/api/snapshot.proto b/api/snapshot.proto index 42dc0b5c38..870643fb58 100644 --- a/api/snapshot.proto +++ b/api/snapshot.proto @@ -2,9 +2,11 @@ syntax = "proto3"; package docker.swarmkit.v1; -import "github.com/docker/swarmkit/api/objects.proto"; -import "github.com/docker/swarmkit/api/raft.proto"; -import weak "gogoproto/gogo.proto"; +option go_package = "github.com/moby/swarmkit/v2/api"; + +import "api/objects.proto"; +import "api/raft.proto"; + // StoreSnapshot is used to store snapshots of the store. message StoreSnapshot { @@ -40,6 +42,6 @@ message Snapshot { Version version = 1; - ClusterSnapshot membership = 2 [(gogoproto.nullable) = false]; - StoreSnapshot store = 3 [(gogoproto.nullable) = false]; + ClusterSnapshot membership = 2; + StoreSnapshot store = 3; } diff --git a/api/specs.pb.deepcopy.go b/api/specs.pb.deepcopy.go new file mode 100644 index 0000000000..8e6a1fc468 --- /dev/null +++ b/api/specs.pb.deepcopy.go @@ -0,0 +1,713 @@ +// Code generated by protoc-gen-goswarm. DO NOT EDIT. + +package api + +import ( + deepcopy "github.com/moby/swarmkit/v2/api/deepcopy" + anypb "google.golang.org/protobuf/types/known/anypb" + durationpb "google.golang.org/protobuf/types/known/durationpb" + wrapperspb "google.golang.org/protobuf/types/known/wrapperspb" +) + +func (m *NodeSpec) Copy() *NodeSpec { + if m == nil { + return nil + } + o := &NodeSpec{} + o.CopyFrom(m) + return o +} + +func (m *NodeSpec) CopyFrom(src interface{}) { + + o := src.(*NodeSpec) + if o.Annotations != nil { + m.Annotations = &Annotations{} + deepcopy.Copy(m.Annotations, o.Annotations) + } + + m.DesiredRole = o.DesiredRole + m.Membership = o.Membership + m.Availability = o.Availability +} + +func (m *ServiceSpec) Copy() *ServiceSpec { + if m == nil { + return nil + } + o := &ServiceSpec{} + o.CopyFrom(m) + return o +} + +func (m *ServiceSpec) CopyFrom(src interface{}) { + + o := src.(*ServiceSpec) + if o.Annotations != nil { + m.Annotations = &Annotations{} + deepcopy.Copy(m.Annotations, o.Annotations) + } + + if o.Task != nil { + m.Task = &TaskSpec{} + deepcopy.Copy(m.Task, o.Task) + } + + if o.Update != nil { + m.Update = &UpdateConfig{} + deepcopy.Copy(m.Update, o.Update) + } + + if o.Rollback != nil { + m.Rollback = &UpdateConfig{} + deepcopy.Copy(m.Rollback, o.Rollback) + } + + if o.Networks != nil { + m.Networks = make([]*NetworkAttachmentConfig, len(o.Networks)) + for i := range m.Networks { + m.Networks[i] = &NetworkAttachmentConfig{} + deepcopy.Copy(m.Networks[i], o.Networks[i]) + } + } + + if o.Endpoint != nil { + m.Endpoint = &EndpointSpec{} + deepcopy.Copy(m.Endpoint, o.Endpoint) + } + + if o.Mode != nil { + switch o.Mode.(type) { + case *ServiceSpec_Replicated: + v := ServiceSpec_Replicated{ + Replicated: &ReplicatedService{}, + } + deepcopy.Copy(v.Replicated, o.GetReplicated()) + m.Mode = &v + case *ServiceSpec_Global: + v := ServiceSpec_Global{ + Global: &GlobalService{}, + } + deepcopy.Copy(v.Global, o.GetGlobal()) + m.Mode = &v + case *ServiceSpec_ReplicatedJob: + v := ServiceSpec_ReplicatedJob{ + ReplicatedJob: &ReplicatedJob{}, + } + deepcopy.Copy(v.ReplicatedJob, o.GetReplicatedJob()) + m.Mode = &v + case *ServiceSpec_GlobalJob: + v := ServiceSpec_GlobalJob{ + GlobalJob: &GlobalJob{}, + } + deepcopy.Copy(v.GlobalJob, o.GetGlobalJob()) + m.Mode = &v + } + } + +} + +func (m *ReplicatedService) Copy() *ReplicatedService { + if m == nil { + return nil + } + o := &ReplicatedService{} + o.CopyFrom(m) + return o +} + +func (m *ReplicatedService) CopyFrom(src interface{}) { + + o := src.(*ReplicatedService) + m.Replicas = o.Replicas +} + +func (m *GlobalService) Copy() *GlobalService { + if m == nil { + return nil + } + o := &GlobalService{} + o.CopyFrom(m) + return o +} + +func (m *GlobalService) CopyFrom(src interface{}) {} + +func (m *ReplicatedJob) Copy() *ReplicatedJob { + if m == nil { + return nil + } + o := &ReplicatedJob{} + o.CopyFrom(m) + return o +} + +func (m *ReplicatedJob) CopyFrom(src interface{}) { + + o := src.(*ReplicatedJob) + m.MaxConcurrent = o.MaxConcurrent + m.TotalCompletions = o.TotalCompletions +} + +func (m *GlobalJob) Copy() *GlobalJob { + if m == nil { + return nil + } + o := &GlobalJob{} + o.CopyFrom(m) + return o +} + +func (m *GlobalJob) CopyFrom(src interface{}) {} + +func (m *TaskSpec) Copy() *TaskSpec { + if m == nil { + return nil + } + o := &TaskSpec{} + o.CopyFrom(m) + return o +} + +func (m *TaskSpec) CopyFrom(src interface{}) { + + o := src.(*TaskSpec) + if o.Resources != nil { + m.Resources = &ResourceRequirements{} + deepcopy.Copy(m.Resources, o.Resources) + } + + if o.Restart != nil { + m.Restart = &RestartPolicy{} + deepcopy.Copy(m.Restart, o.Restart) + } + + if o.Placement != nil { + m.Placement = &Placement{} + deepcopy.Copy(m.Placement, o.Placement) + } + + if o.LogDriver != nil { + m.LogDriver = &Driver{} + deepcopy.Copy(m.LogDriver, o.LogDriver) + } + + if o.Networks != nil { + m.Networks = make([]*NetworkAttachmentConfig, len(o.Networks)) + for i := range m.Networks { + m.Networks[i] = &NetworkAttachmentConfig{} + deepcopy.Copy(m.Networks[i], o.Networks[i]) + } + } + + m.ForceUpdate = o.ForceUpdate + if o.ResourceReferences != nil { + m.ResourceReferences = make([]*ResourceReference, len(o.ResourceReferences)) + for i := range m.ResourceReferences { + m.ResourceReferences[i] = &ResourceReference{} + deepcopy.Copy(m.ResourceReferences[i], o.ResourceReferences[i]) + } + } + + if o.Runtime != nil { + switch o.Runtime.(type) { + case *TaskSpec_Attachment: + v := TaskSpec_Attachment{ + Attachment: &NetworkAttachmentSpec{}, + } + deepcopy.Copy(v.Attachment, o.GetAttachment()) + m.Runtime = &v + case *TaskSpec_Container: + v := TaskSpec_Container{ + Container: &ContainerSpec{}, + } + deepcopy.Copy(v.Container, o.GetContainer()) + m.Runtime = &v + case *TaskSpec_Generic: + v := TaskSpec_Generic{ + Generic: &GenericRuntimeSpec{}, + } + deepcopy.Copy(v.Generic, o.GetGeneric()) + m.Runtime = &v + } + } + +} + +func (m *ResourceReference) Copy() *ResourceReference { + if m == nil { + return nil + } + o := &ResourceReference{} + o.CopyFrom(m) + return o +} + +func (m *ResourceReference) CopyFrom(src interface{}) { + + o := src.(*ResourceReference) + m.ResourceID = o.ResourceID + m.ResourceType = o.ResourceType +} + +func (m *GenericRuntimeSpec) Copy() *GenericRuntimeSpec { + if m == nil { + return nil + } + o := &GenericRuntimeSpec{} + o.CopyFrom(m) + return o +} + +func (m *GenericRuntimeSpec) CopyFrom(src interface{}) { + + o := src.(*GenericRuntimeSpec) + m.Kind = o.Kind + if o.Payload != nil { + m.Payload = &anypb.Any{} + deepcopy.Copy(m.Payload, o.Payload) + } + +} + +func (m *NetworkAttachmentSpec) Copy() *NetworkAttachmentSpec { + if m == nil { + return nil + } + o := &NetworkAttachmentSpec{} + o.CopyFrom(m) + return o +} + +func (m *NetworkAttachmentSpec) CopyFrom(src interface{}) { + + o := src.(*NetworkAttachmentSpec) + m.ContainerID = o.ContainerID +} + +func (m *ContainerSpec) Copy() *ContainerSpec { + if m == nil { + return nil + } + o := &ContainerSpec{} + o.CopyFrom(m) + return o +} + +func (m *ContainerSpec) CopyFrom(src interface{}) { + + o := src.(*ContainerSpec) + m.Image = o.Image + if o.Labels != nil { + m.Labels = make(map[string]string, len(o.Labels)) + for k, v := range o.Labels { + m.Labels[k] = v + } + } + + if o.Command != nil { + m.Command = make([]string, len(o.Command)) + copy(m.Command, o.Command) + } + + if o.Args != nil { + m.Args = make([]string, len(o.Args)) + copy(m.Args, o.Args) + } + + m.Hostname = o.Hostname + if o.Env != nil { + m.Env = make([]string, len(o.Env)) + copy(m.Env, o.Env) + } + + m.Dir = o.Dir + m.User = o.User + if o.Groups != nil { + m.Groups = make([]string, len(o.Groups)) + copy(m.Groups, o.Groups) + } + + if o.Privileges != nil { + m.Privileges = &Privileges{} + deepcopy.Copy(m.Privileges, o.Privileges) + } + + if o.Init != nil { + m.Init = &wrapperspb.BoolValue{} + deepcopy.Copy(m.Init, o.Init) + } + + m.TTY = o.TTY + m.OpenStdin = o.OpenStdin + m.ReadOnly = o.ReadOnly + m.StopSignal = o.StopSignal + if o.Mounts != nil { + m.Mounts = make([]*Mount, len(o.Mounts)) + for i := range m.Mounts { + m.Mounts[i] = &Mount{} + deepcopy.Copy(m.Mounts[i], o.Mounts[i]) + } + } + + if o.StopGracePeriod != nil { + m.StopGracePeriod = &durationpb.Duration{} + deepcopy.Copy(m.StopGracePeriod, o.StopGracePeriod) + } + + if o.PullOptions != nil { + m.PullOptions = &ContainerSpec_PullOptions{} + deepcopy.Copy(m.PullOptions, o.PullOptions) + } + + if o.Secrets != nil { + m.Secrets = make([]*SecretReference, len(o.Secrets)) + for i := range m.Secrets { + m.Secrets[i] = &SecretReference{} + deepcopy.Copy(m.Secrets[i], o.Secrets[i]) + } + } + + if o.Configs != nil { + m.Configs = make([]*ConfigReference, len(o.Configs)) + for i := range m.Configs { + m.Configs[i] = &ConfigReference{} + deepcopy.Copy(m.Configs[i], o.Configs[i]) + } + } + + if o.Hosts != nil { + m.Hosts = make([]string, len(o.Hosts)) + copy(m.Hosts, o.Hosts) + } + + if o.DNSConfig != nil { + m.DNSConfig = &ContainerSpec_DNSConfig{} + deepcopy.Copy(m.DNSConfig, o.DNSConfig) + } + + if o.Healthcheck != nil { + m.Healthcheck = &HealthConfig{} + deepcopy.Copy(m.Healthcheck, o.Healthcheck) + } + + m.Isolation = o.Isolation + m.PidsLimit = o.PidsLimit + if o.Sysctls != nil { + m.Sysctls = make(map[string]string, len(o.Sysctls)) + for k, v := range o.Sysctls { + m.Sysctls[k] = v + } + } + + if o.CapabilityAdd != nil { + m.CapabilityAdd = make([]string, len(o.CapabilityAdd)) + copy(m.CapabilityAdd, o.CapabilityAdd) + } + + if o.CapabilityDrop != nil { + m.CapabilityDrop = make([]string, len(o.CapabilityDrop)) + copy(m.CapabilityDrop, o.CapabilityDrop) + } + + if o.Ulimits != nil { + m.Ulimits = make([]*ContainerSpec_Ulimit, len(o.Ulimits)) + for i := range m.Ulimits { + m.Ulimits[i] = &ContainerSpec_Ulimit{} + deepcopy.Copy(m.Ulimits[i], o.Ulimits[i]) + } + } + + m.OomScoreAdj = o.OomScoreAdj +} + +func (m *ContainerSpec_PullOptions) Copy() *ContainerSpec_PullOptions { + if m == nil { + return nil + } + o := &ContainerSpec_PullOptions{} + o.CopyFrom(m) + return o +} + +func (m *ContainerSpec_PullOptions) CopyFrom(src interface{}) { + + o := src.(*ContainerSpec_PullOptions) + m.RegistryAuth = o.RegistryAuth +} + +func (m *ContainerSpec_DNSConfig) Copy() *ContainerSpec_DNSConfig { + if m == nil { + return nil + } + o := &ContainerSpec_DNSConfig{} + o.CopyFrom(m) + return o +} + +func (m *ContainerSpec_DNSConfig) CopyFrom(src interface{}) { + + o := src.(*ContainerSpec_DNSConfig) + if o.Nameservers != nil { + m.Nameservers = make([]string, len(o.Nameservers)) + copy(m.Nameservers, o.Nameservers) + } + + if o.Search != nil { + m.Search = make([]string, len(o.Search)) + copy(m.Search, o.Search) + } + + if o.Options != nil { + m.Options = make([]string, len(o.Options)) + copy(m.Options, o.Options) + } + +} + +func (m *ContainerSpec_Ulimit) Copy() *ContainerSpec_Ulimit { + if m == nil { + return nil + } + o := &ContainerSpec_Ulimit{} + o.CopyFrom(m) + return o +} + +func (m *ContainerSpec_Ulimit) CopyFrom(src interface{}) { + + o := src.(*ContainerSpec_Ulimit) + m.Name = o.Name + m.Soft = o.Soft + m.Hard = o.Hard +} + +func (m *EndpointSpec) Copy() *EndpointSpec { + if m == nil { + return nil + } + o := &EndpointSpec{} + o.CopyFrom(m) + return o +} + +func (m *EndpointSpec) CopyFrom(src interface{}) { + + o := src.(*EndpointSpec) + m.Mode = o.Mode + if o.Ports != nil { + m.Ports = make([]*PortConfig, len(o.Ports)) + for i := range m.Ports { + m.Ports[i] = &PortConfig{} + deepcopy.Copy(m.Ports[i], o.Ports[i]) + } + } + +} + +func (m *NetworkSpec) Copy() *NetworkSpec { + if m == nil { + return nil + } + o := &NetworkSpec{} + o.CopyFrom(m) + return o +} + +func (m *NetworkSpec) CopyFrom(src interface{}) { + + o := src.(*NetworkSpec) + if o.Annotations != nil { + m.Annotations = &Annotations{} + deepcopy.Copy(m.Annotations, o.Annotations) + } + + if o.DriverConfig != nil { + m.DriverConfig = &Driver{} + deepcopy.Copy(m.DriverConfig, o.DriverConfig) + } + + m.Ipv6Enabled = o.Ipv6Enabled + m.Internal = o.Internal + if o.IPAM != nil { + m.IPAM = &IPAMOptions{} + deepcopy.Copy(m.IPAM, o.IPAM) + } + + m.Attachable = o.Attachable + m.Ingress = o.Ingress + if o.ConfigFrom != nil { + switch o.ConfigFrom.(type) { + case *NetworkSpec_Network: + v := NetworkSpec_Network{Network: o.GetNetwork()} + m.ConfigFrom = &v + } + } + +} + +func (m *ClusterSpec) Copy() *ClusterSpec { + if m == nil { + return nil + } + o := &ClusterSpec{} + o.CopyFrom(m) + return o +} + +func (m *ClusterSpec) CopyFrom(src interface{}) { + + o := src.(*ClusterSpec) + if o.Annotations != nil { + m.Annotations = &Annotations{} + deepcopy.Copy(m.Annotations, o.Annotations) + } + + if o.AcceptancePolicy != nil { + m.AcceptancePolicy = &AcceptancePolicy{} + deepcopy.Copy(m.AcceptancePolicy, o.AcceptancePolicy) + } + + if o.Orchestration != nil { + m.Orchestration = &OrchestrationConfig{} + deepcopy.Copy(m.Orchestration, o.Orchestration) + } + + if o.Raft != nil { + m.Raft = &RaftConfig{} + deepcopy.Copy(m.Raft, o.Raft) + } + + if o.Dispatcher != nil { + m.Dispatcher = &DispatcherConfig{} + deepcopy.Copy(m.Dispatcher, o.Dispatcher) + } + + if o.CAConfig != nil { + m.CAConfig = &CAConfig{} + deepcopy.Copy(m.CAConfig, o.CAConfig) + } + + if o.TaskDefaults != nil { + m.TaskDefaults = &TaskDefaults{} + deepcopy.Copy(m.TaskDefaults, o.TaskDefaults) + } + + if o.EncryptionConfig != nil { + m.EncryptionConfig = &EncryptionConfig{} + deepcopy.Copy(m.EncryptionConfig, o.EncryptionConfig) + } + +} + +func (m *SecretSpec) Copy() *SecretSpec { + if m == nil { + return nil + } + o := &SecretSpec{} + o.CopyFrom(m) + return o +} + +func (m *SecretSpec) CopyFrom(src interface{}) { + + o := src.(*SecretSpec) + if o.Annotations != nil { + m.Annotations = &Annotations{} + deepcopy.Copy(m.Annotations, o.Annotations) + } + + if o.Data != nil { + m.Data = make([]byte, len(o.Data)) + copy(m.Data, o.Data) + } + + if o.Templating != nil { + m.Templating = &Driver{} + deepcopy.Copy(m.Templating, o.Templating) + } + + if o.Driver != nil { + m.Driver = &Driver{} + deepcopy.Copy(m.Driver, o.Driver) + } + +} + +func (m *ConfigSpec) Copy() *ConfigSpec { + if m == nil { + return nil + } + o := &ConfigSpec{} + o.CopyFrom(m) + return o +} + +func (m *ConfigSpec) CopyFrom(src interface{}) { + + o := src.(*ConfigSpec) + if o.Annotations != nil { + m.Annotations = &Annotations{} + deepcopy.Copy(m.Annotations, o.Annotations) + } + + if o.Data != nil { + m.Data = make([]byte, len(o.Data)) + copy(m.Data, o.Data) + } + + if o.Templating != nil { + m.Templating = &Driver{} + deepcopy.Copy(m.Templating, o.Templating) + } + +} + +func (m *VolumeSpec) Copy() *VolumeSpec { + if m == nil { + return nil + } + o := &VolumeSpec{} + o.CopyFrom(m) + return o +} + +func (m *VolumeSpec) CopyFrom(src interface{}) { + + o := src.(*VolumeSpec) + if o.Annotations != nil { + m.Annotations = &Annotations{} + deepcopy.Copy(m.Annotations, o.Annotations) + } + + m.Group = o.Group + if o.Driver != nil { + m.Driver = &Driver{} + deepcopy.Copy(m.Driver, o.Driver) + } + + if o.AccessMode != nil { + m.AccessMode = &VolumeAccessMode{} + deepcopy.Copy(m.AccessMode, o.AccessMode) + } + + if o.Secrets != nil { + m.Secrets = make([]*VolumeSecret, len(o.Secrets)) + for i := range m.Secrets { + m.Secrets[i] = &VolumeSecret{} + deepcopy.Copy(m.Secrets[i], o.Secrets[i]) + } + } + + if o.AccessibilityRequirements != nil { + m.AccessibilityRequirements = &TopologyRequirement{} + deepcopy.Copy(m.AccessibilityRequirements, o.AccessibilityRequirements) + } + + if o.CapacityRange != nil { + m.CapacityRange = &CapacityRange{} + deepcopy.Copy(m.CapacityRange, o.CapacityRange) + } + + m.Availability = o.Availability +} diff --git a/api/specs.pb.go b/api/specs.pb.go index 959749c9f0..4bd24326cb 100644 --- a/api/specs.pb.go +++ b/api/specs.pb.go @@ -1,32 +1,29 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: github.com/docker/swarmkit/api/specs.proto +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.11 +// protoc v3.21.12 +// source: api/specs.proto package api import ( - fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" - github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" - types "github.com/gogo/protobuf/types" - github_com_moby_swarmkit_v2_api_deepcopy "github.com/moby/swarmkit/v2/api/deepcopy" - io "io" - math "math" - math_bits "math/bits" + _ "github.com/moby/swarmkit/v2/protobuf/plugin" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + anypb "google.golang.org/protobuf/types/known/anypb" + durationpb "google.golang.org/protobuf/types/known/durationpb" + wrapperspb "google.golang.org/protobuf/types/known/wrapperspb" reflect "reflect" - strings "strings" + sync "sync" + unsafe "unsafe" ) -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package +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 NodeSpec_Membership int32 @@ -35,22 +32,43 @@ const ( NodeMembershipAccepted NodeSpec_Membership = 1 ) -var NodeSpec_Membership_name = map[int32]string{ - 0: "PENDING", - 1: "ACCEPTED", -} +// Enum value maps for NodeSpec_Membership. +var ( + NodeSpec_Membership_name = map[int32]string{ + 0: "PENDING", + 1: "ACCEPTED", + } + NodeSpec_Membership_value = map[string]int32{ + "PENDING": 0, + "ACCEPTED": 1, + } +) -var NodeSpec_Membership_value = map[string]int32{ - "PENDING": 0, - "ACCEPTED": 1, +func (x NodeSpec_Membership) Enum() *NodeSpec_Membership { + p := new(NodeSpec_Membership) + *p = x + return p } func (x NodeSpec_Membership) String() string { - return proto.EnumName(NodeSpec_Membership_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } +func (NodeSpec_Membership) Descriptor() protoreflect.EnumDescriptor { + return file_api_specs_proto_enumTypes[0].Descriptor() +} + +func (NodeSpec_Membership) Type() protoreflect.EnumType { + return &file_api_specs_proto_enumTypes[0] +} + +func (x NodeSpec_Membership) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use NodeSpec_Membership.Descriptor instead. func (NodeSpec_Membership) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_6589acc608f7d4fd, []int{0, 0} + return file_api_specs_proto_rawDescGZIP(), []int{0, 0} } type NodeSpec_Availability int32 @@ -66,24 +84,45 @@ const ( NodeAvailabilityDrain NodeSpec_Availability = 2 ) -var NodeSpec_Availability_name = map[int32]string{ - 0: "ACTIVE", - 1: "PAUSE", - 2: "DRAIN", -} +// Enum value maps for NodeSpec_Availability. +var ( + NodeSpec_Availability_name = map[int32]string{ + 0: "ACTIVE", + 1: "PAUSE", + 2: "DRAIN", + } + NodeSpec_Availability_value = map[string]int32{ + "ACTIVE": 0, + "PAUSE": 1, + "DRAIN": 2, + } +) -var NodeSpec_Availability_value = map[string]int32{ - "ACTIVE": 0, - "PAUSE": 1, - "DRAIN": 2, +func (x NodeSpec_Availability) Enum() *NodeSpec_Availability { + p := new(NodeSpec_Availability) + *p = x + return p } func (x NodeSpec_Availability) String() string { - return proto.EnumName(NodeSpec_Availability_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (NodeSpec_Availability) Descriptor() protoreflect.EnumDescriptor { + return file_api_specs_proto_enumTypes[1].Descriptor() +} + +func (NodeSpec_Availability) Type() protoreflect.EnumType { + return &file_api_specs_proto_enumTypes[1] +} + +func (x NodeSpec_Availability) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } +// Deprecated: Use NodeSpec_Availability.Descriptor instead. func (NodeSpec_Availability) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_6589acc608f7d4fd, []int{0, 1} + return file_api_specs_proto_rawDescGZIP(), []int{0, 1} } type ContainerSpec_Isolation int32 @@ -97,24 +136,45 @@ const ( ContainerIsolationHyperV ContainerSpec_Isolation = 2 ) -var ContainerSpec_Isolation_name = map[int32]string{ - 0: "ISOLATION_DEFAULT", - 1: "ISOLATION_PROCESS", - 2: "ISOLATION_HYPERV", -} +// Enum value maps for ContainerSpec_Isolation. +var ( + ContainerSpec_Isolation_name = map[int32]string{ + 0: "ISOLATION_DEFAULT", + 1: "ISOLATION_PROCESS", + 2: "ISOLATION_HYPERV", + } + ContainerSpec_Isolation_value = map[string]int32{ + "ISOLATION_DEFAULT": 0, + "ISOLATION_PROCESS": 1, + "ISOLATION_HYPERV": 2, + } +) -var ContainerSpec_Isolation_value = map[string]int32{ - "ISOLATION_DEFAULT": 0, - "ISOLATION_PROCESS": 1, - "ISOLATION_HYPERV": 2, +func (x ContainerSpec_Isolation) Enum() *ContainerSpec_Isolation { + p := new(ContainerSpec_Isolation) + *p = x + return p } func (x ContainerSpec_Isolation) String() string { - return proto.EnumName(ContainerSpec_Isolation_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ContainerSpec_Isolation) Descriptor() protoreflect.EnumDescriptor { + return file_api_specs_proto_enumTypes[2].Descriptor() } +func (ContainerSpec_Isolation) Type() protoreflect.EnumType { + return &file_api_specs_proto_enumTypes[2] +} + +func (x ContainerSpec_Isolation) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use ContainerSpec_Isolation.Descriptor instead. func (ContainerSpec_Isolation) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_6589acc608f7d4fd, []int{10, 0} + return file_api_specs_proto_rawDescGZIP(), []int{10, 0} } // ResolutionMode specifies the mode of resolution to use for @@ -137,22 +197,43 @@ const ( ResolutionModeDNSRoundRobin EndpointSpec_ResolutionMode = 1 ) -var EndpointSpec_ResolutionMode_name = map[int32]string{ - 0: "VIP", - 1: "DNSRR", -} +// Enum value maps for EndpointSpec_ResolutionMode. +var ( + EndpointSpec_ResolutionMode_name = map[int32]string{ + 0: "VIP", + 1: "DNSRR", + } + EndpointSpec_ResolutionMode_value = map[string]int32{ + "VIP": 0, + "DNSRR": 1, + } +) -var EndpointSpec_ResolutionMode_value = map[string]int32{ - "VIP": 0, - "DNSRR": 1, +func (x EndpointSpec_ResolutionMode) Enum() *EndpointSpec_ResolutionMode { + p := new(EndpointSpec_ResolutionMode) + *p = x + return p } func (x EndpointSpec_ResolutionMode) String() string { - return proto.EnumName(EndpointSpec_ResolutionMode_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (EndpointSpec_ResolutionMode) Descriptor() protoreflect.EnumDescriptor { + return file_api_specs_proto_enumTypes[3].Descriptor() +} + +func (EndpointSpec_ResolutionMode) Type() protoreflect.EnumType { + return &file_api_specs_proto_enumTypes[3] +} + +func (x EndpointSpec_ResolutionMode) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } +// Deprecated: Use EndpointSpec_ResolutionMode.Descriptor instead. func (EndpointSpec_ResolutionMode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_6589acc608f7d4fd, []int{11, 0} + return file_api_specs_proto_rawDescGZIP(), []int{11, 0} } type VolumeSpec_VolumeAvailability int32 @@ -169,68 +250,118 @@ const ( VolumeAvailabilityDrain VolumeSpec_VolumeAvailability = 2 ) -var VolumeSpec_VolumeAvailability_name = map[int32]string{ - 0: "ACTIVE", - 1: "PAUSE", - 2: "DRAIN", -} +// Enum value maps for VolumeSpec_VolumeAvailability. +var ( + VolumeSpec_VolumeAvailability_name = map[int32]string{ + 0: "ACTIVE", + 1: "PAUSE", + 2: "DRAIN", + } + VolumeSpec_VolumeAvailability_value = map[string]int32{ + "ACTIVE": 0, + "PAUSE": 1, + "DRAIN": 2, + } +) -var VolumeSpec_VolumeAvailability_value = map[string]int32{ - "ACTIVE": 0, - "PAUSE": 1, - "DRAIN": 2, +func (x VolumeSpec_VolumeAvailability) Enum() *VolumeSpec_VolumeAvailability { + p := new(VolumeSpec_VolumeAvailability) + *p = x + return p } func (x VolumeSpec_VolumeAvailability) String() string { - return proto.EnumName(VolumeSpec_VolumeAvailability_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (VolumeSpec_VolumeAvailability) Descriptor() protoreflect.EnumDescriptor { + return file_api_specs_proto_enumTypes[4].Descriptor() +} + +func (VolumeSpec_VolumeAvailability) Type() protoreflect.EnumType { + return &file_api_specs_proto_enumTypes[4] } +func (x VolumeSpec_VolumeAvailability) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use VolumeSpec_VolumeAvailability.Descriptor instead. func (VolumeSpec_VolumeAvailability) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_6589acc608f7d4fd, []int{16, 0} + return file_api_specs_proto_rawDescGZIP(), []int{16, 0} } type NodeSpec struct { - Annotations Annotations `protobuf:"bytes,1,opt,name=annotations,proto3" json:"annotations"` + state protoimpl.MessageState `protogen:"open.v1"` + Annotations *Annotations `protobuf:"bytes,1,opt,name=annotations,proto3" json:"annotations,omitempty"` // DesiredRole defines the role the node should have. DesiredRole NodeRole `protobuf:"varint,2,opt,name=desired_role,json=desiredRole,proto3,enum=docker.swarmkit.v1.NodeRole" json:"desired_role,omitempty"` // Membership controls the admission of the node into the cluster. Membership NodeSpec_Membership `protobuf:"varint,3,opt,name=membership,proto3,enum=docker.swarmkit.v1.NodeSpec_Membership" json:"membership,omitempty"` // Availability allows a user to control the current scheduling status of a // node. - Availability NodeSpec_Availability `protobuf:"varint,4,opt,name=availability,proto3,enum=docker.swarmkit.v1.NodeSpec_Availability" json:"availability,omitempty"` + Availability NodeSpec_Availability `protobuf:"varint,4,opt,name=availability,proto3,enum=docker.swarmkit.v1.NodeSpec_Availability" json:"availability,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *NodeSpec) Reset() { + *x = NodeSpec{} + mi := &file_api_specs_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *NodeSpec) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *NodeSpec) Reset() { *m = NodeSpec{} } func (*NodeSpec) ProtoMessage() {} -func (*NodeSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_6589acc608f7d4fd, []int{0} -} -func (m *NodeSpec) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *NodeSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_NodeSpec.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *NodeSpec) ProtoReflect() protoreflect.Message { + mi := &file_api_specs_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *NodeSpec) XXX_Merge(src proto.Message) { - xxx_messageInfo_NodeSpec.Merge(m, src) + +// Deprecated: Use NodeSpec.ProtoReflect.Descriptor instead. +func (*NodeSpec) Descriptor() ([]byte, []int) { + return file_api_specs_proto_rawDescGZIP(), []int{0} +} + +func (x *NodeSpec) GetAnnotations() *Annotations { + if x != nil { + return x.Annotations + } + return nil } -func (m *NodeSpec) XXX_Size() int { - return m.Size() + +func (x *NodeSpec) GetDesiredRole() NodeRole { + if x != nil { + return x.DesiredRole + } + return NodeRoleWorker } -func (m *NodeSpec) XXX_DiscardUnknown() { - xxx_messageInfo_NodeSpec.DiscardUnknown(m) + +func (x *NodeSpec) GetMembership() NodeSpec_Membership { + if x != nil { + return x.Membership + } + return NodeMembershipPending } -var xxx_messageInfo_NodeSpec proto.InternalMessageInfo +func (x *NodeSpec) GetAvailability() NodeSpec_Availability { + if x != nil { + return x.Availability + } + return NodeAvailabilityActive +} // ServiceSpec defines the properties of a service. // @@ -239,10 +370,12 @@ var xxx_messageInfo_NodeSpec proto.InternalMessageInfo // strategy and restart policy, a number of application-level behaviors can be // defined. type ServiceSpec struct { - Annotations Annotations `protobuf:"bytes,1,opt,name=annotations,proto3" json:"annotations"` + state protoimpl.MessageState `protogen:"open.v1"` + Annotations *Annotations `protobuf:"bytes,1,opt,name=annotations,proto3" json:"annotations,omitempty"` // Task defines the task template this service will spawn. - Task TaskSpec `protobuf:"bytes,2,opt,name=task,proto3" json:"task"` + Task *TaskSpec `protobuf:"bytes,2,opt,name=task,proto3" json:"task,omitempty"` // Types that are valid to be assigned to Mode: + // // *ServiceSpec_Replicated // *ServiceSpec_Global // *ServiceSpec_ReplicatedJob @@ -257,189 +390,246 @@ type ServiceSpec struct { // This field (ServiceSpec.Networks) is kept for compatibility. // In case TaskSpec.Networks does not exist, ServiceSpec.Networks // is still honored if it exists. - Networks []*NetworkAttachmentConfig `protobuf:"bytes,7,rep,name=networks,proto3" json:"networks,omitempty"` // Deprecated: Do not use. + // + // Deprecated: Marked as deprecated in api/specs.proto. + Networks []*NetworkAttachmentConfig `protobuf:"bytes,7,rep,name=networks,proto3" json:"networks,omitempty"` // Service endpoint specifies the user provided configuration // to properly discover and load balance a service. - Endpoint *EndpointSpec `protobuf:"bytes,8,opt,name=endpoint,proto3" json:"endpoint,omitempty"` + Endpoint *EndpointSpec `protobuf:"bytes,8,opt,name=endpoint,proto3" json:"endpoint,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ServiceSpec) Reset() { + *x = ServiceSpec{} + mi := &file_api_specs_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ServiceSpec) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ServiceSpec) Reset() { *m = ServiceSpec{} } func (*ServiceSpec) ProtoMessage() {} -func (*ServiceSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_6589acc608f7d4fd, []int{1} -} -func (m *ServiceSpec) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ServiceSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ServiceSpec.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *ServiceSpec) ProtoReflect() protoreflect.Message { + mi := &file_api_specs_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } -} -func (m *ServiceSpec) XXX_Merge(src proto.Message) { - xxx_messageInfo_ServiceSpec.Merge(m, src) -} -func (m *ServiceSpec) XXX_Size() int { - return m.Size() -} -func (m *ServiceSpec) XXX_DiscardUnknown() { - xxx_messageInfo_ServiceSpec.DiscardUnknown(m) + return mi.MessageOf(x) } -var xxx_messageInfo_ServiceSpec proto.InternalMessageInfo - -type isServiceSpec_Mode interface { - isServiceSpec_Mode() - MarshalTo([]byte) (int, error) - Size() int +// Deprecated: Use ServiceSpec.ProtoReflect.Descriptor instead. +func (*ServiceSpec) Descriptor() ([]byte, []int) { + return file_api_specs_proto_rawDescGZIP(), []int{1} } -type ServiceSpec_Replicated struct { - Replicated *ReplicatedService `protobuf:"bytes,3,opt,name=replicated,proto3,oneof" json:"replicated,omitempty"` +func (x *ServiceSpec) GetAnnotations() *Annotations { + if x != nil { + return x.Annotations + } + return nil } -type ServiceSpec_Global struct { - Global *GlobalService `protobuf:"bytes,4,opt,name=global,proto3,oneof" json:"global,omitempty"` + +func (x *ServiceSpec) GetTask() *TaskSpec { + if x != nil { + return x.Task + } + return nil } -type ServiceSpec_ReplicatedJob struct { - ReplicatedJob *ReplicatedJob `protobuf:"bytes,10,opt,name=replicated_job,json=replicatedJob,proto3,oneof" json:"replicated_job,omitempty"` + +func (x *ServiceSpec) GetMode() isServiceSpec_Mode { + if x != nil { + return x.Mode + } + return nil } -type ServiceSpec_GlobalJob struct { - GlobalJob *GlobalJob `protobuf:"bytes,11,opt,name=global_job,json=globalJob,proto3,oneof" json:"global_job,omitempty"` + +func (x *ServiceSpec) GetReplicated() *ReplicatedService { + if x != nil { + if x, ok := x.Mode.(*ServiceSpec_Replicated); ok { + return x.Replicated + } + } + return nil } -func (*ServiceSpec_Replicated) isServiceSpec_Mode() {} -func (*ServiceSpec_Global) isServiceSpec_Mode() {} -func (*ServiceSpec_ReplicatedJob) isServiceSpec_Mode() {} -func (*ServiceSpec_GlobalJob) isServiceSpec_Mode() {} +func (x *ServiceSpec) GetGlobal() *GlobalService { + if x != nil { + if x, ok := x.Mode.(*ServiceSpec_Global); ok { + return x.Global + } + } + return nil +} -func (m *ServiceSpec) GetMode() isServiceSpec_Mode { - if m != nil { - return m.Mode +func (x *ServiceSpec) GetReplicatedJob() *ReplicatedJob { + if x != nil { + if x, ok := x.Mode.(*ServiceSpec_ReplicatedJob); ok { + return x.ReplicatedJob + } } return nil } -func (m *ServiceSpec) GetReplicated() *ReplicatedService { - if x, ok := m.GetMode().(*ServiceSpec_Replicated); ok { - return x.Replicated +func (x *ServiceSpec) GetGlobalJob() *GlobalJob { + if x != nil { + if x, ok := x.Mode.(*ServiceSpec_GlobalJob); ok { + return x.GlobalJob + } } return nil } -func (m *ServiceSpec) GetGlobal() *GlobalService { - if x, ok := m.GetMode().(*ServiceSpec_Global); ok { - return x.Global +func (x *ServiceSpec) GetUpdate() *UpdateConfig { + if x != nil { + return x.Update } return nil } -func (m *ServiceSpec) GetReplicatedJob() *ReplicatedJob { - if x, ok := m.GetMode().(*ServiceSpec_ReplicatedJob); ok { - return x.ReplicatedJob +func (x *ServiceSpec) GetRollback() *UpdateConfig { + if x != nil { + return x.Rollback } return nil } -func (m *ServiceSpec) GetGlobalJob() *GlobalJob { - if x, ok := m.GetMode().(*ServiceSpec_GlobalJob); ok { - return x.GlobalJob +// Deprecated: Marked as deprecated in api/specs.proto. +func (x *ServiceSpec) GetNetworks() []*NetworkAttachmentConfig { + if x != nil { + return x.Networks } return nil } -// XXX_OneofWrappers is for the internal use of the proto package. -func (*ServiceSpec) XXX_OneofWrappers() []interface{} { - return []interface{}{ - (*ServiceSpec_Replicated)(nil), - (*ServiceSpec_Global)(nil), - (*ServiceSpec_ReplicatedJob)(nil), - (*ServiceSpec_GlobalJob)(nil), +func (x *ServiceSpec) GetEndpoint() *EndpointSpec { + if x != nil { + return x.Endpoint } + return nil +} + +type isServiceSpec_Mode interface { + isServiceSpec_Mode() +} + +type ServiceSpec_Replicated struct { + Replicated *ReplicatedService `protobuf:"bytes,3,opt,name=replicated,proto3,oneof"` +} + +type ServiceSpec_Global struct { + Global *GlobalService `protobuf:"bytes,4,opt,name=global,proto3,oneof"` +} + +type ServiceSpec_ReplicatedJob struct { + ReplicatedJob *ReplicatedJob `protobuf:"bytes,10,opt,name=replicated_job,json=replicatedJob,proto3,oneof"` +} + +type ServiceSpec_GlobalJob struct { + GlobalJob *GlobalJob `protobuf:"bytes,11,opt,name=global_job,json=globalJob,proto3,oneof"` } +func (*ServiceSpec_Replicated) isServiceSpec_Mode() {} + +func (*ServiceSpec_Global) isServiceSpec_Mode() {} + +func (*ServiceSpec_ReplicatedJob) isServiceSpec_Mode() {} + +func (*ServiceSpec_GlobalJob) isServiceSpec_Mode() {} + // ReplicatedService sets the reconciliation target to certain number of replicas. type ReplicatedService struct { - Replicas uint64 `protobuf:"varint,1,opt,name=replicas,proto3" json:"replicas,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Replicas uint64 `protobuf:"varint,1,opt,name=replicas,proto3" json:"replicas,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ReplicatedService) Reset() { + *x = ReplicatedService{} + mi := &file_api_specs_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ReplicatedService) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ReplicatedService) Reset() { *m = ReplicatedService{} } func (*ReplicatedService) ProtoMessage() {} -func (*ReplicatedService) Descriptor() ([]byte, []int) { - return fileDescriptor_6589acc608f7d4fd, []int{2} -} -func (m *ReplicatedService) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ReplicatedService) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ReplicatedService.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *ReplicatedService) ProtoReflect() protoreflect.Message { + mi := &file_api_specs_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *ReplicatedService) XXX_Merge(src proto.Message) { - xxx_messageInfo_ReplicatedService.Merge(m, src) -} -func (m *ReplicatedService) XXX_Size() int { - return m.Size() -} -func (m *ReplicatedService) XXX_DiscardUnknown() { - xxx_messageInfo_ReplicatedService.DiscardUnknown(m) + +// Deprecated: Use ReplicatedService.ProtoReflect.Descriptor instead. +func (*ReplicatedService) Descriptor() ([]byte, []int) { + return file_api_specs_proto_rawDescGZIP(), []int{2} } -var xxx_messageInfo_ReplicatedService proto.InternalMessageInfo +func (x *ReplicatedService) GetReplicas() uint64 { + if x != nil { + return x.Replicas + } + return 0 +} // GlobalService represents global service. type GlobalService struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GlobalService) Reset() { + *x = GlobalService{} + mi := &file_api_specs_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GlobalService) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *GlobalService) Reset() { *m = GlobalService{} } func (*GlobalService) ProtoMessage() {} -func (*GlobalService) Descriptor() ([]byte, []int) { - return fileDescriptor_6589acc608f7d4fd, []int{3} -} -func (m *GlobalService) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *GlobalService) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_GlobalService.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *GlobalService) ProtoReflect() protoreflect.Message { + mi := &file_api_specs_proto_msgTypes[3] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } -} -func (m *GlobalService) XXX_Merge(src proto.Message) { - xxx_messageInfo_GlobalService.Merge(m, src) -} -func (m *GlobalService) XXX_Size() int { - return m.Size() -} -func (m *GlobalService) XXX_DiscardUnknown() { - xxx_messageInfo_GlobalService.DiscardUnknown(m) + return mi.MessageOf(x) } -var xxx_messageInfo_GlobalService proto.InternalMessageInfo +// Deprecated: Use GlobalService.ProtoReflect.Descriptor instead. +func (*GlobalService) Descriptor() ([]byte, []int) { + return file_api_specs_proto_rawDescGZIP(), []int{3} +} // ReplicatedJob is a certain type of one-off job which executes many Tasks in // parallel until the specified number of Tasks have succeeded. type ReplicatedJob struct { + state protoimpl.MessageState `protogen:"open.v1"` // MaxConcurrent indicates the maximum number of Tasks that should be // executing simultaneously at any given time. MaxConcurrent uint64 `protobuf:"varint,1,opt,name=max_concurrent,json=maxConcurrent,proto3" json:"max_concurrent,omitempty"` @@ -448,79 +638,96 @@ type ReplicatedJob struct { // be executed in parallel. That is, if this number is smaller than // MaxConcurrent, only this many replicas will run. TotalCompletions uint64 `protobuf:"varint,2,opt,name=total_completions,json=totalCompletions,proto3" json:"total_completions,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ReplicatedJob) Reset() { + *x = ReplicatedJob{} + mi := &file_api_specs_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ReplicatedJob) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ReplicatedJob) Reset() { *m = ReplicatedJob{} } func (*ReplicatedJob) ProtoMessage() {} -func (*ReplicatedJob) Descriptor() ([]byte, []int) { - return fileDescriptor_6589acc608f7d4fd, []int{4} -} -func (m *ReplicatedJob) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ReplicatedJob) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ReplicatedJob.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *ReplicatedJob) ProtoReflect() protoreflect.Message { + mi := &file_api_specs_proto_msgTypes[4] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *ReplicatedJob) XXX_Merge(src proto.Message) { - xxx_messageInfo_ReplicatedJob.Merge(m, src) -} -func (m *ReplicatedJob) XXX_Size() int { - return m.Size() + +// Deprecated: Use ReplicatedJob.ProtoReflect.Descriptor instead. +func (*ReplicatedJob) Descriptor() ([]byte, []int) { + return file_api_specs_proto_rawDescGZIP(), []int{4} } -func (m *ReplicatedJob) XXX_DiscardUnknown() { - xxx_messageInfo_ReplicatedJob.DiscardUnknown(m) + +func (x *ReplicatedJob) GetMaxConcurrent() uint64 { + if x != nil { + return x.MaxConcurrent + } + return 0 } -var xxx_messageInfo_ReplicatedJob proto.InternalMessageInfo +func (x *ReplicatedJob) GetTotalCompletions() uint64 { + if x != nil { + return x.TotalCompletions + } + return 0 +} // GlobalJob is a type of one-off job which executes one Task on every node // matching the service's placement constraints. type GlobalJob struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GlobalJob) Reset() { + *x = GlobalJob{} + mi := &file_api_specs_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GlobalJob) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *GlobalJob) Reset() { *m = GlobalJob{} } func (*GlobalJob) ProtoMessage() {} -func (*GlobalJob) Descriptor() ([]byte, []int) { - return fileDescriptor_6589acc608f7d4fd, []int{5} -} -func (m *GlobalJob) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *GlobalJob) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_GlobalJob.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *GlobalJob) ProtoReflect() protoreflect.Message { + mi := &file_api_specs_proto_msgTypes[5] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } -} -func (m *GlobalJob) XXX_Merge(src proto.Message) { - xxx_messageInfo_GlobalJob.Merge(m, src) -} -func (m *GlobalJob) XXX_Size() int { - return m.Size() -} -func (m *GlobalJob) XXX_DiscardUnknown() { - xxx_messageInfo_GlobalJob.DiscardUnknown(m) + return mi.MessageOf(x) } -var xxx_messageInfo_GlobalJob proto.InternalMessageInfo +// Deprecated: Use GlobalJob.ProtoReflect.Descriptor instead. +func (*GlobalJob) Descriptor() ([]byte, []int) { + return file_api_specs_proto_rawDescGZIP(), []int{5} +} type TaskSpec struct { + state protoimpl.MessageState `protogen:"open.v1"` // Types that are valid to be assigned to Runtime: + // // *TaskSpec_Attachment // *TaskSpec_Container // *TaskSpec_Generic @@ -551,214 +758,301 @@ type TaskSpec struct { // dispatcher to send the related objects. // // ResourceReferences is a list of ResourceReferences used by the task. - ResourceReferences []ResourceReference `protobuf:"bytes,11,rep,name=resource_references,json=resourceReferences,proto3" json:"resource_references"` + ResourceReferences []*ResourceReference `protobuf:"bytes,11,rep,name=resource_references,json=resourceReferences,proto3" json:"resource_references,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *TaskSpec) Reset() { *m = TaskSpec{} } -func (*TaskSpec) ProtoMessage() {} -func (*TaskSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_6589acc608f7d4fd, []int{6} -} -func (m *TaskSpec) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *TaskSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_TaskSpec.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 *TaskSpec) XXX_Merge(src proto.Message) { - xxx_messageInfo_TaskSpec.Merge(m, src) +func (x *TaskSpec) Reset() { + *x = TaskSpec{} + mi := &file_api_specs_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *TaskSpec) XXX_Size() int { - return m.Size() -} -func (m *TaskSpec) XXX_DiscardUnknown() { - xxx_messageInfo_TaskSpec.DiscardUnknown(m) + +func (x *TaskSpec) String() string { + return protoimpl.X.MessageStringOf(x) } -var xxx_messageInfo_TaskSpec proto.InternalMessageInfo +func (*TaskSpec) ProtoMessage() {} -type isTaskSpec_Runtime interface { - isTaskSpec_Runtime() - MarshalTo([]byte) (int, error) - Size() int +func (x *TaskSpec) ProtoReflect() protoreflect.Message { + mi := &file_api_specs_proto_msgTypes[6] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -type TaskSpec_Attachment struct { - Attachment *NetworkAttachmentSpec `protobuf:"bytes,8,opt,name=attachment,proto3,oneof" json:"attachment,omitempty"` -} -type TaskSpec_Container struct { - Container *ContainerSpec `protobuf:"bytes,1,opt,name=container,proto3,oneof" json:"container,omitempty"` +// Deprecated: Use TaskSpec.ProtoReflect.Descriptor instead. +func (*TaskSpec) Descriptor() ([]byte, []int) { + return file_api_specs_proto_rawDescGZIP(), []int{6} } -type TaskSpec_Generic struct { - Generic *GenericRuntimeSpec `protobuf:"bytes,10,opt,name=generic,proto3,oneof" json:"generic,omitempty"` + +func (x *TaskSpec) GetRuntime() isTaskSpec_Runtime { + if x != nil { + return x.Runtime + } + return nil } -func (*TaskSpec_Attachment) isTaskSpec_Runtime() {} -func (*TaskSpec_Container) isTaskSpec_Runtime() {} -func (*TaskSpec_Generic) isTaskSpec_Runtime() {} +func (x *TaskSpec) GetAttachment() *NetworkAttachmentSpec { + if x != nil { + if x, ok := x.Runtime.(*TaskSpec_Attachment); ok { + return x.Attachment + } + } + return nil +} -func (m *TaskSpec) GetRuntime() isTaskSpec_Runtime { - if m != nil { - return m.Runtime +func (x *TaskSpec) GetContainer() *ContainerSpec { + if x != nil { + if x, ok := x.Runtime.(*TaskSpec_Container); ok { + return x.Container + } } return nil } -func (m *TaskSpec) GetAttachment() *NetworkAttachmentSpec { - if x, ok := m.GetRuntime().(*TaskSpec_Attachment); ok { - return x.Attachment +func (x *TaskSpec) GetGeneric() *GenericRuntimeSpec { + if x != nil { + if x, ok := x.Runtime.(*TaskSpec_Generic); ok { + return x.Generic + } } return nil } -func (m *TaskSpec) GetContainer() *ContainerSpec { - if x, ok := m.GetRuntime().(*TaskSpec_Container); ok { - return x.Container +func (x *TaskSpec) GetResources() *ResourceRequirements { + if x != nil { + return x.Resources } return nil } -func (m *TaskSpec) GetGeneric() *GenericRuntimeSpec { - if x, ok := m.GetRuntime().(*TaskSpec_Generic); ok { - return x.Generic +func (x *TaskSpec) GetRestart() *RestartPolicy { + if x != nil { + return x.Restart } return nil } -// XXX_OneofWrappers is for the internal use of the proto package. -func (*TaskSpec) XXX_OneofWrappers() []interface{} { - return []interface{}{ - (*TaskSpec_Attachment)(nil), - (*TaskSpec_Container)(nil), - (*TaskSpec_Generic)(nil), +func (x *TaskSpec) GetPlacement() *Placement { + if x != nil { + return x.Placement } + return nil } -type ResourceReference struct { - ResourceID string `protobuf:"bytes,1,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"` - ResourceType ResourceType `protobuf:"varint,2,opt,name=resource_type,json=resourceType,proto3,enum=docker.swarmkit.v1.ResourceType" json:"resource_type,omitempty"` +func (x *TaskSpec) GetLogDriver() *Driver { + if x != nil { + return x.LogDriver + } + return nil } -func (m *ResourceReference) Reset() { *m = ResourceReference{} } -func (*ResourceReference) ProtoMessage() {} -func (*ResourceReference) Descriptor() ([]byte, []int) { - return fileDescriptor_6589acc608f7d4fd, []int{7} -} -func (m *ResourceReference) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ResourceReference) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ResourceReference.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 (x *TaskSpec) GetNetworks() []*NetworkAttachmentConfig { + if x != nil { + return x.Networks } + return nil } -func (m *ResourceReference) XXX_Merge(src proto.Message) { - xxx_messageInfo_ResourceReference.Merge(m, src) + +func (x *TaskSpec) GetForceUpdate() uint64 { + if x != nil { + return x.ForceUpdate + } + return 0 } -func (m *ResourceReference) XXX_Size() int { - return m.Size() + +func (x *TaskSpec) GetResourceReferences() []*ResourceReference { + if x != nil { + return x.ResourceReferences + } + return nil } -func (m *ResourceReference) XXX_DiscardUnknown() { - xxx_messageInfo_ResourceReference.DiscardUnknown(m) + +type isTaskSpec_Runtime interface { + isTaskSpec_Runtime() } -var xxx_messageInfo_ResourceReference proto.InternalMessageInfo +type TaskSpec_Attachment struct { + Attachment *NetworkAttachmentSpec `protobuf:"bytes,8,opt,name=attachment,proto3,oneof"` +} -type GenericRuntimeSpec struct { - Kind string `protobuf:"bytes,1,opt,name=kind,proto3" json:"kind,omitempty"` - Payload *types.Any `protobuf:"bytes,2,opt,name=payload,proto3" json:"payload,omitempty"` +type TaskSpec_Container struct { + Container *ContainerSpec `protobuf:"bytes,1,opt,name=container,proto3,oneof"` } -func (m *GenericRuntimeSpec) Reset() { *m = GenericRuntimeSpec{} } -func (*GenericRuntimeSpec) ProtoMessage() {} -func (*GenericRuntimeSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_6589acc608f7d4fd, []int{8} -} -func (m *GenericRuntimeSpec) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *GenericRuntimeSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_GenericRuntimeSpec.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } +type TaskSpec_Generic struct { + Generic *GenericRuntimeSpec `protobuf:"bytes,10,opt,name=generic,proto3,oneof"` } -func (m *GenericRuntimeSpec) XXX_Merge(src proto.Message) { - xxx_messageInfo_GenericRuntimeSpec.Merge(m, src) + +func (*TaskSpec_Attachment) isTaskSpec_Runtime() {} + +func (*TaskSpec_Container) isTaskSpec_Runtime() {} + +func (*TaskSpec_Generic) isTaskSpec_Runtime() {} + +type ResourceReference struct { + state protoimpl.MessageState `protogen:"open.v1"` + ResourceID string `protobuf:"bytes,1,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"` + ResourceType ResourceType `protobuf:"varint,2,opt,name=resource_type,json=resourceType,proto3,enum=docker.swarmkit.v1.ResourceType" json:"resource_type,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *GenericRuntimeSpec) XXX_Size() int { - return m.Size() + +func (x *ResourceReference) Reset() { + *x = ResourceReference{} + mi := &file_api_specs_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *GenericRuntimeSpec) XXX_DiscardUnknown() { - xxx_messageInfo_GenericRuntimeSpec.DiscardUnknown(m) + +func (x *ResourceReference) String() string { + return protoimpl.X.MessageStringOf(x) } -var xxx_messageInfo_GenericRuntimeSpec proto.InternalMessageInfo +func (*ResourceReference) ProtoMessage() {} -// NetworkAttachmentSpec specifies runtime parameters required to attach -// a container to a network. -type NetworkAttachmentSpec struct { +func (x *ResourceReference) ProtoReflect() protoreflect.Message { + mi := &file_api_specs_proto_msgTypes[7] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ResourceReference.ProtoReflect.Descriptor instead. +func (*ResourceReference) Descriptor() ([]byte, []int) { + return file_api_specs_proto_rawDescGZIP(), []int{7} +} + +func (x *ResourceReference) GetResourceID() string { + if x != nil { + return x.ResourceID + } + return "" +} + +func (x *ResourceReference) GetResourceType() ResourceType { + if x != nil { + return x.ResourceType + } + return ResourceType_TASK +} + +type GenericRuntimeSpec struct { + state protoimpl.MessageState `protogen:"open.v1"` + Kind string `protobuf:"bytes,1,opt,name=kind,proto3" json:"kind,omitempty"` + Payload *anypb.Any `protobuf:"bytes,2,opt,name=payload,proto3" json:"payload,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GenericRuntimeSpec) Reset() { + *x = GenericRuntimeSpec{} + mi := &file_api_specs_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GenericRuntimeSpec) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenericRuntimeSpec) ProtoMessage() {} + +func (x *GenericRuntimeSpec) ProtoReflect() protoreflect.Message { + mi := &file_api_specs_proto_msgTypes[8] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenericRuntimeSpec.ProtoReflect.Descriptor instead. +func (*GenericRuntimeSpec) Descriptor() ([]byte, []int) { + return file_api_specs_proto_rawDescGZIP(), []int{8} +} + +func (x *GenericRuntimeSpec) GetKind() string { + if x != nil { + return x.Kind + } + return "" +} + +func (x *GenericRuntimeSpec) GetPayload() *anypb.Any { + if x != nil { + return x.Payload + } + return nil +} + +// NetworkAttachmentSpec specifies runtime parameters required to attach +// a container to a network. +type NetworkAttachmentSpec struct { + state protoimpl.MessageState `protogen:"open.v1"` // ContainerID specifies a unique ID of the container for which // this attachment is for. - ContainerID string `protobuf:"bytes,1,opt,name=container_id,json=containerId,proto3" json:"container_id,omitempty"` + ContainerID string `protobuf:"bytes,1,opt,name=container_id,json=containerId,proto3" json:"container_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *NetworkAttachmentSpec) Reset() { + *x = NetworkAttachmentSpec{} + mi := &file_api_specs_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *NetworkAttachmentSpec) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *NetworkAttachmentSpec) Reset() { *m = NetworkAttachmentSpec{} } func (*NetworkAttachmentSpec) ProtoMessage() {} -func (*NetworkAttachmentSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_6589acc608f7d4fd, []int{9} -} -func (m *NetworkAttachmentSpec) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *NetworkAttachmentSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_NetworkAttachmentSpec.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *NetworkAttachmentSpec) ProtoReflect() protoreflect.Message { + mi := &file_api_specs_proto_msgTypes[9] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *NetworkAttachmentSpec) XXX_Merge(src proto.Message) { - xxx_messageInfo_NetworkAttachmentSpec.Merge(m, src) -} -func (m *NetworkAttachmentSpec) XXX_Size() int { - return m.Size() -} -func (m *NetworkAttachmentSpec) XXX_DiscardUnknown() { - xxx_messageInfo_NetworkAttachmentSpec.DiscardUnknown(m) + +// Deprecated: Use NetworkAttachmentSpec.ProtoReflect.Descriptor instead. +func (*NetworkAttachmentSpec) Descriptor() ([]byte, []int) { + return file_api_specs_proto_rawDescGZIP(), []int{9} } -var xxx_messageInfo_NetworkAttachmentSpec proto.InternalMessageInfo +func (x *NetworkAttachmentSpec) GetContainerID() string { + if x != nil { + return x.ContainerID + } + return "" +} // Container specifies runtime parameters for a container. type ContainerSpec struct { + state protoimpl.MessageState `protogen:"open.v1"` // image defines the image reference, as specified in the // distribution/reference package. This may include a registry host, name, // tag or digest. @@ -772,7 +1066,7 @@ type ContainerSpec struct { // // This field *must* remain compatible with the Labels field of // Annotations. - Labels map[string]string `protobuf:"bytes,2,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Labels map[string]string `protobuf:"bytes,2,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // Command to run the the container. The first element is a path to the // executable and the following elements are treated as arguments. // @@ -804,7 +1098,7 @@ type ContainerSpec struct { // Privileges specifies security configuration/permissions. Privileges *Privileges `protobuf:"bytes,22,opt,name=privileges,proto3" json:"privileges,omitempty"` // Init declares that a custom init will be running inside the container, if null, use the daemon's configured settings - Init *types.BoolValue `protobuf:"bytes,23,opt,name=init,proto3" json:"init,omitempty"` + Init *wrapperspb.BoolValue `protobuf:"bytes,23,opt,name=init,proto3" json:"init,omitempty"` // TTY declares that a TTY should be attached to the standard streams, // including stdin if it is still open. TTY bool `protobuf:"varint,13,opt,name=tty,proto3" json:"tty,omitempty"` @@ -816,12 +1110,12 @@ type ContainerSpec struct { // they will be decided by the modes passed in the mount definition. ReadOnly bool `protobuf:"varint,19,opt,name=read_only,json=readOnly,proto3" json:"read_only,omitempty"` // StopSignal defines the signal to stop the container. - StopSignal string `protobuf:"bytes,20,opt,name=stop_signal,json=stopSignal,proto3" json:"stop_signal,omitempty"` - Mounts []Mount `protobuf:"bytes,8,rep,name=mounts,proto3" json:"mounts"` + StopSignal string `protobuf:"bytes,20,opt,name=stop_signal,json=stopSignal,proto3" json:"stop_signal,omitempty"` + Mounts []*Mount `protobuf:"bytes,8,rep,name=mounts,proto3" json:"mounts,omitempty"` // StopGracePeriod the grace period for stopping the container before // forcefully killing the container. // Note: Can't use stdduration here because this needs to be nullable. - StopGracePeriod *types.Duration `protobuf:"bytes,9,opt,name=stop_grace_period,json=stopGracePeriod,proto3" json:"stop_grace_period,omitempty"` + StopGracePeriod *durationpb.Duration `protobuf:"bytes,9,opt,name=stop_grace_period,json=stopGracePeriod,proto3" json:"stop_grace_period,omitempty"` // PullOptions parameterize the behavior of image pulls. PullOptions *ContainerSpec_PullOptions `protobuf:"bytes,10,opt,name=pull_options,json=pullOptions,proto3" json:"pull_options,omitempty"` // SecretReference contains references to zero or more secrets that @@ -834,7 +1128,8 @@ type ContainerSpec struct { // that associates IP addresses with hostnames. // Detailed documentation is available in: // http://man7.org/linux/man-pages/man5/hosts.5.html - // IP_address canonical_hostname [aliases...] + // + // IP_address canonical_hostname [aliases...] // // The format of the Hosts in swarmkit follows the same as // above. @@ -867,7 +1162,7 @@ type ContainerSpec struct { // documentation at: // // https://docs.docker.com/engine/reference/commandline/run/#configure-namespaced-kernel-parameters-sysctls-at-runtime - Sysctls map[string]string `protobuf:"bytes,26,rep,name=sysctls,proto3" json:"sysctls,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Sysctls map[string]string `protobuf:"bytes,26,rep,name=sysctls,proto3" json:"sysctls,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // CapabilityAdd sets the list of capabilities to add to the default capability list CapabilityAdd []string `protobuf:"bytes,27,rep,name=capability_add,json=capabilityAdd,proto3" json:"capability_add,omitempty"` // CapabilityDrop sets the list of capabilities to drop from the default capability list @@ -877,209 +1172,311 @@ type ContainerSpec struct { Ulimits []*ContainerSpec_Ulimit `protobuf:"bytes,29,rep,name=ulimits,proto3" json:"ulimits,omitempty"` // OOmScoreAdj defines the relative value used for destroying a container during an OOM // Values are between -1000 and 1000 - OomScoreAdj int64 `protobuf:"varint,30,opt,name=oom_score_adj,json=oomScoreAdj,proto3" json:"oom_score_adj,omitempty"` + OomScoreAdj int64 `protobuf:"varint,30,opt,name=oom_score_adj,json=oomScoreAdj,proto3" json:"oom_score_adj,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ContainerSpec) Reset() { + *x = ContainerSpec{} + mi := &file_api_specs_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ContainerSpec) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ContainerSpec) Reset() { *m = ContainerSpec{} } func (*ContainerSpec) ProtoMessage() {} -func (*ContainerSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_6589acc608f7d4fd, []int{10} -} -func (m *ContainerSpec) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ContainerSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ContainerSpec.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *ContainerSpec) ProtoReflect() protoreflect.Message { + mi := &file_api_specs_proto_msgTypes[10] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *ContainerSpec) XXX_Merge(src proto.Message) { - xxx_messageInfo_ContainerSpec.Merge(m, src) + +// Deprecated: Use ContainerSpec.ProtoReflect.Descriptor instead. +func (*ContainerSpec) Descriptor() ([]byte, []int) { + return file_api_specs_proto_rawDescGZIP(), []int{10} } -func (m *ContainerSpec) XXX_Size() int { - return m.Size() + +func (x *ContainerSpec) GetImage() string { + if x != nil { + return x.Image + } + return "" } -func (m *ContainerSpec) XXX_DiscardUnknown() { - xxx_messageInfo_ContainerSpec.DiscardUnknown(m) + +func (x *ContainerSpec) GetLabels() map[string]string { + if x != nil { + return x.Labels + } + return nil } -var xxx_messageInfo_ContainerSpec proto.InternalMessageInfo +func (x *ContainerSpec) GetCommand() []string { + if x != nil { + return x.Command + } + return nil +} -// PullOptions allows one to parameterize an image pull. -type ContainerSpec_PullOptions struct { - // RegistryAuth is the registry auth token obtained from the client, required - // to pull private images. This is the unmodified JSON used as part of - // the `X-Registry-Auth` header. - // TODO(nishanttotla): This field will later be deprecated - RegistryAuth string `protobuf:"bytes,64,opt,name=registry_auth,json=registryAuth,proto3" json:"registry_auth,omitempty"` +func (x *ContainerSpec) GetArgs() []string { + if x != nil { + return x.Args + } + return nil } -func (m *ContainerSpec_PullOptions) Reset() { *m = ContainerSpec_PullOptions{} } -func (*ContainerSpec_PullOptions) ProtoMessage() {} -func (*ContainerSpec_PullOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_6589acc608f7d4fd, []int{10, 1} -} -func (m *ContainerSpec_PullOptions) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ContainerSpec_PullOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ContainerSpec_PullOptions.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 (x *ContainerSpec) GetHostname() string { + if x != nil { + return x.Hostname } + return "" } -func (m *ContainerSpec_PullOptions) XXX_Merge(src proto.Message) { - xxx_messageInfo_ContainerSpec_PullOptions.Merge(m, src) + +func (x *ContainerSpec) GetEnv() []string { + if x != nil { + return x.Env + } + return nil } -func (m *ContainerSpec_PullOptions) XXX_Size() int { - return m.Size() + +func (x *ContainerSpec) GetDir() string { + if x != nil { + return x.Dir + } + return "" } -func (m *ContainerSpec_PullOptions) XXX_DiscardUnknown() { - xxx_messageInfo_ContainerSpec_PullOptions.DiscardUnknown(m) + +func (x *ContainerSpec) GetUser() string { + if x != nil { + return x.User + } + return "" } -var xxx_messageInfo_ContainerSpec_PullOptions proto.InternalMessageInfo +func (x *ContainerSpec) GetGroups() []string { + if x != nil { + return x.Groups + } + return nil +} -// DNSConfig specifies DNS related configurations in resolver configuration file (resolv.conf) -// Detailed documentation is available in: -// http://man7.org/linux/man-pages/man5/resolv.conf.5.html -// TODO: domain is not supported yet -type ContainerSpec_DNSConfig struct { - // Nameservers specifies the IP addresses of the name servers - Nameservers []string `protobuf:"bytes,1,rep,name=nameservers,proto3" json:"nameservers,omitempty"` - // Search specifies the search list for host-name lookup - Search []string `protobuf:"bytes,2,rep,name=search,proto3" json:"search,omitempty"` - // Options allows certain internal resolver variables to be modified - Options []string `protobuf:"bytes,3,rep,name=options,proto3" json:"options,omitempty"` +func (x *ContainerSpec) GetPrivileges() *Privileges { + if x != nil { + return x.Privileges + } + return nil } -func (m *ContainerSpec_DNSConfig) Reset() { *m = ContainerSpec_DNSConfig{} } -func (*ContainerSpec_DNSConfig) ProtoMessage() {} -func (*ContainerSpec_DNSConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_6589acc608f7d4fd, []int{10, 2} -} -func (m *ContainerSpec_DNSConfig) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ContainerSpec_DNSConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ContainerSpec_DNSConfig.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 (x *ContainerSpec) GetInit() *wrapperspb.BoolValue { + if x != nil { + return x.Init } + return nil } -func (m *ContainerSpec_DNSConfig) XXX_Merge(src proto.Message) { - xxx_messageInfo_ContainerSpec_DNSConfig.Merge(m, src) + +func (x *ContainerSpec) GetTTY() bool { + if x != nil { + return x.TTY + } + return false } -func (m *ContainerSpec_DNSConfig) XXX_Size() int { - return m.Size() + +func (x *ContainerSpec) GetOpenStdin() bool { + if x != nil { + return x.OpenStdin + } + return false } -func (m *ContainerSpec_DNSConfig) XXX_DiscardUnknown() { - xxx_messageInfo_ContainerSpec_DNSConfig.DiscardUnknown(m) + +func (x *ContainerSpec) GetReadOnly() bool { + if x != nil { + return x.ReadOnly + } + return false } -var xxx_messageInfo_ContainerSpec_DNSConfig proto.InternalMessageInfo +func (x *ContainerSpec) GetStopSignal() string { + if x != nil { + return x.StopSignal + } + return "" +} -type ContainerSpec_Ulimit struct { - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Soft int64 `protobuf:"varint,2,opt,name=soft,proto3" json:"soft,omitempty"` - Hard int64 `protobuf:"varint,3,opt,name=hard,proto3" json:"hard,omitempty"` +func (x *ContainerSpec) GetMounts() []*Mount { + if x != nil { + return x.Mounts + } + return nil } -func (m *ContainerSpec_Ulimit) Reset() { *m = ContainerSpec_Ulimit{} } -func (*ContainerSpec_Ulimit) ProtoMessage() {} -func (*ContainerSpec_Ulimit) Descriptor() ([]byte, []int) { - return fileDescriptor_6589acc608f7d4fd, []int{10, 4} -} -func (m *ContainerSpec_Ulimit) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ContainerSpec_Ulimit) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ContainerSpec_Ulimit.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 (x *ContainerSpec) GetStopGracePeriod() *durationpb.Duration { + if x != nil { + return x.StopGracePeriod + } + return nil +} + +func (x *ContainerSpec) GetPullOptions() *ContainerSpec_PullOptions { + if x != nil { + return x.PullOptions + } + return nil +} + +func (x *ContainerSpec) GetSecrets() []*SecretReference { + if x != nil { + return x.Secrets + } + return nil +} + +func (x *ContainerSpec) GetConfigs() []*ConfigReference { + if x != nil { + return x.Configs + } + return nil +} + +func (x *ContainerSpec) GetHosts() []string { + if x != nil { + return x.Hosts + } + return nil +} + +func (x *ContainerSpec) GetDNSConfig() *ContainerSpec_DNSConfig { + if x != nil { + return x.DNSConfig + } + return nil +} + +func (x *ContainerSpec) GetHealthcheck() *HealthConfig { + if x != nil { + return x.Healthcheck + } + return nil +} + +func (x *ContainerSpec) GetIsolation() ContainerSpec_Isolation { + if x != nil { + return x.Isolation + } + return ContainerIsolationDefault +} + +func (x *ContainerSpec) GetPidsLimit() int64 { + if x != nil { + return x.PidsLimit + } + return 0 +} + +func (x *ContainerSpec) GetSysctls() map[string]string { + if x != nil { + return x.Sysctls } + return nil } -func (m *ContainerSpec_Ulimit) XXX_Merge(src proto.Message) { - xxx_messageInfo_ContainerSpec_Ulimit.Merge(m, src) + +func (x *ContainerSpec) GetCapabilityAdd() []string { + if x != nil { + return x.CapabilityAdd + } + return nil } -func (m *ContainerSpec_Ulimit) XXX_Size() int { - return m.Size() + +func (x *ContainerSpec) GetCapabilityDrop() []string { + if x != nil { + return x.CapabilityDrop + } + return nil } -func (m *ContainerSpec_Ulimit) XXX_DiscardUnknown() { - xxx_messageInfo_ContainerSpec_Ulimit.DiscardUnknown(m) + +func (x *ContainerSpec) GetUlimits() []*ContainerSpec_Ulimit { + if x != nil { + return x.Ulimits + } + return nil } -var xxx_messageInfo_ContainerSpec_Ulimit proto.InternalMessageInfo +func (x *ContainerSpec) GetOomScoreAdj() int64 { + if x != nil { + return x.OomScoreAdj + } + return 0 +} // EndpointSpec defines the properties that can be configured to // access and loadbalance the service. type EndpointSpec struct { - Mode EndpointSpec_ResolutionMode `protobuf:"varint,1,opt,name=mode,proto3,enum=docker.swarmkit.v1.EndpointSpec_ResolutionMode" json:"mode,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Mode EndpointSpec_ResolutionMode `protobuf:"varint,1,opt,name=mode,proto3,enum=docker.swarmkit.v1.EndpointSpec_ResolutionMode" json:"mode,omitempty"` // List of exposed ports that this service is accessible from // external to the cluster. - Ports []*PortConfig `protobuf:"bytes,2,rep,name=ports,proto3" json:"ports,omitempty"` + Ports []*PortConfig `protobuf:"bytes,2,rep,name=ports,proto3" json:"ports,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *EndpointSpec) Reset() { + *x = EndpointSpec{} + mi := &file_api_specs_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *EndpointSpec) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *EndpointSpec) Reset() { *m = EndpointSpec{} } func (*EndpointSpec) ProtoMessage() {} -func (*EndpointSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_6589acc608f7d4fd, []int{11} -} -func (m *EndpointSpec) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *EndpointSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_EndpointSpec.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *EndpointSpec) ProtoReflect() protoreflect.Message { + mi := &file_api_specs_proto_msgTypes[11] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *EndpointSpec) XXX_Merge(src proto.Message) { - xxx_messageInfo_EndpointSpec.Merge(m, src) -} -func (m *EndpointSpec) XXX_Size() int { - return m.Size() + +// Deprecated: Use EndpointSpec.ProtoReflect.Descriptor instead. +func (*EndpointSpec) Descriptor() ([]byte, []int) { + return file_api_specs_proto_rawDescGZIP(), []int{11} } -func (m *EndpointSpec) XXX_DiscardUnknown() { - xxx_messageInfo_EndpointSpec.DiscardUnknown(m) + +func (x *EndpointSpec) GetMode() EndpointSpec_ResolutionMode { + if x != nil { + return x.Mode + } + return ResolutionModeVirtualIP } -var xxx_messageInfo_EndpointSpec proto.InternalMessageInfo +func (x *EndpointSpec) GetPorts() []*PortConfig { + if x != nil { + return x.Ports + } + return nil +} // NetworkSpec specifies user defined network parameters. type NetworkSpec struct { - Annotations Annotations `protobuf:"bytes,1,opt,name=annotations,proto3" json:"annotations"` + state protoimpl.MessageState `protogen:"open.v1"` + Annotations *Annotations `protobuf:"bytes,1,opt,name=annotations,proto3" json:"annotations,omitempty"` // DriverConfig specific configuration consumed by the network driver. DriverConfig *Driver `protobuf:"bytes,2,opt,name=driver_config,json=driverConfig,proto3" json:"driver_config,omitempty"` // IPv6Enabled enables support for IPv6 on the network. @@ -1104,178 +1501,314 @@ type NetworkSpec struct { // ConfigFrom is the source of the configuration for this network. // // Types that are valid to be assigned to ConfigFrom: + // // *NetworkSpec_Network - ConfigFrom isNetworkSpec_ConfigFrom `protobuf_oneof:"config_from"` + ConfigFrom isNetworkSpec_ConfigFrom `protobuf_oneof:"config_from"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *NetworkSpec) Reset() { + *x = NetworkSpec{} + mi := &file_api_specs_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *NetworkSpec) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *NetworkSpec) Reset() { *m = NetworkSpec{} } func (*NetworkSpec) ProtoMessage() {} -func (*NetworkSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_6589acc608f7d4fd, []int{12} -} -func (m *NetworkSpec) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *NetworkSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_NetworkSpec.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *NetworkSpec) ProtoReflect() protoreflect.Message { + mi := &file_api_specs_proto_msgTypes[12] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *NetworkSpec) XXX_Merge(src proto.Message) { - xxx_messageInfo_NetworkSpec.Merge(m, src) + +// Deprecated: Use NetworkSpec.ProtoReflect.Descriptor instead. +func (*NetworkSpec) Descriptor() ([]byte, []int) { + return file_api_specs_proto_rawDescGZIP(), []int{12} } -func (m *NetworkSpec) XXX_Size() int { - return m.Size() + +func (x *NetworkSpec) GetAnnotations() *Annotations { + if x != nil { + return x.Annotations + } + return nil } -func (m *NetworkSpec) XXX_DiscardUnknown() { - xxx_messageInfo_NetworkSpec.DiscardUnknown(m) + +func (x *NetworkSpec) GetDriverConfig() *Driver { + if x != nil { + return x.DriverConfig + } + return nil } -var xxx_messageInfo_NetworkSpec proto.InternalMessageInfo +func (x *NetworkSpec) GetIpv6Enabled() bool { + if x != nil { + return x.Ipv6Enabled + } + return false +} -type isNetworkSpec_ConfigFrom interface { - isNetworkSpec_ConfigFrom() - MarshalTo([]byte) (int, error) - Size() int +func (x *NetworkSpec) GetInternal() bool { + if x != nil { + return x.Internal + } + return false } -type NetworkSpec_Network struct { - Network string `protobuf:"bytes,8,opt,name=network,proto3,oneof" json:"network,omitempty"` +func (x *NetworkSpec) GetIPAM() *IPAMOptions { + if x != nil { + return x.IPAM + } + return nil } -func (*NetworkSpec_Network) isNetworkSpec_ConfigFrom() {} +func (x *NetworkSpec) GetAttachable() bool { + if x != nil { + return x.Attachable + } + return false +} + +func (x *NetworkSpec) GetIngress() bool { + if x != nil { + return x.Ingress + } + return false +} -func (m *NetworkSpec) GetConfigFrom() isNetworkSpec_ConfigFrom { - if m != nil { - return m.ConfigFrom +func (x *NetworkSpec) GetConfigFrom() isNetworkSpec_ConfigFrom { + if x != nil { + return x.ConfigFrom } return nil } -func (m *NetworkSpec) GetNetwork() string { - if x, ok := m.GetConfigFrom().(*NetworkSpec_Network); ok { - return x.Network +func (x *NetworkSpec) GetNetwork() string { + if x != nil { + if x, ok := x.ConfigFrom.(*NetworkSpec_Network); ok { + return x.Network + } } return "" } -// XXX_OneofWrappers is for the internal use of the proto package. -func (*NetworkSpec) XXX_OneofWrappers() []interface{} { - return []interface{}{ - (*NetworkSpec_Network)(nil), - } +type isNetworkSpec_ConfigFrom interface { + isNetworkSpec_ConfigFrom() +} + +type NetworkSpec_Network struct { + // Network is the name of a network that provides the network + // specific configuration for this network, locally on the node + // where this network is being plumbed. + Network string `protobuf:"bytes,8,opt,name=network,proto3,oneof"` } +func (*NetworkSpec_Network) isNetworkSpec_ConfigFrom() {} + // ClusterSpec specifies global cluster settings. type ClusterSpec struct { - Annotations Annotations `protobuf:"bytes,1,opt,name=annotations,proto3" json:"annotations"` + state protoimpl.MessageState `protogen:"open.v1"` + Annotations *Annotations `protobuf:"bytes,1,opt,name=annotations,proto3" json:"annotations,omitempty"` // DEPRECATED: AcceptancePolicy defines the certificate issuance policy. // Acceptance policy is no longer customizable, and secrets have been // replaced with join tokens. - AcceptancePolicy AcceptancePolicy `protobuf:"bytes,2,opt,name=acceptance_policy,json=acceptancePolicy,proto3" json:"acceptance_policy"` // Deprecated: Do not use. + // + // Deprecated: Marked as deprecated in api/specs.proto. + AcceptancePolicy *AcceptancePolicy `protobuf:"bytes,2,opt,name=acceptance_policy,json=acceptancePolicy,proto3" json:"acceptance_policy,omitempty"` // Orchestration defines cluster-level orchestration settings. - Orchestration OrchestrationConfig `protobuf:"bytes,3,opt,name=orchestration,proto3" json:"orchestration"` + Orchestration *OrchestrationConfig `protobuf:"bytes,3,opt,name=orchestration,proto3" json:"orchestration,omitempty"` // Raft defines the cluster's raft settings. - Raft RaftConfig `protobuf:"bytes,4,opt,name=raft,proto3" json:"raft"` + Raft *RaftConfig `protobuf:"bytes,4,opt,name=raft,proto3" json:"raft,omitempty"` // Dispatcher defines cluster-level dispatcher settings. - Dispatcher DispatcherConfig `protobuf:"bytes,5,opt,name=dispatcher,proto3" json:"dispatcher"` + Dispatcher *DispatcherConfig `protobuf:"bytes,5,opt,name=dispatcher,proto3" json:"dispatcher,omitempty"` // CAConfig defines cluster-level certificate authority settings. - CAConfig CAConfig `protobuf:"bytes,6,opt,name=ca_config,json=caConfig,proto3" json:"ca_config"` + CAConfig *CAConfig `protobuf:"bytes,6,opt,name=ca_config,json=caConfig,proto3" json:"ca_config,omitempty"` // TaskDefaults specifies the default values to use for task creation. - TaskDefaults TaskDefaults `protobuf:"bytes,7,opt,name=task_defaults,json=taskDefaults,proto3" json:"task_defaults"` + TaskDefaults *TaskDefaults `protobuf:"bytes,7,opt,name=task_defaults,json=taskDefaults,proto3" json:"task_defaults,omitempty"` // EncryptionConfig defines the cluster's encryption settings. - EncryptionConfig EncryptionConfig `protobuf:"bytes,8,opt,name=encryption_config,json=encryptionConfig,proto3" json:"encryption_config"` + EncryptionConfig *EncryptionConfig `protobuf:"bytes,8,opt,name=encryption_config,json=encryptionConfig,proto3" json:"encryption_config,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *ClusterSpec) Reset() { *m = ClusterSpec{} } -func (*ClusterSpec) ProtoMessage() {} -func (*ClusterSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_6589acc608f7d4fd, []int{13} -} -func (m *ClusterSpec) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ClusterSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ClusterSpec.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 *ClusterSpec) XXX_Merge(src proto.Message) { - xxx_messageInfo_ClusterSpec.Merge(m, src) -} -func (m *ClusterSpec) XXX_Size() int { - return m.Size() -} -func (m *ClusterSpec) XXX_DiscardUnknown() { - xxx_messageInfo_ClusterSpec.DiscardUnknown(m) +func (x *ClusterSpec) Reset() { + *x = ClusterSpec{} + mi := &file_api_specs_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -var xxx_messageInfo_ClusterSpec proto.InternalMessageInfo - -// SecretSpec specifies a user-provided secret. -type SecretSpec struct { - Annotations Annotations `protobuf:"bytes,1,opt,name=annotations,proto3" json:"annotations"` - // Data is the secret payload - the maximum size is 500KB (that is, 500*1024 bytes) - Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"` - // Templating controls whether and how to evaluate the secret payload as - // a template. If it is not set, no templating is used. - // - // The currently recognized values are: - // - golang: Go templating - Templating *Driver `protobuf:"bytes,3,opt,name=templating,proto3" json:"templating,omitempty"` - // Driver is the the secret driver that is used to store the specified secret - Driver *Driver `protobuf:"bytes,4,opt,name=driver,proto3" json:"driver,omitempty"` +func (x *ClusterSpec) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *SecretSpec) Reset() { *m = SecretSpec{} } -func (*SecretSpec) ProtoMessage() {} -func (*SecretSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_6589acc608f7d4fd, []int{14} -} -func (m *SecretSpec) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *SecretSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_SecretSpec.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err +func (*ClusterSpec) ProtoMessage() {} + +func (x *ClusterSpec) ProtoReflect() protoreflect.Message { + mi := &file_api_specs_proto_msgTypes[13] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *SecretSpec) XXX_Merge(src proto.Message) { - xxx_messageInfo_SecretSpec.Merge(m, src) -} -func (m *SecretSpec) XXX_Size() int { - return m.Size() + +// Deprecated: Use ClusterSpec.ProtoReflect.Descriptor instead. +func (*ClusterSpec) Descriptor() ([]byte, []int) { + return file_api_specs_proto_rawDescGZIP(), []int{13} } -func (m *SecretSpec) XXX_DiscardUnknown() { - xxx_messageInfo_SecretSpec.DiscardUnknown(m) + +func (x *ClusterSpec) GetAnnotations() *Annotations { + if x != nil { + return x.Annotations + } + return nil } -var xxx_messageInfo_SecretSpec proto.InternalMessageInfo +// Deprecated: Marked as deprecated in api/specs.proto. +func (x *ClusterSpec) GetAcceptancePolicy() *AcceptancePolicy { + if x != nil { + return x.AcceptancePolicy + } + return nil +} + +func (x *ClusterSpec) GetOrchestration() *OrchestrationConfig { + if x != nil { + return x.Orchestration + } + return nil +} + +func (x *ClusterSpec) GetRaft() *RaftConfig { + if x != nil { + return x.Raft + } + return nil +} + +func (x *ClusterSpec) GetDispatcher() *DispatcherConfig { + if x != nil { + return x.Dispatcher + } + return nil +} + +func (x *ClusterSpec) GetCAConfig() *CAConfig { + if x != nil { + return x.CAConfig + } + return nil +} + +func (x *ClusterSpec) GetTaskDefaults() *TaskDefaults { + if x != nil { + return x.TaskDefaults + } + return nil +} + +func (x *ClusterSpec) GetEncryptionConfig() *EncryptionConfig { + if x != nil { + return x.EncryptionConfig + } + return nil +} + +// SecretSpec specifies a user-provided secret. +type SecretSpec struct { + state protoimpl.MessageState `protogen:"open.v1"` + Annotations *Annotations `protobuf:"bytes,1,opt,name=annotations,proto3" json:"annotations,omitempty"` + // Data is the secret payload - the maximum size is 500KB (that is, 500*1024 bytes) + Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"` + // Templating controls whether and how to evaluate the secret payload as + // a template. If it is not set, no templating is used. + // + // The currently recognized values are: + // - golang: Go templating + Templating *Driver `protobuf:"bytes,3,opt,name=templating,proto3" json:"templating,omitempty"` + // Driver is the the secret driver that is used to store the specified secret + Driver *Driver `protobuf:"bytes,4,opt,name=driver,proto3" json:"driver,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SecretSpec) Reset() { + *x = SecretSpec{} + mi := &file_api_specs_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SecretSpec) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SecretSpec) ProtoMessage() {} + +func (x *SecretSpec) ProtoReflect() protoreflect.Message { + mi := &file_api_specs_proto_msgTypes[14] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SecretSpec.ProtoReflect.Descriptor instead. +func (*SecretSpec) Descriptor() ([]byte, []int) { + return file_api_specs_proto_rawDescGZIP(), []int{14} +} + +func (x *SecretSpec) GetAnnotations() *Annotations { + if x != nil { + return x.Annotations + } + return nil +} + +func (x *SecretSpec) GetData() []byte { + if x != nil { + return x.Data + } + return nil +} + +func (x *SecretSpec) GetTemplating() *Driver { + if x != nil { + return x.Templating + } + return nil +} + +func (x *SecretSpec) GetDriver() *Driver { + if x != nil { + return x.Driver + } + return nil +} // ConfigSpec specifies user-provided configuration files. type ConfigSpec struct { - Annotations Annotations `protobuf:"bytes,1,opt,name=annotations,proto3" json:"annotations"` + state protoimpl.MessageState `protogen:"open.v1"` + Annotations *Annotations `protobuf:"bytes,1,opt,name=annotations,proto3" json:"annotations,omitempty"` // Data is the config payload - the maximum size is 500KB (that is, 500*1024 bytes) // TODO(aaronl): Do we want to revise this to include multiple payloads in a single // ConfigSpec? Define this to be a tar? etc... @@ -1285,46 +1818,68 @@ type ConfigSpec struct { // // The currently recognized values are: // - golang: Go templating - Templating *Driver `protobuf:"bytes,3,opt,name=templating,proto3" json:"templating,omitempty"` + Templating *Driver `protobuf:"bytes,3,opt,name=templating,proto3" json:"templating,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ConfigSpec) Reset() { + *x = ConfigSpec{} + mi := &file_api_specs_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ConfigSpec) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ConfigSpec) Reset() { *m = ConfigSpec{} } func (*ConfigSpec) ProtoMessage() {} -func (*ConfigSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_6589acc608f7d4fd, []int{15} -} -func (m *ConfigSpec) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ConfigSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ConfigSpec.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *ConfigSpec) ProtoReflect() protoreflect.Message { + mi := &file_api_specs_proto_msgTypes[15] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *ConfigSpec) XXX_Merge(src proto.Message) { - xxx_messageInfo_ConfigSpec.Merge(m, src) + +// Deprecated: Use ConfigSpec.ProtoReflect.Descriptor instead. +func (*ConfigSpec) Descriptor() ([]byte, []int) { + return file_api_specs_proto_rawDescGZIP(), []int{15} } -func (m *ConfigSpec) XXX_Size() int { - return m.Size() + +func (x *ConfigSpec) GetAnnotations() *Annotations { + if x != nil { + return x.Annotations + } + return nil } -func (m *ConfigSpec) XXX_DiscardUnknown() { - xxx_messageInfo_ConfigSpec.DiscardUnknown(m) + +func (x *ConfigSpec) GetData() []byte { + if x != nil { + return x.Data + } + return nil } -var xxx_messageInfo_ConfigSpec proto.InternalMessageInfo +func (x *ConfigSpec) GetTemplating() *Driver { + if x != nil { + return x.Templating + } + return nil +} type VolumeSpec struct { + state protoimpl.MessageState `protogen:"open.v1"` // Annotations includes the name and labels of a volume. The name used in the // spec's Annotations will be passed to the Plugin as the "Name" in the // CreateVolume request. - Annotations Annotations `protobuf:"bytes,1,opt,name=annotations,proto3" json:"annotations"` + Annotations *Annotations `protobuf:"bytes,1,opt,name=annotations,proto3" json:"annotations,omitempty"` // Group defines the volume group this particular volume belongs to. When // requesting volumes for a workload, the group name can be used instead of // the volume's name, which tells swarmkit to pick one from the many volumes @@ -1362,7943 +1917,638 @@ type VolumeSpec struct { // Availability is the Volume's desired availability. Analogous to Node // Availability, this allows the user to take volumes offline in order to // update or delete them. - Availability VolumeSpec_VolumeAvailability `protobuf:"varint,8,opt,name=availability,proto3,enum=docker.swarmkit.v1.VolumeSpec_VolumeAvailability" json:"availability,omitempty"` -} - -func (m *VolumeSpec) Reset() { *m = VolumeSpec{} } -func (*VolumeSpec) ProtoMessage() {} -func (*VolumeSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_6589acc608f7d4fd, []int{16} -} -func (m *VolumeSpec) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *VolumeSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_VolumeSpec.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 *VolumeSpec) XXX_Merge(src proto.Message) { - xxx_messageInfo_VolumeSpec.Merge(m, src) -} -func (m *VolumeSpec) XXX_Size() int { - return m.Size() -} -func (m *VolumeSpec) XXX_DiscardUnknown() { - xxx_messageInfo_VolumeSpec.DiscardUnknown(m) -} - -var xxx_messageInfo_VolumeSpec proto.InternalMessageInfo - -func init() { - proto.RegisterEnum("docker.swarmkit.v1.NodeSpec_Membership", NodeSpec_Membership_name, NodeSpec_Membership_value) - proto.RegisterEnum("docker.swarmkit.v1.NodeSpec_Availability", NodeSpec_Availability_name, NodeSpec_Availability_value) - proto.RegisterEnum("docker.swarmkit.v1.ContainerSpec_Isolation", ContainerSpec_Isolation_name, ContainerSpec_Isolation_value) - proto.RegisterEnum("docker.swarmkit.v1.EndpointSpec_ResolutionMode", EndpointSpec_ResolutionMode_name, EndpointSpec_ResolutionMode_value) - proto.RegisterEnum("docker.swarmkit.v1.VolumeSpec_VolumeAvailability", VolumeSpec_VolumeAvailability_name, VolumeSpec_VolumeAvailability_value) - proto.RegisterType((*NodeSpec)(nil), "docker.swarmkit.v1.NodeSpec") - proto.RegisterType((*ServiceSpec)(nil), "docker.swarmkit.v1.ServiceSpec") - proto.RegisterType((*ReplicatedService)(nil), "docker.swarmkit.v1.ReplicatedService") - proto.RegisterType((*GlobalService)(nil), "docker.swarmkit.v1.GlobalService") - proto.RegisterType((*ReplicatedJob)(nil), "docker.swarmkit.v1.ReplicatedJob") - proto.RegisterType((*GlobalJob)(nil), "docker.swarmkit.v1.GlobalJob") - proto.RegisterType((*TaskSpec)(nil), "docker.swarmkit.v1.TaskSpec") - proto.RegisterType((*ResourceReference)(nil), "docker.swarmkit.v1.ResourceReference") - proto.RegisterType((*GenericRuntimeSpec)(nil), "docker.swarmkit.v1.GenericRuntimeSpec") - proto.RegisterType((*NetworkAttachmentSpec)(nil), "docker.swarmkit.v1.NetworkAttachmentSpec") - proto.RegisterType((*ContainerSpec)(nil), "docker.swarmkit.v1.ContainerSpec") - proto.RegisterMapType((map[string]string)(nil), "docker.swarmkit.v1.ContainerSpec.LabelsEntry") - proto.RegisterMapType((map[string]string)(nil), "docker.swarmkit.v1.ContainerSpec.SysctlsEntry") - proto.RegisterType((*ContainerSpec_PullOptions)(nil), "docker.swarmkit.v1.ContainerSpec.PullOptions") - proto.RegisterType((*ContainerSpec_DNSConfig)(nil), "docker.swarmkit.v1.ContainerSpec.DNSConfig") - proto.RegisterType((*ContainerSpec_Ulimit)(nil), "docker.swarmkit.v1.ContainerSpec.Ulimit") - proto.RegisterType((*EndpointSpec)(nil), "docker.swarmkit.v1.EndpointSpec") - proto.RegisterType((*NetworkSpec)(nil), "docker.swarmkit.v1.NetworkSpec") - proto.RegisterType((*ClusterSpec)(nil), "docker.swarmkit.v1.ClusterSpec") - proto.RegisterType((*SecretSpec)(nil), "docker.swarmkit.v1.SecretSpec") - proto.RegisterType((*ConfigSpec)(nil), "docker.swarmkit.v1.ConfigSpec") - proto.RegisterType((*VolumeSpec)(nil), "docker.swarmkit.v1.VolumeSpec") -} - -func init() { - proto.RegisterFile("github.com/docker/swarmkit/api/specs.proto", fileDescriptor_6589acc608f7d4fd) -} - -var fileDescriptor_6589acc608f7d4fd = []byte{ - // 2563 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x59, 0x41, 0x73, 0x1b, 0xb7, - 0xf5, 0x27, 0x25, 0x8a, 0x22, 0xdf, 0x92, 0x32, 0x8d, 0x38, 0xc9, 0x8a, 0xb6, 0x29, 0x86, 0x71, - 0x1c, 0x25, 0x99, 0x3f, 0x35, 0xd1, 0x3f, 0x93, 0x26, 0x4e, 0xd3, 0x96, 0x14, 0x19, 0x8b, 0xb1, - 0x2d, 0x73, 0x40, 0x59, 0xad, 0x67, 0x3a, 0xc3, 0x81, 0x76, 0x21, 0x72, 0xa3, 0xe5, 0x62, 0x8b, - 0x05, 0x95, 0xf0, 0xd6, 0x63, 0xc6, 0xbd, 0xf4, 0xd0, 0xab, 0x4e, 0x9d, 0x9e, 0x7a, 0x69, 0x3f, - 0x42, 0x6f, 0x39, 0xe6, 0x98, 0x5e, 0x34, 0x8d, 0xd2, 0x6f, 0xd0, 0x5b, 0x2f, 0xed, 0x00, 0x8b, - 0x5d, 0x2e, 0x25, 0xd2, 0x72, 0xa7, 0x3e, 0xf4, 0x06, 0x3c, 0xfe, 0x7e, 0x6f, 0x81, 0x87, 0xf7, - 0x1e, 0xde, 0x03, 0xe1, 0xdd, 0x81, 0x23, 0x86, 0xe3, 0xc3, 0xba, 0xc5, 0x46, 0x5b, 0x36, 0xb3, - 0x8e, 0x29, 0xdf, 0x0a, 0xbe, 0x24, 0x7c, 0x74, 0xec, 0x88, 0x2d, 0xe2, 0x3b, 0x5b, 0x81, 0x4f, - 0xad, 0xa0, 0xee, 0x73, 0x26, 0x18, 0x42, 0x21, 0xa0, 0x1e, 0x01, 0xea, 0x27, 0xef, 0x97, 0xaf, - 0xe2, 0x8b, 0x89, 0x4f, 0x35, 0xbf, 0x7c, 0x63, 0xc0, 0x06, 0x4c, 0x0d, 0xb7, 0xe4, 0x48, 0x4b, - 0x2b, 0x03, 0xc6, 0x06, 0x2e, 0xdd, 0x52, 0xb3, 0xc3, 0xf1, 0xd1, 0x96, 0x3d, 0xe6, 0x44, 0x38, - 0xcc, 0xd3, 0xbf, 0xaf, 0x5f, 0xfc, 0x9d, 0x78, 0x93, 0x45, 0xd4, 0x2f, 0x39, 0xf1, 0x7d, 0xca, - 0xf5, 0x07, 0x6b, 0xa7, 0x19, 0xc8, 0xed, 0x31, 0x9b, 0xf6, 0x7c, 0x6a, 0xa1, 0xfb, 0x60, 0x10, - 0xcf, 0x63, 0x42, 0xe9, 0x0e, 0xcc, 0x74, 0x35, 0xbd, 0x69, 0x6c, 0x6f, 0xd4, 0x2f, 0xef, 0xa9, - 0xde, 0x98, 0xc2, 0x9a, 0x99, 0x6f, 0xce, 0x36, 0x52, 0x38, 0xc9, 0x44, 0x3f, 0x85, 0x82, 0x4d, - 0x03, 0x87, 0x53, 0xbb, 0xcf, 0x99, 0x4b, 0xcd, 0xa5, 0x6a, 0x7a, 0x73, 0x6d, 0xfb, 0xd6, 0x3c, - 0x4d, 0xf2, 0xe3, 0x98, 0xb9, 0x14, 0x1b, 0x9a, 0x21, 0x27, 0xe8, 0x3e, 0xc0, 0x88, 0x8e, 0x0e, - 0x29, 0x0f, 0x86, 0x8e, 0x6f, 0x2e, 0x2b, 0xfa, 0xdb, 0x8b, 0xe8, 0x72, 0xed, 0xf5, 0x47, 0x31, - 0x1c, 0x27, 0xa8, 0xe8, 0x11, 0x14, 0xc8, 0x09, 0x71, 0x5c, 0x72, 0xe8, 0xb8, 0x8e, 0x98, 0x98, - 0x19, 0xa5, 0xea, 0x9d, 0xe7, 0xaa, 0x6a, 0x24, 0x08, 0x78, 0x86, 0x5e, 0xb3, 0x01, 0xa6, 0x1f, - 0x42, 0x77, 0x61, 0xb5, 0xdb, 0xde, 0x6b, 0x75, 0xf6, 0xee, 0x97, 0x52, 0xe5, 0xf5, 0x67, 0xa7, - 0xd5, 0x57, 0xa5, 0x8e, 0x29, 0xa0, 0x4b, 0x3d, 0xdb, 0xf1, 0x06, 0x68, 0x13, 0x72, 0x8d, 0x9d, - 0x9d, 0x76, 0x77, 0xbf, 0xdd, 0x2a, 0xa5, 0xcb, 0xe5, 0x67, 0xa7, 0xd5, 0xd7, 0x66, 0x81, 0x0d, - 0xcb, 0xa2, 0xbe, 0xa0, 0x76, 0x39, 0xf3, 0xf5, 0xef, 0x2b, 0xa9, 0xda, 0xd7, 0x69, 0x28, 0x24, - 0x17, 0x81, 0xee, 0x42, 0xb6, 0xb1, 0xb3, 0xdf, 0x39, 0x68, 0x97, 0x52, 0x53, 0x7a, 0x12, 0xd1, - 0xb0, 0x84, 0x73, 0x42, 0xd1, 0x1d, 0x58, 0xe9, 0x36, 0x9e, 0xf4, 0xda, 0xa5, 0xf4, 0x74, 0x39, - 0x49, 0x58, 0x97, 0x8c, 0x03, 0x85, 0x6a, 0xe1, 0x46, 0x67, 0xaf, 0xb4, 0x34, 0x1f, 0xd5, 0xe2, - 0xc4, 0xf1, 0xf4, 0x52, 0xfe, 0xb8, 0x02, 0x46, 0x8f, 0xf2, 0x13, 0xc7, 0x7a, 0xc9, 0x2e, 0xf2, - 0x21, 0x64, 0x04, 0x09, 0x8e, 0x95, 0x6b, 0x18, 0xf3, 0x5d, 0x63, 0x9f, 0x04, 0xc7, 0xf2, 0xa3, - 0x9a, 0xae, 0xf0, 0xd2, 0x33, 0x38, 0xf5, 0x5d, 0xc7, 0x22, 0x82, 0xda, 0xca, 0x33, 0x8c, 0xed, - 0xb7, 0xe6, 0xb1, 0x71, 0x8c, 0xd2, 0xeb, 0xdf, 0x4d, 0xe1, 0x04, 0x15, 0x7d, 0x02, 0xd9, 0x81, - 0xcb, 0x0e, 0x89, 0xab, 0x7c, 0xc2, 0xd8, 0x7e, 0x63, 0x9e, 0x92, 0xfb, 0x0a, 0x31, 0x55, 0xa0, - 0x29, 0xe8, 0x73, 0x58, 0x9b, 0xaa, 0xea, 0x7f, 0xc1, 0x0e, 0x4d, 0x58, 0xac, 0x64, 0xba, 0x92, - 0xcf, 0xd9, 0xe1, 0x6e, 0x0a, 0x17, 0x79, 0x52, 0x80, 0x7e, 0x02, 0x10, 0x6a, 0x55, 0x7a, 0x0c, - 0xa5, 0xe7, 0xf6, 0xe2, 0xc5, 0x84, 0x3a, 0xf2, 0x83, 0x68, 0x82, 0x3e, 0x82, 0xec, 0xd8, 0xb7, - 0x89, 0xa0, 0x66, 0x56, 0x71, 0xab, 0xf3, 0xb8, 0x4f, 0x14, 0x62, 0x87, 0x79, 0x47, 0xce, 0x00, - 0x6b, 0x3c, 0xfa, 0x31, 0xe4, 0x38, 0x73, 0xdd, 0x43, 0x62, 0x1d, 0x9b, 0xf9, 0x17, 0xe4, 0xc6, - 0x0c, 0xf4, 0x00, 0x72, 0x1e, 0x15, 0x5f, 0x32, 0x7e, 0x1c, 0x98, 0xab, 0xd5, 0xe5, 0x4d, 0x63, - 0xfb, 0xbd, 0xb9, 0x61, 0x15, 0x62, 0x1a, 0x42, 0x10, 0x6b, 0x38, 0xa2, 0x9e, 0x08, 0x15, 0x35, - 0x97, 0xcc, 0x34, 0x8e, 0x15, 0xc8, 0xa5, 0x50, 0xcf, 0xf6, 0x99, 0xe3, 0x09, 0x33, 0xb7, 0x78, - 0x29, 0x6d, 0x8d, 0x91, 0x6e, 0x81, 0x63, 0x46, 0x33, 0x0b, 0x99, 0x11, 0xb3, 0x69, 0x6d, 0x0b, - 0xae, 0x5f, 0x3a, 0x76, 0x54, 0x86, 0x9c, 0x36, 0x78, 0xe8, 0xaf, 0x19, 0x1c, 0xcf, 0x6b, 0xd7, - 0xa0, 0x38, 0x73, 0xc4, 0x35, 0x0b, 0x8a, 0x33, 0xc7, 0x85, 0xde, 0x82, 0xb5, 0x11, 0xf9, 0xaa, - 0x6f, 0x31, 0xcf, 0x1a, 0x73, 0x4e, 0x3d, 0xa1, 0x75, 0x14, 0x47, 0xe4, 0xab, 0x9d, 0x58, 0x88, - 0xde, 0x83, 0xeb, 0x82, 0x09, 0xe2, 0xf6, 0x2d, 0x36, 0xf2, 0x5d, 0x1a, 0x46, 0xc7, 0x92, 0x42, - 0x96, 0xd4, 0x0f, 0x3b, 0x53, 0x79, 0xcd, 0x80, 0x7c, 0x7c, 0x96, 0xb5, 0x3f, 0xad, 0x40, 0x2e, - 0xf2, 0x74, 0xf4, 0x00, 0x80, 0xc4, 0x86, 0xd2, 0x86, 0x78, 0xe7, 0x85, 0xac, 0x2a, 0xe9, 0xd2, - 0xc3, 0xa7, 0x74, 0xd4, 0x80, 0xbc, 0xc5, 0x3c, 0x41, 0x1c, 0x8f, 0x72, 0x1d, 0xa9, 0x73, 0xfd, - 0x73, 0x27, 0x02, 0x69, 0x1d, 0x53, 0x16, 0x6a, 0xc2, 0xea, 0x80, 0x7a, 0x94, 0x3b, 0x96, 0x76, - 0xf0, 0xbb, 0x73, 0x1d, 0x33, 0x84, 0xe0, 0xb1, 0x27, 0x9c, 0x11, 0xd5, 0x5a, 0x22, 0x22, 0xfa, - 0x0c, 0xf2, 0x9c, 0x06, 0x6c, 0xcc, 0x2d, 0x1a, 0xe8, 0x70, 0xdf, 0x9c, 0x1f, 0x26, 0x21, 0x08, - 0xd3, 0x5f, 0x8d, 0x1d, 0x4e, 0xe5, 0x16, 0x02, 0x3c, 0xa5, 0xa2, 0x4f, 0x60, 0x95, 0xd3, 0x40, - 0x10, 0x2e, 0x9e, 0x17, 0xb1, 0x38, 0x84, 0x74, 0x99, 0xeb, 0x58, 0x13, 0x1c, 0x31, 0xd0, 0x27, - 0x90, 0xf7, 0x5d, 0x62, 0x29, 0xad, 0xe6, 0xca, 0xe2, 0x18, 0xeb, 0x46, 0x20, 0x3c, 0xc5, 0xa3, - 0x8f, 0x01, 0x5c, 0x36, 0xe8, 0xdb, 0xdc, 0x39, 0xa1, 0x5c, 0x47, 0x59, 0x79, 0x1e, 0xbb, 0xa5, - 0x10, 0x38, 0xef, 0xb2, 0x41, 0x38, 0x44, 0xf7, 0xff, 0xab, 0x20, 0x49, 0x04, 0xc8, 0x1b, 0x50, - 0x38, 0x62, 0xdc, 0xa2, 0x7d, 0x1d, 0xeb, 0x79, 0xe5, 0x5b, 0x86, 0x92, 0x85, 0x01, 0x8a, 0x7e, - 0x09, 0xaf, 0x44, 0xd6, 0xea, 0x73, 0x7a, 0x44, 0x39, 0xf5, 0xa4, 0xc9, 0x0d, 0xf5, 0xd9, 0xb7, - 0x9e, 0x6f, 0x72, 0x8d, 0xd6, 0xa9, 0x16, 0xf1, 0x8b, 0x3f, 0x04, 0xcd, 0x3c, 0xac, 0xf2, 0xf0, - 0x80, 0x6b, 0xbf, 0x49, 0xcb, 0x38, 0xbb, 0x80, 0x40, 0x5b, 0x60, 0xc4, 0x9f, 0x77, 0x6c, 0xe5, - 0x70, 0xf9, 0xe6, 0xda, 0xf9, 0xd9, 0x06, 0x44, 0xd8, 0x4e, 0x4b, 0x66, 0x60, 0x3d, 0xb6, 0x51, - 0x1b, 0x8a, 0x31, 0x41, 0x16, 0x41, 0xba, 0x4c, 0xa8, 0x3e, 0x6f, 0xa5, 0xfb, 0x13, 0x9f, 0xe2, - 0x02, 0x4f, 0xcc, 0x6a, 0xbf, 0x00, 0x74, 0xd9, 0x01, 0x11, 0x82, 0xcc, 0xb1, 0xe3, 0xe9, 0x65, - 0x60, 0x35, 0x46, 0x75, 0x58, 0xf5, 0xc9, 0xc4, 0x65, 0xc4, 0xd6, 0x7e, 0x78, 0xa3, 0x1e, 0x96, - 0x47, 0xf5, 0xa8, 0x3c, 0xaa, 0x37, 0xbc, 0x09, 0x8e, 0x40, 0xb5, 0x07, 0xf0, 0xea, 0xdc, 0x38, - 0x43, 0xdb, 0x50, 0x88, 0x63, 0x64, 0xba, 0xd7, 0x6b, 0xe7, 0x67, 0x1b, 0x46, 0x1c, 0x4c, 0x9d, - 0x16, 0x36, 0x62, 0x50, 0xc7, 0xae, 0xfd, 0x7d, 0x0d, 0x8a, 0x33, 0x91, 0x86, 0x6e, 0xc0, 0x8a, - 0x33, 0x22, 0x03, 0xaa, 0xd7, 0x18, 0x4e, 0x50, 0x1b, 0xb2, 0x2e, 0x39, 0xa4, 0xae, 0x8c, 0x15, - 0x79, 0x70, 0xff, 0x77, 0x65, 0xc8, 0xd6, 0x1f, 0x2a, 0x7c, 0xdb, 0x13, 0x7c, 0x82, 0x35, 0x19, - 0x99, 0xb0, 0x6a, 0xb1, 0xd1, 0x88, 0x78, 0xf2, 0x92, 0x5c, 0xde, 0xcc, 0xe3, 0x68, 0x2a, 0x2d, - 0x43, 0xf8, 0x20, 0x30, 0x33, 0x4a, 0xac, 0xc6, 0x32, 0x47, 0x0e, 0x59, 0x20, 0x3c, 0x32, 0xa2, - 0xe6, 0x9a, 0x5a, 0x4d, 0x3c, 0x47, 0x25, 0x58, 0xa6, 0xde, 0x89, 0xb9, 0xa2, 0xe0, 0x72, 0x28, - 0x25, 0xb6, 0x13, 0x06, 0x42, 0x1e, 0xcb, 0xa1, 0xd4, 0x39, 0x0e, 0x28, 0x37, 0x57, 0x43, 0x6b, - 0xcb, 0x31, 0x7a, 0x0d, 0xb2, 0x03, 0xce, 0xc6, 0x7e, 0xe8, 0x81, 0x79, 0xac, 0x67, 0xf2, 0xbe, - 0xf3, 0xb9, 0x73, 0xe2, 0xb8, 0x74, 0x40, 0x03, 0xf3, 0x35, 0x75, 0x10, 0x95, 0xb9, 0xb1, 0x18, - 0xa3, 0x70, 0x82, 0x81, 0xea, 0x90, 0x71, 0x3c, 0x47, 0x98, 0xaf, 0xeb, 0x38, 0xbc, 0x78, 0x84, - 0x4d, 0xc6, 0xdc, 0x03, 0xe2, 0x8e, 0x29, 0x56, 0x38, 0xb4, 0x0e, 0xcb, 0x42, 0x4c, 0xcc, 0x62, - 0x35, 0xbd, 0x99, 0x6b, 0xae, 0x9e, 0x9f, 0x6d, 0x2c, 0xef, 0xef, 0x3f, 0xc5, 0x52, 0x86, 0x6e, - 0x03, 0x30, 0x9f, 0x7a, 0xfd, 0x40, 0xd8, 0x8e, 0x67, 0x22, 0x89, 0xc0, 0x79, 0x29, 0xe9, 0x49, - 0x01, 0xba, 0x29, 0x33, 0x17, 0xb1, 0xfb, 0xcc, 0x73, 0x27, 0xe6, 0x2b, 0xea, 0xd7, 0x9c, 0x14, - 0x3c, 0xf6, 0xdc, 0x09, 0xda, 0x00, 0x23, 0x10, 0xcc, 0xef, 0x07, 0xce, 0xc0, 0x23, 0xae, 0x79, - 0x43, 0xed, 0x1c, 0xa4, 0xa8, 0xa7, 0x24, 0xe8, 0x47, 0x90, 0x1d, 0xb1, 0xb1, 0x27, 0x02, 0x33, - 0xa7, 0x0e, 0x72, 0x7d, 0xde, 0x1e, 0x1f, 0x49, 0x84, 0x8e, 0x3a, 0x0d, 0x47, 0x6d, 0xb8, 0xae, - 0x34, 0x0f, 0x38, 0xb1, 0x68, 0xdf, 0xa7, 0xdc, 0x61, 0xb6, 0xbe, 0x9f, 0xd7, 0x2f, 0xed, 0xb6, - 0xa5, 0x5b, 0x01, 0x7c, 0x4d, 0x72, 0xee, 0x4b, 0x4a, 0x57, 0x31, 0x50, 0x17, 0x0a, 0xfe, 0xd8, - 0x75, 0xfb, 0xcc, 0x0f, 0x6f, 0xa3, 0x30, 0x81, 0xbf, 0x80, 0x3b, 0x75, 0xc7, 0xae, 0xfb, 0x38, - 0x24, 0x61, 0xc3, 0x9f, 0x4e, 0xd0, 0xa7, 0xb0, 0x1a, 0x50, 0x8b, 0x53, 0x11, 0x98, 0x05, 0xb5, - 0xa5, 0x37, 0xe7, 0x29, 0xeb, 0x29, 0x48, 0x9c, 0x17, 0x70, 0xc4, 0x91, 0x74, 0x4b, 0xa5, 0xb5, - 0xc0, 0x7c, 0x75, 0x31, 0x5d, 0x67, 0xbe, 0x29, 0x5d, 0x73, 0x64, 0xb8, 0x48, 0x9f, 0x0c, 0xcc, - 0xeb, 0xca, 0x9d, 0xc2, 0x09, 0x7a, 0x0a, 0x60, 0x7b, 0x41, 0x3f, 0x04, 0x99, 0xd7, 0xd4, 0x1e, - 0xdf, 0xbb, 0x7a, 0x8f, 0xad, 0xbd, 0x9e, 0xae, 0x43, 0x8a, 0xe7, 0x67, 0x1b, 0xf9, 0x78, 0x8a, - 0xf3, 0xb6, 0x17, 0x84, 0x43, 0xd4, 0x04, 0x63, 0x48, 0x89, 0x2b, 0x86, 0xd6, 0x90, 0x5a, 0xc7, - 0x66, 0x69, 0x71, 0x59, 0xb2, 0xab, 0x60, 0x5a, 0x43, 0x92, 0x84, 0x3a, 0x90, 0x77, 0x02, 0xe6, - 0xaa, 0x23, 0x32, 0x4d, 0x95, 0xdf, 0x5e, 0x60, 0x75, 0x9d, 0x88, 0x82, 0xa7, 0x6c, 0x74, 0x0b, - 0xf2, 0xbe, 0x63, 0x07, 0x0f, 0x9d, 0x91, 0x23, 0xcc, 0xf5, 0x6a, 0x7a, 0x73, 0x19, 0x4f, 0x05, - 0x68, 0x17, 0x56, 0x83, 0x49, 0x60, 0x09, 0x37, 0x30, 0xcb, 0xca, 0xb8, 0xf5, 0xab, 0x3f, 0xd3, - 0x0b, 0x09, 0x61, 0xe2, 0x88, 0xe8, 0xb2, 0xe2, 0xb1, 0x88, 0xaf, 0x7b, 0x81, 0x3e, 0xb1, 0x6d, - 0xf3, 0xa6, 0x32, 0x78, 0x71, 0x2a, 0x6d, 0xd8, 0x36, 0x7a, 0x1b, 0xae, 0x25, 0x60, 0x36, 0x67, - 0xbe, 0x79, 0x4b, 0xe1, 0x12, 0xec, 0x16, 0x67, 0xbe, 0xac, 0x21, 0xc6, 0xae, 0x5c, 0x63, 0x60, - 0xde, 0x56, 0x2b, 0xdb, 0xbc, 0x7a, 0x65, 0x4f, 0x14, 0x01, 0x47, 0x44, 0x54, 0x83, 0x22, 0x63, - 0xa3, 0x7e, 0x60, 0x31, 0x4e, 0xfb, 0xc4, 0xfe, 0xc2, 0xac, 0xa8, 0xfd, 0x1b, 0x8c, 0x8d, 0x7a, - 0x52, 0xd6, 0xb0, 0xbf, 0x28, 0x7f, 0x0c, 0x46, 0x22, 0x11, 0xca, 0x24, 0x75, 0x4c, 0x27, 0x3a, - 0xb7, 0xca, 0xa1, 0x74, 0xa0, 0x13, 0x99, 0x17, 0x54, 0xf2, 0xcf, 0xe3, 0x70, 0x72, 0x6f, 0xe9, - 0xa3, 0x74, 0x79, 0x1b, 0x8c, 0x84, 0xd3, 0xa3, 0x37, 0xe5, 0xc5, 0x34, 0x70, 0x02, 0xc1, 0x27, - 0x7d, 0x32, 0x16, 0x43, 0xf3, 0x67, 0x8a, 0x50, 0x88, 0x84, 0x8d, 0xb1, 0x18, 0x96, 0xfb, 0x30, - 0xf5, 0x1a, 0x54, 0x05, 0x43, 0xe6, 0xca, 0x80, 0xf2, 0x13, 0xca, 0x65, 0x99, 0x29, 0x0d, 0x91, - 0x14, 0xc9, 0x6c, 0x18, 0x50, 0xc2, 0xad, 0xa1, 0x4a, 0xeb, 0x79, 0xac, 0x67, 0x32, 0x4f, 0x47, - 0x01, 0xaa, 0xf3, 0xb4, 0x9e, 0x96, 0xef, 0x41, 0x21, 0x79, 0x40, 0xff, 0xd1, 0x86, 0x5a, 0x90, - 0x0d, 0x4d, 0x28, 0x33, 0xb3, 0xca, 0xea, 0xfa, 0x1e, 0x54, 0x19, 0x1d, 0x41, 0x26, 0x60, 0x47, - 0x42, 0xd1, 0x96, 0xb1, 0x1a, 0x4b, 0xd9, 0x90, 0xf0, 0xb0, 0xa3, 0x5a, 0xc6, 0x6a, 0x5c, 0xfb, - 0x73, 0x1a, 0xf2, 0xb1, 0x2b, 0xa2, 0x0f, 0xe0, 0x7a, 0xa7, 0xf7, 0xf8, 0x61, 0x63, 0xbf, 0xf3, - 0x78, 0xaf, 0xdf, 0x6a, 0x7f, 0xd6, 0x78, 0xf2, 0x70, 0xbf, 0x94, 0x2a, 0xdf, 0x7e, 0x76, 0x5a, - 0x5d, 0x9f, 0xde, 0x7a, 0x11, 0xbc, 0x45, 0x8f, 0xc8, 0xd8, 0x15, 0xb3, 0xac, 0x2e, 0x7e, 0xbc, - 0xd3, 0xee, 0xf5, 0x4a, 0xe9, 0x45, 0xac, 0x2e, 0x67, 0x16, 0x0d, 0x02, 0xb4, 0x0d, 0xa5, 0x29, - 0x6b, 0xf7, 0x69, 0xb7, 0x8d, 0x0f, 0x4a, 0x4b, 0xe5, 0x5b, 0xcf, 0x4e, 0xab, 0xe6, 0x65, 0xd2, - 0xee, 0xc4, 0xa7, 0xfc, 0x40, 0x37, 0xac, 0xff, 0x48, 0x43, 0x21, 0xd9, 0x25, 0xa0, 0x9d, 0xb0, - 0x37, 0x50, 0x06, 0x58, 0xdb, 0xde, 0xba, 0xaa, 0xab, 0x50, 0x95, 0x86, 0x3b, 0x96, 0x7a, 0x1f, - 0x31, 0x9b, 0x62, 0x45, 0x46, 0x1f, 0xc0, 0x8a, 0xcf, 0xb8, 0x88, 0xee, 0xe4, 0xf9, 0xd7, 0x15, - 0xe3, 0x51, 0xd9, 0x16, 0x82, 0x6b, 0x43, 0x58, 0x9b, 0xd5, 0x86, 0xee, 0xc0, 0xf2, 0x41, 0xa7, - 0x5b, 0x4a, 0x95, 0x6f, 0x3e, 0x3b, 0xad, 0xbe, 0x3e, 0xfb, 0xe3, 0x81, 0xc3, 0xc5, 0x98, 0xb8, - 0x9d, 0x2e, 0x7a, 0x17, 0x56, 0x5a, 0x7b, 0x3d, 0x8c, 0x4b, 0xe9, 0xf2, 0xc6, 0xb3, 0xd3, 0xea, - 0xcd, 0x59, 0x9c, 0xfc, 0x89, 0x8d, 0x3d, 0x1b, 0xb3, 0xc3, 0xb8, 0x4d, 0xff, 0xe7, 0x12, 0x18, - 0xba, 0x54, 0x79, 0xd9, 0x2f, 0x39, 0xc5, 0xb0, 0xec, 0x8d, 0x32, 0xec, 0xd2, 0x95, 0xd5, 0x6f, - 0x21, 0x24, 0xe8, 0xc8, 0x78, 0x03, 0x0a, 0x8e, 0x7f, 0xf2, 0x61, 0x9f, 0x7a, 0xe4, 0xd0, 0xd5, - 0x1d, 0x7b, 0x0e, 0x1b, 0x52, 0xd6, 0x0e, 0x45, 0xb2, 0xf8, 0x70, 0x3c, 0x41, 0xb9, 0xa7, 0x7b, - 0xf1, 0x1c, 0x8e, 0xe7, 0xe8, 0x53, 0xc8, 0x38, 0x3e, 0x19, 0xe9, 0x92, 0x7d, 0xee, 0x0e, 0x3a, - 0xdd, 0xc6, 0x23, 0x1d, 0xb9, 0xcd, 0xdc, 0xf9, 0xd9, 0x46, 0x46, 0x0a, 0xb0, 0xa2, 0xa1, 0x4a, - 0xd4, 0x4f, 0xc9, 0x2f, 0xa9, 0x82, 0x25, 0x87, 0x13, 0x12, 0x19, 0x7d, 0x8e, 0x37, 0xe0, 0x34, - 0x08, 0x54, 0xe9, 0x92, 0xc3, 0xd1, 0x14, 0x95, 0x61, 0x55, 0xd7, 0xde, 0xaa, 0x0d, 0xcb, 0xcb, - 0x8e, 0x46, 0x0b, 0x9a, 0x45, 0x30, 0x42, 0x6b, 0xf4, 0x8f, 0x38, 0x1b, 0xd5, 0xfe, 0x95, 0x01, - 0x63, 0xc7, 0x1d, 0x07, 0x42, 0xd7, 0x75, 0x2f, 0xcd, 0xf8, 0x4f, 0xe1, 0x3a, 0x51, 0x2f, 0x43, - 0xc4, 0x93, 0x85, 0x80, 0x6a, 0x69, 0xf4, 0x01, 0xdc, 0x99, 0xab, 0x2e, 0x06, 0x87, 0xed, 0x4f, - 0x33, 0x2b, 0x75, 0x9a, 0x69, 0x5c, 0x22, 0x17, 0x7e, 0x41, 0x3d, 0x28, 0x32, 0x6e, 0x0d, 0x69, - 0x20, 0xc2, 0xf2, 0x41, 0xbf, 0xa4, 0xcc, 0x7d, 0x63, 0x7b, 0x9c, 0x04, 0xea, 0x5b, 0x33, 0x5c, - 0xed, 0xac, 0x0e, 0xf4, 0x11, 0x64, 0x38, 0x39, 0x8a, 0xda, 0xb3, 0xb9, 0x41, 0x82, 0xc9, 0x91, - 0x98, 0x51, 0xa1, 0x18, 0xe8, 0x73, 0x00, 0xdb, 0x09, 0x7c, 0x22, 0xac, 0x21, 0xe5, 0xfa, 0xb0, - 0xe7, 0x6e, 0xb1, 0x15, 0xa3, 0x66, 0xb4, 0x24, 0xd8, 0xe8, 0x01, 0xe4, 0x2d, 0x12, 0xb9, 0x6b, - 0x76, 0xf1, 0xf3, 0xd2, 0x4e, 0x43, 0xab, 0x28, 0x49, 0x15, 0xe7, 0x67, 0x1b, 0xb9, 0x48, 0x82, - 0x73, 0x16, 0xd1, 0xee, 0xfb, 0x00, 0x8a, 0x82, 0x04, 0xc7, 0x7d, 0x3b, 0x4c, 0x67, 0xa1, 0x9b, - 0x2c, 0xa8, 0x02, 0x64, 0x17, 0xaf, 0xd3, 0x5e, 0x74, 0x9c, 0x05, 0x91, 0x90, 0xa1, 0x9f, 0xc3, - 0x75, 0xea, 0x59, 0x7c, 0xa2, 0x9c, 0x35, 0x5a, 0x61, 0x6e, 0xf1, 0x66, 0xdb, 0x31, 0x78, 0x66, - 0xb3, 0x25, 0x7a, 0x41, 0x5e, 0xfb, 0x6b, 0x1a, 0x20, 0x2c, 0xbb, 0x5e, 0xae, 0x03, 0x22, 0xc8, - 0xd8, 0x44, 0x10, 0xe5, 0x73, 0x05, 0xac, 0xc6, 0xe8, 0x1e, 0x80, 0xa0, 0x23, 0x5f, 0xa6, 0x5e, - 0x6f, 0xa0, 0xdd, 0xe6, 0x79, 0xe9, 0x20, 0x81, 0x46, 0xdb, 0x90, 0xd5, 0x4d, 0x74, 0xe6, 0x4a, - 0x9e, 0x46, 0xd6, 0xfe, 0x90, 0x06, 0x08, 0xb7, 0xf9, 0x3f, 0xbd, 0xb7, 0xda, 0x5f, 0x56, 0x00, - 0x0e, 0x98, 0x3b, 0x1e, 0xbd, 0xe4, 0x87, 0xd2, 0x1b, 0xb0, 0xa2, 0x1a, 0xa7, 0xe8, 0x92, 0x57, - 0x93, 0x84, 0x25, 0x97, 0x5f, 0xd4, 0x92, 0xa8, 0x0d, 0x86, 0xcc, 0x03, 0x41, 0xd0, 0x57, 0x17, - 0x62, 0x66, 0xb1, 0xe3, 0x85, 0xfb, 0x68, 0x28, 0xb0, 0xba, 0x05, 0x81, 0xc4, 0x63, 0x74, 0x6f, - 0xda, 0x05, 0xac, 0xa8, 0xdb, 0xb0, 0xba, 0x58, 0x85, 0xee, 0x05, 0xe2, 0x16, 0x80, 0xc2, 0x7a, - 0xa8, 0xd5, 0xd1, 0xcf, 0xeb, 0x89, 0xb7, 0x1e, 0x1d, 0xab, 0x73, 0x53, 0xd0, 0x3e, 0xf3, 0x99, - 0xcb, 0x06, 0x49, 0x3c, 0x5e, 0xac, 0x09, 0xed, 0x86, 0x25, 0xac, 0x25, 0x2b, 0x53, 0x4e, 0xbc, - 0x01, 0xd5, 0x61, 0x3b, 0xff, 0xf9, 0x4b, 0x23, 0xb1, 0x04, 0x86, 0x55, 0x6e, 0x3c, 0x45, 0x4f, - 0x2e, 0xfc, 0x7f, 0x90, 0x53, 0x55, 0xc4, 0xfb, 0xcf, 0xd9, 0xb1, 0xac, 0x21, 0xb4, 0xfd, 0x16, - 0xff, 0x8f, 0xf0, 0xbb, 0x34, 0xa0, 0xcb, 0x20, 0xb4, 0x99, 0x78, 0xe7, 0x57, 0xc5, 0xce, 0x65, - 0x8c, 0x7e, 0xe9, 0xbf, 0x3b, 0x7d, 0xe9, 0x57, 0xa5, 0xc4, 0x65, 0x60, 0xf8, 0xd6, 0x7f, 0x77, - 0xfa, 0xd6, 0xbf, 0x00, 0x97, 0x78, 0xed, 0x6f, 0xde, 0xf9, 0xe6, 0xfb, 0x4a, 0xea, 0xbb, 0xef, - 0x2b, 0xa9, 0x5f, 0x9f, 0x57, 0xd2, 0xdf, 0x9c, 0x57, 0xd2, 0xdf, 0x9e, 0x57, 0xd2, 0x7f, 0x3b, - 0xaf, 0xa4, 0x7f, 0xfb, 0x43, 0x25, 0xf5, 0xed, 0x0f, 0x95, 0xd4, 0x77, 0x3f, 0x54, 0x52, 0x87, - 0x59, 0xd5, 0x7c, 0xfe, 0xff, 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, 0x51, 0x6a, 0xd3, 0x1b, 0x19, - 0x1b, 0x00, 0x00, -} - -func (m *NodeSpec) Copy() *NodeSpec { - if m == nil { - return nil - } - o := &NodeSpec{} - o.CopyFrom(m) - return o -} - -func (m *NodeSpec) CopyFrom(src interface{}) { - - o := src.(*NodeSpec) - *m = *o - github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Annotations, &o.Annotations) -} - -func (m *ServiceSpec) Copy() *ServiceSpec { - if m == nil { - return nil - } - o := &ServiceSpec{} - o.CopyFrom(m) - return o -} - -func (m *ServiceSpec) CopyFrom(src interface{}) { - - o := src.(*ServiceSpec) - *m = *o - github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Annotations, &o.Annotations) - github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Task, &o.Task) - if o.Update != nil { - m.Update = &UpdateConfig{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Update, o.Update) - } - if o.Rollback != nil { - m.Rollback = &UpdateConfig{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Rollback, o.Rollback) - } - if o.Networks != nil { - m.Networks = make([]*NetworkAttachmentConfig, len(o.Networks)) - for i := range m.Networks { - m.Networks[i] = &NetworkAttachmentConfig{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Networks[i], o.Networks[i]) - } - } - - if o.Endpoint != nil { - m.Endpoint = &EndpointSpec{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Endpoint, o.Endpoint) - } - if o.Mode != nil { - switch o.Mode.(type) { - case *ServiceSpec_Replicated: - v := ServiceSpec_Replicated{ - Replicated: &ReplicatedService{}, - } - github_com_moby_swarmkit_v2_api_deepcopy.Copy(v.Replicated, o.GetReplicated()) - m.Mode = &v - case *ServiceSpec_Global: - v := ServiceSpec_Global{ - Global: &GlobalService{}, - } - github_com_moby_swarmkit_v2_api_deepcopy.Copy(v.Global, o.GetGlobal()) - m.Mode = &v - case *ServiceSpec_ReplicatedJob: - v := ServiceSpec_ReplicatedJob{ - ReplicatedJob: &ReplicatedJob{}, - } - github_com_moby_swarmkit_v2_api_deepcopy.Copy(v.ReplicatedJob, o.GetReplicatedJob()) - m.Mode = &v - case *ServiceSpec_GlobalJob: - v := ServiceSpec_GlobalJob{ - GlobalJob: &GlobalJob{}, - } - github_com_moby_swarmkit_v2_api_deepcopy.Copy(v.GlobalJob, o.GetGlobalJob()) - m.Mode = &v - } - } - + Availability VolumeSpec_VolumeAvailability `protobuf:"varint,8,opt,name=availability,proto3,enum=docker.swarmkit.v1.VolumeSpec_VolumeAvailability" json:"availability,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *ReplicatedService) Copy() *ReplicatedService { - if m == nil { - return nil - } - o := &ReplicatedService{} - o.CopyFrom(m) - return o +func (x *VolumeSpec) Reset() { + *x = VolumeSpec{} + mi := &file_api_specs_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *ReplicatedService) CopyFrom(src interface{}) { - - o := src.(*ReplicatedService) - *m = *o +func (x *VolumeSpec) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *GlobalService) Copy() *GlobalService { - if m == nil { - return nil - } - o := &GlobalService{} - o.CopyFrom(m) - return o -} +func (*VolumeSpec) ProtoMessage() {} -func (m *GlobalService) CopyFrom(src interface{}) {} -func (m *ReplicatedJob) Copy() *ReplicatedJob { - if m == nil { - return nil +func (x *VolumeSpec) ProtoReflect() protoreflect.Message { + mi := &file_api_specs_proto_msgTypes[16] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - o := &ReplicatedJob{} - o.CopyFrom(m) - return o + return mi.MessageOf(x) } -func (m *ReplicatedJob) CopyFrom(src interface{}) { - - o := src.(*ReplicatedJob) - *m = *o +// Deprecated: Use VolumeSpec.ProtoReflect.Descriptor instead. +func (*VolumeSpec) Descriptor() ([]byte, []int) { + return file_api_specs_proto_rawDescGZIP(), []int{16} } -func (m *GlobalJob) Copy() *GlobalJob { - if m == nil { - return nil +func (x *VolumeSpec) GetAnnotations() *Annotations { + if x != nil { + return x.Annotations } - o := &GlobalJob{} - o.CopyFrom(m) - return o + return nil } -func (m *GlobalJob) CopyFrom(src interface{}) {} -func (m *TaskSpec) Copy() *TaskSpec { - if m == nil { - return nil +func (x *VolumeSpec) GetGroup() string { + if x != nil { + return x.Group } - o := &TaskSpec{} - o.CopyFrom(m) - return o + return "" } -func (m *TaskSpec) CopyFrom(src interface{}) { - - o := src.(*TaskSpec) - *m = *o - if o.Resources != nil { - m.Resources = &ResourceRequirements{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Resources, o.Resources) - } - if o.Restart != nil { - m.Restart = &RestartPolicy{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Restart, o.Restart) - } - if o.Placement != nil { - m.Placement = &Placement{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Placement, o.Placement) - } - if o.LogDriver != nil { - m.LogDriver = &Driver{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.LogDriver, o.LogDriver) - } - if o.Networks != nil { - m.Networks = make([]*NetworkAttachmentConfig, len(o.Networks)) - for i := range m.Networks { - m.Networks[i] = &NetworkAttachmentConfig{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Networks[i], o.Networks[i]) - } - } - - if o.ResourceReferences != nil { - m.ResourceReferences = make([]ResourceReference, len(o.ResourceReferences)) - for i := range m.ResourceReferences { - github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.ResourceReferences[i], &o.ResourceReferences[i]) - } - } - - if o.Runtime != nil { - switch o.Runtime.(type) { - case *TaskSpec_Attachment: - v := TaskSpec_Attachment{ - Attachment: &NetworkAttachmentSpec{}, - } - github_com_moby_swarmkit_v2_api_deepcopy.Copy(v.Attachment, o.GetAttachment()) - m.Runtime = &v - case *TaskSpec_Container: - v := TaskSpec_Container{ - Container: &ContainerSpec{}, - } - github_com_moby_swarmkit_v2_api_deepcopy.Copy(v.Container, o.GetContainer()) - m.Runtime = &v - case *TaskSpec_Generic: - v := TaskSpec_Generic{ - Generic: &GenericRuntimeSpec{}, - } - github_com_moby_swarmkit_v2_api_deepcopy.Copy(v.Generic, o.GetGeneric()) - m.Runtime = &v - } +func (x *VolumeSpec) GetDriver() *Driver { + if x != nil { + return x.Driver } - + return nil } -func (m *ResourceReference) Copy() *ResourceReference { - if m == nil { - return nil +func (x *VolumeSpec) GetAccessMode() *VolumeAccessMode { + if x != nil { + return x.AccessMode } - o := &ResourceReference{} - o.CopyFrom(m) - return o + return nil } -func (m *ResourceReference) CopyFrom(src interface{}) { - - o := src.(*ResourceReference) - *m = *o +func (x *VolumeSpec) GetSecrets() []*VolumeSecret { + if x != nil { + return x.Secrets + } + return nil } -func (m *GenericRuntimeSpec) Copy() *GenericRuntimeSpec { - if m == nil { - return nil +func (x *VolumeSpec) GetAccessibilityRequirements() *TopologyRequirement { + if x != nil { + return x.AccessibilityRequirements } - o := &GenericRuntimeSpec{} - o.CopyFrom(m) - return o + return nil } -func (m *GenericRuntimeSpec) CopyFrom(src interface{}) { - - o := src.(*GenericRuntimeSpec) - *m = *o - if o.Payload != nil { - m.Payload = &types.Any{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Payload, o.Payload) +func (x *VolumeSpec) GetCapacityRange() *CapacityRange { + if x != nil { + return x.CapacityRange } + return nil } -func (m *NetworkAttachmentSpec) Copy() *NetworkAttachmentSpec { - if m == nil { - return nil +func (x *VolumeSpec) GetAvailability() VolumeSpec_VolumeAvailability { + if x != nil { + return x.Availability } - o := &NetworkAttachmentSpec{} - o.CopyFrom(m) - return o + return VolumeAvailabilityActive } -func (m *NetworkAttachmentSpec) CopyFrom(src interface{}) { - - o := src.(*NetworkAttachmentSpec) - *m = *o +// PullOptions allows one to parameterize an image pull. +type ContainerSpec_PullOptions struct { + state protoimpl.MessageState `protogen:"open.v1"` + // RegistryAuth is the registry auth token obtained from the client, required + // to pull private images. This is the unmodified JSON used as part of + // the `X-Registry-Auth` header. + // TODO(nishanttotla): This field will later be deprecated + RegistryAuth string `protobuf:"bytes,64,opt,name=registry_auth,json=registryAuth,proto3" json:"registry_auth,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *ContainerSpec) Copy() *ContainerSpec { - if m == nil { - return nil - } - o := &ContainerSpec{} - o.CopyFrom(m) - return o +func (x *ContainerSpec_PullOptions) Reset() { + *x = ContainerSpec_PullOptions{} + mi := &file_api_specs_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *ContainerSpec) CopyFrom(src interface{}) { - - o := src.(*ContainerSpec) - *m = *o - if o.Labels != nil { - m.Labels = make(map[string]string, len(o.Labels)) - for k, v := range o.Labels { - m.Labels[k] = v - } - } - - if o.Command != nil { - m.Command = make([]string, len(o.Command)) - copy(m.Command, o.Command) - } - - if o.Args != nil { - m.Args = make([]string, len(o.Args)) - copy(m.Args, o.Args) - } - - if o.Env != nil { - m.Env = make([]string, len(o.Env)) - copy(m.Env, o.Env) - } - - if o.Groups != nil { - m.Groups = make([]string, len(o.Groups)) - copy(m.Groups, o.Groups) - } - - if o.Privileges != nil { - m.Privileges = &Privileges{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Privileges, o.Privileges) - } - if o.Init != nil { - m.Init = &types.BoolValue{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Init, o.Init) - } - if o.Mounts != nil { - m.Mounts = make([]Mount, len(o.Mounts)) - for i := range m.Mounts { - github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Mounts[i], &o.Mounts[i]) - } - } - - if o.StopGracePeriod != nil { - m.StopGracePeriod = &types.Duration{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.StopGracePeriod, o.StopGracePeriod) - } - if o.PullOptions != nil { - m.PullOptions = &ContainerSpec_PullOptions{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.PullOptions, o.PullOptions) - } - if o.Secrets != nil { - m.Secrets = make([]*SecretReference, len(o.Secrets)) - for i := range m.Secrets { - m.Secrets[i] = &SecretReference{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Secrets[i], o.Secrets[i]) - } - } - - if o.Configs != nil { - m.Configs = make([]*ConfigReference, len(o.Configs)) - for i := range m.Configs { - m.Configs[i] = &ConfigReference{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Configs[i], o.Configs[i]) - } - } - - if o.Hosts != nil { - m.Hosts = make([]string, len(o.Hosts)) - copy(m.Hosts, o.Hosts) - } - - if o.DNSConfig != nil { - m.DNSConfig = &ContainerSpec_DNSConfig{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.DNSConfig, o.DNSConfig) - } - if o.Healthcheck != nil { - m.Healthcheck = &HealthConfig{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Healthcheck, o.Healthcheck) - } - if o.Sysctls != nil { - m.Sysctls = make(map[string]string, len(o.Sysctls)) - for k, v := range o.Sysctls { - m.Sysctls[k] = v - } - } - - if o.CapabilityAdd != nil { - m.CapabilityAdd = make([]string, len(o.CapabilityAdd)) - copy(m.CapabilityAdd, o.CapabilityAdd) - } +func (x *ContainerSpec_PullOptions) String() string { + return protoimpl.X.MessageStringOf(x) +} - if o.CapabilityDrop != nil { - m.CapabilityDrop = make([]string, len(o.CapabilityDrop)) - copy(m.CapabilityDrop, o.CapabilityDrop) - } +func (*ContainerSpec_PullOptions) ProtoMessage() {} - if o.Ulimits != nil { - m.Ulimits = make([]*ContainerSpec_Ulimit, len(o.Ulimits)) - for i := range m.Ulimits { - m.Ulimits[i] = &ContainerSpec_Ulimit{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Ulimits[i], o.Ulimits[i]) +func (x *ContainerSpec_PullOptions) ProtoReflect() protoreflect.Message { + mi := &file_api_specs_proto_msgTypes[18] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } + return ms } - -} - -func (m *ContainerSpec_PullOptions) Copy() *ContainerSpec_PullOptions { - if m == nil { - return nil - } - o := &ContainerSpec_PullOptions{} - o.CopyFrom(m) - return o -} - -func (m *ContainerSpec_PullOptions) CopyFrom(src interface{}) { - - o := src.(*ContainerSpec_PullOptions) - *m = *o + return mi.MessageOf(x) } -func (m *ContainerSpec_DNSConfig) Copy() *ContainerSpec_DNSConfig { - if m == nil { - return nil - } - o := &ContainerSpec_DNSConfig{} - o.CopyFrom(m) - return o +// Deprecated: Use ContainerSpec_PullOptions.ProtoReflect.Descriptor instead. +func (*ContainerSpec_PullOptions) Descriptor() ([]byte, []int) { + return file_api_specs_proto_rawDescGZIP(), []int{10, 1} } -func (m *ContainerSpec_DNSConfig) CopyFrom(src interface{}) { - - o := src.(*ContainerSpec_DNSConfig) - *m = *o - if o.Nameservers != nil { - m.Nameservers = make([]string, len(o.Nameservers)) - copy(m.Nameservers, o.Nameservers) - } - - if o.Search != nil { - m.Search = make([]string, len(o.Search)) - copy(m.Search, o.Search) - } - - if o.Options != nil { - m.Options = make([]string, len(o.Options)) - copy(m.Options, o.Options) +func (x *ContainerSpec_PullOptions) GetRegistryAuth() string { + if x != nil { + return x.RegistryAuth } - + return "" } -func (m *ContainerSpec_Ulimit) Copy() *ContainerSpec_Ulimit { - if m == nil { - return nil - } - o := &ContainerSpec_Ulimit{} - o.CopyFrom(m) - return o +// DNSConfig specifies DNS related configurations in resolver configuration file (resolv.conf) +// Detailed documentation is available in: +// http://man7.org/linux/man-pages/man5/resolv.conf.5.html +// TODO: domain is not supported yet +type ContainerSpec_DNSConfig struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Nameservers specifies the IP addresses of the name servers + Nameservers []string `protobuf:"bytes,1,rep,name=nameservers,proto3" json:"nameservers,omitempty"` + // Search specifies the search list for host-name lookup + Search []string `protobuf:"bytes,2,rep,name=search,proto3" json:"search,omitempty"` + // Options allows certain internal resolver variables to be modified + Options []string `protobuf:"bytes,3,rep,name=options,proto3" json:"options,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *ContainerSpec_Ulimit) CopyFrom(src interface{}) { - - o := src.(*ContainerSpec_Ulimit) - *m = *o +func (x *ContainerSpec_DNSConfig) Reset() { + *x = ContainerSpec_DNSConfig{} + mi := &file_api_specs_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *EndpointSpec) Copy() *EndpointSpec { - if m == nil { - return nil - } - o := &EndpointSpec{} - o.CopyFrom(m) - return o +func (x *ContainerSpec_DNSConfig) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *EndpointSpec) CopyFrom(src interface{}) { +func (*ContainerSpec_DNSConfig) ProtoMessage() {} - o := src.(*EndpointSpec) - *m = *o - if o.Ports != nil { - m.Ports = make([]*PortConfig, len(o.Ports)) - for i := range m.Ports { - m.Ports[i] = &PortConfig{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Ports[i], o.Ports[i]) +func (x *ContainerSpec_DNSConfig) ProtoReflect() protoreflect.Message { + mi := &file_api_specs_proto_msgTypes[19] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } + return ms } - -} - -func (m *NetworkSpec) Copy() *NetworkSpec { - if m == nil { - return nil - } - o := &NetworkSpec{} - o.CopyFrom(m) - return o + return mi.MessageOf(x) } -func (m *NetworkSpec) CopyFrom(src interface{}) { - - o := src.(*NetworkSpec) - *m = *o - github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Annotations, &o.Annotations) - if o.DriverConfig != nil { - m.DriverConfig = &Driver{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.DriverConfig, o.DriverConfig) - } - if o.IPAM != nil { - m.IPAM = &IPAMOptions{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.IPAM, o.IPAM) - } - if o.ConfigFrom != nil { - switch o.ConfigFrom.(type) { - case *NetworkSpec_Network: - v := NetworkSpec_Network{ - Network: o.GetNetwork(), - } - m.ConfigFrom = &v - } - } - +// Deprecated: Use ContainerSpec_DNSConfig.ProtoReflect.Descriptor instead. +func (*ContainerSpec_DNSConfig) Descriptor() ([]byte, []int) { + return file_api_specs_proto_rawDescGZIP(), []int{10, 2} } -func (m *ClusterSpec) Copy() *ClusterSpec { - if m == nil { - return nil +func (x *ContainerSpec_DNSConfig) GetNameservers() []string { + if x != nil { + return x.Nameservers } - o := &ClusterSpec{} - o.CopyFrom(m) - return o -} - -func (m *ClusterSpec) CopyFrom(src interface{}) { - - o := src.(*ClusterSpec) - *m = *o - github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Annotations, &o.Annotations) - github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.AcceptancePolicy, &o.AcceptancePolicy) - github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Orchestration, &o.Orchestration) - github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Raft, &o.Raft) - github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Dispatcher, &o.Dispatcher) - github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.CAConfig, &o.CAConfig) - github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.TaskDefaults, &o.TaskDefaults) - github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.EncryptionConfig, &o.EncryptionConfig) + return nil } -func (m *SecretSpec) Copy() *SecretSpec { - if m == nil { - return nil +func (x *ContainerSpec_DNSConfig) GetSearch() []string { + if x != nil { + return x.Search } - o := &SecretSpec{} - o.CopyFrom(m) - return o + return nil } -func (m *SecretSpec) CopyFrom(src interface{}) { - - o := src.(*SecretSpec) - *m = *o - github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Annotations, &o.Annotations) - if o.Data != nil { - m.Data = make([]byte, len(o.Data)) - copy(m.Data, o.Data) - } - if o.Templating != nil { - m.Templating = &Driver{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Templating, o.Templating) - } - if o.Driver != nil { - m.Driver = &Driver{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Driver, o.Driver) +func (x *ContainerSpec_DNSConfig) GetOptions() []string { + if x != nil { + return x.Options } + return nil } -func (m *ConfigSpec) Copy() *ConfigSpec { - if m == nil { - return nil - } - o := &ConfigSpec{} - o.CopyFrom(m) - return o +type ContainerSpec_Ulimit struct { + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Soft int64 `protobuf:"varint,2,opt,name=soft,proto3" json:"soft,omitempty"` + Hard int64 `protobuf:"varint,3,opt,name=hard,proto3" json:"hard,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *ConfigSpec) CopyFrom(src interface{}) { - - o := src.(*ConfigSpec) - *m = *o - github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Annotations, &o.Annotations) - if o.Data != nil { - m.Data = make([]byte, len(o.Data)) - copy(m.Data, o.Data) - } - if o.Templating != nil { - m.Templating = &Driver{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Templating, o.Templating) - } +func (x *ContainerSpec_Ulimit) Reset() { + *x = ContainerSpec_Ulimit{} + mi := &file_api_specs_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *VolumeSpec) Copy() *VolumeSpec { - if m == nil { - return nil - } - o := &VolumeSpec{} - o.CopyFrom(m) - return o +func (x *ContainerSpec_Ulimit) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *VolumeSpec) CopyFrom(src interface{}) { +func (*ContainerSpec_Ulimit) ProtoMessage() {} - o := src.(*VolumeSpec) - *m = *o - github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Annotations, &o.Annotations) - if o.Driver != nil { - m.Driver = &Driver{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Driver, o.Driver) - } - if o.AccessMode != nil { - m.AccessMode = &VolumeAccessMode{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.AccessMode, o.AccessMode) - } - if o.Secrets != nil { - m.Secrets = make([]*VolumeSecret, len(o.Secrets)) - for i := range m.Secrets { - m.Secrets[i] = &VolumeSecret{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Secrets[i], o.Secrets[i]) +func (x *ContainerSpec_Ulimit) ProtoReflect() protoreflect.Message { + mi := &file_api_specs_proto_msgTypes[21] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } + return ms } + return mi.MessageOf(x) +} - if o.AccessibilityRequirements != nil { - m.AccessibilityRequirements = &TopologyRequirement{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.AccessibilityRequirements, o.AccessibilityRequirements) - } - if o.CapacityRange != nil { - m.CapacityRange = &CapacityRange{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.CapacityRange, o.CapacityRange) - } +// Deprecated: Use ContainerSpec_Ulimit.ProtoReflect.Descriptor instead. +func (*ContainerSpec_Ulimit) Descriptor() ([]byte, []int) { + return file_api_specs_proto_rawDescGZIP(), []int{10, 4} } -func (m *NodeSpec) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err +func (x *ContainerSpec_Ulimit) GetName() string { + if x != nil { + return x.Name } - return dAtA[:n], nil + return "" } -func (m *NodeSpec) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} +func (x *ContainerSpec_Ulimit) GetSoft() int64 { + if x != nil { + return x.Soft + } + return 0 +} + +func (x *ContainerSpec_Ulimit) GetHard() int64 { + if x != nil { + return x.Hard + } + return 0 +} + +var File_api_specs_proto protoreflect.FileDescriptor + +const file_api_specs_proto_rawDesc = "" + + "\n" + + "\x0fapi/specs.proto\x12\x12docker.swarmkit.v1\x1a\x0fapi/types.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x19google/protobuf/any.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a\x1cprotobuf/plugin/plugin.proto\"\x8b\x04\n" + + "\bNodeSpec\x12A\n" + + "\vannotations\x18\x01 \x01(\v2\x1f.docker.swarmkit.v1.AnnotationsR\vannotations\x12?\n" + + "\fdesired_role\x18\x02 \x01(\x0e2\x1c.docker.swarmkit.v1.NodeRoleR\vdesiredRole\x12G\n" + + "\n" + + "membership\x18\x03 \x01(\x0e2'.docker.swarmkit.v1.NodeSpec.MembershipR\n" + + "membership\x12M\n" + + "\favailability\x18\x04 \x01(\x0e2).docker.swarmkit.v1.NodeSpec.AvailabilityR\favailability\"^\n" + + "\n" + + "Membership\x12&\n" + + "\aPENDING\x10\x00\x1a\x19\xa2\x97\"\x15NodeMembershipPending\x12(\n" + + "\bACCEPTED\x10\x01\x1a\x1a\xa2\x97\"\x16NodeMembershipAccepted\"\x82\x01\n" + + "\fAvailability\x12&\n" + + "\x06ACTIVE\x10\x00\x1a\x1a\xa2\x97\"\x16NodeAvailabilityActive\x12$\n" + + "\x05PAUSE\x10\x01\x1a\x19\xa2\x97\"\x15NodeAvailabilityPause\x12$\n" + + "\x05DRAIN\x10\x02\x1a\x19\xa2\x97\"\x15NodeAvailabilityDrain\"\x9f\x05\n" + + "\vServiceSpec\x12A\n" + + "\vannotations\x18\x01 \x01(\v2\x1f.docker.swarmkit.v1.AnnotationsR\vannotations\x120\n" + + "\x04task\x18\x02 \x01(\v2\x1c.docker.swarmkit.v1.TaskSpecR\x04task\x12G\n" + + "\n" + + "replicated\x18\x03 \x01(\v2%.docker.swarmkit.v1.ReplicatedServiceH\x00R\n" + + "replicated\x12;\n" + + "\x06global\x18\x04 \x01(\v2!.docker.swarmkit.v1.GlobalServiceH\x00R\x06global\x12J\n" + + "\x0ereplicated_job\x18\n" + + " \x01(\v2!.docker.swarmkit.v1.ReplicatedJobH\x00R\rreplicatedJob\x12>\n" + + "\n" + + "global_job\x18\v \x01(\v2\x1d.docker.swarmkit.v1.GlobalJobH\x00R\tglobalJob\x128\n" + + "\x06update\x18\x06 \x01(\v2 .docker.swarmkit.v1.UpdateConfigR\x06update\x12<\n" + + "\brollback\x18\t \x01(\v2 .docker.swarmkit.v1.UpdateConfigR\brollback\x12K\n" + + "\bnetworks\x18\a \x03(\v2+.docker.swarmkit.v1.NetworkAttachmentConfigB\x02\x18\x01R\bnetworks\x12<\n" + + "\bendpoint\x18\b \x01(\v2 .docker.swarmkit.v1.EndpointSpecR\bendpointB\x06\n" + + "\x04mode\"/\n" + + "\x11ReplicatedService\x12\x1a\n" + + "\breplicas\x18\x01 \x01(\x04R\breplicas\"\x0f\n" + + "\rGlobalService\"c\n" + + "\rReplicatedJob\x12%\n" + + "\x0emax_concurrent\x18\x01 \x01(\x04R\rmaxConcurrent\x12+\n" + + "\x11total_completions\x18\x02 \x01(\x04R\x10totalCompletions\"\v\n" + + "\tGlobalJob\"\xaa\x05\n" + + "\bTaskSpec\x12K\n" + + "\n" + + "attachment\x18\b \x01(\v2).docker.swarmkit.v1.NetworkAttachmentSpecH\x00R\n" + + "attachment\x12A\n" + + "\tcontainer\x18\x01 \x01(\v2!.docker.swarmkit.v1.ContainerSpecH\x00R\tcontainer\x12B\n" + + "\ageneric\x18\n" + + " \x01(\v2&.docker.swarmkit.v1.GenericRuntimeSpecH\x00R\ageneric\x12F\n" + + "\tresources\x18\x02 \x01(\v2(.docker.swarmkit.v1.ResourceRequirementsR\tresources\x12;\n" + + "\arestart\x18\x04 \x01(\v2!.docker.swarmkit.v1.RestartPolicyR\arestart\x12;\n" + + "\tplacement\x18\x05 \x01(\v2\x1d.docker.swarmkit.v1.PlacementR\tplacement\x129\n" + + "\n" + + "log_driver\x18\x06 \x01(\v2\x1a.docker.swarmkit.v1.DriverR\tlogDriver\x12G\n" + + "\bnetworks\x18\a \x03(\v2+.docker.swarmkit.v1.NetworkAttachmentConfigR\bnetworks\x12!\n" + + "\fforce_update\x18\t \x01(\x04R\vforceUpdate\x12V\n" + + "\x13resource_references\x18\v \x03(\v2%.docker.swarmkit.v1.ResourceReferenceR\x12resourceReferencesB\t\n" + + "\aruntime\"{\n" + + "\x11ResourceReference\x12\x1f\n" + + "\vresource_id\x18\x01 \x01(\tR\n" + + "resourceId\x12E\n" + + "\rresource_type\x18\x02 \x01(\x0e2 .docker.swarmkit.v1.ResourceTypeR\fresourceType\"X\n" + + "\x12GenericRuntimeSpec\x12\x12\n" + + "\x04kind\x18\x01 \x01(\tR\x04kind\x12.\n" + + "\apayload\x18\x02 \x01(\v2\x14.google.protobuf.AnyR\apayload\":\n" + + "\x15NetworkAttachmentSpec\x12!\n" + + "\fcontainer_id\x18\x01 \x01(\tR\vcontainerId\"\xd8\x0e\n" + + "\rContainerSpec\x12\x14\n" + + "\x05image\x18\x01 \x01(\tR\x05image\x12E\n" + + "\x06labels\x18\x02 \x03(\v2-.docker.swarmkit.v1.ContainerSpec.LabelsEntryR\x06labels\x12\x18\n" + + "\acommand\x18\x03 \x03(\tR\acommand\x12\x12\n" + + "\x04args\x18\x04 \x03(\tR\x04args\x12\x1a\n" + + "\bhostname\x18\x0e \x01(\tR\bhostname\x12\x10\n" + + "\x03env\x18\x05 \x03(\tR\x03env\x12\x10\n" + + "\x03dir\x18\x06 \x01(\tR\x03dir\x12\x12\n" + + "\x04user\x18\a \x01(\tR\x04user\x12\x16\n" + + "\x06groups\x18\v \x03(\tR\x06groups\x12>\n" + + "\n" + + "privileges\x18\x16 \x01(\v2\x1e.docker.swarmkit.v1.PrivilegesR\n" + + "privileges\x12.\n" + + "\x04init\x18\x17 \x01(\v2\x1a.google.protobuf.BoolValueR\x04init\x12\x19\n" + + "\x03tty\x18\r \x01(\bB\a\x92\x97\"\x03TTYR\x03tty\x12\x1d\n" + + "\n" + + "open_stdin\x18\x12 \x01(\bR\topenStdin\x12\x1b\n" + + "\tread_only\x18\x13 \x01(\bR\breadOnly\x12\x1f\n" + + "\vstop_signal\x18\x14 \x01(\tR\n" + + "stopSignal\x121\n" + + "\x06mounts\x18\b \x03(\v2\x19.docker.swarmkit.v1.MountR\x06mounts\x12E\n" + + "\x11stop_grace_period\x18\t \x01(\v2\x19.google.protobuf.DurationR\x0fstopGracePeriod\x12P\n" + + "\fpull_options\x18\n" + + " \x01(\v2-.docker.swarmkit.v1.ContainerSpec.PullOptionsR\vpullOptions\x12=\n" + + "\asecrets\x18\f \x03(\v2#.docker.swarmkit.v1.SecretReferenceR\asecrets\x12=\n" + + "\aconfigs\x18\x15 \x03(\v2#.docker.swarmkit.v1.ConfigReferenceR\aconfigs\x12\x14\n" + + "\x05hosts\x18\x11 \x03(\tR\x05hosts\x12Y\n" + + "\n" + + "dns_config\x18\x0f \x01(\v2+.docker.swarmkit.v1.ContainerSpec.DNSConfigB\r\x92\x97\"\tDNSConfigR\tdnsConfig\x12B\n" + + "\vhealthcheck\x18\x10 \x01(\v2 .docker.swarmkit.v1.HealthConfigR\vhealthcheck\x12I\n" + + "\tisolation\x18\x18 \x01(\x0e2+.docker.swarmkit.v1.ContainerSpec.IsolationR\tisolation\x12\x1c\n" + + "\tpidsLimit\x18\x19 \x01(\x03R\tpidsLimit\x12H\n" + + "\asysctls\x18\x1a \x03(\v2..docker.swarmkit.v1.ContainerSpec.SysctlsEntryR\asysctls\x12%\n" + + "\x0ecapability_add\x18\x1b \x03(\tR\rcapabilityAdd\x12'\n" + + "\x0fcapability_drop\x18\x1c \x03(\tR\x0ecapabilityDrop\x12B\n" + + "\aulimits\x18\x1d \x03(\v2(.docker.swarmkit.v1.ContainerSpec.UlimitR\aulimits\x12\"\n" + + "\room_score_adj\x18\x1e \x01(\x03R\voomScoreAdj\x1a9\n" + + "\vLabelsEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\x1a2\n" + + "\vPullOptions\x12#\n" + + "\rregistry_auth\x18@ \x01(\tR\fregistryAuth\x1a_\n" + + "\tDNSConfig\x12 \n" + + "\vnameservers\x18\x01 \x03(\tR\vnameservers\x12\x16\n" + + "\x06search\x18\x02 \x03(\tR\x06search\x12\x18\n" + + "\aoptions\x18\x03 \x03(\tR\aoptions\x1a:\n" + + "\fSysctlsEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\x1aD\n" + + "\x06Ulimit\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12\x12\n" + + "\x04soft\x18\x02 \x01(\x03R\x04soft\x12\x12\n" + + "\x04hard\x18\x03 \x01(\x03R\x04hard\"\xab\x01\n" + + "\tIsolation\x124\n" + + "\x11ISOLATION_DEFAULT\x10\x00\x1a\x1d\xa2\x97\"\x19ContainerIsolationDefault\x124\n" + + "\x11ISOLATION_PROCESS\x10\x01\x1a\x1d\xa2\x97\"\x19ContainerIsolationProcess\x122\n" + + "\x10ISOLATION_HYPERV\x10\x02\x1a\x1c\xa2\x97\"\x18ContainerIsolationHyperV\"\xed\x01\n" + + "\fEndpointSpec\x12C\n" + + "\x04mode\x18\x01 \x01(\x0e2/.docker.swarmkit.v1.EndpointSpec.ResolutionModeR\x04mode\x124\n" + + "\x05ports\x18\x02 \x03(\v2\x1e.docker.swarmkit.v1.PortConfigR\x05ports\"b\n" + + "\x0eResolutionMode\x12$\n" + + "\x03VIP\x10\x00\x1a\x1b\xa2\x97\"\x17ResolutionModeVirtualIP\x12*\n" + + "\x05DNSRR\x10\x01\x1a\x1f\xa2\x97\"\x1bResolutionModeDNSRoundRobin\"\xf4\x02\n" + + "\vNetworkSpec\x12A\n" + + "\vannotations\x18\x01 \x01(\v2\x1f.docker.swarmkit.v1.AnnotationsR\vannotations\x12?\n" + + "\rdriver_config\x18\x02 \x01(\v2\x1a.docker.swarmkit.v1.DriverR\fdriverConfig\x12!\n" + + "\fipv6_enabled\x18\x03 \x01(\bR\vipv6Enabled\x12\x1a\n" + + "\binternal\x18\x04 \x01(\bR\binternal\x12=\n" + + "\x04ipam\x18\x05 \x01(\v2\x1f.docker.swarmkit.v1.IPAMOptionsB\b\x92\x97\"\x04IPAMR\x04ipam\x12\x1e\n" + + "\n" + + "attachable\x18\x06 \x01(\bR\n" + + "attachable\x12\x18\n" + + "\aingress\x18\a \x01(\bR\aingress\x12\x1a\n" + + "\anetwork\x18\b \x01(\tH\x00R\anetworkB\r\n" + + "\vconfig_from\"\xd3\x04\n" + + "\vClusterSpec\x12A\n" + + "\vannotations\x18\x01 \x01(\v2\x1f.docker.swarmkit.v1.AnnotationsR\vannotations\x12U\n" + + "\x11acceptance_policy\x18\x02 \x01(\v2$.docker.swarmkit.v1.AcceptancePolicyB\x02\x18\x01R\x10acceptancePolicy\x12M\n" + + "\rorchestration\x18\x03 \x01(\v2'.docker.swarmkit.v1.OrchestrationConfigR\rorchestration\x122\n" + + "\x04raft\x18\x04 \x01(\v2\x1e.docker.swarmkit.v1.RaftConfigR\x04raft\x12D\n" + + "\n" + + "dispatcher\x18\x05 \x01(\v2$.docker.swarmkit.v1.DispatcherConfigR\n" + + "dispatcher\x12G\n" + + "\tca_config\x18\x06 \x01(\v2\x1c.docker.swarmkit.v1.CAConfigB\f\x92\x97\"\bCAConfigR\bcaConfig\x12E\n" + + "\rtask_defaults\x18\a \x01(\v2 .docker.swarmkit.v1.TaskDefaultsR\ftaskDefaults\x12Q\n" + + "\x11encryption_config\x18\b \x01(\v2$.docker.swarmkit.v1.EncryptionConfigR\x10encryptionConfig\"\xd3\x01\n" + + "\n" + + "SecretSpec\x12A\n" + + "\vannotations\x18\x01 \x01(\v2\x1f.docker.swarmkit.v1.AnnotationsR\vannotations\x12\x12\n" + + "\x04data\x18\x02 \x01(\fR\x04data\x12:\n" + + "\n" + + "templating\x18\x03 \x01(\v2\x1a.docker.swarmkit.v1.DriverR\n" + + "templating\x122\n" + + "\x06driver\x18\x04 \x01(\v2\x1a.docker.swarmkit.v1.DriverR\x06driver\"\x9f\x01\n" + + "\n" + + "ConfigSpec\x12A\n" + + "\vannotations\x18\x01 \x01(\v2\x1f.docker.swarmkit.v1.AnnotationsR\vannotations\x12\x12\n" + + "\x04data\x18\x02 \x01(\fR\x04data\x12:\n" + + "\n" + + "templating\x18\x03 \x01(\v2\x1a.docker.swarmkit.v1.DriverR\n" + + "templating\"\xb5\x05\n" + + "\n" + + "VolumeSpec\x12A\n" + + "\vannotations\x18\x01 \x01(\v2\x1f.docker.swarmkit.v1.AnnotationsR\vannotations\x12\x14\n" + + "\x05group\x18\x02 \x01(\tR\x05group\x122\n" + + "\x06driver\x18\x03 \x01(\v2\x1a.docker.swarmkit.v1.DriverR\x06driver\x12E\n" + + "\vaccess_mode\x18\x04 \x01(\v2$.docker.swarmkit.v1.VolumeAccessModeR\n" + + "accessMode\x12:\n" + + "\asecrets\x18\x05 \x03(\v2 .docker.swarmkit.v1.VolumeSecretR\asecrets\x12e\n" + + "\x19AccessibilityRequirements\x18\x06 \x01(\v2'.docker.swarmkit.v1.TopologyRequirementR\x19AccessibilityRequirements\x12H\n" + + "\x0ecapacity_range\x18\a \x01(\v2!.docker.swarmkit.v1.CapacityRangeR\rcapacityRange\x12U\n" + + "\favailability\x18\b \x01(\x0e21.docker.swarmkit.v1.VolumeSpec.VolumeAvailabilityR\favailability\"\x8e\x01\n" + + "\x12VolumeAvailability\x12(\n" + + "\x06ACTIVE\x10\x00\x1a\x1c\xa2\x97\"\x18VolumeAvailabilityActive\x12&\n" + + "\x05PAUSE\x10\x01\x1a\x1b\xa2\x97\"\x17VolumeAvailabilityPause\x12&\n" + + "\x05DRAIN\x10\x02\x1a\x1b\xa2\x97\"\x17VolumeAvailabilityDrainB!Z\x1fgithub.com/moby/swarmkit/v2/apib\x06proto3" -func (m *NodeSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Availability != 0 { - i = encodeVarintSpecs(dAtA, i, uint64(m.Availability)) - i-- - dAtA[i] = 0x20 - } - if m.Membership != 0 { - i = encodeVarintSpecs(dAtA, i, uint64(m.Membership)) - i-- - dAtA[i] = 0x18 - } - if m.DesiredRole != 0 { - i = encodeVarintSpecs(dAtA, i, uint64(m.DesiredRole)) - i-- - dAtA[i] = 0x10 +var ( + file_api_specs_proto_rawDescOnce sync.Once + file_api_specs_proto_rawDescData []byte +) + +func file_api_specs_proto_rawDescGZIP() []byte { + file_api_specs_proto_rawDescOnce.Do(func() { + file_api_specs_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_api_specs_proto_rawDesc), len(file_api_specs_proto_rawDesc))) + }) + return file_api_specs_proto_rawDescData +} + +var file_api_specs_proto_enumTypes = make([]protoimpl.EnumInfo, 5) +var file_api_specs_proto_msgTypes = make([]protoimpl.MessageInfo, 22) +var file_api_specs_proto_goTypes = []any{ + (NodeSpec_Membership)(0), // 0: docker.swarmkit.v1.NodeSpec.Membership + (NodeSpec_Availability)(0), // 1: docker.swarmkit.v1.NodeSpec.Availability + (ContainerSpec_Isolation)(0), // 2: docker.swarmkit.v1.ContainerSpec.Isolation + (EndpointSpec_ResolutionMode)(0), // 3: docker.swarmkit.v1.EndpointSpec.ResolutionMode + (VolumeSpec_VolumeAvailability)(0), // 4: docker.swarmkit.v1.VolumeSpec.VolumeAvailability + (*NodeSpec)(nil), // 5: docker.swarmkit.v1.NodeSpec + (*ServiceSpec)(nil), // 6: docker.swarmkit.v1.ServiceSpec + (*ReplicatedService)(nil), // 7: docker.swarmkit.v1.ReplicatedService + (*GlobalService)(nil), // 8: docker.swarmkit.v1.GlobalService + (*ReplicatedJob)(nil), // 9: docker.swarmkit.v1.ReplicatedJob + (*GlobalJob)(nil), // 10: docker.swarmkit.v1.GlobalJob + (*TaskSpec)(nil), // 11: docker.swarmkit.v1.TaskSpec + (*ResourceReference)(nil), // 12: docker.swarmkit.v1.ResourceReference + (*GenericRuntimeSpec)(nil), // 13: docker.swarmkit.v1.GenericRuntimeSpec + (*NetworkAttachmentSpec)(nil), // 14: docker.swarmkit.v1.NetworkAttachmentSpec + (*ContainerSpec)(nil), // 15: docker.swarmkit.v1.ContainerSpec + (*EndpointSpec)(nil), // 16: docker.swarmkit.v1.EndpointSpec + (*NetworkSpec)(nil), // 17: docker.swarmkit.v1.NetworkSpec + (*ClusterSpec)(nil), // 18: docker.swarmkit.v1.ClusterSpec + (*SecretSpec)(nil), // 19: docker.swarmkit.v1.SecretSpec + (*ConfigSpec)(nil), // 20: docker.swarmkit.v1.ConfigSpec + (*VolumeSpec)(nil), // 21: docker.swarmkit.v1.VolumeSpec + nil, // 22: docker.swarmkit.v1.ContainerSpec.LabelsEntry + (*ContainerSpec_PullOptions)(nil), // 23: docker.swarmkit.v1.ContainerSpec.PullOptions + (*ContainerSpec_DNSConfig)(nil), // 24: docker.swarmkit.v1.ContainerSpec.DNSConfig + nil, // 25: docker.swarmkit.v1.ContainerSpec.SysctlsEntry + (*ContainerSpec_Ulimit)(nil), // 26: docker.swarmkit.v1.ContainerSpec.Ulimit + (*Annotations)(nil), // 27: docker.swarmkit.v1.Annotations + (NodeRole)(0), // 28: docker.swarmkit.v1.NodeRole + (*UpdateConfig)(nil), // 29: docker.swarmkit.v1.UpdateConfig + (*NetworkAttachmentConfig)(nil), // 30: docker.swarmkit.v1.NetworkAttachmentConfig + (*ResourceRequirements)(nil), // 31: docker.swarmkit.v1.ResourceRequirements + (*RestartPolicy)(nil), // 32: docker.swarmkit.v1.RestartPolicy + (*Placement)(nil), // 33: docker.swarmkit.v1.Placement + (*Driver)(nil), // 34: docker.swarmkit.v1.Driver + (ResourceType)(0), // 35: docker.swarmkit.v1.ResourceType + (*anypb.Any)(nil), // 36: google.protobuf.Any + (*Privileges)(nil), // 37: docker.swarmkit.v1.Privileges + (*wrapperspb.BoolValue)(nil), // 38: google.protobuf.BoolValue + (*Mount)(nil), // 39: docker.swarmkit.v1.Mount + (*durationpb.Duration)(nil), // 40: google.protobuf.Duration + (*SecretReference)(nil), // 41: docker.swarmkit.v1.SecretReference + (*ConfigReference)(nil), // 42: docker.swarmkit.v1.ConfigReference + (*HealthConfig)(nil), // 43: docker.swarmkit.v1.HealthConfig + (*PortConfig)(nil), // 44: docker.swarmkit.v1.PortConfig + (*IPAMOptions)(nil), // 45: docker.swarmkit.v1.IPAMOptions + (*AcceptancePolicy)(nil), // 46: docker.swarmkit.v1.AcceptancePolicy + (*OrchestrationConfig)(nil), // 47: docker.swarmkit.v1.OrchestrationConfig + (*RaftConfig)(nil), // 48: docker.swarmkit.v1.RaftConfig + (*DispatcherConfig)(nil), // 49: docker.swarmkit.v1.DispatcherConfig + (*CAConfig)(nil), // 50: docker.swarmkit.v1.CAConfig + (*TaskDefaults)(nil), // 51: docker.swarmkit.v1.TaskDefaults + (*EncryptionConfig)(nil), // 52: docker.swarmkit.v1.EncryptionConfig + (*VolumeAccessMode)(nil), // 53: docker.swarmkit.v1.VolumeAccessMode + (*VolumeSecret)(nil), // 54: docker.swarmkit.v1.VolumeSecret + (*TopologyRequirement)(nil), // 55: docker.swarmkit.v1.TopologyRequirement + (*CapacityRange)(nil), // 56: docker.swarmkit.v1.CapacityRange +} +var file_api_specs_proto_depIdxs = []int32{ + 27, // 0: docker.swarmkit.v1.NodeSpec.annotations:type_name -> docker.swarmkit.v1.Annotations + 28, // 1: docker.swarmkit.v1.NodeSpec.desired_role:type_name -> docker.swarmkit.v1.NodeRole + 0, // 2: docker.swarmkit.v1.NodeSpec.membership:type_name -> docker.swarmkit.v1.NodeSpec.Membership + 1, // 3: docker.swarmkit.v1.NodeSpec.availability:type_name -> docker.swarmkit.v1.NodeSpec.Availability + 27, // 4: docker.swarmkit.v1.ServiceSpec.annotations:type_name -> docker.swarmkit.v1.Annotations + 11, // 5: docker.swarmkit.v1.ServiceSpec.task:type_name -> docker.swarmkit.v1.TaskSpec + 7, // 6: docker.swarmkit.v1.ServiceSpec.replicated:type_name -> docker.swarmkit.v1.ReplicatedService + 8, // 7: docker.swarmkit.v1.ServiceSpec.global:type_name -> docker.swarmkit.v1.GlobalService + 9, // 8: docker.swarmkit.v1.ServiceSpec.replicated_job:type_name -> docker.swarmkit.v1.ReplicatedJob + 10, // 9: docker.swarmkit.v1.ServiceSpec.global_job:type_name -> docker.swarmkit.v1.GlobalJob + 29, // 10: docker.swarmkit.v1.ServiceSpec.update:type_name -> docker.swarmkit.v1.UpdateConfig + 29, // 11: docker.swarmkit.v1.ServiceSpec.rollback:type_name -> docker.swarmkit.v1.UpdateConfig + 30, // 12: docker.swarmkit.v1.ServiceSpec.networks:type_name -> docker.swarmkit.v1.NetworkAttachmentConfig + 16, // 13: docker.swarmkit.v1.ServiceSpec.endpoint:type_name -> docker.swarmkit.v1.EndpointSpec + 14, // 14: docker.swarmkit.v1.TaskSpec.attachment:type_name -> docker.swarmkit.v1.NetworkAttachmentSpec + 15, // 15: docker.swarmkit.v1.TaskSpec.container:type_name -> docker.swarmkit.v1.ContainerSpec + 13, // 16: docker.swarmkit.v1.TaskSpec.generic:type_name -> docker.swarmkit.v1.GenericRuntimeSpec + 31, // 17: docker.swarmkit.v1.TaskSpec.resources:type_name -> docker.swarmkit.v1.ResourceRequirements + 32, // 18: docker.swarmkit.v1.TaskSpec.restart:type_name -> docker.swarmkit.v1.RestartPolicy + 33, // 19: docker.swarmkit.v1.TaskSpec.placement:type_name -> docker.swarmkit.v1.Placement + 34, // 20: docker.swarmkit.v1.TaskSpec.log_driver:type_name -> docker.swarmkit.v1.Driver + 30, // 21: docker.swarmkit.v1.TaskSpec.networks:type_name -> docker.swarmkit.v1.NetworkAttachmentConfig + 12, // 22: docker.swarmkit.v1.TaskSpec.resource_references:type_name -> docker.swarmkit.v1.ResourceReference + 35, // 23: docker.swarmkit.v1.ResourceReference.resource_type:type_name -> docker.swarmkit.v1.ResourceType + 36, // 24: docker.swarmkit.v1.GenericRuntimeSpec.payload:type_name -> google.protobuf.Any + 22, // 25: docker.swarmkit.v1.ContainerSpec.labels:type_name -> docker.swarmkit.v1.ContainerSpec.LabelsEntry + 37, // 26: docker.swarmkit.v1.ContainerSpec.privileges:type_name -> docker.swarmkit.v1.Privileges + 38, // 27: docker.swarmkit.v1.ContainerSpec.init:type_name -> google.protobuf.BoolValue + 39, // 28: docker.swarmkit.v1.ContainerSpec.mounts:type_name -> docker.swarmkit.v1.Mount + 40, // 29: docker.swarmkit.v1.ContainerSpec.stop_grace_period:type_name -> google.protobuf.Duration + 23, // 30: docker.swarmkit.v1.ContainerSpec.pull_options:type_name -> docker.swarmkit.v1.ContainerSpec.PullOptions + 41, // 31: docker.swarmkit.v1.ContainerSpec.secrets:type_name -> docker.swarmkit.v1.SecretReference + 42, // 32: docker.swarmkit.v1.ContainerSpec.configs:type_name -> docker.swarmkit.v1.ConfigReference + 24, // 33: docker.swarmkit.v1.ContainerSpec.dns_config:type_name -> docker.swarmkit.v1.ContainerSpec.DNSConfig + 43, // 34: docker.swarmkit.v1.ContainerSpec.healthcheck:type_name -> docker.swarmkit.v1.HealthConfig + 2, // 35: docker.swarmkit.v1.ContainerSpec.isolation:type_name -> docker.swarmkit.v1.ContainerSpec.Isolation + 25, // 36: docker.swarmkit.v1.ContainerSpec.sysctls:type_name -> docker.swarmkit.v1.ContainerSpec.SysctlsEntry + 26, // 37: docker.swarmkit.v1.ContainerSpec.ulimits:type_name -> docker.swarmkit.v1.ContainerSpec.Ulimit + 3, // 38: docker.swarmkit.v1.EndpointSpec.mode:type_name -> docker.swarmkit.v1.EndpointSpec.ResolutionMode + 44, // 39: docker.swarmkit.v1.EndpointSpec.ports:type_name -> docker.swarmkit.v1.PortConfig + 27, // 40: docker.swarmkit.v1.NetworkSpec.annotations:type_name -> docker.swarmkit.v1.Annotations + 34, // 41: docker.swarmkit.v1.NetworkSpec.driver_config:type_name -> docker.swarmkit.v1.Driver + 45, // 42: docker.swarmkit.v1.NetworkSpec.ipam:type_name -> docker.swarmkit.v1.IPAMOptions + 27, // 43: docker.swarmkit.v1.ClusterSpec.annotations:type_name -> docker.swarmkit.v1.Annotations + 46, // 44: docker.swarmkit.v1.ClusterSpec.acceptance_policy:type_name -> docker.swarmkit.v1.AcceptancePolicy + 47, // 45: docker.swarmkit.v1.ClusterSpec.orchestration:type_name -> docker.swarmkit.v1.OrchestrationConfig + 48, // 46: docker.swarmkit.v1.ClusterSpec.raft:type_name -> docker.swarmkit.v1.RaftConfig + 49, // 47: docker.swarmkit.v1.ClusterSpec.dispatcher:type_name -> docker.swarmkit.v1.DispatcherConfig + 50, // 48: docker.swarmkit.v1.ClusterSpec.ca_config:type_name -> docker.swarmkit.v1.CAConfig + 51, // 49: docker.swarmkit.v1.ClusterSpec.task_defaults:type_name -> docker.swarmkit.v1.TaskDefaults + 52, // 50: docker.swarmkit.v1.ClusterSpec.encryption_config:type_name -> docker.swarmkit.v1.EncryptionConfig + 27, // 51: docker.swarmkit.v1.SecretSpec.annotations:type_name -> docker.swarmkit.v1.Annotations + 34, // 52: docker.swarmkit.v1.SecretSpec.templating:type_name -> docker.swarmkit.v1.Driver + 34, // 53: docker.swarmkit.v1.SecretSpec.driver:type_name -> docker.swarmkit.v1.Driver + 27, // 54: docker.swarmkit.v1.ConfigSpec.annotations:type_name -> docker.swarmkit.v1.Annotations + 34, // 55: docker.swarmkit.v1.ConfigSpec.templating:type_name -> docker.swarmkit.v1.Driver + 27, // 56: docker.swarmkit.v1.VolumeSpec.annotations:type_name -> docker.swarmkit.v1.Annotations + 34, // 57: docker.swarmkit.v1.VolumeSpec.driver:type_name -> docker.swarmkit.v1.Driver + 53, // 58: docker.swarmkit.v1.VolumeSpec.access_mode:type_name -> docker.swarmkit.v1.VolumeAccessMode + 54, // 59: docker.swarmkit.v1.VolumeSpec.secrets:type_name -> docker.swarmkit.v1.VolumeSecret + 55, // 60: docker.swarmkit.v1.VolumeSpec.AccessibilityRequirements:type_name -> docker.swarmkit.v1.TopologyRequirement + 56, // 61: docker.swarmkit.v1.VolumeSpec.capacity_range:type_name -> docker.swarmkit.v1.CapacityRange + 4, // 62: docker.swarmkit.v1.VolumeSpec.availability:type_name -> docker.swarmkit.v1.VolumeSpec.VolumeAvailability + 63, // [63:63] is the sub-list for method output_type + 63, // [63:63] is the sub-list for method input_type + 63, // [63:63] is the sub-list for extension type_name + 63, // [63:63] is the sub-list for extension extendee + 0, // [0:63] is the sub-list for field type_name +} + +func init() { file_api_specs_proto_init() } +func file_api_specs_proto_init() { + if File_api_specs_proto != nil { + return + } + file_api_types_proto_init() + file_api_specs_proto_msgTypes[1].OneofWrappers = []any{ + (*ServiceSpec_Replicated)(nil), + (*ServiceSpec_Global)(nil), + (*ServiceSpec_ReplicatedJob)(nil), + (*ServiceSpec_GlobalJob)(nil), } - { - size, err := m.Annotations.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSpecs(dAtA, i, uint64(size)) + file_api_specs_proto_msgTypes[6].OneofWrappers = []any{ + (*TaskSpec_Attachment)(nil), + (*TaskSpec_Container)(nil), + (*TaskSpec_Generic)(nil), } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *ServiceSpec) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err + file_api_specs_proto_msgTypes[12].OneofWrappers = []any{ + (*NetworkSpec_Network)(nil), } - return dAtA[:n], nil -} - -func (m *ServiceSpec) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_api_specs_proto_rawDesc), len(file_api_specs_proto_rawDesc)), + NumEnums: 5, + NumMessages: 22, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_api_specs_proto_goTypes, + DependencyIndexes: file_api_specs_proto_depIdxs, + EnumInfos: file_api_specs_proto_enumTypes, + MessageInfos: file_api_specs_proto_msgTypes, + }.Build() + File_api_specs_proto = out.File + file_api_specs_proto_goTypes = nil + file_api_specs_proto_depIdxs = nil } - -func (m *ServiceSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Mode != nil { - { - size := m.Mode.Size() - i -= size - if _, err := m.Mode.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - } - } - if m.Rollback != nil { - { - size, err := m.Rollback.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSpecs(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x4a - } - if m.Endpoint != nil { - { - size, err := m.Endpoint.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSpecs(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x42 - } - if len(m.Networks) > 0 { - for iNdEx := len(m.Networks) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Networks[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSpecs(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x3a - } - } - if m.Update != nil { - { - size, err := m.Update.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSpecs(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x32 - } - { - size, err := m.Task.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSpecs(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - { - size, err := m.Annotations.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSpecs(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *ServiceSpec_Replicated) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ServiceSpec_Replicated) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - if m.Replicated != nil { - { - size, err := m.Replicated.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSpecs(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - } - return len(dAtA) - i, nil -} -func (m *ServiceSpec_Global) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ServiceSpec_Global) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - if m.Global != nil { - { - size, err := m.Global.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSpecs(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - } - return len(dAtA) - i, nil -} -func (m *ServiceSpec_ReplicatedJob) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ServiceSpec_ReplicatedJob) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - if m.ReplicatedJob != nil { - { - size, err := m.ReplicatedJob.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSpecs(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x52 - } - return len(dAtA) - i, nil -} -func (m *ServiceSpec_GlobalJob) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ServiceSpec_GlobalJob) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - if m.GlobalJob != nil { - { - size, err := m.GlobalJob.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSpecs(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x5a - } - return len(dAtA) - i, nil -} -func (m *ReplicatedService) 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 *ReplicatedService) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ReplicatedService) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Replicas != 0 { - i = encodeVarintSpecs(dAtA, i, uint64(m.Replicas)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *GlobalService) 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 *GlobalService) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *GlobalService) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil -} - -func (m *ReplicatedJob) 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 *ReplicatedJob) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ReplicatedJob) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.TotalCompletions != 0 { - i = encodeVarintSpecs(dAtA, i, uint64(m.TotalCompletions)) - i-- - dAtA[i] = 0x10 - } - if m.MaxConcurrent != 0 { - i = encodeVarintSpecs(dAtA, i, uint64(m.MaxConcurrent)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *GlobalJob) 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 *GlobalJob) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *GlobalJob) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil -} - -func (m *TaskSpec) 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 *TaskSpec) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *TaskSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.ResourceReferences) > 0 { - for iNdEx := len(m.ResourceReferences) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.ResourceReferences[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSpecs(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x5a - } - } - if m.Runtime != nil { - { - size := m.Runtime.Size() - i -= size - if _, err := m.Runtime.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - } - } - if m.ForceUpdate != 0 { - i = encodeVarintSpecs(dAtA, i, uint64(m.ForceUpdate)) - i-- - dAtA[i] = 0x48 - } - if len(m.Networks) > 0 { - for iNdEx := len(m.Networks) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Networks[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSpecs(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x3a - } - } - if m.LogDriver != nil { - { - size, err := m.LogDriver.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSpecs(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x32 - } - if m.Placement != nil { - { - size, err := m.Placement.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSpecs(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x2a - } - if m.Restart != nil { - { - size, err := m.Restart.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSpecs(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - } - if m.Resources != nil { - { - size, err := m.Resources.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSpecs(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - return len(dAtA) - i, nil -} - -func (m *TaskSpec_Container) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *TaskSpec_Container) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - if m.Container != nil { - { - size, err := m.Container.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSpecs(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} -func (m *TaskSpec_Attachment) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *TaskSpec_Attachment) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - if m.Attachment != nil { - { - size, err := m.Attachment.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSpecs(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x42 - } - return len(dAtA) - i, nil -} -func (m *TaskSpec_Generic) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *TaskSpec_Generic) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - if m.Generic != nil { - { - size, err := m.Generic.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSpecs(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x52 - } - return len(dAtA) - i, nil -} -func (m *ResourceReference) 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 *ResourceReference) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ResourceReference) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.ResourceType != 0 { - i = encodeVarintSpecs(dAtA, i, uint64(m.ResourceType)) - i-- - dAtA[i] = 0x10 - } - if len(m.ResourceID) > 0 { - i -= len(m.ResourceID) - copy(dAtA[i:], m.ResourceID) - i = encodeVarintSpecs(dAtA, i, uint64(len(m.ResourceID))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *GenericRuntimeSpec) 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 *GenericRuntimeSpec) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *GenericRuntimeSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Payload != nil { - { - size, err := m.Payload.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSpecs(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - if len(m.Kind) > 0 { - i -= len(m.Kind) - copy(dAtA[i:], m.Kind) - i = encodeVarintSpecs(dAtA, i, uint64(len(m.Kind))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *NetworkAttachmentSpec) 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 *NetworkAttachmentSpec) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *NetworkAttachmentSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.ContainerID) > 0 { - i -= len(m.ContainerID) - copy(dAtA[i:], m.ContainerID) - i = encodeVarintSpecs(dAtA, i, uint64(len(m.ContainerID))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *ContainerSpec) 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 *ContainerSpec) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ContainerSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.OomScoreAdj != 0 { - i = encodeVarintSpecs(dAtA, i, uint64(m.OomScoreAdj)) - i-- - dAtA[i] = 0x1 - i-- - dAtA[i] = 0xf0 - } - if len(m.Ulimits) > 0 { - for iNdEx := len(m.Ulimits) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Ulimits[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSpecs(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1 - i-- - dAtA[i] = 0xea - } - } - if len(m.CapabilityDrop) > 0 { - for iNdEx := len(m.CapabilityDrop) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.CapabilityDrop[iNdEx]) - copy(dAtA[i:], m.CapabilityDrop[iNdEx]) - i = encodeVarintSpecs(dAtA, i, uint64(len(m.CapabilityDrop[iNdEx]))) - i-- - dAtA[i] = 0x1 - i-- - dAtA[i] = 0xe2 - } - } - if len(m.CapabilityAdd) > 0 { - for iNdEx := len(m.CapabilityAdd) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.CapabilityAdd[iNdEx]) - copy(dAtA[i:], m.CapabilityAdd[iNdEx]) - i = encodeVarintSpecs(dAtA, i, uint64(len(m.CapabilityAdd[iNdEx]))) - i-- - dAtA[i] = 0x1 - i-- - dAtA[i] = 0xda - } - } - if len(m.Sysctls) > 0 { - for k := range m.Sysctls { - v := m.Sysctls[k] - baseI := i - i -= len(v) - copy(dAtA[i:], v) - i = encodeVarintSpecs(dAtA, i, uint64(len(v))) - i-- - dAtA[i] = 0x12 - i -= len(k) - copy(dAtA[i:], k) - i = encodeVarintSpecs(dAtA, i, uint64(len(k))) - i-- - dAtA[i] = 0xa - i = encodeVarintSpecs(dAtA, i, uint64(baseI-i)) - i-- - dAtA[i] = 0x1 - i-- - dAtA[i] = 0xd2 - } - } - if m.PidsLimit != 0 { - i = encodeVarintSpecs(dAtA, i, uint64(m.PidsLimit)) - i-- - dAtA[i] = 0x1 - i-- - dAtA[i] = 0xc8 - } - if m.Isolation != 0 { - i = encodeVarintSpecs(dAtA, i, uint64(m.Isolation)) - i-- - dAtA[i] = 0x1 - i-- - dAtA[i] = 0xc0 - } - if m.Init != nil { - { - size, err := m.Init.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSpecs(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1 - i-- - dAtA[i] = 0xba - } - if m.Privileges != nil { - { - size, err := m.Privileges.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSpecs(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1 - i-- - dAtA[i] = 0xb2 - } - if len(m.Configs) > 0 { - for iNdEx := len(m.Configs) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Configs[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSpecs(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1 - i-- - dAtA[i] = 0xaa - } - } - if len(m.StopSignal) > 0 { - i -= len(m.StopSignal) - copy(dAtA[i:], m.StopSignal) - i = encodeVarintSpecs(dAtA, i, uint64(len(m.StopSignal))) - i-- - dAtA[i] = 0x1 - i-- - dAtA[i] = 0xa2 - } - if m.ReadOnly { - i-- - if m.ReadOnly { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x1 - i-- - dAtA[i] = 0x98 - } - if m.OpenStdin { - i-- - if m.OpenStdin { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x1 - i-- - dAtA[i] = 0x90 - } - if len(m.Hosts) > 0 { - for iNdEx := len(m.Hosts) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.Hosts[iNdEx]) - copy(dAtA[i:], m.Hosts[iNdEx]) - i = encodeVarintSpecs(dAtA, i, uint64(len(m.Hosts[iNdEx]))) - i-- - dAtA[i] = 0x1 - i-- - dAtA[i] = 0x8a - } - } - if m.Healthcheck != nil { - { - size, err := m.Healthcheck.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSpecs(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1 - i-- - dAtA[i] = 0x82 - } - if m.DNSConfig != nil { - { - size, err := m.DNSConfig.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSpecs(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x7a - } - if len(m.Hostname) > 0 { - i -= len(m.Hostname) - copy(dAtA[i:], m.Hostname) - i = encodeVarintSpecs(dAtA, i, uint64(len(m.Hostname))) - i-- - dAtA[i] = 0x72 - } - if m.TTY { - i-- - if m.TTY { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x68 - } - if len(m.Secrets) > 0 { - for iNdEx := len(m.Secrets) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Secrets[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSpecs(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x62 - } - } - if len(m.Groups) > 0 { - for iNdEx := len(m.Groups) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.Groups[iNdEx]) - copy(dAtA[i:], m.Groups[iNdEx]) - i = encodeVarintSpecs(dAtA, i, uint64(len(m.Groups[iNdEx]))) - i-- - dAtA[i] = 0x5a - } - } - if m.PullOptions != nil { - { - size, err := m.PullOptions.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSpecs(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x52 - } - if m.StopGracePeriod != nil { - { - size, err := m.StopGracePeriod.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSpecs(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x4a - } - if len(m.Mounts) > 0 { - for iNdEx := len(m.Mounts) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Mounts[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSpecs(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x42 - } - } - if len(m.User) > 0 { - i -= len(m.User) - copy(dAtA[i:], m.User) - i = encodeVarintSpecs(dAtA, i, uint64(len(m.User))) - i-- - dAtA[i] = 0x3a - } - if len(m.Dir) > 0 { - i -= len(m.Dir) - copy(dAtA[i:], m.Dir) - i = encodeVarintSpecs(dAtA, i, uint64(len(m.Dir))) - i-- - dAtA[i] = 0x32 - } - if len(m.Env) > 0 { - for iNdEx := len(m.Env) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.Env[iNdEx]) - copy(dAtA[i:], m.Env[iNdEx]) - i = encodeVarintSpecs(dAtA, i, uint64(len(m.Env[iNdEx]))) - i-- - dAtA[i] = 0x2a - } - } - if len(m.Args) > 0 { - for iNdEx := len(m.Args) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.Args[iNdEx]) - copy(dAtA[i:], m.Args[iNdEx]) - i = encodeVarintSpecs(dAtA, i, uint64(len(m.Args[iNdEx]))) - i-- - dAtA[i] = 0x22 - } - } - if len(m.Command) > 0 { - for iNdEx := len(m.Command) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.Command[iNdEx]) - copy(dAtA[i:], m.Command[iNdEx]) - i = encodeVarintSpecs(dAtA, i, uint64(len(m.Command[iNdEx]))) - i-- - dAtA[i] = 0x1a - } - } - if len(m.Labels) > 0 { - for k := range m.Labels { - v := m.Labels[k] - baseI := i - i -= len(v) - copy(dAtA[i:], v) - i = encodeVarintSpecs(dAtA, i, uint64(len(v))) - i-- - dAtA[i] = 0x12 - i -= len(k) - copy(dAtA[i:], k) - i = encodeVarintSpecs(dAtA, i, uint64(len(k))) - i-- - dAtA[i] = 0xa - i = encodeVarintSpecs(dAtA, i, uint64(baseI-i)) - i-- - dAtA[i] = 0x12 - } - } - if len(m.Image) > 0 { - i -= len(m.Image) - copy(dAtA[i:], m.Image) - i = encodeVarintSpecs(dAtA, i, uint64(len(m.Image))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *ContainerSpec_PullOptions) 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 *ContainerSpec_PullOptions) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ContainerSpec_PullOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.RegistryAuth) > 0 { - i -= len(m.RegistryAuth) - copy(dAtA[i:], m.RegistryAuth) - i = encodeVarintSpecs(dAtA, i, uint64(len(m.RegistryAuth))) - i-- - dAtA[i] = 0x4 - i-- - dAtA[i] = 0x82 - } - return len(dAtA) - i, nil -} - -func (m *ContainerSpec_DNSConfig) 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 *ContainerSpec_DNSConfig) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ContainerSpec_DNSConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Options) > 0 { - for iNdEx := len(m.Options) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.Options[iNdEx]) - copy(dAtA[i:], m.Options[iNdEx]) - i = encodeVarintSpecs(dAtA, i, uint64(len(m.Options[iNdEx]))) - i-- - dAtA[i] = 0x1a - } - } - if len(m.Search) > 0 { - for iNdEx := len(m.Search) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.Search[iNdEx]) - copy(dAtA[i:], m.Search[iNdEx]) - i = encodeVarintSpecs(dAtA, i, uint64(len(m.Search[iNdEx]))) - i-- - dAtA[i] = 0x12 - } - } - if len(m.Nameservers) > 0 { - for iNdEx := len(m.Nameservers) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.Nameservers[iNdEx]) - copy(dAtA[i:], m.Nameservers[iNdEx]) - i = encodeVarintSpecs(dAtA, i, uint64(len(m.Nameservers[iNdEx]))) - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func (m *ContainerSpec_Ulimit) 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 *ContainerSpec_Ulimit) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ContainerSpec_Ulimit) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Hard != 0 { - i = encodeVarintSpecs(dAtA, i, uint64(m.Hard)) - i-- - dAtA[i] = 0x18 - } - if m.Soft != 0 { - i = encodeVarintSpecs(dAtA, i, uint64(m.Soft)) - i-- - dAtA[i] = 0x10 - } - if len(m.Name) > 0 { - i -= len(m.Name) - copy(dAtA[i:], m.Name) - i = encodeVarintSpecs(dAtA, i, uint64(len(m.Name))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *EndpointSpec) 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 *EndpointSpec) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *EndpointSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Ports) > 0 { - for iNdEx := len(m.Ports) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Ports[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSpecs(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - } - if m.Mode != 0 { - i = encodeVarintSpecs(dAtA, i, uint64(m.Mode)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *NetworkSpec) 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 *NetworkSpec) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *NetworkSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.ConfigFrom != nil { - { - size := m.ConfigFrom.Size() - i -= size - if _, err := m.ConfigFrom.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - } - } - if m.Ingress { - i-- - if m.Ingress { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x38 - } - if m.Attachable { - i-- - if m.Attachable { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x30 - } - if m.IPAM != nil { - { - size, err := m.IPAM.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSpecs(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x2a - } - if m.Internal { - i-- - if m.Internal { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x20 - } - if m.Ipv6Enabled { - i-- - if m.Ipv6Enabled { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x18 - } - if m.DriverConfig != nil { - { - size, err := m.DriverConfig.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSpecs(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - { - size, err := m.Annotations.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSpecs(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *NetworkSpec_Network) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *NetworkSpec_Network) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - i -= len(m.Network) - copy(dAtA[i:], m.Network) - i = encodeVarintSpecs(dAtA, i, uint64(len(m.Network))) - i-- - dAtA[i] = 0x42 - return len(dAtA) - i, nil -} -func (m *ClusterSpec) 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 *ClusterSpec) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ClusterSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size, err := m.EncryptionConfig.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSpecs(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x42 - { - size, err := m.TaskDefaults.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSpecs(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x3a - { - size, err := m.CAConfig.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSpecs(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x32 - { - size, err := m.Dispatcher.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSpecs(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x2a - { - size, err := m.Raft.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSpecs(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - { - size, err := m.Orchestration.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSpecs(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - { - size, err := m.AcceptancePolicy.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSpecs(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - { - size, err := m.Annotations.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSpecs(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *SecretSpec) 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 *SecretSpec) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *SecretSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Driver != nil { - { - size, err := m.Driver.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSpecs(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - } - if m.Templating != nil { - { - size, err := m.Templating.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSpecs(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - } - if len(m.Data) > 0 { - i -= len(m.Data) - copy(dAtA[i:], m.Data) - i = encodeVarintSpecs(dAtA, i, uint64(len(m.Data))) - i-- - dAtA[i] = 0x12 - } - { - size, err := m.Annotations.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSpecs(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *ConfigSpec) 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 *ConfigSpec) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ConfigSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Templating != nil { - { - size, err := m.Templating.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSpecs(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - } - if len(m.Data) > 0 { - i -= len(m.Data) - copy(dAtA[i:], m.Data) - i = encodeVarintSpecs(dAtA, i, uint64(len(m.Data))) - i-- - dAtA[i] = 0x12 - } - { - size, err := m.Annotations.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSpecs(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *VolumeSpec) 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 *VolumeSpec) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *VolumeSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Availability != 0 { - i = encodeVarintSpecs(dAtA, i, uint64(m.Availability)) - i-- - dAtA[i] = 0x40 - } - if m.CapacityRange != nil { - { - size, err := m.CapacityRange.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSpecs(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x3a - } - if m.AccessibilityRequirements != nil { - { - size, err := m.AccessibilityRequirements.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSpecs(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x32 - } - if len(m.Secrets) > 0 { - for iNdEx := len(m.Secrets) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Secrets[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSpecs(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x2a - } - } - if m.AccessMode != nil { - { - size, err := m.AccessMode.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSpecs(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - } - if m.Driver != nil { - { - size, err := m.Driver.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSpecs(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - } - if len(m.Group) > 0 { - i -= len(m.Group) - copy(dAtA[i:], m.Group) - i = encodeVarintSpecs(dAtA, i, uint64(len(m.Group))) - i-- - dAtA[i] = 0x12 - } - { - size, err := m.Annotations.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSpecs(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func encodeVarintSpecs(dAtA []byte, offset int, v uint64) int { - offset -= sovSpecs(v) - base := offset - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return base -} -func (m *NodeSpec) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.Annotations.Size() - n += 1 + l + sovSpecs(uint64(l)) - if m.DesiredRole != 0 { - n += 1 + sovSpecs(uint64(m.DesiredRole)) - } - if m.Membership != 0 { - n += 1 + sovSpecs(uint64(m.Membership)) - } - if m.Availability != 0 { - n += 1 + sovSpecs(uint64(m.Availability)) - } - return n -} - -func (m *ServiceSpec) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.Annotations.Size() - n += 1 + l + sovSpecs(uint64(l)) - l = m.Task.Size() - n += 1 + l + sovSpecs(uint64(l)) - if m.Mode != nil { - n += m.Mode.Size() - } - if m.Update != nil { - l = m.Update.Size() - n += 1 + l + sovSpecs(uint64(l)) - } - if len(m.Networks) > 0 { - for _, e := range m.Networks { - l = e.Size() - n += 1 + l + sovSpecs(uint64(l)) - } - } - if m.Endpoint != nil { - l = m.Endpoint.Size() - n += 1 + l + sovSpecs(uint64(l)) - } - if m.Rollback != nil { - l = m.Rollback.Size() - n += 1 + l + sovSpecs(uint64(l)) - } - return n -} - -func (m *ServiceSpec_Replicated) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Replicated != nil { - l = m.Replicated.Size() - n += 1 + l + sovSpecs(uint64(l)) - } - return n -} -func (m *ServiceSpec_Global) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Global != nil { - l = m.Global.Size() - n += 1 + l + sovSpecs(uint64(l)) - } - return n -} -func (m *ServiceSpec_ReplicatedJob) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.ReplicatedJob != nil { - l = m.ReplicatedJob.Size() - n += 1 + l + sovSpecs(uint64(l)) - } - return n -} -func (m *ServiceSpec_GlobalJob) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.GlobalJob != nil { - l = m.GlobalJob.Size() - n += 1 + l + sovSpecs(uint64(l)) - } - return n -} -func (m *ReplicatedService) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Replicas != 0 { - n += 1 + sovSpecs(uint64(m.Replicas)) - } - return n -} - -func (m *GlobalService) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - return n -} - -func (m *ReplicatedJob) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.MaxConcurrent != 0 { - n += 1 + sovSpecs(uint64(m.MaxConcurrent)) - } - if m.TotalCompletions != 0 { - n += 1 + sovSpecs(uint64(m.TotalCompletions)) - } - return n -} - -func (m *GlobalJob) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - return n -} - -func (m *TaskSpec) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Runtime != nil { - n += m.Runtime.Size() - } - if m.Resources != nil { - l = m.Resources.Size() - n += 1 + l + sovSpecs(uint64(l)) - } - if m.Restart != nil { - l = m.Restart.Size() - n += 1 + l + sovSpecs(uint64(l)) - } - if m.Placement != nil { - l = m.Placement.Size() - n += 1 + l + sovSpecs(uint64(l)) - } - if m.LogDriver != nil { - l = m.LogDriver.Size() - n += 1 + l + sovSpecs(uint64(l)) - } - if len(m.Networks) > 0 { - for _, e := range m.Networks { - l = e.Size() - n += 1 + l + sovSpecs(uint64(l)) - } - } - if m.ForceUpdate != 0 { - n += 1 + sovSpecs(uint64(m.ForceUpdate)) - } - if len(m.ResourceReferences) > 0 { - for _, e := range m.ResourceReferences { - l = e.Size() - n += 1 + l + sovSpecs(uint64(l)) - } - } - return n -} - -func (m *TaskSpec_Container) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Container != nil { - l = m.Container.Size() - n += 1 + l + sovSpecs(uint64(l)) - } - return n -} -func (m *TaskSpec_Attachment) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Attachment != nil { - l = m.Attachment.Size() - n += 1 + l + sovSpecs(uint64(l)) - } - return n -} -func (m *TaskSpec_Generic) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Generic != nil { - l = m.Generic.Size() - n += 1 + l + sovSpecs(uint64(l)) - } - return n -} -func (m *ResourceReference) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.ResourceID) - if l > 0 { - n += 1 + l + sovSpecs(uint64(l)) - } - if m.ResourceType != 0 { - n += 1 + sovSpecs(uint64(m.ResourceType)) - } - return n -} - -func (m *GenericRuntimeSpec) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Kind) - if l > 0 { - n += 1 + l + sovSpecs(uint64(l)) - } - if m.Payload != nil { - l = m.Payload.Size() - n += 1 + l + sovSpecs(uint64(l)) - } - return n -} - -func (m *NetworkAttachmentSpec) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.ContainerID) - if l > 0 { - n += 1 + l + sovSpecs(uint64(l)) - } - return n -} - -func (m *ContainerSpec) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Image) - if l > 0 { - n += 1 + l + sovSpecs(uint64(l)) - } - if len(m.Labels) > 0 { - for k, v := range m.Labels { - _ = k - _ = v - mapEntrySize := 1 + len(k) + sovSpecs(uint64(len(k))) + 1 + len(v) + sovSpecs(uint64(len(v))) - n += mapEntrySize + 1 + sovSpecs(uint64(mapEntrySize)) - } - } - if len(m.Command) > 0 { - for _, s := range m.Command { - l = len(s) - n += 1 + l + sovSpecs(uint64(l)) - } - } - if len(m.Args) > 0 { - for _, s := range m.Args { - l = len(s) - n += 1 + l + sovSpecs(uint64(l)) - } - } - if len(m.Env) > 0 { - for _, s := range m.Env { - l = len(s) - n += 1 + l + sovSpecs(uint64(l)) - } - } - l = len(m.Dir) - if l > 0 { - n += 1 + l + sovSpecs(uint64(l)) - } - l = len(m.User) - if l > 0 { - n += 1 + l + sovSpecs(uint64(l)) - } - if len(m.Mounts) > 0 { - for _, e := range m.Mounts { - l = e.Size() - n += 1 + l + sovSpecs(uint64(l)) - } - } - if m.StopGracePeriod != nil { - l = m.StopGracePeriod.Size() - n += 1 + l + sovSpecs(uint64(l)) - } - if m.PullOptions != nil { - l = m.PullOptions.Size() - n += 1 + l + sovSpecs(uint64(l)) - } - if len(m.Groups) > 0 { - for _, s := range m.Groups { - l = len(s) - n += 1 + l + sovSpecs(uint64(l)) - } - } - if len(m.Secrets) > 0 { - for _, e := range m.Secrets { - l = e.Size() - n += 1 + l + sovSpecs(uint64(l)) - } - } - if m.TTY { - n += 2 - } - l = len(m.Hostname) - if l > 0 { - n += 1 + l + sovSpecs(uint64(l)) - } - if m.DNSConfig != nil { - l = m.DNSConfig.Size() - n += 1 + l + sovSpecs(uint64(l)) - } - if m.Healthcheck != nil { - l = m.Healthcheck.Size() - n += 2 + l + sovSpecs(uint64(l)) - } - if len(m.Hosts) > 0 { - for _, s := range m.Hosts { - l = len(s) - n += 2 + l + sovSpecs(uint64(l)) - } - } - if m.OpenStdin { - n += 3 - } - if m.ReadOnly { - n += 3 - } - l = len(m.StopSignal) - if l > 0 { - n += 2 + l + sovSpecs(uint64(l)) - } - if len(m.Configs) > 0 { - for _, e := range m.Configs { - l = e.Size() - n += 2 + l + sovSpecs(uint64(l)) - } - } - if m.Privileges != nil { - l = m.Privileges.Size() - n += 2 + l + sovSpecs(uint64(l)) - } - if m.Init != nil { - l = m.Init.Size() - n += 2 + l + sovSpecs(uint64(l)) - } - if m.Isolation != 0 { - n += 2 + sovSpecs(uint64(m.Isolation)) - } - if m.PidsLimit != 0 { - n += 2 + sovSpecs(uint64(m.PidsLimit)) - } - if len(m.Sysctls) > 0 { - for k, v := range m.Sysctls { - _ = k - _ = v - mapEntrySize := 1 + len(k) + sovSpecs(uint64(len(k))) + 1 + len(v) + sovSpecs(uint64(len(v))) - n += mapEntrySize + 2 + sovSpecs(uint64(mapEntrySize)) - } - } - if len(m.CapabilityAdd) > 0 { - for _, s := range m.CapabilityAdd { - l = len(s) - n += 2 + l + sovSpecs(uint64(l)) - } - } - if len(m.CapabilityDrop) > 0 { - for _, s := range m.CapabilityDrop { - l = len(s) - n += 2 + l + sovSpecs(uint64(l)) - } - } - if len(m.Ulimits) > 0 { - for _, e := range m.Ulimits { - l = e.Size() - n += 2 + l + sovSpecs(uint64(l)) - } - } - if m.OomScoreAdj != 0 { - n += 2 + sovSpecs(uint64(m.OomScoreAdj)) - } - return n -} - -func (m *ContainerSpec_PullOptions) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.RegistryAuth) - if l > 0 { - n += 2 + l + sovSpecs(uint64(l)) - } - return n -} - -func (m *ContainerSpec_DNSConfig) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Nameservers) > 0 { - for _, s := range m.Nameservers { - l = len(s) - n += 1 + l + sovSpecs(uint64(l)) - } - } - if len(m.Search) > 0 { - for _, s := range m.Search { - l = len(s) - n += 1 + l + sovSpecs(uint64(l)) - } - } - if len(m.Options) > 0 { - for _, s := range m.Options { - l = len(s) - n += 1 + l + sovSpecs(uint64(l)) - } - } - return n -} - -func (m *ContainerSpec_Ulimit) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Name) - if l > 0 { - n += 1 + l + sovSpecs(uint64(l)) - } - if m.Soft != 0 { - n += 1 + sovSpecs(uint64(m.Soft)) - } - if m.Hard != 0 { - n += 1 + sovSpecs(uint64(m.Hard)) - } - return n -} - -func (m *EndpointSpec) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Mode != 0 { - n += 1 + sovSpecs(uint64(m.Mode)) - } - if len(m.Ports) > 0 { - for _, e := range m.Ports { - l = e.Size() - n += 1 + l + sovSpecs(uint64(l)) - } - } - return n -} - -func (m *NetworkSpec) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.Annotations.Size() - n += 1 + l + sovSpecs(uint64(l)) - if m.DriverConfig != nil { - l = m.DriverConfig.Size() - n += 1 + l + sovSpecs(uint64(l)) - } - if m.Ipv6Enabled { - n += 2 - } - if m.Internal { - n += 2 - } - if m.IPAM != nil { - l = m.IPAM.Size() - n += 1 + l + sovSpecs(uint64(l)) - } - if m.Attachable { - n += 2 - } - if m.Ingress { - n += 2 - } - if m.ConfigFrom != nil { - n += m.ConfigFrom.Size() - } - return n -} - -func (m *NetworkSpec_Network) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Network) - n += 1 + l + sovSpecs(uint64(l)) - return n -} -func (m *ClusterSpec) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.Annotations.Size() - n += 1 + l + sovSpecs(uint64(l)) - l = m.AcceptancePolicy.Size() - n += 1 + l + sovSpecs(uint64(l)) - l = m.Orchestration.Size() - n += 1 + l + sovSpecs(uint64(l)) - l = m.Raft.Size() - n += 1 + l + sovSpecs(uint64(l)) - l = m.Dispatcher.Size() - n += 1 + l + sovSpecs(uint64(l)) - l = m.CAConfig.Size() - n += 1 + l + sovSpecs(uint64(l)) - l = m.TaskDefaults.Size() - n += 1 + l + sovSpecs(uint64(l)) - l = m.EncryptionConfig.Size() - n += 1 + l + sovSpecs(uint64(l)) - return n -} - -func (m *SecretSpec) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.Annotations.Size() - n += 1 + l + sovSpecs(uint64(l)) - l = len(m.Data) - if l > 0 { - n += 1 + l + sovSpecs(uint64(l)) - } - if m.Templating != nil { - l = m.Templating.Size() - n += 1 + l + sovSpecs(uint64(l)) - } - if m.Driver != nil { - l = m.Driver.Size() - n += 1 + l + sovSpecs(uint64(l)) - } - return n -} - -func (m *ConfigSpec) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.Annotations.Size() - n += 1 + l + sovSpecs(uint64(l)) - l = len(m.Data) - if l > 0 { - n += 1 + l + sovSpecs(uint64(l)) - } - if m.Templating != nil { - l = m.Templating.Size() - n += 1 + l + sovSpecs(uint64(l)) - } - return n -} - -func (m *VolumeSpec) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.Annotations.Size() - n += 1 + l + sovSpecs(uint64(l)) - l = len(m.Group) - if l > 0 { - n += 1 + l + sovSpecs(uint64(l)) - } - if m.Driver != nil { - l = m.Driver.Size() - n += 1 + l + sovSpecs(uint64(l)) - } - if m.AccessMode != nil { - l = m.AccessMode.Size() - n += 1 + l + sovSpecs(uint64(l)) - } - if len(m.Secrets) > 0 { - for _, e := range m.Secrets { - l = e.Size() - n += 1 + l + sovSpecs(uint64(l)) - } - } - if m.AccessibilityRequirements != nil { - l = m.AccessibilityRequirements.Size() - n += 1 + l + sovSpecs(uint64(l)) - } - if m.CapacityRange != nil { - l = m.CapacityRange.Size() - n += 1 + l + sovSpecs(uint64(l)) - } - if m.Availability != 0 { - n += 1 + sovSpecs(uint64(m.Availability)) - } - return n -} - -func sovSpecs(x uint64) (n int) { - return (math_bits.Len64(x|1) + 6) / 7 -} -func sozSpecs(x uint64) (n int) { - return sovSpecs(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (this *NodeSpec) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&NodeSpec{`, - `Annotations:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Annotations), "Annotations", "Annotations", 1), `&`, ``, 1) + `,`, - `DesiredRole:` + fmt.Sprintf("%v", this.DesiredRole) + `,`, - `Membership:` + fmt.Sprintf("%v", this.Membership) + `,`, - `Availability:` + fmt.Sprintf("%v", this.Availability) + `,`, - `}`, - }, "") - return s -} -func (this *ServiceSpec) String() string { - if this == nil { - return "nil" - } - repeatedStringForNetworks := "[]*NetworkAttachmentConfig{" - for _, f := range this.Networks { - repeatedStringForNetworks += strings.Replace(fmt.Sprintf("%v", f), "NetworkAttachmentConfig", "NetworkAttachmentConfig", 1) + "," - } - repeatedStringForNetworks += "}" - s := strings.Join([]string{`&ServiceSpec{`, - `Annotations:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Annotations), "Annotations", "Annotations", 1), `&`, ``, 1) + `,`, - `Task:` + strings.Replace(strings.Replace(this.Task.String(), "TaskSpec", "TaskSpec", 1), `&`, ``, 1) + `,`, - `Mode:` + fmt.Sprintf("%v", this.Mode) + `,`, - `Update:` + strings.Replace(fmt.Sprintf("%v", this.Update), "UpdateConfig", "UpdateConfig", 1) + `,`, - `Networks:` + repeatedStringForNetworks + `,`, - `Endpoint:` + strings.Replace(this.Endpoint.String(), "EndpointSpec", "EndpointSpec", 1) + `,`, - `Rollback:` + strings.Replace(fmt.Sprintf("%v", this.Rollback), "UpdateConfig", "UpdateConfig", 1) + `,`, - `}`, - }, "") - return s -} -func (this *ServiceSpec_Replicated) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&ServiceSpec_Replicated{`, - `Replicated:` + strings.Replace(fmt.Sprintf("%v", this.Replicated), "ReplicatedService", "ReplicatedService", 1) + `,`, - `}`, - }, "") - return s -} -func (this *ServiceSpec_Global) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&ServiceSpec_Global{`, - `Global:` + strings.Replace(fmt.Sprintf("%v", this.Global), "GlobalService", "GlobalService", 1) + `,`, - `}`, - }, "") - return s -} -func (this *ServiceSpec_ReplicatedJob) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&ServiceSpec_ReplicatedJob{`, - `ReplicatedJob:` + strings.Replace(fmt.Sprintf("%v", this.ReplicatedJob), "ReplicatedJob", "ReplicatedJob", 1) + `,`, - `}`, - }, "") - return s -} -func (this *ServiceSpec_GlobalJob) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&ServiceSpec_GlobalJob{`, - `GlobalJob:` + strings.Replace(fmt.Sprintf("%v", this.GlobalJob), "GlobalJob", "GlobalJob", 1) + `,`, - `}`, - }, "") - return s -} -func (this *ReplicatedService) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&ReplicatedService{`, - `Replicas:` + fmt.Sprintf("%v", this.Replicas) + `,`, - `}`, - }, "") - return s -} -func (this *GlobalService) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&GlobalService{`, - `}`, - }, "") - return s -} -func (this *ReplicatedJob) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&ReplicatedJob{`, - `MaxConcurrent:` + fmt.Sprintf("%v", this.MaxConcurrent) + `,`, - `TotalCompletions:` + fmt.Sprintf("%v", this.TotalCompletions) + `,`, - `}`, - }, "") - return s -} -func (this *GlobalJob) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&GlobalJob{`, - `}`, - }, "") - return s -} -func (this *TaskSpec) String() string { - if this == nil { - return "nil" - } - repeatedStringForNetworks := "[]*NetworkAttachmentConfig{" - for _, f := range this.Networks { - repeatedStringForNetworks += strings.Replace(fmt.Sprintf("%v", f), "NetworkAttachmentConfig", "NetworkAttachmentConfig", 1) + "," - } - repeatedStringForNetworks += "}" - repeatedStringForResourceReferences := "[]ResourceReference{" - for _, f := range this.ResourceReferences { - repeatedStringForResourceReferences += strings.Replace(strings.Replace(f.String(), "ResourceReference", "ResourceReference", 1), `&`, ``, 1) + "," - } - repeatedStringForResourceReferences += "}" - s := strings.Join([]string{`&TaskSpec{`, - `Runtime:` + fmt.Sprintf("%v", this.Runtime) + `,`, - `Resources:` + strings.Replace(fmt.Sprintf("%v", this.Resources), "ResourceRequirements", "ResourceRequirements", 1) + `,`, - `Restart:` + strings.Replace(fmt.Sprintf("%v", this.Restart), "RestartPolicy", "RestartPolicy", 1) + `,`, - `Placement:` + strings.Replace(fmt.Sprintf("%v", this.Placement), "Placement", "Placement", 1) + `,`, - `LogDriver:` + strings.Replace(fmt.Sprintf("%v", this.LogDriver), "Driver", "Driver", 1) + `,`, - `Networks:` + repeatedStringForNetworks + `,`, - `ForceUpdate:` + fmt.Sprintf("%v", this.ForceUpdate) + `,`, - `ResourceReferences:` + repeatedStringForResourceReferences + `,`, - `}`, - }, "") - return s -} -func (this *TaskSpec_Container) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&TaskSpec_Container{`, - `Container:` + strings.Replace(fmt.Sprintf("%v", this.Container), "ContainerSpec", "ContainerSpec", 1) + `,`, - `}`, - }, "") - return s -} -func (this *TaskSpec_Attachment) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&TaskSpec_Attachment{`, - `Attachment:` + strings.Replace(fmt.Sprintf("%v", this.Attachment), "NetworkAttachmentSpec", "NetworkAttachmentSpec", 1) + `,`, - `}`, - }, "") - return s -} -func (this *TaskSpec_Generic) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&TaskSpec_Generic{`, - `Generic:` + strings.Replace(fmt.Sprintf("%v", this.Generic), "GenericRuntimeSpec", "GenericRuntimeSpec", 1) + `,`, - `}`, - }, "") - return s -} -func (this *ResourceReference) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&ResourceReference{`, - `ResourceID:` + fmt.Sprintf("%v", this.ResourceID) + `,`, - `ResourceType:` + fmt.Sprintf("%v", this.ResourceType) + `,`, - `}`, - }, "") - return s -} -func (this *GenericRuntimeSpec) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&GenericRuntimeSpec{`, - `Kind:` + fmt.Sprintf("%v", this.Kind) + `,`, - `Payload:` + strings.Replace(fmt.Sprintf("%v", this.Payload), "Any", "types.Any", 1) + `,`, - `}`, - }, "") - return s -} -func (this *NetworkAttachmentSpec) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&NetworkAttachmentSpec{`, - `ContainerID:` + fmt.Sprintf("%v", this.ContainerID) + `,`, - `}`, - }, "") - return s -} -func (this *ContainerSpec) String() string { - if this == nil { - return "nil" - } - repeatedStringForMounts := "[]Mount{" - for _, f := range this.Mounts { - repeatedStringForMounts += fmt.Sprintf("%v", f) + "," - } - repeatedStringForMounts += "}" - repeatedStringForSecrets := "[]*SecretReference{" - for _, f := range this.Secrets { - repeatedStringForSecrets += strings.Replace(fmt.Sprintf("%v", f), "SecretReference", "SecretReference", 1) + "," - } - repeatedStringForSecrets += "}" - repeatedStringForConfigs := "[]*ConfigReference{" - for _, f := range this.Configs { - repeatedStringForConfigs += strings.Replace(fmt.Sprintf("%v", f), "ConfigReference", "ConfigReference", 1) + "," - } - repeatedStringForConfigs += "}" - repeatedStringForUlimits := "[]*ContainerSpec_Ulimit{" - for _, f := range this.Ulimits { - repeatedStringForUlimits += strings.Replace(fmt.Sprintf("%v", f), "ContainerSpec_Ulimit", "ContainerSpec_Ulimit", 1) + "," - } - repeatedStringForUlimits += "}" - keysForLabels := make([]string, 0, len(this.Labels)) - for k, _ := range this.Labels { - keysForLabels = append(keysForLabels, k) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForLabels) - mapStringForLabels := "map[string]string{" - for _, k := range keysForLabels { - mapStringForLabels += fmt.Sprintf("%v: %v,", k, this.Labels[k]) - } - mapStringForLabels += "}" - keysForSysctls := make([]string, 0, len(this.Sysctls)) - for k, _ := range this.Sysctls { - keysForSysctls = append(keysForSysctls, k) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForSysctls) - mapStringForSysctls := "map[string]string{" - for _, k := range keysForSysctls { - mapStringForSysctls += fmt.Sprintf("%v: %v,", k, this.Sysctls[k]) - } - mapStringForSysctls += "}" - s := strings.Join([]string{`&ContainerSpec{`, - `Image:` + fmt.Sprintf("%v", this.Image) + `,`, - `Labels:` + mapStringForLabels + `,`, - `Command:` + fmt.Sprintf("%v", this.Command) + `,`, - `Args:` + fmt.Sprintf("%v", this.Args) + `,`, - `Env:` + fmt.Sprintf("%v", this.Env) + `,`, - `Dir:` + fmt.Sprintf("%v", this.Dir) + `,`, - `User:` + fmt.Sprintf("%v", this.User) + `,`, - `Mounts:` + repeatedStringForMounts + `,`, - `StopGracePeriod:` + strings.Replace(fmt.Sprintf("%v", this.StopGracePeriod), "Duration", "types.Duration", 1) + `,`, - `PullOptions:` + strings.Replace(fmt.Sprintf("%v", this.PullOptions), "ContainerSpec_PullOptions", "ContainerSpec_PullOptions", 1) + `,`, - `Groups:` + fmt.Sprintf("%v", this.Groups) + `,`, - `Secrets:` + repeatedStringForSecrets + `,`, - `TTY:` + fmt.Sprintf("%v", this.TTY) + `,`, - `Hostname:` + fmt.Sprintf("%v", this.Hostname) + `,`, - `DNSConfig:` + strings.Replace(fmt.Sprintf("%v", this.DNSConfig), "ContainerSpec_DNSConfig", "ContainerSpec_DNSConfig", 1) + `,`, - `Healthcheck:` + strings.Replace(fmt.Sprintf("%v", this.Healthcheck), "HealthConfig", "HealthConfig", 1) + `,`, - `Hosts:` + fmt.Sprintf("%v", this.Hosts) + `,`, - `OpenStdin:` + fmt.Sprintf("%v", this.OpenStdin) + `,`, - `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, - `StopSignal:` + fmt.Sprintf("%v", this.StopSignal) + `,`, - `Configs:` + repeatedStringForConfigs + `,`, - `Privileges:` + strings.Replace(fmt.Sprintf("%v", this.Privileges), "Privileges", "Privileges", 1) + `,`, - `Init:` + strings.Replace(fmt.Sprintf("%v", this.Init), "BoolValue", "types.BoolValue", 1) + `,`, - `Isolation:` + fmt.Sprintf("%v", this.Isolation) + `,`, - `PidsLimit:` + fmt.Sprintf("%v", this.PidsLimit) + `,`, - `Sysctls:` + mapStringForSysctls + `,`, - `CapabilityAdd:` + fmt.Sprintf("%v", this.CapabilityAdd) + `,`, - `CapabilityDrop:` + fmt.Sprintf("%v", this.CapabilityDrop) + `,`, - `Ulimits:` + repeatedStringForUlimits + `,`, - `OomScoreAdj:` + fmt.Sprintf("%v", this.OomScoreAdj) + `,`, - `}`, - }, "") - return s -} -func (this *ContainerSpec_PullOptions) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&ContainerSpec_PullOptions{`, - `RegistryAuth:` + fmt.Sprintf("%v", this.RegistryAuth) + `,`, - `}`, - }, "") - return s -} -func (this *ContainerSpec_DNSConfig) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&ContainerSpec_DNSConfig{`, - `Nameservers:` + fmt.Sprintf("%v", this.Nameservers) + `,`, - `Search:` + fmt.Sprintf("%v", this.Search) + `,`, - `Options:` + fmt.Sprintf("%v", this.Options) + `,`, - `}`, - }, "") - return s -} -func (this *ContainerSpec_Ulimit) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&ContainerSpec_Ulimit{`, - `Name:` + fmt.Sprintf("%v", this.Name) + `,`, - `Soft:` + fmt.Sprintf("%v", this.Soft) + `,`, - `Hard:` + fmt.Sprintf("%v", this.Hard) + `,`, - `}`, - }, "") - return s -} -func (this *EndpointSpec) String() string { - if this == nil { - return "nil" - } - repeatedStringForPorts := "[]*PortConfig{" - for _, f := range this.Ports { - repeatedStringForPorts += strings.Replace(fmt.Sprintf("%v", f), "PortConfig", "PortConfig", 1) + "," - } - repeatedStringForPorts += "}" - s := strings.Join([]string{`&EndpointSpec{`, - `Mode:` + fmt.Sprintf("%v", this.Mode) + `,`, - `Ports:` + repeatedStringForPorts + `,`, - `}`, - }, "") - return s -} -func (this *NetworkSpec) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&NetworkSpec{`, - `Annotations:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Annotations), "Annotations", "Annotations", 1), `&`, ``, 1) + `,`, - `DriverConfig:` + strings.Replace(fmt.Sprintf("%v", this.DriverConfig), "Driver", "Driver", 1) + `,`, - `Ipv6Enabled:` + fmt.Sprintf("%v", this.Ipv6Enabled) + `,`, - `Internal:` + fmt.Sprintf("%v", this.Internal) + `,`, - `IPAM:` + strings.Replace(fmt.Sprintf("%v", this.IPAM), "IPAMOptions", "IPAMOptions", 1) + `,`, - `Attachable:` + fmt.Sprintf("%v", this.Attachable) + `,`, - `Ingress:` + fmt.Sprintf("%v", this.Ingress) + `,`, - `ConfigFrom:` + fmt.Sprintf("%v", this.ConfigFrom) + `,`, - `}`, - }, "") - return s -} -func (this *NetworkSpec_Network) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&NetworkSpec_Network{`, - `Network:` + fmt.Sprintf("%v", this.Network) + `,`, - `}`, - }, "") - return s -} -func (this *ClusterSpec) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&ClusterSpec{`, - `Annotations:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Annotations), "Annotations", "Annotations", 1), `&`, ``, 1) + `,`, - `AcceptancePolicy:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.AcceptancePolicy), "AcceptancePolicy", "AcceptancePolicy", 1), `&`, ``, 1) + `,`, - `Orchestration:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Orchestration), "OrchestrationConfig", "OrchestrationConfig", 1), `&`, ``, 1) + `,`, - `Raft:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Raft), "RaftConfig", "RaftConfig", 1), `&`, ``, 1) + `,`, - `Dispatcher:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Dispatcher), "DispatcherConfig", "DispatcherConfig", 1), `&`, ``, 1) + `,`, - `CAConfig:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.CAConfig), "CAConfig", "CAConfig", 1), `&`, ``, 1) + `,`, - `TaskDefaults:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.TaskDefaults), "TaskDefaults", "TaskDefaults", 1), `&`, ``, 1) + `,`, - `EncryptionConfig:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.EncryptionConfig), "EncryptionConfig", "EncryptionConfig", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s -} -func (this *SecretSpec) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&SecretSpec{`, - `Annotations:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Annotations), "Annotations", "Annotations", 1), `&`, ``, 1) + `,`, - `Data:` + fmt.Sprintf("%v", this.Data) + `,`, - `Templating:` + strings.Replace(fmt.Sprintf("%v", this.Templating), "Driver", "Driver", 1) + `,`, - `Driver:` + strings.Replace(fmt.Sprintf("%v", this.Driver), "Driver", "Driver", 1) + `,`, - `}`, - }, "") - return s -} -func (this *ConfigSpec) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&ConfigSpec{`, - `Annotations:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Annotations), "Annotations", "Annotations", 1), `&`, ``, 1) + `,`, - `Data:` + fmt.Sprintf("%v", this.Data) + `,`, - `Templating:` + strings.Replace(fmt.Sprintf("%v", this.Templating), "Driver", "Driver", 1) + `,`, - `}`, - }, "") - return s -} -func (this *VolumeSpec) String() string { - if this == nil { - return "nil" - } - repeatedStringForSecrets := "[]*VolumeSecret{" - for _, f := range this.Secrets { - repeatedStringForSecrets += strings.Replace(fmt.Sprintf("%v", f), "VolumeSecret", "VolumeSecret", 1) + "," - } - repeatedStringForSecrets += "}" - s := strings.Join([]string{`&VolumeSpec{`, - `Annotations:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Annotations), "Annotations", "Annotations", 1), `&`, ``, 1) + `,`, - `Group:` + fmt.Sprintf("%v", this.Group) + `,`, - `Driver:` + strings.Replace(fmt.Sprintf("%v", this.Driver), "Driver", "Driver", 1) + `,`, - `AccessMode:` + strings.Replace(fmt.Sprintf("%v", this.AccessMode), "VolumeAccessMode", "VolumeAccessMode", 1) + `,`, - `Secrets:` + repeatedStringForSecrets + `,`, - `AccessibilityRequirements:` + strings.Replace(fmt.Sprintf("%v", this.AccessibilityRequirements), "TopologyRequirement", "TopologyRequirement", 1) + `,`, - `CapacityRange:` + strings.Replace(fmt.Sprintf("%v", this.CapacityRange), "CapacityRange", "CapacityRange", 1) + `,`, - `Availability:` + fmt.Sprintf("%v", this.Availability) + `,`, - `}`, - }, "") - return s -} -func valueToStringSpecs(v interface{}) string { - rv := reflect.ValueOf(v) - if rv.IsNil() { - return "nil" - } - pv := reflect.Indirect(rv).Interface() - return fmt.Sprintf("*%v", pv) -} -func (m *NodeSpec) 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 ErrIntOverflowSpecs - } - 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: NodeSpec: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: NodeSpec: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Annotations", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSpecs - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Annotations.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field DesiredRole", wireType) - } - m.DesiredRole = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.DesiredRole |= NodeRole(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Membership", wireType) - } - m.Membership = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Membership |= NodeSpec_Membership(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Availability", wireType) - } - m.Availability = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Availability |= NodeSpec_Availability(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipSpecs(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthSpecs - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ServiceSpec) 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 ErrIntOverflowSpecs - } - 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: ServiceSpec: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ServiceSpec: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Annotations", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSpecs - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Annotations.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Task", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSpecs - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Task.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Replicated", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSpecs - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &ReplicatedService{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.Mode = &ServiceSpec_Replicated{v} - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Global", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSpecs - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &GlobalService{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.Mode = &ServiceSpec_Global{v} - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Update", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSpecs - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Update == nil { - m.Update = &UpdateConfig{} - } - if err := m.Update.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Networks", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSpecs - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Networks = append(m.Networks, &NetworkAttachmentConfig{}) - if err := m.Networks[len(m.Networks)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 8: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Endpoint", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSpecs - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Endpoint == nil { - m.Endpoint = &EndpointSpec{} - } - if err := m.Endpoint.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 9: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Rollback", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSpecs - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Rollback == nil { - m.Rollback = &UpdateConfig{} - } - if err := m.Rollback.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 10: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ReplicatedJob", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSpecs - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &ReplicatedJob{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.Mode = &ServiceSpec_ReplicatedJob{v} - iNdEx = postIndex - case 11: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field GlobalJob", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSpecs - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &GlobalJob{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.Mode = &ServiceSpec_GlobalJob{v} - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipSpecs(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthSpecs - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ReplicatedService) 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 ErrIntOverflowSpecs - } - 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: ReplicatedService: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ReplicatedService: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Replicas", wireType) - } - m.Replicas = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Replicas |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipSpecs(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthSpecs - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *GlobalService) 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 ErrIntOverflowSpecs - } - 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: GlobalService: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GlobalService: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipSpecs(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthSpecs - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ReplicatedJob) 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 ErrIntOverflowSpecs - } - 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: ReplicatedJob: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ReplicatedJob: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field MaxConcurrent", wireType) - } - m.MaxConcurrent = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.MaxConcurrent |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field TotalCompletions", wireType) - } - m.TotalCompletions = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.TotalCompletions |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipSpecs(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthSpecs - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *GlobalJob) 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 ErrIntOverflowSpecs - } - 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: GlobalJob: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GlobalJob: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipSpecs(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthSpecs - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *TaskSpec) 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 ErrIntOverflowSpecs - } - 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: TaskSpec: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: TaskSpec: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Container", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSpecs - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &ContainerSpec{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.Runtime = &TaskSpec_Container{v} - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Resources", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSpecs - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Resources == nil { - m.Resources = &ResourceRequirements{} - } - if err := m.Resources.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Restart", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSpecs - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Restart == nil { - m.Restart = &RestartPolicy{} - } - if err := m.Restart.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Placement", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSpecs - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Placement == nil { - m.Placement = &Placement{} - } - if err := m.Placement.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LogDriver", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSpecs - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.LogDriver == nil { - m.LogDriver = &Driver{} - } - if err := m.LogDriver.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Networks", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSpecs - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Networks = append(m.Networks, &NetworkAttachmentConfig{}) - if err := m.Networks[len(m.Networks)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 8: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Attachment", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSpecs - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &NetworkAttachmentSpec{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.Runtime = &TaskSpec_Attachment{v} - iNdEx = postIndex - case 9: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ForceUpdate", wireType) - } - m.ForceUpdate = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ForceUpdate |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 10: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Generic", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSpecs - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &GenericRuntimeSpec{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.Runtime = &TaskSpec_Generic{v} - iNdEx = postIndex - case 11: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ResourceReferences", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSpecs - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ResourceReferences = append(m.ResourceReferences, ResourceReference{}) - if err := m.ResourceReferences[len(m.ResourceReferences)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipSpecs(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthSpecs - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ResourceReference) 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 ErrIntOverflowSpecs - } - 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: ResourceReference: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ResourceReference: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ResourceID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - 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 ErrInvalidLengthSpecs - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ResourceID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ResourceType", wireType) - } - m.ResourceType = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ResourceType |= ResourceType(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipSpecs(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthSpecs - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *GenericRuntimeSpec) 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 ErrIntOverflowSpecs - } - 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: GenericRuntimeSpec: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GenericRuntimeSpec: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Kind", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - 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 ErrInvalidLengthSpecs - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Kind = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Payload", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSpecs - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Payload == nil { - m.Payload = &types.Any{} - } - if err := m.Payload.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipSpecs(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthSpecs - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *NetworkAttachmentSpec) 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 ErrIntOverflowSpecs - } - 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: NetworkAttachmentSpec: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: NetworkAttachmentSpec: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ContainerID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - 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 ErrInvalidLengthSpecs - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ContainerID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipSpecs(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthSpecs - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ContainerSpec) 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 ErrIntOverflowSpecs - } - 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: ContainerSpec: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ContainerSpec: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Image", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - 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 ErrInvalidLengthSpecs - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Image = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Labels", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSpecs - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Labels == nil { - m.Labels = make(map[string]string) - } - var mapkey string - var mapvalue string - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { - return ErrInvalidLengthSpecs - } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey < 0 { - return ErrInvalidLengthSpecs - } - if postStringIndexmapkey > l { - return io.ErrUnexpectedEOF - } - mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - } else if fieldNum == 2 { - var stringLenmapvalue uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapvalue |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapvalue := int(stringLenmapvalue) - if intStringLenmapvalue < 0 { - return ErrInvalidLengthSpecs - } - postStringIndexmapvalue := iNdEx + intStringLenmapvalue - if postStringIndexmapvalue < 0 { - return ErrInvalidLengthSpecs - } - if postStringIndexmapvalue > l { - return io.ErrUnexpectedEOF - } - mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) - iNdEx = postStringIndexmapvalue - } else { - iNdEx = entryPreIndex - skippy, err := skipSpecs(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthSpecs - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - m.Labels[mapkey] = mapvalue - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Command", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - 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 ErrInvalidLengthSpecs - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Command = append(m.Command, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Args", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - 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 ErrInvalidLengthSpecs - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Args = append(m.Args, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Env", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - 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 ErrInvalidLengthSpecs - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Env = append(m.Env, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Dir", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - 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 ErrInvalidLengthSpecs - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Dir = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field User", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - 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 ErrInvalidLengthSpecs - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.User = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 8: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Mounts", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSpecs - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Mounts = append(m.Mounts, Mount{}) - if err := m.Mounts[len(m.Mounts)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 9: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field StopGracePeriod", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSpecs - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.StopGracePeriod == nil { - m.StopGracePeriod = &types.Duration{} - } - if err := m.StopGracePeriod.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 10: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PullOptions", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSpecs - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.PullOptions == nil { - m.PullOptions = &ContainerSpec_PullOptions{} - } - if err := m.PullOptions.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 11: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Groups", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - 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 ErrInvalidLengthSpecs - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Groups = append(m.Groups, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 12: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Secrets", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSpecs - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Secrets = append(m.Secrets, &SecretReference{}) - if err := m.Secrets[len(m.Secrets)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 13: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field TTY", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.TTY = bool(v != 0) - case 14: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Hostname", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - 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 ErrInvalidLengthSpecs - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Hostname = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 15: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DNSConfig", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSpecs - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.DNSConfig == nil { - m.DNSConfig = &ContainerSpec_DNSConfig{} - } - if err := m.DNSConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 16: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Healthcheck", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSpecs - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Healthcheck == nil { - m.Healthcheck = &HealthConfig{} - } - if err := m.Healthcheck.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 17: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Hosts", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - 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 ErrInvalidLengthSpecs - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Hosts = append(m.Hosts, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 18: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field OpenStdin", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.OpenStdin = bool(v != 0) - case 19: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ReadOnly", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.ReadOnly = bool(v != 0) - case 20: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field StopSignal", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - 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 ErrInvalidLengthSpecs - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.StopSignal = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 21: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Configs", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSpecs - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Configs = append(m.Configs, &ConfigReference{}) - if err := m.Configs[len(m.Configs)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 22: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Privileges", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSpecs - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Privileges == nil { - m.Privileges = &Privileges{} - } - if err := m.Privileges.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 23: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Init", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSpecs - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Init == nil { - m.Init = &types.BoolValue{} - } - if err := m.Init.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 24: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Isolation", wireType) - } - m.Isolation = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Isolation |= ContainerSpec_Isolation(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 25: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PidsLimit", wireType) - } - m.PidsLimit = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.PidsLimit |= int64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 26: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Sysctls", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSpecs - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Sysctls == nil { - m.Sysctls = make(map[string]string) - } - var mapkey string - var mapvalue string - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { - return ErrInvalidLengthSpecs - } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey < 0 { - return ErrInvalidLengthSpecs - } - if postStringIndexmapkey > l { - return io.ErrUnexpectedEOF - } - mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - } else if fieldNum == 2 { - var stringLenmapvalue uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapvalue |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapvalue := int(stringLenmapvalue) - if intStringLenmapvalue < 0 { - return ErrInvalidLengthSpecs - } - postStringIndexmapvalue := iNdEx + intStringLenmapvalue - if postStringIndexmapvalue < 0 { - return ErrInvalidLengthSpecs - } - if postStringIndexmapvalue > l { - return io.ErrUnexpectedEOF - } - mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) - iNdEx = postStringIndexmapvalue - } else { - iNdEx = entryPreIndex - skippy, err := skipSpecs(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthSpecs - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - m.Sysctls[mapkey] = mapvalue - iNdEx = postIndex - case 27: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CapabilityAdd", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - 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 ErrInvalidLengthSpecs - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.CapabilityAdd = append(m.CapabilityAdd, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 28: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CapabilityDrop", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - 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 ErrInvalidLengthSpecs - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.CapabilityDrop = append(m.CapabilityDrop, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 29: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Ulimits", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSpecs - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Ulimits = append(m.Ulimits, &ContainerSpec_Ulimit{}) - if err := m.Ulimits[len(m.Ulimits)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 30: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field OomScoreAdj", wireType) - } - m.OomScoreAdj = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.OomScoreAdj |= int64(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipSpecs(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthSpecs - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ContainerSpec_PullOptions) 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 ErrIntOverflowSpecs - } - 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: PullOptions: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: PullOptions: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 64: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RegistryAuth", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - 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 ErrInvalidLengthSpecs - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.RegistryAuth = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipSpecs(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthSpecs - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ContainerSpec_DNSConfig) 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 ErrIntOverflowSpecs - } - 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: DNSConfig: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: DNSConfig: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Nameservers", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - 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 ErrInvalidLengthSpecs - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Nameservers = append(m.Nameservers, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Search", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - 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 ErrInvalidLengthSpecs - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Search = append(m.Search, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Options", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - 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 ErrInvalidLengthSpecs - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Options = append(m.Options, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipSpecs(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthSpecs - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ContainerSpec_Ulimit) 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 ErrIntOverflowSpecs - } - 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: Ulimit: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Ulimit: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - 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 ErrInvalidLengthSpecs - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Name = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Soft", wireType) - } - m.Soft = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Soft |= int64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Hard", wireType) - } - m.Hard = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Hard |= int64(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipSpecs(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthSpecs - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *EndpointSpec) 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 ErrIntOverflowSpecs - } - 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: EndpointSpec: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: EndpointSpec: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Mode", wireType) - } - m.Mode = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Mode |= EndpointSpec_ResolutionMode(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Ports", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSpecs - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Ports = append(m.Ports, &PortConfig{}) - if err := m.Ports[len(m.Ports)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipSpecs(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthSpecs - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *NetworkSpec) 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 ErrIntOverflowSpecs - } - 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: NetworkSpec: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: NetworkSpec: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Annotations", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSpecs - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Annotations.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DriverConfig", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSpecs - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.DriverConfig == nil { - m.DriverConfig = &Driver{} - } - if err := m.DriverConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Ipv6Enabled", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.Ipv6Enabled = bool(v != 0) - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Internal", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.Internal = bool(v != 0) - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field IPAM", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSpecs - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.IPAM == nil { - m.IPAM = &IPAMOptions{} - } - if err := m.IPAM.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 6: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Attachable", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.Attachable = bool(v != 0) - case 7: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Ingress", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.Ingress = bool(v != 0) - case 8: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Network", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - 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 ErrInvalidLengthSpecs - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ConfigFrom = &NetworkSpec_Network{string(dAtA[iNdEx:postIndex])} - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipSpecs(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthSpecs - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ClusterSpec) 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 ErrIntOverflowSpecs - } - 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: ClusterSpec: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ClusterSpec: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Annotations", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSpecs - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Annotations.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AcceptancePolicy", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSpecs - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.AcceptancePolicy.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Orchestration", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSpecs - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Orchestration.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Raft", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSpecs - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Raft.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Dispatcher", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSpecs - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Dispatcher.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CAConfig", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSpecs - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.CAConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TaskDefaults", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSpecs - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.TaskDefaults.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 8: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field EncryptionConfig", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSpecs - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.EncryptionConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipSpecs(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthSpecs - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *SecretSpec) 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 ErrIntOverflowSpecs - } - 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: SecretSpec: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: SecretSpec: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Annotations", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSpecs - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Annotations.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Data", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthSpecs - } - postIndex := iNdEx + byteLen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Data = append(m.Data[:0], dAtA[iNdEx:postIndex]...) - if m.Data == nil { - m.Data = []byte{} - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Templating", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSpecs - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Templating == nil { - m.Templating = &Driver{} - } - if err := m.Templating.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Driver", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSpecs - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Driver == nil { - m.Driver = &Driver{} - } - if err := m.Driver.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipSpecs(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthSpecs - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ConfigSpec) 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 ErrIntOverflowSpecs - } - 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: ConfigSpec: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ConfigSpec: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Annotations", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSpecs - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Annotations.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Data", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthSpecs - } - postIndex := iNdEx + byteLen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Data = append(m.Data[:0], dAtA[iNdEx:postIndex]...) - if m.Data == nil { - m.Data = []byte{} - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Templating", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSpecs - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Templating == nil { - m.Templating = &Driver{} - } - if err := m.Templating.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipSpecs(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthSpecs - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *VolumeSpec) 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 ErrIntOverflowSpecs - } - 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: VolumeSpec: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: VolumeSpec: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Annotations", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSpecs - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Annotations.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Group", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - 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 ErrInvalidLengthSpecs - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Group = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Driver", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSpecs - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Driver == nil { - m.Driver = &Driver{} - } - if err := m.Driver.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AccessMode", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSpecs - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.AccessMode == nil { - m.AccessMode = &VolumeAccessMode{} - } - if err := m.AccessMode.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Secrets", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSpecs - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Secrets = append(m.Secrets, &VolumeSecret{}) - if err := m.Secrets[len(m.Secrets)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AccessibilityRequirements", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSpecs - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.AccessibilityRequirements == nil { - m.AccessibilityRequirements = &TopologyRequirement{} - } - if err := m.AccessibilityRequirements.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CapacityRange", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSpecs - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSpecs - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.CapacityRange == nil { - m.CapacityRange = &CapacityRange{} - } - if err := m.CapacityRange.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 8: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Availability", wireType) - } - m.Availability = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpecs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Availability |= VolumeSpec_VolumeAvailability(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipSpecs(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthSpecs - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipSpecs(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - depth := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowSpecs - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowSpecs - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - case 1: - iNdEx += 8 - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowSpecs - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLengthSpecs - } - iNdEx += length - case 3: - depth++ - case 4: - if depth == 0 { - return 0, ErrUnexpectedEndOfGroupSpecs - } - depth-- - case 5: - iNdEx += 4 - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - if iNdEx < 0 { - return 0, ErrInvalidLengthSpecs - } - if depth == 0 { - return iNdEx, nil - } - } - return 0, io.ErrUnexpectedEOF -} - -var ( - ErrInvalidLengthSpecs = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowSpecs = fmt.Errorf("proto: integer overflow") - ErrUnexpectedEndOfGroupSpecs = fmt.Errorf("proto: unexpected end of group") -) diff --git a/api/specs.proto b/api/specs.proto index c1aeaccf77..4fa08aec66 100644 --- a/api/specs.proto +++ b/api/specs.proto @@ -2,11 +2,13 @@ syntax = "proto3"; package docker.swarmkit.v1; -import "github.com/docker/swarmkit/api/types.proto"; -import "gogoproto/gogo.proto"; +option go_package = "github.com/moby/swarmkit/v2/api"; + +import "api/types.proto"; import "google/protobuf/duration.proto"; import "google/protobuf/any.proto"; import "google/protobuf/wrappers.proto"; +import "protobuf/plugin/plugin.proto"; // Specs are container objects for user provided input. All creations and // updates are done through spec types. As a convention, user input from a spec @@ -19,28 +21,26 @@ import "google/protobuf/wrappers.proto"; // component or a different representation to reflect allocation or resolution. message NodeSpec { - Annotations annotations = 1 [(gogoproto.nullable) = false]; + Annotations annotations = 1; enum Membership { - option (gogoproto.goproto_enum_prefix) = false; - PENDING = 0 [(gogoproto.enumvalue_customname) = "NodeMembershipPending"]; - ACCEPTED = 1 [(gogoproto.enumvalue_customname) = "NodeMembershipAccepted"]; + PENDING = 0 [(docker.protobuf.plugin.go_enum_value_name) = "NodeMembershipPending"]; + ACCEPTED = 1 [(docker.protobuf.plugin.go_enum_value_name) = "NodeMembershipAccepted"]; } enum Availability { - option (gogoproto.goproto_enum_prefix) = false; // Active nodes. - ACTIVE = 0 [(gogoproto.enumvalue_customname) = "NodeAvailabilityActive"]; + ACTIVE = 0 [(docker.protobuf.plugin.go_enum_value_name) = "NodeAvailabilityActive"]; // Paused nodes won't be considered by the scheduler, preventing any // further task to run on them. - PAUSE = 1 [(gogoproto.enumvalue_customname) = "NodeAvailabilityPause"]; + PAUSE = 1 [(docker.protobuf.plugin.go_enum_value_name) = "NodeAvailabilityPause"]; // Drained nodes are paused and any task already running on them will // be evicted. - DRAIN = 2 [(gogoproto.enumvalue_customname) = "NodeAvailabilityDrain"]; + DRAIN = 2 [(docker.protobuf.plugin.go_enum_value_name) = "NodeAvailabilityDrain"]; } // DesiredRole defines the role the node should have. @@ -61,10 +61,10 @@ message NodeSpec { // strategy and restart policy, a number of application-level behaviors can be // defined. message ServiceSpec { - Annotations annotations = 1 [(gogoproto.nullable) = false]; + Annotations annotations = 1; // Task defines the task template this service will spawn. - TaskSpec task = 2 [(gogoproto.nullable) = false]; + TaskSpec task = 2; oneof mode { ReplicatedService replicated = 3; @@ -162,7 +162,7 @@ message TaskSpec { // dispatcher to send the related objects. // // ResourceReferences is a list of ResourceReferences used by the task. - repeated ResourceReference resource_references = 11 [(gogoproto.nullable) = false]; + repeated ResourceReference resource_references = 11; } message ResourceReference { @@ -245,7 +245,7 @@ message ContainerSpec { // TTY declares that a TTY should be attached to the standard streams, // including stdin if it is still open. - bool tty = 13 [(gogoproto.customname) = "TTY"]; + bool tty = 13 [(docker.protobuf.plugin.go_name) = "TTY"]; // OpenStdin declares that the standard input (stdin) should be open. bool open_stdin = 18; @@ -259,7 +259,7 @@ message ContainerSpec { // StopSignal defines the signal to stop the container. string stop_signal = 20; - repeated Mount mounts = 8 [(gogoproto.nullable) = false]; + repeated Mount mounts = 8; // StopGracePeriod the grace period for stopping the container before // forcefully killing the container. @@ -314,7 +314,7 @@ message ContainerSpec { } // DNSConfig allows one to specify DNS related configuration in resolv.conf - DNSConfig dns_config = 15 [(gogoproto.customname) = "DNSConfig"]; + DNSConfig dns_config = 15 [(docker.protobuf.plugin.go_name) = "DNSConfig"]; // Healthcheck describes how to check the container is healthy. If the // container is considered unhealthy, it will be destroyed, its creating @@ -323,16 +323,15 @@ message ContainerSpec { HealthConfig healthcheck = 16; enum Isolation { - option (gogoproto.goproto_enum_prefix) = false; // ISOLATION_DEFAULT uses whatever default value from the container runtime - ISOLATION_DEFAULT = 0 [(gogoproto.enumvalue_customname) = "ContainerIsolationDefault"]; + ISOLATION_DEFAULT = 0 [(docker.protobuf.plugin.go_enum_value_name) = "ContainerIsolationDefault"]; // ISOLATION_PROCESS forces windows container isolation - ISOLATION_PROCESS = 1 [(gogoproto.enumvalue_customname) = "ContainerIsolationProcess"]; + ISOLATION_PROCESS = 1 [(docker.protobuf.plugin.go_enum_value_name) = "ContainerIsolationProcess"]; // ISOLATION_HYPERV forces Hyper-V isolation - ISOLATION_HYPERV = 2 [(gogoproto.enumvalue_customname) = "ContainerIsolationHyperV"]; + ISOLATION_HYPERV = 2 [(docker.protobuf.plugin.go_enum_value_name) = "ContainerIsolationHyperV"]; } // Isolation defines the isolation level for windows containers (default, process, hyperv). @@ -384,13 +383,12 @@ message EndpointSpec { // internal loadbalancing between tasks which are all within // the cluster. This is sometimes calls east-west data path. enum ResolutionMode { - option (gogoproto.goproto_enum_prefix) = false; // VIP resolution mode specifies that the // service resolves to a logical IP and the requests // are sent to that logical IP. Packets hitting that // logical IP are load balanced to a chosen backend. - VIP = 0 [(gogoproto.enumvalue_customname) = "ResolutionModeVirtualIP"]; + VIP = 0 [(docker.protobuf.plugin.go_enum_value_name) = "ResolutionModeVirtualIP"]; // DNSRR resolution mode specifies that the // service directly gets resolved to one of the @@ -398,7 +396,7 @@ message EndpointSpec { // request towards the actual backend. This requires // that the client does not cache the DNS responses // when the DNS response TTL is 0. - DNSRR = 1 [(gogoproto.enumvalue_customname) = "ResolutionModeDNSRoundRobin"]; + DNSRR = 1 [(docker.protobuf.plugin.go_enum_value_name) = "ResolutionModeDNSRoundRobin"]; } ResolutionMode mode = 1; @@ -410,7 +408,7 @@ message EndpointSpec { // NetworkSpec specifies user defined network parameters. message NetworkSpec { - Annotations annotations = 1 [(gogoproto.nullable) = false]; + Annotations annotations = 1; // DriverConfig specific configuration consumed by the network driver. Driver driver_config = 2; @@ -422,7 +420,7 @@ message NetworkSpec { // accomplished by disabling the default gateway or through other means. bool internal = 4; - IPAMOptions ipam = 5 [(gogoproto.customname) = "IPAM"]; + IPAMOptions ipam = 5 [(docker.protobuf.plugin.go_name) = "IPAM"]; // Attachable allows external(to swarm) entities to manually // attach to this network. With this flag enabled, external @@ -451,35 +449,35 @@ message NetworkSpec { // ClusterSpec specifies global cluster settings. message ClusterSpec { - Annotations annotations = 1 [(gogoproto.nullable) = false]; + Annotations annotations = 1; // DEPRECATED: AcceptancePolicy defines the certificate issuance policy. // Acceptance policy is no longer customizable, and secrets have been // replaced with join tokens. - AcceptancePolicy acceptance_policy = 2 [deprecated=true, (gogoproto.nullable) = false]; + AcceptancePolicy acceptance_policy = 2 [deprecated=true]; // Orchestration defines cluster-level orchestration settings. - OrchestrationConfig orchestration = 3 [(gogoproto.nullable) = false]; + OrchestrationConfig orchestration = 3; // Raft defines the cluster's raft settings. - RaftConfig raft = 4 [(gogoproto.nullable) = false]; + RaftConfig raft = 4; // Dispatcher defines cluster-level dispatcher settings. - DispatcherConfig dispatcher = 5 [(gogoproto.nullable) = false]; + DispatcherConfig dispatcher = 5; // CAConfig defines cluster-level certificate authority settings. - CAConfig ca_config = 6 [(gogoproto.nullable) = false, (gogoproto.customname) = "CAConfig"]; + CAConfig ca_config = 6 [(docker.protobuf.plugin.go_name) = "CAConfig"]; // TaskDefaults specifies the default values to use for task creation. - TaskDefaults task_defaults = 7 [(gogoproto.nullable) = false]; + TaskDefaults task_defaults = 7; // EncryptionConfig defines the cluster's encryption settings. - EncryptionConfig encryption_config = 8 [(gogoproto.nullable) = false]; + EncryptionConfig encryption_config = 8; } // SecretSpec specifies a user-provided secret. message SecretSpec { - Annotations annotations = 1 [(gogoproto.nullable) = false]; + Annotations annotations = 1; // Data is the secret payload - the maximum size is 500KB (that is, 500*1024 bytes) bytes data = 2; @@ -497,7 +495,7 @@ message SecretSpec { // ConfigSpec specifies user-provided configuration files. message ConfigSpec { - Annotations annotations = 1 [(gogoproto.nullable) = false]; + Annotations annotations = 1; // Data is the config payload - the maximum size is 500KB (that is, 500*1024 bytes) // TODO(aaronl): Do we want to revise this to include multiple payloads in a single @@ -516,7 +514,7 @@ message VolumeSpec { // Annotations includes the name and labels of a volume. The name used in the // spec's Annotations will be passed to the Plugin as the "Name" in the // CreateVolume request. - Annotations annotations = 1 [(gogoproto.nullable) = false]; + Annotations annotations = 1; // Group defines the volume group this particular volume belongs to. When // requesting volumes for a workload, the group name can be used instead of @@ -559,19 +557,18 @@ message VolumeSpec { CapacityRange capacity_range = 7; enum VolumeAvailability { - option (gogoproto.goproto_enum_prefix) = false; // Active allows a volume to be used and scheduled to. This is the // default state. - ACTIVE = 0 [(gogoproto.enumvalue_customname) = "VolumeAvailabilityActive"]; + ACTIVE = 0 [(docker.protobuf.plugin.go_enum_value_name) = "VolumeAvailabilityActive"]; // Pause prevents volumes from having new workloads scheduled to use // them, even if they're already published on a Node. - PAUSE = 1 [(gogoproto.enumvalue_customname) = "VolumeAvailabilityPause"]; + PAUSE = 1 [(docker.protobuf.plugin.go_enum_value_name) = "VolumeAvailabilityPause"]; // Drain causes existing workloads using this volume to be rescheduled, // causing the volume to be unpublished and removed from nodes. - DRAIN = 2 [(gogoproto.enumvalue_customname) = "VolumeAvailabilityDrain"]; + DRAIN = 2 [(docker.protobuf.plugin.go_enum_value_name) = "VolumeAvailabilityDrain"]; } // Availability is the Volume's desired availability. Analogous to Node diff --git a/api/storeobject.go b/api/storeobject.go index f7e483d973..c6c8ac8810 100644 --- a/api/storeobject.go +++ b/api/storeobject.go @@ -18,8 +18,8 @@ var ( // StoreObject is an abstract object that can be handled by the store. type StoreObject interface { GetID() string // Get ID - GetMeta() Meta // Retrieve metadata - SetMeta(Meta) // Set metadata + GetMeta() *Meta // Retrieve metadata + SetMeta(*Meta) // Set metadata CopyStoreObject() StoreObject // Return a copy of this object EventCreate() Event // Return a creation event EventUpdate(oldObject StoreObject) Event // Return an update event @@ -54,6 +54,9 @@ type EventDelete interface { } func customIndexer(kind string, annotations *Annotations) (bool, [][]byte, error) { + if annotations == nil { + return false, nil, nil + } var converted [][]byte for _, entry := range annotations.Indices { @@ -100,7 +103,10 @@ func prefixFromArgs(args ...interface{}) ([]byte, error) { return val, nil } -func checkCustom(a1, a2 Annotations) bool { +func checkCustom(a1, a2 *Annotations) bool { + if a1 == nil || a2 == nil { + return false + } if len(a1.Indices) == 1 { for _, ind := range a2.Indices { if ind.Key == a1.Indices[0].Key && ind.Val == a1.Indices[0].Val { @@ -111,7 +117,10 @@ func checkCustom(a1, a2 Annotations) bool { return false } -func checkCustomPrefix(a1, a2 Annotations) bool { +func checkCustomPrefix(a1, a2 *Annotations) bool { + if a1 == nil || a2 == nil { + return false + } if len(a1.Indices) == 1 { for _, ind := range a2.Indices { if ind.Key == a1.Indices[0].Key && strings.HasPrefix(ind.Val, a1.Indices[0].Val) { diff --git a/api/types.pb.deepcopy.go b/api/types.pb.deepcopy.go new file mode 100644 index 0000000000..d3033d12d9 --- /dev/null +++ b/api/types.pb.deepcopy.go @@ -0,0 +1,1943 @@ +// Code generated by protoc-gen-goswarm. DO NOT EDIT. + +package api + +import ( + deepcopy "github.com/moby/swarmkit/v2/api/deepcopy" + durationpb "google.golang.org/protobuf/types/known/durationpb" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + wrapperspb "google.golang.org/protobuf/types/known/wrapperspb" +) + +func (m *Version) Copy() *Version { + if m == nil { + return nil + } + o := &Version{} + o.CopyFrom(m) + return o +} + +func (m *Version) CopyFrom(src interface{}) { + + o := src.(*Version) + m.Index = o.Index +} + +func (m *IndexEntry) Copy() *IndexEntry { + if m == nil { + return nil + } + o := &IndexEntry{} + o.CopyFrom(m) + return o +} + +func (m *IndexEntry) CopyFrom(src interface{}) { + + o := src.(*IndexEntry) + m.Key = o.Key + m.Val = o.Val +} + +func (m *Annotations) Copy() *Annotations { + if m == nil { + return nil + } + o := &Annotations{} + o.CopyFrom(m) + return o +} + +func (m *Annotations) CopyFrom(src interface{}) { + + o := src.(*Annotations) + m.Name = o.Name + if o.Labels != nil { + m.Labels = make(map[string]string, len(o.Labels)) + for k, v := range o.Labels { + m.Labels[k] = v + } + } + + if o.Indices != nil { + m.Indices = make([]*IndexEntry, len(o.Indices)) + for i := range m.Indices { + m.Indices[i] = &IndexEntry{} + deepcopy.Copy(m.Indices[i], o.Indices[i]) + } + } + +} + +func (m *NamedGenericResource) Copy() *NamedGenericResource { + if m == nil { + return nil + } + o := &NamedGenericResource{} + o.CopyFrom(m) + return o +} + +func (m *NamedGenericResource) CopyFrom(src interface{}) { + + o := src.(*NamedGenericResource) + m.Kind = o.Kind + m.Value = o.Value +} + +func (m *DiscreteGenericResource) Copy() *DiscreteGenericResource { + if m == nil { + return nil + } + o := &DiscreteGenericResource{} + o.CopyFrom(m) + return o +} + +func (m *DiscreteGenericResource) CopyFrom(src interface{}) { + + o := src.(*DiscreteGenericResource) + m.Kind = o.Kind + m.Value = o.Value +} + +func (m *GenericResource) Copy() *GenericResource { + if m == nil { + return nil + } + o := &GenericResource{} + o.CopyFrom(m) + return o +} + +func (m *GenericResource) CopyFrom(src interface{}) { + + o := src.(*GenericResource) + if o.Resource != nil { + switch o.Resource.(type) { + case *GenericResource_NamedResourceSpec: + v := GenericResource_NamedResourceSpec{ + NamedResourceSpec: &NamedGenericResource{}, + } + deepcopy.Copy(v.NamedResourceSpec, o.GetNamedResourceSpec()) + m.Resource = &v + case *GenericResource_DiscreteResourceSpec: + v := GenericResource_DiscreteResourceSpec{ + DiscreteResourceSpec: &DiscreteGenericResource{}, + } + deepcopy.Copy(v.DiscreteResourceSpec, o.GetDiscreteResourceSpec()) + m.Resource = &v + } + } + +} + +func (m *Resources) Copy() *Resources { + if m == nil { + return nil + } + o := &Resources{} + o.CopyFrom(m) + return o +} + +func (m *Resources) CopyFrom(src interface{}) { + + o := src.(*Resources) + m.NanoCPUs = o.NanoCPUs + m.MemoryBytes = o.MemoryBytes + if o.Generic != nil { + m.Generic = make([]*GenericResource, len(o.Generic)) + for i := range m.Generic { + m.Generic[i] = &GenericResource{} + deepcopy.Copy(m.Generic[i], o.Generic[i]) + } + } + +} + +func (m *ResourceRequirements) Copy() *ResourceRequirements { + if m == nil { + return nil + } + o := &ResourceRequirements{} + o.CopyFrom(m) + return o +} + +func (m *ResourceRequirements) CopyFrom(src interface{}) { + + o := src.(*ResourceRequirements) + if o.Limits != nil { + m.Limits = &Resources{} + deepcopy.Copy(m.Limits, o.Limits) + } + + if o.Reservations != nil { + m.Reservations = &Resources{} + deepcopy.Copy(m.Reservations, o.Reservations) + } + + if o.SwapBytes != nil { + m.SwapBytes = &wrapperspb.Int64Value{} + deepcopy.Copy(m.SwapBytes, o.SwapBytes) + } + + if o.MemorySwappiness != nil { + m.MemorySwappiness = &wrapperspb.Int64Value{} + deepcopy.Copy(m.MemorySwappiness, o.MemorySwappiness) + } + +} + +func (m *Platform) Copy() *Platform { + if m == nil { + return nil + } + o := &Platform{} + o.CopyFrom(m) + return o +} + +func (m *Platform) CopyFrom(src interface{}) { + + o := src.(*Platform) + m.Architecture = o.Architecture + m.OS = o.OS +} + +func (m *PluginDescription) Copy() *PluginDescription { + if m == nil { + return nil + } + o := &PluginDescription{} + o.CopyFrom(m) + return o +} + +func (m *PluginDescription) CopyFrom(src interface{}) { + + o := src.(*PluginDescription) + m.Type = o.Type + m.Name = o.Name +} + +func (m *EngineDescription) Copy() *EngineDescription { + if m == nil { + return nil + } + o := &EngineDescription{} + o.CopyFrom(m) + return o +} + +func (m *EngineDescription) CopyFrom(src interface{}) { + + o := src.(*EngineDescription) + m.EngineVersion = o.EngineVersion + if o.Labels != nil { + m.Labels = make(map[string]string, len(o.Labels)) + for k, v := range o.Labels { + m.Labels[k] = v + } + } + + if o.Plugins != nil { + m.Plugins = make([]*PluginDescription, len(o.Plugins)) + for i := range m.Plugins { + m.Plugins[i] = &PluginDescription{} + deepcopy.Copy(m.Plugins[i], o.Plugins[i]) + } + } + +} + +func (m *NodeDescription) Copy() *NodeDescription { + if m == nil { + return nil + } + o := &NodeDescription{} + o.CopyFrom(m) + return o +} + +func (m *NodeDescription) CopyFrom(src interface{}) { + + o := src.(*NodeDescription) + m.Hostname = o.Hostname + if o.Platform != nil { + m.Platform = &Platform{} + deepcopy.Copy(m.Platform, o.Platform) + } + + if o.Resources != nil { + m.Resources = &Resources{} + deepcopy.Copy(m.Resources, o.Resources) + } + + if o.Engine != nil { + m.Engine = &EngineDescription{} + deepcopy.Copy(m.Engine, o.Engine) + } + + if o.TLSInfo != nil { + m.TLSInfo = &NodeTLSInfo{} + deepcopy.Copy(m.TLSInfo, o.TLSInfo) + } + + m.FIPS = o.FIPS + if o.CSIInfo != nil { + m.CSIInfo = make([]*NodeCSIInfo, len(o.CSIInfo)) + for i := range m.CSIInfo { + m.CSIInfo[i] = &NodeCSIInfo{} + deepcopy.Copy(m.CSIInfo[i], o.CSIInfo[i]) + } + } + +} + +func (m *NodeTLSInfo) Copy() *NodeTLSInfo { + if m == nil { + return nil + } + o := &NodeTLSInfo{} + o.CopyFrom(m) + return o +} + +func (m *NodeTLSInfo) CopyFrom(src interface{}) { + + o := src.(*NodeTLSInfo) + if o.TrustRoot != nil { + m.TrustRoot = make([]byte, len(o.TrustRoot)) + copy(m.TrustRoot, o.TrustRoot) + } + + if o.CertIssuerSubject != nil { + m.CertIssuerSubject = make([]byte, len(o.CertIssuerSubject)) + copy(m.CertIssuerSubject, o.CertIssuerSubject) + } + + if o.CertIssuerPublicKey != nil { + m.CertIssuerPublicKey = make([]byte, len(o.CertIssuerPublicKey)) + copy(m.CertIssuerPublicKey, o.CertIssuerPublicKey) + } + +} + +func (m *NodeCSIInfo) Copy() *NodeCSIInfo { + if m == nil { + return nil + } + o := &NodeCSIInfo{} + o.CopyFrom(m) + return o +} + +func (m *NodeCSIInfo) CopyFrom(src interface{}) { + + o := src.(*NodeCSIInfo) + m.PluginName = o.PluginName + m.NodeID = o.NodeID + m.MaxVolumesPerNode = o.MaxVolumesPerNode + if o.AccessibleTopology != nil { + m.AccessibleTopology = &Topology{} + deepcopy.Copy(m.AccessibleTopology, o.AccessibleTopology) + } + +} + +func (m *RaftMemberStatus) Copy() *RaftMemberStatus { + if m == nil { + return nil + } + o := &RaftMemberStatus{} + o.CopyFrom(m) + return o +} + +func (m *RaftMemberStatus) CopyFrom(src interface{}) { + + o := src.(*RaftMemberStatus) + m.Leader = o.Leader + m.Reachability = o.Reachability + m.Message = o.Message +} + +func (m *NodeStatus) Copy() *NodeStatus { + if m == nil { + return nil + } + o := &NodeStatus{} + o.CopyFrom(m) + return o +} + +func (m *NodeStatus) CopyFrom(src interface{}) { + + o := src.(*NodeStatus) + m.State = o.State + m.Message = o.Message + m.Addr = o.Addr +} + +func (m *Image) Copy() *Image { + if m == nil { + return nil + } + o := &Image{} + o.CopyFrom(m) + return o +} + +func (m *Image) CopyFrom(src interface{}) { + + o := src.(*Image) + m.Reference = o.Reference +} + +func (m *Mount) Copy() *Mount { + if m == nil { + return nil + } + o := &Mount{} + o.CopyFrom(m) + return o +} + +func (m *Mount) CopyFrom(src interface{}) { + + o := src.(*Mount) + m.Type = o.Type + m.Source = o.Source + m.Target = o.Target + m.ReadOnly = o.ReadOnly + m.Consistency = o.Consistency + if o.BindOptions != nil { + m.BindOptions = &Mount_BindOptions{} + deepcopy.Copy(m.BindOptions, o.BindOptions) + } + + if o.VolumeOptions != nil { + m.VolumeOptions = &Mount_VolumeOptions{} + deepcopy.Copy(m.VolumeOptions, o.VolumeOptions) + } + + if o.TmpfsOptions != nil { + m.TmpfsOptions = &Mount_TmpfsOptions{} + deepcopy.Copy(m.TmpfsOptions, o.TmpfsOptions) + } + +} + +func (m *Mount_BindOptions) Copy() *Mount_BindOptions { + if m == nil { + return nil + } + o := &Mount_BindOptions{} + o.CopyFrom(m) + return o +} + +func (m *Mount_BindOptions) CopyFrom(src interface{}) { + + o := src.(*Mount_BindOptions) + m.Propagation = o.Propagation + m.NonRecursive = o.NonRecursive + m.CreateMountpoint = o.CreateMountpoint + m.ReadOnlyNonRecursive = o.ReadOnlyNonRecursive + m.ReadOnlyForceRecursive = o.ReadOnlyForceRecursive +} + +func (m *Mount_VolumeOptions) Copy() *Mount_VolumeOptions { + if m == nil { + return nil + } + o := &Mount_VolumeOptions{} + o.CopyFrom(m) + return o +} + +func (m *Mount_VolumeOptions) CopyFrom(src interface{}) { + + o := src.(*Mount_VolumeOptions) + m.NoCopy = o.NoCopy + if o.Labels != nil { + m.Labels = make(map[string]string, len(o.Labels)) + for k, v := range o.Labels { + m.Labels[k] = v + } + } + + if o.DriverConfig != nil { + m.DriverConfig = &Driver{} + deepcopy.Copy(m.DriverConfig, o.DriverConfig) + } + + m.Subpath = o.Subpath +} + +func (m *Mount_TmpfsOptions) Copy() *Mount_TmpfsOptions { + if m == nil { + return nil + } + o := &Mount_TmpfsOptions{} + o.CopyFrom(m) + return o +} + +func (m *Mount_TmpfsOptions) CopyFrom(src interface{}) { + + o := src.(*Mount_TmpfsOptions) + m.SizeBytes = o.SizeBytes + m.Mode = o.Mode + m.Options = o.Options +} + +func (m *RestartPolicy) Copy() *RestartPolicy { + if m == nil { + return nil + } + o := &RestartPolicy{} + o.CopyFrom(m) + return o +} + +func (m *RestartPolicy) CopyFrom(src interface{}) { + + o := src.(*RestartPolicy) + m.Condition = o.Condition + if o.Delay != nil { + m.Delay = &durationpb.Duration{} + deepcopy.Copy(m.Delay, o.Delay) + } + + m.MaxAttempts = o.MaxAttempts + if o.Window != nil { + m.Window = &durationpb.Duration{} + deepcopy.Copy(m.Window, o.Window) + } + +} + +func (m *UpdateConfig) Copy() *UpdateConfig { + if m == nil { + return nil + } + o := &UpdateConfig{} + o.CopyFrom(m) + return o +} + +func (m *UpdateConfig) CopyFrom(src interface{}) { + + o := src.(*UpdateConfig) + m.Parallelism = o.Parallelism + if o.Delay != nil { + m.Delay = &durationpb.Duration{} + deepcopy.Copy(m.Delay, o.Delay) + } + + m.FailureAction = o.FailureAction + if o.Monitor != nil { + m.Monitor = &durationpb.Duration{} + deepcopy.Copy(m.Monitor, o.Monitor) + } + + m.MaxFailureRatio = o.MaxFailureRatio + m.Order = o.Order +} + +func (m *UpdateStatus) Copy() *UpdateStatus { + if m == nil { + return nil + } + o := &UpdateStatus{} + o.CopyFrom(m) + return o +} + +func (m *UpdateStatus) CopyFrom(src interface{}) { + + o := src.(*UpdateStatus) + m.State = o.State + if o.StartedAt != nil { + m.StartedAt = ×tamppb.Timestamp{} + deepcopy.Copy(m.StartedAt, o.StartedAt) + } + + if o.CompletedAt != nil { + m.CompletedAt = ×tamppb.Timestamp{} + deepcopy.Copy(m.CompletedAt, o.CompletedAt) + } + + m.Message = o.Message +} + +func (m *ContainerStatus) Copy() *ContainerStatus { + if m == nil { + return nil + } + o := &ContainerStatus{} + o.CopyFrom(m) + return o +} + +func (m *ContainerStatus) CopyFrom(src interface{}) { + + o := src.(*ContainerStatus) + m.ContainerID = o.ContainerID + m.PID = o.PID + m.ExitCode = o.ExitCode +} + +func (m *PortStatus) Copy() *PortStatus { + if m == nil { + return nil + } + o := &PortStatus{} + o.CopyFrom(m) + return o +} + +func (m *PortStatus) CopyFrom(src interface{}) { + + o := src.(*PortStatus) + if o.Ports != nil { + m.Ports = make([]*PortConfig, len(o.Ports)) + for i := range m.Ports { + m.Ports[i] = &PortConfig{} + deepcopy.Copy(m.Ports[i], o.Ports[i]) + } + } + +} + +func (m *TaskStatus) Copy() *TaskStatus { + if m == nil { + return nil + } + o := &TaskStatus{} + o.CopyFrom(m) + return o +} + +func (m *TaskStatus) CopyFrom(src interface{}) { + + o := src.(*TaskStatus) + if o.Timestamp != nil { + m.Timestamp = ×tamppb.Timestamp{} + deepcopy.Copy(m.Timestamp, o.Timestamp) + } + + m.State = o.State + m.Message = o.Message + m.Err = o.Err + if o.PortStatus != nil { + m.PortStatus = &PortStatus{} + deepcopy.Copy(m.PortStatus, o.PortStatus) + } + + m.AppliedBy = o.AppliedBy + if o.AppliedAt != nil { + m.AppliedAt = ×tamppb.Timestamp{} + deepcopy.Copy(m.AppliedAt, o.AppliedAt) + } + + if o.RuntimeStatus != nil { + switch o.RuntimeStatus.(type) { + case *TaskStatus_Container: + v := TaskStatus_Container{ + Container: &ContainerStatus{}, + } + deepcopy.Copy(v.Container, o.GetContainer()) + m.RuntimeStatus = &v + } + } + +} + +func (m *NetworkAttachmentConfig) Copy() *NetworkAttachmentConfig { + if m == nil { + return nil + } + o := &NetworkAttachmentConfig{} + o.CopyFrom(m) + return o +} + +func (m *NetworkAttachmentConfig) CopyFrom(src interface{}) { + + o := src.(*NetworkAttachmentConfig) + m.Target = o.Target + if o.Aliases != nil { + m.Aliases = make([]string, len(o.Aliases)) + copy(m.Aliases, o.Aliases) + } + + if o.Addresses != nil { + m.Addresses = make([]string, len(o.Addresses)) + copy(m.Addresses, o.Addresses) + } + + if o.DriverAttachmentOpts != nil { + m.DriverAttachmentOpts = make(map[string]string, len(o.DriverAttachmentOpts)) + for k, v := range o.DriverAttachmentOpts { + m.DriverAttachmentOpts[k] = v + } + } + +} + +func (m *IPAMConfig) Copy() *IPAMConfig { + if m == nil { + return nil + } + o := &IPAMConfig{} + o.CopyFrom(m) + return o +} + +func (m *IPAMConfig) CopyFrom(src interface{}) { + + o := src.(*IPAMConfig) + m.Family = o.Family + m.Subnet = o.Subnet + m.Range = o.Range + m.Gateway = o.Gateway + if o.Reserved != nil { + m.Reserved = make(map[string]string, len(o.Reserved)) + for k, v := range o.Reserved { + m.Reserved[k] = v + } + } + +} + +func (m *PortConfig) Copy() *PortConfig { + if m == nil { + return nil + } + o := &PortConfig{} + o.CopyFrom(m) + return o +} + +func (m *PortConfig) CopyFrom(src interface{}) { + + o := src.(*PortConfig) + m.Name = o.Name + m.Protocol = o.Protocol + m.TargetPort = o.TargetPort + m.PublishedPort = o.PublishedPort + m.PublishMode = o.PublishMode +} + +func (m *Driver) Copy() *Driver { + if m == nil { + return nil + } + o := &Driver{} + o.CopyFrom(m) + return o +} + +func (m *Driver) CopyFrom(src interface{}) { + + o := src.(*Driver) + m.Name = o.Name + if o.Options != nil { + m.Options = make(map[string]string, len(o.Options)) + for k, v := range o.Options { + m.Options[k] = v + } + } + +} + +func (m *IPAMOptions) Copy() *IPAMOptions { + if m == nil { + return nil + } + o := &IPAMOptions{} + o.CopyFrom(m) + return o +} + +func (m *IPAMOptions) CopyFrom(src interface{}) { + + o := src.(*IPAMOptions) + if o.Driver != nil { + m.Driver = &Driver{} + deepcopy.Copy(m.Driver, o.Driver) + } + + if o.Configs != nil { + m.Configs = make([]*IPAMConfig, len(o.Configs)) + for i := range m.Configs { + m.Configs[i] = &IPAMConfig{} + deepcopy.Copy(m.Configs[i], o.Configs[i]) + } + } + +} + +func (m *Peer) Copy() *Peer { + if m == nil { + return nil + } + o := &Peer{} + o.CopyFrom(m) + return o +} + +func (m *Peer) CopyFrom(src interface{}) { + + o := src.(*Peer) + m.NodeID = o.NodeID + m.Addr = o.Addr +} + +func (m *WeightedPeer) Copy() *WeightedPeer { + if m == nil { + return nil + } + o := &WeightedPeer{} + o.CopyFrom(m) + return o +} + +func (m *WeightedPeer) CopyFrom(src interface{}) { + + o := src.(*WeightedPeer) + if o.Peer != nil { + m.Peer = &Peer{} + deepcopy.Copy(m.Peer, o.Peer) + } + + m.Weight = o.Weight +} + +func (m *IssuanceStatus) Copy() *IssuanceStatus { + if m == nil { + return nil + } + o := &IssuanceStatus{} + o.CopyFrom(m) + return o +} + +func (m *IssuanceStatus) CopyFrom(src interface{}) { + + o := src.(*IssuanceStatus) + m.State = o.State + m.Err = o.Err +} + +func (m *AcceptancePolicy) Copy() *AcceptancePolicy { + if m == nil { + return nil + } + o := &AcceptancePolicy{} + o.CopyFrom(m) + return o +} + +func (m *AcceptancePolicy) CopyFrom(src interface{}) { + + o := src.(*AcceptancePolicy) + if o.Policies != nil { + m.Policies = make([]*AcceptancePolicy_RoleAdmissionPolicy, len(o.Policies)) + for i := range m.Policies { + m.Policies[i] = &AcceptancePolicy_RoleAdmissionPolicy{} + deepcopy.Copy(m.Policies[i], o.Policies[i]) + } + } + +} + +func (m *AcceptancePolicy_RoleAdmissionPolicy) Copy() *AcceptancePolicy_RoleAdmissionPolicy { + if m == nil { + return nil + } + o := &AcceptancePolicy_RoleAdmissionPolicy{} + o.CopyFrom(m) + return o +} + +func (m *AcceptancePolicy_RoleAdmissionPolicy) CopyFrom(src interface{}) { + + o := src.(*AcceptancePolicy_RoleAdmissionPolicy) + m.Role = o.Role + m.Autoaccept = o.Autoaccept + if o.Secret != nil { + m.Secret = &AcceptancePolicy_RoleAdmissionPolicy_Secret{} + deepcopy.Copy(m.Secret, o.Secret) + } + +} + +func (m *AcceptancePolicy_RoleAdmissionPolicy_Secret) Copy() *AcceptancePolicy_RoleAdmissionPolicy_Secret { + if m == nil { + return nil + } + o := &AcceptancePolicy_RoleAdmissionPolicy_Secret{} + o.CopyFrom(m) + return o +} + +func (m *AcceptancePolicy_RoleAdmissionPolicy_Secret) CopyFrom(src interface{}) { + + o := src.(*AcceptancePolicy_RoleAdmissionPolicy_Secret) + if o.Data != nil { + m.Data = make([]byte, len(o.Data)) + copy(m.Data, o.Data) + } + + m.Alg = o.Alg +} + +func (m *ExternalCA) Copy() *ExternalCA { + if m == nil { + return nil + } + o := &ExternalCA{} + o.CopyFrom(m) + return o +} + +func (m *ExternalCA) CopyFrom(src interface{}) { + + o := src.(*ExternalCA) + m.Protocol = o.Protocol + m.URL = o.URL + if o.Options != nil { + m.Options = make(map[string]string, len(o.Options)) + for k, v := range o.Options { + m.Options[k] = v + } + } + + if o.CACert != nil { + m.CACert = make([]byte, len(o.CACert)) + copy(m.CACert, o.CACert) + } + +} + +func (m *CAConfig) Copy() *CAConfig { + if m == nil { + return nil + } + o := &CAConfig{} + o.CopyFrom(m) + return o +} + +func (m *CAConfig) CopyFrom(src interface{}) { + + o := src.(*CAConfig) + if o.NodeCertExpiry != nil { + m.NodeCertExpiry = &durationpb.Duration{} + deepcopy.Copy(m.NodeCertExpiry, o.NodeCertExpiry) + } + + if o.ExternalCAs != nil { + m.ExternalCAs = make([]*ExternalCA, len(o.ExternalCAs)) + for i := range m.ExternalCAs { + m.ExternalCAs[i] = &ExternalCA{} + deepcopy.Copy(m.ExternalCAs[i], o.ExternalCAs[i]) + } + } + + if o.SigningCACert != nil { + m.SigningCACert = make([]byte, len(o.SigningCACert)) + copy(m.SigningCACert, o.SigningCACert) + } + + if o.SigningCAKey != nil { + m.SigningCAKey = make([]byte, len(o.SigningCAKey)) + copy(m.SigningCAKey, o.SigningCAKey) + } + + m.ForceRotate = o.ForceRotate +} + +func (m *OrchestrationConfig) Copy() *OrchestrationConfig { + if m == nil { + return nil + } + o := &OrchestrationConfig{} + o.CopyFrom(m) + return o +} + +func (m *OrchestrationConfig) CopyFrom(src interface{}) { + + o := src.(*OrchestrationConfig) + m.TaskHistoryRetentionLimit = o.TaskHistoryRetentionLimit +} + +func (m *TaskDefaults) Copy() *TaskDefaults { + if m == nil { + return nil + } + o := &TaskDefaults{} + o.CopyFrom(m) + return o +} + +func (m *TaskDefaults) CopyFrom(src interface{}) { + + o := src.(*TaskDefaults) + if o.LogDriver != nil { + m.LogDriver = &Driver{} + deepcopy.Copy(m.LogDriver, o.LogDriver) + } + +} + +func (m *DispatcherConfig) Copy() *DispatcherConfig { + if m == nil { + return nil + } + o := &DispatcherConfig{} + o.CopyFrom(m) + return o +} + +func (m *DispatcherConfig) CopyFrom(src interface{}) { + + o := src.(*DispatcherConfig) + if o.HeartbeatPeriod != nil { + m.HeartbeatPeriod = &durationpb.Duration{} + deepcopy.Copy(m.HeartbeatPeriod, o.HeartbeatPeriod) + } + +} + +func (m *RaftConfig) Copy() *RaftConfig { + if m == nil { + return nil + } + o := &RaftConfig{} + o.CopyFrom(m) + return o +} + +func (m *RaftConfig) CopyFrom(src interface{}) { + + o := src.(*RaftConfig) + m.SnapshotInterval = o.SnapshotInterval + m.KeepOldSnapshots = o.KeepOldSnapshots + m.LogEntriesForSlowFollowers = o.LogEntriesForSlowFollowers + m.HeartbeatTick = o.HeartbeatTick + m.ElectionTick = o.ElectionTick +} + +func (m *EncryptionConfig) Copy() *EncryptionConfig { + if m == nil { + return nil + } + o := &EncryptionConfig{} + o.CopyFrom(m) + return o +} + +func (m *EncryptionConfig) CopyFrom(src interface{}) { + + o := src.(*EncryptionConfig) + m.AutoLockManagers = o.AutoLockManagers +} + +func (m *SpreadOver) Copy() *SpreadOver { + if m == nil { + return nil + } + o := &SpreadOver{} + o.CopyFrom(m) + return o +} + +func (m *SpreadOver) CopyFrom(src interface{}) { + + o := src.(*SpreadOver) + m.SpreadDescriptor = o.SpreadDescriptor +} + +func (m *PlacementPreference) Copy() *PlacementPreference { + if m == nil { + return nil + } + o := &PlacementPreference{} + o.CopyFrom(m) + return o +} + +func (m *PlacementPreference) CopyFrom(src interface{}) { + + o := src.(*PlacementPreference) + if o.Preference != nil { + switch o.Preference.(type) { + case *PlacementPreference_Spread: + v := PlacementPreference_Spread{ + Spread: &SpreadOver{}, + } + deepcopy.Copy(v.Spread, o.GetSpread()) + m.Preference = &v + } + } + +} + +func (m *Placement) Copy() *Placement { + if m == nil { + return nil + } + o := &Placement{} + o.CopyFrom(m) + return o +} + +func (m *Placement) CopyFrom(src interface{}) { + + o := src.(*Placement) + if o.Constraints != nil { + m.Constraints = make([]string, len(o.Constraints)) + copy(m.Constraints, o.Constraints) + } + + if o.Preferences != nil { + m.Preferences = make([]*PlacementPreference, len(o.Preferences)) + for i := range m.Preferences { + m.Preferences[i] = &PlacementPreference{} + deepcopy.Copy(m.Preferences[i], o.Preferences[i]) + } + } + + if o.Platforms != nil { + m.Platforms = make([]*Platform, len(o.Platforms)) + for i := range m.Platforms { + m.Platforms[i] = &Platform{} + deepcopy.Copy(m.Platforms[i], o.Platforms[i]) + } + } + + m.MaxReplicas = o.MaxReplicas +} + +func (m *JoinTokens) Copy() *JoinTokens { + if m == nil { + return nil + } + o := &JoinTokens{} + o.CopyFrom(m) + return o +} + +func (m *JoinTokens) CopyFrom(src interface{}) { + + o := src.(*JoinTokens) + m.Worker = o.Worker + m.Manager = o.Manager +} + +func (m *RootCA) Copy() *RootCA { + if m == nil { + return nil + } + o := &RootCA{} + o.CopyFrom(m) + return o +} + +func (m *RootCA) CopyFrom(src interface{}) { + + o := src.(*RootCA) + if o.CAKey != nil { + m.CAKey = make([]byte, len(o.CAKey)) + copy(m.CAKey, o.CAKey) + } + + if o.CACert != nil { + m.CACert = make([]byte, len(o.CACert)) + copy(m.CACert, o.CACert) + } + + m.CACertHash = o.CACertHash + if o.JoinTokens != nil { + m.JoinTokens = &JoinTokens{} + deepcopy.Copy(m.JoinTokens, o.JoinTokens) + } + + if o.RootRotation != nil { + m.RootRotation = &RootRotation{} + deepcopy.Copy(m.RootRotation, o.RootRotation) + } + + m.LastForcedRotation = o.LastForcedRotation +} + +func (m *Certificate) Copy() *Certificate { + if m == nil { + return nil + } + o := &Certificate{} + o.CopyFrom(m) + return o +} + +func (m *Certificate) CopyFrom(src interface{}) { + + o := src.(*Certificate) + m.Role = o.Role + if o.CSR != nil { + m.CSR = make([]byte, len(o.CSR)) + copy(m.CSR, o.CSR) + } + + if o.Status != nil { + m.Status = &IssuanceStatus{} + deepcopy.Copy(m.Status, o.Status) + } + + if o.Certificate != nil { + m.Certificate = make([]byte, len(o.Certificate)) + copy(m.Certificate, o.Certificate) + } + + m.CN = o.CN +} + +func (m *EncryptionKey) Copy() *EncryptionKey { + if m == nil { + return nil + } + o := &EncryptionKey{} + o.CopyFrom(m) + return o +} + +func (m *EncryptionKey) CopyFrom(src interface{}) { + + o := src.(*EncryptionKey) + m.Subsystem = o.Subsystem + m.Algorithm = o.Algorithm + if o.Key != nil { + m.Key = make([]byte, len(o.Key)) + copy(m.Key, o.Key) + } + + m.LamportTime = o.LamportTime +} + +func (m *ManagerStatus) Copy() *ManagerStatus { + if m == nil { + return nil + } + o := &ManagerStatus{} + o.CopyFrom(m) + return o +} + +func (m *ManagerStatus) CopyFrom(src interface{}) { + + o := src.(*ManagerStatus) + m.RaftID = o.RaftID + m.Addr = o.Addr + m.Leader = o.Leader + m.Reachability = o.Reachability +} + +func (m *FileTarget) Copy() *FileTarget { + if m == nil { + return nil + } + o := &FileTarget{} + o.CopyFrom(m) + return o +} + +func (m *FileTarget) CopyFrom(src interface{}) { + + o := src.(*FileTarget) + m.Name = o.Name + m.UID = o.UID + m.GID = o.GID + m.Mode = o.Mode +} + +func (m *RuntimeTarget) Copy() *RuntimeTarget { + if m == nil { + return nil + } + o := &RuntimeTarget{} + o.CopyFrom(m) + return o +} + +func (m *RuntimeTarget) CopyFrom(src interface{}) {} + +func (m *SecretReference) Copy() *SecretReference { + if m == nil { + return nil + } + o := &SecretReference{} + o.CopyFrom(m) + return o +} + +func (m *SecretReference) CopyFrom(src interface{}) { + + o := src.(*SecretReference) + m.SecretID = o.SecretID + m.SecretName = o.SecretName + if o.Target != nil { + switch o.Target.(type) { + case *SecretReference_File: + v := SecretReference_File{ + File: &FileTarget{}, + } + deepcopy.Copy(v.File, o.GetFile()) + m.Target = &v + } + } + +} + +func (m *ConfigReference) Copy() *ConfigReference { + if m == nil { + return nil + } + o := &ConfigReference{} + o.CopyFrom(m) + return o +} + +func (m *ConfigReference) CopyFrom(src interface{}) { + + o := src.(*ConfigReference) + m.ConfigID = o.ConfigID + m.ConfigName = o.ConfigName + if o.Target != nil { + switch o.Target.(type) { + case *ConfigReference_File: + v := ConfigReference_File{ + File: &FileTarget{}, + } + deepcopy.Copy(v.File, o.GetFile()) + m.Target = &v + case *ConfigReference_Runtime: + v := ConfigReference_Runtime{ + Runtime: &RuntimeTarget{}, + } + deepcopy.Copy(v.Runtime, o.GetRuntime()) + m.Target = &v + } + } + +} + +func (m *BlacklistedCertificate) Copy() *BlacklistedCertificate { + if m == nil { + return nil + } + o := &BlacklistedCertificate{} + o.CopyFrom(m) + return o +} + +func (m *BlacklistedCertificate) CopyFrom(src interface{}) { + + o := src.(*BlacklistedCertificate) + if o.Expiry != nil { + m.Expiry = ×tamppb.Timestamp{} + deepcopy.Copy(m.Expiry, o.Expiry) + } + +} + +func (m *HealthConfig) Copy() *HealthConfig { + if m == nil { + return nil + } + o := &HealthConfig{} + o.CopyFrom(m) + return o +} + +func (m *HealthConfig) CopyFrom(src interface{}) { + + o := src.(*HealthConfig) + if o.Test != nil { + m.Test = make([]string, len(o.Test)) + copy(m.Test, o.Test) + } + + if o.Interval != nil { + m.Interval = &durationpb.Duration{} + deepcopy.Copy(m.Interval, o.Interval) + } + + if o.Timeout != nil { + m.Timeout = &durationpb.Duration{} + deepcopy.Copy(m.Timeout, o.Timeout) + } + + m.Retries = o.Retries + if o.StartPeriod != nil { + m.StartPeriod = &durationpb.Duration{} + deepcopy.Copy(m.StartPeriod, o.StartPeriod) + } + + if o.StartInterval != nil { + m.StartInterval = &durationpb.Duration{} + deepcopy.Copy(m.StartInterval, o.StartInterval) + } + +} + +func (m *MaybeEncryptedRecord) Copy() *MaybeEncryptedRecord { + if m == nil { + return nil + } + o := &MaybeEncryptedRecord{} + o.CopyFrom(m) + return o +} + +func (m *MaybeEncryptedRecord) CopyFrom(src interface{}) { + + o := src.(*MaybeEncryptedRecord) + m.Algorithm = o.Algorithm + if o.Data != nil { + m.Data = make([]byte, len(o.Data)) + copy(m.Data, o.Data) + } + + if o.Nonce != nil { + m.Nonce = make([]byte, len(o.Nonce)) + copy(m.Nonce, o.Nonce) + } + +} + +func (m *RootRotation) Copy() *RootRotation { + if m == nil { + return nil + } + o := &RootRotation{} + o.CopyFrom(m) + return o +} + +func (m *RootRotation) CopyFrom(src interface{}) { + + o := src.(*RootRotation) + if o.CACert != nil { + m.CACert = make([]byte, len(o.CACert)) + copy(m.CACert, o.CACert) + } + + if o.CAKey != nil { + m.CAKey = make([]byte, len(o.CAKey)) + copy(m.CAKey, o.CAKey) + } + + if o.CrossSignedCACert != nil { + m.CrossSignedCACert = make([]byte, len(o.CrossSignedCACert)) + copy(m.CrossSignedCACert, o.CrossSignedCACert) + } + +} + +func (m *Privileges) Copy() *Privileges { + if m == nil { + return nil + } + o := &Privileges{} + o.CopyFrom(m) + return o +} + +func (m *Privileges) CopyFrom(src interface{}) { + + o := src.(*Privileges) + if o.CredentialSpec != nil { + m.CredentialSpec = &Privileges_CredentialSpec{} + deepcopy.Copy(m.CredentialSpec, o.CredentialSpec) + } + + if o.SELinuxContext != nil { + m.SELinuxContext = &Privileges_SELinuxContext{} + deepcopy.Copy(m.SELinuxContext, o.SELinuxContext) + } + + if o.Seccomp != nil { + m.Seccomp = &Privileges_SeccompOpts{} + deepcopy.Copy(m.Seccomp, o.Seccomp) + } + + if o.Apparmor != nil { + m.Apparmor = &Privileges_AppArmorOpts{} + deepcopy.Copy(m.Apparmor, o.Apparmor) + } + + m.NoNewPrivileges = o.NoNewPrivileges +} + +func (m *Privileges_CredentialSpec) Copy() *Privileges_CredentialSpec { + if m == nil { + return nil + } + o := &Privileges_CredentialSpec{} + o.CopyFrom(m) + return o +} + +func (m *Privileges_CredentialSpec) CopyFrom(src interface{}) { + + o := src.(*Privileges_CredentialSpec) + if o.Source != nil { + switch o.Source.(type) { + case *Privileges_CredentialSpec_File: + v := Privileges_CredentialSpec_File{File: o.GetFile()} + m.Source = &v + case *Privileges_CredentialSpec_Registry: + v := Privileges_CredentialSpec_Registry{Registry: o.GetRegistry()} + m.Source = &v + case *Privileges_CredentialSpec_Config: + v := Privileges_CredentialSpec_Config{Config: o.GetConfig()} + m.Source = &v + } + } + +} + +func (m *Privileges_SELinuxContext) Copy() *Privileges_SELinuxContext { + if m == nil { + return nil + } + o := &Privileges_SELinuxContext{} + o.CopyFrom(m) + return o +} + +func (m *Privileges_SELinuxContext) CopyFrom(src interface{}) { + + o := src.(*Privileges_SELinuxContext) + m.Disable = o.Disable + m.User = o.User + m.Role = o.Role + m.Type = o.Type + m.Level = o.Level +} + +func (m *Privileges_SeccompOpts) Copy() *Privileges_SeccompOpts { + if m == nil { + return nil + } + o := &Privileges_SeccompOpts{} + o.CopyFrom(m) + return o +} + +func (m *Privileges_SeccompOpts) CopyFrom(src interface{}) { + + o := src.(*Privileges_SeccompOpts) + m.Mode = o.Mode + if o.Profile != nil { + m.Profile = make([]byte, len(o.Profile)) + copy(m.Profile, o.Profile) + } + +} + +func (m *Privileges_AppArmorOpts) Copy() *Privileges_AppArmorOpts { + if m == nil { + return nil + } + o := &Privileges_AppArmorOpts{} + o.CopyFrom(m) + return o +} + +func (m *Privileges_AppArmorOpts) CopyFrom(src interface{}) { + + o := src.(*Privileges_AppArmorOpts) + m.Mode = o.Mode +} + +func (m *JobStatus) Copy() *JobStatus { + if m == nil { + return nil + } + o := &JobStatus{} + o.CopyFrom(m) + return o +} + +func (m *JobStatus) CopyFrom(src interface{}) { + + o := src.(*JobStatus) + if o.JobIteration != nil { + m.JobIteration = &Version{} + deepcopy.Copy(m.JobIteration, o.JobIteration) + } + + if o.LastExecution != nil { + m.LastExecution = ×tamppb.Timestamp{} + deepcopy.Copy(m.LastExecution, o.LastExecution) + } + +} + +func (m *VolumeAccessMode) Copy() *VolumeAccessMode { + if m == nil { + return nil + } + o := &VolumeAccessMode{} + o.CopyFrom(m) + return o +} + +func (m *VolumeAccessMode) CopyFrom(src interface{}) { + + o := src.(*VolumeAccessMode) + m.Scope = o.Scope + m.Sharing = o.Sharing + if o.AccessType != nil { + switch o.AccessType.(type) { + case *VolumeAccessMode_Block: + v := VolumeAccessMode_Block{ + Block: &VolumeAccessMode_BlockVolume{}, + } + deepcopy.Copy(v.Block, o.GetBlock()) + m.AccessType = &v + case *VolumeAccessMode_Mount: + v := VolumeAccessMode_Mount{ + Mount: &VolumeAccessMode_MountVolume{}, + } + deepcopy.Copy(v.Mount, o.GetMount()) + m.AccessType = &v + } + } + +} + +func (m *VolumeAccessMode_BlockVolume) Copy() *VolumeAccessMode_BlockVolume { + if m == nil { + return nil + } + o := &VolumeAccessMode_BlockVolume{} + o.CopyFrom(m) + return o +} + +func (m *VolumeAccessMode_BlockVolume) CopyFrom(src interface{}) {} + +func (m *VolumeAccessMode_MountVolume) Copy() *VolumeAccessMode_MountVolume { + if m == nil { + return nil + } + o := &VolumeAccessMode_MountVolume{} + o.CopyFrom(m) + return o +} + +func (m *VolumeAccessMode_MountVolume) CopyFrom(src interface{}) { + + o := src.(*VolumeAccessMode_MountVolume) + m.FsType = o.FsType + if o.MountFlags != nil { + m.MountFlags = make([]string, len(o.MountFlags)) + copy(m.MountFlags, o.MountFlags) + } + +} + +func (m *VolumeSecret) Copy() *VolumeSecret { + if m == nil { + return nil + } + o := &VolumeSecret{} + o.CopyFrom(m) + return o +} + +func (m *VolumeSecret) CopyFrom(src interface{}) { + + o := src.(*VolumeSecret) + m.Key = o.Key + m.Secret = o.Secret +} + +func (m *VolumePublishStatus) Copy() *VolumePublishStatus { + if m == nil { + return nil + } + o := &VolumePublishStatus{} + o.CopyFrom(m) + return o +} + +func (m *VolumePublishStatus) CopyFrom(src interface{}) { + + o := src.(*VolumePublishStatus) + m.NodeID = o.NodeID + m.State = o.State + if o.PublishContext != nil { + m.PublishContext = make(map[string]string, len(o.PublishContext)) + for k, v := range o.PublishContext { + m.PublishContext[k] = v + } + } + + m.Message = o.Message +} + +func (m *VolumeInfo) Copy() *VolumeInfo { + if m == nil { + return nil + } + o := &VolumeInfo{} + o.CopyFrom(m) + return o +} + +func (m *VolumeInfo) CopyFrom(src interface{}) { + + o := src.(*VolumeInfo) + m.CapacityBytes = o.CapacityBytes + if o.VolumeContext != nil { + m.VolumeContext = make(map[string]string, len(o.VolumeContext)) + for k, v := range o.VolumeContext { + m.VolumeContext[k] = v + } + } + + m.VolumeID = o.VolumeID + if o.AccessibleTopology != nil { + m.AccessibleTopology = make([]*Topology, len(o.AccessibleTopology)) + for i := range m.AccessibleTopology { + m.AccessibleTopology[i] = &Topology{} + deepcopy.Copy(m.AccessibleTopology[i], o.AccessibleTopology[i]) + } + } + +} + +func (m *CapacityRange) Copy() *CapacityRange { + if m == nil { + return nil + } + o := &CapacityRange{} + o.CopyFrom(m) + return o +} + +func (m *CapacityRange) CopyFrom(src interface{}) { + + o := src.(*CapacityRange) + m.RequiredBytes = o.RequiredBytes + m.LimitBytes = o.LimitBytes +} + +func (m *VolumeAssignment) Copy() *VolumeAssignment { + if m == nil { + return nil + } + o := &VolumeAssignment{} + o.CopyFrom(m) + return o +} + +func (m *VolumeAssignment) CopyFrom(src interface{}) { + + o := src.(*VolumeAssignment) + m.ID = o.ID + m.VolumeID = o.VolumeID + if o.Driver != nil { + m.Driver = &Driver{} + deepcopy.Copy(m.Driver, o.Driver) + } + + if o.VolumeContext != nil { + m.VolumeContext = make(map[string]string, len(o.VolumeContext)) + for k, v := range o.VolumeContext { + m.VolumeContext[k] = v + } + } + + if o.PublishContext != nil { + m.PublishContext = make(map[string]string, len(o.PublishContext)) + for k, v := range o.PublishContext { + m.PublishContext[k] = v + } + } + + if o.AccessMode != nil { + m.AccessMode = &VolumeAccessMode{} + deepcopy.Copy(m.AccessMode, o.AccessMode) + } + + if o.Secrets != nil { + m.Secrets = make([]*VolumeSecret, len(o.Secrets)) + for i := range m.Secrets { + m.Secrets[i] = &VolumeSecret{} + deepcopy.Copy(m.Secrets[i], o.Secrets[i]) + } + } + +} + +func (m *VolumeAttachment) Copy() *VolumeAttachment { + if m == nil { + return nil + } + o := &VolumeAttachment{} + o.CopyFrom(m) + return o +} + +func (m *VolumeAttachment) CopyFrom(src interface{}) { + + o := src.(*VolumeAttachment) + m.ID = o.ID + m.Source = o.Source + m.Target = o.Target +} + +func (m *TopologyRequirement) Copy() *TopologyRequirement { + if m == nil { + return nil + } + o := &TopologyRequirement{} + o.CopyFrom(m) + return o +} + +func (m *TopologyRequirement) CopyFrom(src interface{}) { + + o := src.(*TopologyRequirement) + if o.Requisite != nil { + m.Requisite = make([]*Topology, len(o.Requisite)) + for i := range m.Requisite { + m.Requisite[i] = &Topology{} + deepcopy.Copy(m.Requisite[i], o.Requisite[i]) + } + } + + if o.Preferred != nil { + m.Preferred = make([]*Topology, len(o.Preferred)) + for i := range m.Preferred { + m.Preferred[i] = &Topology{} + deepcopy.Copy(m.Preferred[i], o.Preferred[i]) + } + } + +} + +func (m *Topology) Copy() *Topology { + if m == nil { + return nil + } + o := &Topology{} + o.CopyFrom(m) + return o +} + +func (m *Topology) CopyFrom(src interface{}) { + + o := src.(*Topology) + if o.Segments != nil { + m.Segments = make(map[string]string, len(o.Segments)) + for k, v := range o.Segments { + m.Segments[k] = v + } + } + +} + +func (m *VolumeCapability) Copy() *VolumeCapability { + if m == nil { + return nil + } + o := &VolumeCapability{} + o.CopyFrom(m) + return o +} + +func (m *VolumeCapability) CopyFrom(src interface{}) { + + o := src.(*VolumeCapability) + if o.AccessMode != nil { + m.AccessMode = &VolumeCapability_AccessMode{} + deepcopy.Copy(m.AccessMode, o.AccessMode) + } + + if o.AccessType != nil { + switch o.AccessType.(type) { + case *VolumeCapability_Block: + v := VolumeCapability_Block{ + Block: &VolumeCapability_BlockVolume{}, + } + deepcopy.Copy(v.Block, o.GetBlock()) + m.AccessType = &v + case *VolumeCapability_Mount: + v := VolumeCapability_Mount{ + Mount: &VolumeCapability_MountVolume{}, + } + deepcopy.Copy(v.Mount, o.GetMount()) + m.AccessType = &v + } + } + +} + +func (m *VolumeCapability_BlockVolume) Copy() *VolumeCapability_BlockVolume { + if m == nil { + return nil + } + o := &VolumeCapability_BlockVolume{} + o.CopyFrom(m) + return o +} + +func (m *VolumeCapability_BlockVolume) CopyFrom(src interface{}) {} + +func (m *VolumeCapability_MountVolume) Copy() *VolumeCapability_MountVolume { + if m == nil { + return nil + } + o := &VolumeCapability_MountVolume{} + o.CopyFrom(m) + return o +} + +func (m *VolumeCapability_MountVolume) CopyFrom(src interface{}) { + + o := src.(*VolumeCapability_MountVolume) + m.FsType = o.FsType + if o.MountFlags != nil { + m.MountFlags = make([]string, len(o.MountFlags)) + copy(m.MountFlags, o.MountFlags) + } + +} + +func (m *VolumeCapability_AccessMode) Copy() *VolumeCapability_AccessMode { + if m == nil { + return nil + } + o := &VolumeCapability_AccessMode{} + o.CopyFrom(m) + return o +} + +func (m *VolumeCapability_AccessMode) CopyFrom(src interface{}) { + + o := src.(*VolumeCapability_AccessMode) + m.Mode = o.Mode +} diff --git a/api/types.pb.go b/api/types.pb.go index babab6b60e..0cd9aae209 100644 --- a/api/types.pb.go +++ b/api/types.pb.go @@ -1,37 +1,29 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: github.com/docker/swarmkit/api/types.proto +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.11 +// protoc v3.21.12 +// source: api/types.proto package api import ( - encoding_binary "encoding/binary" - fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" - github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" - github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" - types "github.com/gogo/protobuf/types" - github_com_moby_swarmkit_v2_api_deepcopy "github.com/moby/swarmkit/v2/api/deepcopy" - io "io" - math "math" - math_bits "math/bits" - os "os" + _ "github.com/moby/swarmkit/v2/protobuf/plugin" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + durationpb "google.golang.org/protobuf/types/known/durationpb" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + wrapperspb "google.golang.org/protobuf/types/known/wrapperspb" reflect "reflect" - strings "strings" - time "time" + sync "sync" + unsafe "unsafe" ) -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf -var _ = time.Kitchen - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package +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 ResourceType int32 @@ -42,26 +34,47 @@ const ( ResourceType_VOLUME ResourceType = 3 ) -var ResourceType_name = map[int32]string{ - 0: "TASK", - 1: "SECRET", - 2: "CONFIG", - 3: "VOLUME", -} +// Enum value maps for ResourceType. +var ( + ResourceType_name = map[int32]string{ + 0: "TASK", + 1: "SECRET", + 2: "CONFIG", + 3: "VOLUME", + } + ResourceType_value = map[string]int32{ + "TASK": 0, + "SECRET": 1, + "CONFIG": 2, + "VOLUME": 3, + } +) -var ResourceType_value = map[string]int32{ - "TASK": 0, - "SECRET": 1, - "CONFIG": 2, - "VOLUME": 3, +func (x ResourceType) Enum() *ResourceType { + p := new(ResourceType) + *p = x + return p } func (x ResourceType) String() string { - return proto.EnumName(ResourceType_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ResourceType) Descriptor() protoreflect.EnumDescriptor { + return file_api_types_proto_enumTypes[0].Descriptor() +} + +func (ResourceType) Type() protoreflect.EnumType { + return &file_api_types_proto_enumTypes[0] +} + +func (x ResourceType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } +// Deprecated: Use ResourceType.Descriptor instead. func (ResourceType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{0} + return file_api_types_proto_rawDescGZIP(), []int{0} } // Only the manager create a NEW task, and move the task to PENDING and ASSIGNED. @@ -74,19 +87,19 @@ type TaskState int32 const ( TaskStateNew TaskState = 0 - TaskStatePending TaskState = 64 + TaskStatePending TaskState = 64 // waiting for scheduling decision TaskStateAssigned TaskState = 192 - TaskStateAccepted TaskState = 256 + TaskStateAccepted TaskState = 256 // task has been accepted by an agent. TaskStatePreparing TaskState = 320 TaskStateReady TaskState = 384 TaskStateStarting TaskState = 448 TaskStateRunning TaskState = 512 - TaskStateCompleted TaskState = 576 - TaskStateShutdown TaskState = 640 - TaskStateFailed TaskState = 704 + TaskStateCompleted TaskState = 576 // successful completion of task (not error code, just ran) + TaskStateShutdown TaskState = 640 // orchestrator requested shutdown + TaskStateFailed TaskState = 704 // task execution failed with error // TaskStateRejected means a task never ran, for instance if something about // the environment failed (e.g. setting up a port on that node failed). - TaskStateRejected TaskState = 768 + TaskStateRejected TaskState = 768 // task could not be executed here. // TaskStateRemove is used to correctly handle service deletions and scale // downs. This allows us to keep track of tasks that have been marked for // deletion, but can't yet be removed because the agent is in the process of @@ -99,46 +112,67 @@ const ( TaskStateOrphaned TaskState = 832 ) -var TaskState_name = map[int32]string{ - 0: "NEW", - 64: "PENDING", - 192: "ASSIGNED", - 256: "ACCEPTED", - 320: "PREPARING", - 384: "READY", - 448: "STARTING", - 512: "RUNNING", - 576: "COMPLETE", - 640: "SHUTDOWN", - 704: "FAILED", - 768: "REJECTED", - 800: "REMOVE", - 832: "ORPHANED", -} - -var TaskState_value = map[string]int32{ - "NEW": 0, - "PENDING": 64, - "ASSIGNED": 192, - "ACCEPTED": 256, - "PREPARING": 320, - "READY": 384, - "STARTING": 448, - "RUNNING": 512, - "COMPLETE": 576, - "SHUTDOWN": 640, - "FAILED": 704, - "REJECTED": 768, - "REMOVE": 800, - "ORPHANED": 832, +// Enum value maps for TaskState. +var ( + TaskState_name = map[int32]string{ + 0: "NEW", + 64: "PENDING", + 192: "ASSIGNED", + 256: "ACCEPTED", + 320: "PREPARING", + 384: "READY", + 448: "STARTING", + 512: "RUNNING", + 576: "COMPLETE", + 640: "SHUTDOWN", + 704: "FAILED", + 768: "REJECTED", + 800: "REMOVE", + 832: "ORPHANED", + } + TaskState_value = map[string]int32{ + "NEW": 0, + "PENDING": 64, + "ASSIGNED": 192, + "ACCEPTED": 256, + "PREPARING": 320, + "READY": 384, + "STARTING": 448, + "RUNNING": 512, + "COMPLETE": 576, + "SHUTDOWN": 640, + "FAILED": 704, + "REJECTED": 768, + "REMOVE": 800, + "ORPHANED": 832, + } +) + +func (x TaskState) Enum() *TaskState { + p := new(TaskState) + *p = x + return p } func (x TaskState) String() string { - return proto.EnumName(TaskState_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (TaskState) Descriptor() protoreflect.EnumDescriptor { + return file_api_types_proto_enumTypes[1].Descriptor() +} + +func (TaskState) Type() protoreflect.EnumType { + return &file_api_types_proto_enumTypes[1] +} + +func (x TaskState) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } +// Deprecated: Use TaskState.Descriptor instead. func (TaskState) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{1} + return file_api_types_proto_rawDescGZIP(), []int{1} } type NodeRole int32 @@ -148,22 +182,43 @@ const ( NodeRoleManager NodeRole = 1 ) -var NodeRole_name = map[int32]string{ - 0: "WORKER", - 1: "MANAGER", -} +// Enum value maps for NodeRole. +var ( + NodeRole_name = map[int32]string{ + 0: "WORKER", + 1: "MANAGER", + } + NodeRole_value = map[string]int32{ + "WORKER": 0, + "MANAGER": 1, + } +) -var NodeRole_value = map[string]int32{ - "WORKER": 0, - "MANAGER": 1, +func (x NodeRole) Enum() *NodeRole { + p := new(NodeRole) + *p = x + return p } func (x NodeRole) String() string { - return proto.EnumName(NodeRole_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (NodeRole) Descriptor() protoreflect.EnumDescriptor { + return file_api_types_proto_enumTypes[2].Descriptor() +} + +func (NodeRole) Type() protoreflect.EnumType { + return &file_api_types_proto_enumTypes[2] } +func (x NodeRole) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use NodeRole.Descriptor instead. func (NodeRole) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{2} + return file_api_types_proto_rawDescGZIP(), []int{2} } type RaftMemberStatus_Reachability int32 @@ -179,24 +234,45 @@ const ( RaftMemberStatus_REACHABLE RaftMemberStatus_Reachability = 2 ) -var RaftMemberStatus_Reachability_name = map[int32]string{ - 0: "UNKNOWN", - 1: "UNREACHABLE", - 2: "REACHABLE", -} +// Enum value maps for RaftMemberStatus_Reachability. +var ( + RaftMemberStatus_Reachability_name = map[int32]string{ + 0: "UNKNOWN", + 1: "UNREACHABLE", + 2: "REACHABLE", + } + RaftMemberStatus_Reachability_value = map[string]int32{ + "UNKNOWN": 0, + "UNREACHABLE": 1, + "REACHABLE": 2, + } +) -var RaftMemberStatus_Reachability_value = map[string]int32{ - "UNKNOWN": 0, - "UNREACHABLE": 1, - "REACHABLE": 2, +func (x RaftMemberStatus_Reachability) Enum() *RaftMemberStatus_Reachability { + p := new(RaftMemberStatus_Reachability) + *p = x + return p } func (x RaftMemberStatus_Reachability) String() string { - return proto.EnumName(RaftMemberStatus_Reachability_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (RaftMemberStatus_Reachability) Descriptor() protoreflect.EnumDescriptor { + return file_api_types_proto_enumTypes[3].Descriptor() +} + +func (RaftMemberStatus_Reachability) Type() protoreflect.EnumType { + return &file_api_types_proto_enumTypes[3] +} + +func (x RaftMemberStatus_Reachability) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } +// Deprecated: Use RaftMemberStatus_Reachability.Descriptor instead. func (RaftMemberStatus_Reachability) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{14, 0} + return file_api_types_proto_rawDescGZIP(), []int{14, 0} } // TODO(aluzzardi) These should be using `gogoproto.enumvalue_customname`. @@ -213,157 +289,262 @@ const ( NodeStatus_DISCONNECTED NodeStatus_State = 3 ) -var NodeStatus_State_name = map[int32]string{ - 0: "UNKNOWN", - 1: "DOWN", - 2: "READY", - 3: "DISCONNECTED", -} +// Enum value maps for NodeStatus_State. +var ( + NodeStatus_State_name = map[int32]string{ + 0: "UNKNOWN", + 1: "DOWN", + 2: "READY", + 3: "DISCONNECTED", + } + NodeStatus_State_value = map[string]int32{ + "UNKNOWN": 0, + "DOWN": 1, + "READY": 2, + "DISCONNECTED": 3, + } +) -var NodeStatus_State_value = map[string]int32{ - "UNKNOWN": 0, - "DOWN": 1, - "READY": 2, - "DISCONNECTED": 3, +func (x NodeStatus_State) Enum() *NodeStatus_State { + p := new(NodeStatus_State) + *p = x + return p } func (x NodeStatus_State) String() string { - return proto.EnumName(NodeStatus_State_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (NodeStatus_State) Descriptor() protoreflect.EnumDescriptor { + return file_api_types_proto_enumTypes[4].Descriptor() +} + +func (NodeStatus_State) Type() protoreflect.EnumType { + return &file_api_types_proto_enumTypes[4] +} + +func (x NodeStatus_State) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } +// Deprecated: Use NodeStatus_State.Descriptor instead. func (NodeStatus_State) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{15, 0} + return file_api_types_proto_rawDescGZIP(), []int{15, 0} } -type Mount_MountType int32 +type MountType int32 const ( - MountTypeBind Mount_MountType = 0 - MountTypeVolume Mount_MountType = 1 - MountTypeTmpfs Mount_MountType = 2 - MountTypeNamedPipe Mount_MountType = 3 - MountTypeCluster Mount_MountType = 4 + MountTypeBind MountType = 0 // Bind mount host dir + MountTypeVolume MountType = 1 // Remote storage volumes + MountTypeTmpfs MountType = 2 // Mount a tmpfs + MountTypeNamedPipe MountType = 3 // Windows named pipes + MountTypeCluster MountType = 4 // CSI volume +) + +// Enum value maps for Mount_Type. +var ( + Mount_Type_name = map[int32]string{ + 0: "BIND", + 1: "VOLUME", + 2: "TMPFS", + 3: "NPIPE", + 4: "CLUSTER", + } + Mount_Type_value = map[string]int32{ + "BIND": 0, + "VOLUME": 1, + "TMPFS": 2, + "NPIPE": 3, + "CLUSTER": 4, + } ) -var Mount_MountType_name = map[int32]string{ - 0: "BIND", - 1: "VOLUME", - 2: "TMPFS", - 3: "NPIPE", - 4: "CLUSTER", +func (x MountType) Enum() *MountType { + p := new(MountType) + *p = x + return p +} + +func (x MountType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (MountType) Descriptor() protoreflect.EnumDescriptor { + return file_api_types_proto_enumTypes[5].Descriptor() } -var Mount_MountType_value = map[string]int32{ - "BIND": 0, - "VOLUME": 1, - "TMPFS": 2, - "NPIPE": 3, - "CLUSTER": 4, +func (MountType) Type() protoreflect.EnumType { + return &file_api_types_proto_enumTypes[5] } -func (x Mount_MountType) String() string { - return proto.EnumName(Mount_MountType_name, int32(x)) +func (x MountType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } -func (Mount_MountType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{17, 0} +// Deprecated: Use Mount_Type.Descriptor instead. +func (MountType) EnumDescriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{17, 0} } // Consistency indicates the tolerable level of file system consistency -type Mount_MountConsistency int32 +type MountConsistency int32 const ( - MountConsistencyDefault Mount_MountConsistency = 0 - MountConsistencyFull Mount_MountConsistency = 1 - MountConsistencyCached Mount_MountConsistency = 2 - MountConsistencyDelegated Mount_MountConsistency = 3 + MountConsistencyDefault MountConsistency = 0 + MountConsistencyFull MountConsistency = 1 + MountConsistencyCached MountConsistency = 2 + MountConsistencyDelegated MountConsistency = 3 +) + +// Enum value maps for Mount_Consistency. +var ( + Mount_Consistency_name = map[int32]string{ + 0: "DEFAULT", + 1: "CONSISTENT", + 2: "CACHED", + 3: "DELEGATED", + } + Mount_Consistency_value = map[string]int32{ + "DEFAULT": 0, + "CONSISTENT": 1, + "CACHED": 2, + "DELEGATED": 3, + } ) -var Mount_MountConsistency_name = map[int32]string{ - 0: "DEFAULT", - 1: "CONSISTENT", - 2: "CACHED", - 3: "DELEGATED", +func (x MountConsistency) Enum() *MountConsistency { + p := new(MountConsistency) + *p = x + return p +} + +func (x MountConsistency) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (MountConsistency) Descriptor() protoreflect.EnumDescriptor { + return file_api_types_proto_enumTypes[6].Descriptor() } -var Mount_MountConsistency_value = map[string]int32{ - "DEFAULT": 0, - "CONSISTENT": 1, - "CACHED": 2, - "DELEGATED": 3, +func (MountConsistency) Type() protoreflect.EnumType { + return &file_api_types_proto_enumTypes[6] } -func (x Mount_MountConsistency) String() string { - return proto.EnumName(Mount_MountConsistency_name, int32(x)) +func (x MountConsistency) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } -func (Mount_MountConsistency) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{17, 1} +// Deprecated: Use Mount_Consistency.Descriptor instead. +func (MountConsistency) EnumDescriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{17, 1} } -type Mount_BindOptions_MountPropagation int32 +type MountPropagation int32 const ( - MountPropagationRPrivate Mount_BindOptions_MountPropagation = 0 - MountPropagationPrivate Mount_BindOptions_MountPropagation = 1 - MountPropagationRShared Mount_BindOptions_MountPropagation = 2 - MountPropagationShared Mount_BindOptions_MountPropagation = 3 - MountPropagationRSlave Mount_BindOptions_MountPropagation = 4 - MountPropagationSlave Mount_BindOptions_MountPropagation = 5 + MountPropagationRPrivate MountPropagation = 0 + MountPropagationPrivate MountPropagation = 1 + MountPropagationRShared MountPropagation = 2 + MountPropagationShared MountPropagation = 3 + MountPropagationRSlave MountPropagation = 4 + MountPropagationSlave MountPropagation = 5 +) + +// Enum value maps for Mount_BindOptions_Propagation. +var ( + Mount_BindOptions_Propagation_name = map[int32]string{ + 0: "RPRIVATE", + 1: "PRIVATE", + 2: "RSHARED", + 3: "SHARED", + 4: "RSLAVE", + 5: "SLAVE", + } + Mount_BindOptions_Propagation_value = map[string]int32{ + "RPRIVATE": 0, + "PRIVATE": 1, + "RSHARED": 2, + "SHARED": 3, + "RSLAVE": 4, + "SLAVE": 5, + } ) -var Mount_BindOptions_MountPropagation_name = map[int32]string{ - 0: "RPRIVATE", - 1: "PRIVATE", - 2: "RSHARED", - 3: "SHARED", - 4: "RSLAVE", - 5: "SLAVE", +func (x MountPropagation) Enum() *MountPropagation { + p := new(MountPropagation) + *p = x + return p +} + +func (x MountPropagation) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (MountPropagation) Descriptor() protoreflect.EnumDescriptor { + return file_api_types_proto_enumTypes[7].Descriptor() } -var Mount_BindOptions_MountPropagation_value = map[string]int32{ - "RPRIVATE": 0, - "PRIVATE": 1, - "RSHARED": 2, - "SHARED": 3, - "RSLAVE": 4, - "SLAVE": 5, +func (MountPropagation) Type() protoreflect.EnumType { + return &file_api_types_proto_enumTypes[7] } -func (x Mount_BindOptions_MountPropagation) String() string { - return proto.EnumName(Mount_BindOptions_MountPropagation_name, int32(x)) +func (x MountPropagation) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } -func (Mount_BindOptions_MountPropagation) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{17, 0, 0} +// Deprecated: Use Mount_BindOptions_Propagation.Descriptor instead. +func (MountPropagation) EnumDescriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{17, 0, 0} } -type RestartPolicy_RestartCondition int32 +type RestartCondition int32 const ( - RestartOnNone RestartPolicy_RestartCondition = 0 - RestartOnFailure RestartPolicy_RestartCondition = 1 - RestartOnAny RestartPolicy_RestartCondition = 2 + RestartOnNone RestartCondition = 0 + RestartOnFailure RestartCondition = 1 + RestartOnAny RestartCondition = 2 +) + +// Enum value maps for RestartPolicy_RestartCondition. +var ( + RestartPolicy_RestartCondition_name = map[int32]string{ + 0: "NONE", + 1: "ON_FAILURE", + 2: "ANY", + } + RestartPolicy_RestartCondition_value = map[string]int32{ + "NONE": 0, + "ON_FAILURE": 1, + "ANY": 2, + } ) -var RestartPolicy_RestartCondition_name = map[int32]string{ - 0: "NONE", - 1: "ON_FAILURE", - 2: "ANY", +func (x RestartCondition) Enum() *RestartCondition { + p := new(RestartCondition) + *p = x + return p +} + +func (x RestartCondition) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (RestartCondition) Descriptor() protoreflect.EnumDescriptor { + return file_api_types_proto_enumTypes[8].Descriptor() } -var RestartPolicy_RestartCondition_value = map[string]int32{ - "NONE": 0, - "ON_FAILURE": 1, - "ANY": 2, +func (RestartCondition) Type() protoreflect.EnumType { + return &file_api_types_proto_enumTypes[8] } -func (x RestartPolicy_RestartCondition) String() string { - return proto.EnumName(RestartPolicy_RestartCondition_name, int32(x)) +func (x RestartCondition) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } -func (RestartPolicy_RestartCondition) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{18, 0} +// Deprecated: Use RestartPolicy_RestartCondition.Descriptor instead. +func (RestartCondition) EnumDescriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{18, 0} } type UpdateConfig_FailureAction int32 @@ -374,24 +555,45 @@ const ( UpdateConfig_ROLLBACK UpdateConfig_FailureAction = 2 ) -var UpdateConfig_FailureAction_name = map[int32]string{ - 0: "PAUSE", - 1: "CONTINUE", - 2: "ROLLBACK", -} +// Enum value maps for UpdateConfig_FailureAction. +var ( + UpdateConfig_FailureAction_name = map[int32]string{ + 0: "PAUSE", + 1: "CONTINUE", + 2: "ROLLBACK", + } + UpdateConfig_FailureAction_value = map[string]int32{ + "PAUSE": 0, + "CONTINUE": 1, + "ROLLBACK": 2, + } +) -var UpdateConfig_FailureAction_value = map[string]int32{ - "PAUSE": 0, - "CONTINUE": 1, - "ROLLBACK": 2, +func (x UpdateConfig_FailureAction) Enum() *UpdateConfig_FailureAction { + p := new(UpdateConfig_FailureAction) + *p = x + return p } func (x UpdateConfig_FailureAction) String() string { - return proto.EnumName(UpdateConfig_FailureAction_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (UpdateConfig_FailureAction) Descriptor() protoreflect.EnumDescriptor { + return file_api_types_proto_enumTypes[9].Descriptor() +} + +func (UpdateConfig_FailureAction) Type() protoreflect.EnumType { + return &file_api_types_proto_enumTypes[9] +} + +func (x UpdateConfig_FailureAction) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } +// Deprecated: Use UpdateConfig_FailureAction.Descriptor instead. func (UpdateConfig_FailureAction) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{19, 0} + return file_api_types_proto_rawDescGZIP(), []int{19, 0} } // UpdateOrder controls the order of operations when rolling out an @@ -405,22 +607,43 @@ const ( UpdateConfig_START_FIRST UpdateConfig_UpdateOrder = 1 ) -var UpdateConfig_UpdateOrder_name = map[int32]string{ - 0: "STOP_FIRST", - 1: "START_FIRST", -} +// Enum value maps for UpdateConfig_UpdateOrder. +var ( + UpdateConfig_UpdateOrder_name = map[int32]string{ + 0: "STOP_FIRST", + 1: "START_FIRST", + } + UpdateConfig_UpdateOrder_value = map[string]int32{ + "STOP_FIRST": 0, + "START_FIRST": 1, + } +) -var UpdateConfig_UpdateOrder_value = map[string]int32{ - "STOP_FIRST": 0, - "START_FIRST": 1, +func (x UpdateConfig_UpdateOrder) Enum() *UpdateConfig_UpdateOrder { + p := new(UpdateConfig_UpdateOrder) + *p = x + return p } func (x UpdateConfig_UpdateOrder) String() string { - return proto.EnumName(UpdateConfig_UpdateOrder_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } +func (UpdateConfig_UpdateOrder) Descriptor() protoreflect.EnumDescriptor { + return file_api_types_proto_enumTypes[10].Descriptor() +} + +func (UpdateConfig_UpdateOrder) Type() protoreflect.EnumType { + return &file_api_types_proto_enumTypes[10] +} + +func (x UpdateConfig_UpdateOrder) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use UpdateConfig_UpdateOrder.Descriptor instead. func (UpdateConfig_UpdateOrder) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{19, 1} + return file_api_types_proto_rawDescGZIP(), []int{19, 1} } type UpdateStatus_UpdateState int32 @@ -431,36 +654,57 @@ const ( UpdateStatus_PAUSED UpdateStatus_UpdateState = 2 UpdateStatus_COMPLETED UpdateStatus_UpdateState = 3 UpdateStatus_ROLLBACK_STARTED UpdateStatus_UpdateState = 4 - UpdateStatus_ROLLBACK_PAUSED UpdateStatus_UpdateState = 5 + UpdateStatus_ROLLBACK_PAUSED UpdateStatus_UpdateState = 5 // if a rollback fails UpdateStatus_ROLLBACK_COMPLETED UpdateStatus_UpdateState = 6 ) -var UpdateStatus_UpdateState_name = map[int32]string{ - 0: "UNKNOWN", - 1: "UPDATING", - 2: "PAUSED", - 3: "COMPLETED", - 4: "ROLLBACK_STARTED", - 5: "ROLLBACK_PAUSED", - 6: "ROLLBACK_COMPLETED", -} +// Enum value maps for UpdateStatus_UpdateState. +var ( + UpdateStatus_UpdateState_name = map[int32]string{ + 0: "UNKNOWN", + 1: "UPDATING", + 2: "PAUSED", + 3: "COMPLETED", + 4: "ROLLBACK_STARTED", + 5: "ROLLBACK_PAUSED", + 6: "ROLLBACK_COMPLETED", + } + UpdateStatus_UpdateState_value = map[string]int32{ + "UNKNOWN": 0, + "UPDATING": 1, + "PAUSED": 2, + "COMPLETED": 3, + "ROLLBACK_STARTED": 4, + "ROLLBACK_PAUSED": 5, + "ROLLBACK_COMPLETED": 6, + } +) -var UpdateStatus_UpdateState_value = map[string]int32{ - "UNKNOWN": 0, - "UPDATING": 1, - "PAUSED": 2, - "COMPLETED": 3, - "ROLLBACK_STARTED": 4, - "ROLLBACK_PAUSED": 5, - "ROLLBACK_COMPLETED": 6, +func (x UpdateStatus_UpdateState) Enum() *UpdateStatus_UpdateState { + p := new(UpdateStatus_UpdateState) + *p = x + return p } func (x UpdateStatus_UpdateState) String() string { - return proto.EnumName(UpdateStatus_UpdateState_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (UpdateStatus_UpdateState) Descriptor() protoreflect.EnumDescriptor { + return file_api_types_proto_enumTypes[11].Descriptor() +} + +func (UpdateStatus_UpdateState) Type() protoreflect.EnumType { + return &file_api_types_proto_enumTypes[11] +} + +func (x UpdateStatus_UpdateState) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } +// Deprecated: Use UpdateStatus_UpdateState.Descriptor instead. func (UpdateStatus_UpdateState) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{20, 0} + return file_api_types_proto_rawDescGZIP(), []int{20, 0} } // AddressFamily specifies the network address family that @@ -468,29 +712,50 @@ func (UpdateStatus_UpdateState) EnumDescriptor() ([]byte, []int) { type IPAMConfig_AddressFamily int32 const ( - IPAMConfig_UNKNOWN IPAMConfig_AddressFamily = 0 + IPAMConfig_UNKNOWN IPAMConfig_AddressFamily = 0 // satisfy proto3 IPAMConfig_IPV4 IPAMConfig_AddressFamily = 4 IPAMConfig_IPV6 IPAMConfig_AddressFamily = 6 ) -var IPAMConfig_AddressFamily_name = map[int32]string{ - 0: "UNKNOWN", - 4: "IPV4", - 6: "IPV6", -} +// Enum value maps for IPAMConfig_AddressFamily. +var ( + IPAMConfig_AddressFamily_name = map[int32]string{ + 0: "UNKNOWN", + 4: "IPV4", + 6: "IPV6", + } + IPAMConfig_AddressFamily_value = map[string]int32{ + "UNKNOWN": 0, + "IPV4": 4, + "IPV6": 6, + } +) -var IPAMConfig_AddressFamily_value = map[string]int32{ - "UNKNOWN": 0, - "IPV4": 4, - "IPV6": 6, +func (x IPAMConfig_AddressFamily) Enum() *IPAMConfig_AddressFamily { + p := new(IPAMConfig_AddressFamily) + *p = x + return p } func (x IPAMConfig_AddressFamily) String() string { - return proto.EnumName(IPAMConfig_AddressFamily_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (IPAMConfig_AddressFamily) Descriptor() protoreflect.EnumDescriptor { + return file_api_types_proto_enumTypes[12].Descriptor() +} + +func (IPAMConfig_AddressFamily) Type() protoreflect.EnumType { + return &file_api_types_proto_enumTypes[12] +} + +func (x IPAMConfig_AddressFamily) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } +// Deprecated: Use IPAMConfig_AddressFamily.Descriptor instead. func (IPAMConfig_AddressFamily) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{25, 0} + return file_api_types_proto_rawDescGZIP(), []int{25, 0} } type PortConfig_Protocol int32 @@ -501,55 +766,97 @@ const ( ProtocolSCTP PortConfig_Protocol = 2 ) -var PortConfig_Protocol_name = map[int32]string{ - 0: "TCP", - 1: "UDP", - 2: "SCTP", -} +// Enum value maps for PortConfig_Protocol. +var ( + PortConfig_Protocol_name = map[int32]string{ + 0: "TCP", + 1: "UDP", + 2: "SCTP", + } + PortConfig_Protocol_value = map[string]int32{ + "TCP": 0, + "UDP": 1, + "SCTP": 2, + } +) -var PortConfig_Protocol_value = map[string]int32{ - "TCP": 0, - "UDP": 1, - "SCTP": 2, +func (x PortConfig_Protocol) Enum() *PortConfig_Protocol { + p := new(PortConfig_Protocol) + *p = x + return p } func (x PortConfig_Protocol) String() string { - return proto.EnumName(PortConfig_Protocol_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } +func (PortConfig_Protocol) Descriptor() protoreflect.EnumDescriptor { + return file_api_types_proto_enumTypes[13].Descriptor() +} + +func (PortConfig_Protocol) Type() protoreflect.EnumType { + return &file_api_types_proto_enumTypes[13] +} + +func (x PortConfig_Protocol) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use PortConfig_Protocol.Descriptor instead. func (PortConfig_Protocol) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{26, 0} + return file_api_types_proto_rawDescGZIP(), []int{26, 0} } // PublishMode controls how ports are published on the swarm. -type PortConfig_PublishMode int32 +type PublishMode int32 const ( // PublishModeIngress exposes the port across the cluster on all nodes. - PublishModeIngress PortConfig_PublishMode = 0 + PublishModeIngress PublishMode = 0 // PublishModeHost exposes the port on just the target host. If the // published port is undefined, an ephemeral port will be allocated. If // the published port is defined, the node will attempt to allocate it, // erroring the task if it fails. - PublishModeHost PortConfig_PublishMode = 1 + PublishModeHost PublishMode = 1 +) + +// Enum value maps for PortConfig_PublishMode. +var ( + PortConfig_PublishMode_name = map[int32]string{ + 0: "INGRESS", + 1: "HOST", + } + PortConfig_PublishMode_value = map[string]int32{ + "INGRESS": 0, + "HOST": 1, + } ) -var PortConfig_PublishMode_name = map[int32]string{ - 0: "INGRESS", - 1: "HOST", +func (x PublishMode) Enum() *PublishMode { + p := new(PublishMode) + *p = x + return p +} + +func (x PublishMode) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (PublishMode) Descriptor() protoreflect.EnumDescriptor { + return file_api_types_proto_enumTypes[14].Descriptor() } -var PortConfig_PublishMode_value = map[string]int32{ - "INGRESS": 0, - "HOST": 1, +func (PublishMode) Type() protoreflect.EnumType { + return &file_api_types_proto_enumTypes[14] } -func (x PortConfig_PublishMode) String() string { - return proto.EnumName(PortConfig_PublishMode_name, int32(x)) +func (x PublishMode) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } -func (PortConfig_PublishMode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{26, 1} +// Deprecated: Use PortConfig_PublishMode.Descriptor instead. +func (PublishMode) EnumDescriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{26, 1} } type IssuanceStatus_State int32 @@ -569,103 +876,187 @@ const ( IssuanceStateRotate IssuanceStatus_State = 5 ) -var IssuanceStatus_State_name = map[int32]string{ - 0: "UNKNOWN", - 1: "RENEW", - 2: "PENDING", - 3: "ISSUED", - 4: "FAILED", - 5: "ROTATE", -} +// Enum value maps for IssuanceStatus_State. +var ( + IssuanceStatus_State_name = map[int32]string{ + 0: "UNKNOWN", + 1: "RENEW", + 2: "PENDING", + 3: "ISSUED", + 4: "FAILED", + 5: "ROTATE", + } + IssuanceStatus_State_value = map[string]int32{ + "UNKNOWN": 0, + "RENEW": 1, + "PENDING": 2, + "ISSUED": 3, + "FAILED": 4, + "ROTATE": 5, + } +) -var IssuanceStatus_State_value = map[string]int32{ - "UNKNOWN": 0, - "RENEW": 1, - "PENDING": 2, - "ISSUED": 3, - "FAILED": 4, - "ROTATE": 5, +func (x IssuanceStatus_State) Enum() *IssuanceStatus_State { + p := new(IssuanceStatus_State) + *p = x + return p } func (x IssuanceStatus_State) String() string { - return proto.EnumName(IssuanceStatus_State_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (IssuanceStatus_State) Descriptor() protoreflect.EnumDescriptor { + return file_api_types_proto_enumTypes[15].Descriptor() +} + +func (IssuanceStatus_State) Type() protoreflect.EnumType { + return &file_api_types_proto_enumTypes[15] +} + +func (x IssuanceStatus_State) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } +// Deprecated: Use IssuanceStatus_State.Descriptor instead. func (IssuanceStatus_State) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{31, 0} + return file_api_types_proto_rawDescGZIP(), []int{31, 0} } type ExternalCA_CAProtocol int32 const ( - ExternalCA_CAProtocolCFSSL ExternalCA_CAProtocol = 0 + CAProtocolCFSSL ExternalCA_CAProtocol = 0 ) -var ExternalCA_CAProtocol_name = map[int32]string{ - 0: "CFSSL", -} +// Enum value maps for ExternalCA_CAProtocol. +var ( + ExternalCA_CAProtocol_name = map[int32]string{ + 0: "CFSSL", + } + ExternalCA_CAProtocol_value = map[string]int32{ + "CFSSL": 0, + } +) -var ExternalCA_CAProtocol_value = map[string]int32{ - "CFSSL": 0, +func (x ExternalCA_CAProtocol) Enum() *ExternalCA_CAProtocol { + p := new(ExternalCA_CAProtocol) + *p = x + return p } func (x ExternalCA_CAProtocol) String() string { - return proto.EnumName(ExternalCA_CAProtocol_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ExternalCA_CAProtocol) Descriptor() protoreflect.EnumDescriptor { + return file_api_types_proto_enumTypes[16].Descriptor() } +func (ExternalCA_CAProtocol) Type() protoreflect.EnumType { + return &file_api_types_proto_enumTypes[16] +} + +func (x ExternalCA_CAProtocol) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use ExternalCA_CAProtocol.Descriptor instead. func (ExternalCA_CAProtocol) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{33, 0} + return file_api_types_proto_rawDescGZIP(), []int{33, 0} } // Encryption algorithm that can implemented using this key type EncryptionKey_Algorithm int32 const ( - AES_128_GCM EncryptionKey_Algorithm = 0 + EncryptionKey_AES_128_GCM EncryptionKey_Algorithm = 0 ) -var EncryptionKey_Algorithm_name = map[int32]string{ - 0: "AES_128_GCM", -} +// Enum value maps for EncryptionKey_Algorithm. +var ( + EncryptionKey_Algorithm_name = map[int32]string{ + 0: "AES_128_GCM", + } + EncryptionKey_Algorithm_value = map[string]int32{ + "AES_128_GCM": 0, + } +) -var EncryptionKey_Algorithm_value = map[string]int32{ - "AES_128_GCM": 0, +func (x EncryptionKey_Algorithm) Enum() *EncryptionKey_Algorithm { + p := new(EncryptionKey_Algorithm) + *p = x + return p } func (x EncryptionKey_Algorithm) String() string { - return proto.EnumName(EncryptionKey_Algorithm_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (EncryptionKey_Algorithm) Descriptor() protoreflect.EnumDescriptor { + return file_api_types_proto_enumTypes[17].Descriptor() +} + +func (EncryptionKey_Algorithm) Type() protoreflect.EnumType { + return &file_api_types_proto_enumTypes[17] +} + +func (x EncryptionKey_Algorithm) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } +// Deprecated: Use EncryptionKey_Algorithm.Descriptor instead. func (EncryptionKey_Algorithm) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{46, 0} + return file_api_types_proto_rawDescGZIP(), []int{46, 0} } type MaybeEncryptedRecord_Algorithm int32 const ( - MaybeEncryptedRecord_NotEncrypted MaybeEncryptedRecord_Algorithm = 0 - MaybeEncryptedRecord_NACLSecretboxSalsa20Poly1305 MaybeEncryptedRecord_Algorithm = 1 - MaybeEncryptedRecord_FernetAES128CBC MaybeEncryptedRecord_Algorithm = 2 + NotEncrypted MaybeEncryptedRecord_Algorithm = 0 + NACLSecretboxSalsa20Poly1305 MaybeEncryptedRecord_Algorithm = 1 + FernetAES128CBC MaybeEncryptedRecord_Algorithm = 2 ) -var MaybeEncryptedRecord_Algorithm_name = map[int32]string{ - 0: "NONE", - 1: "SECRETBOX_SALSA20_POLY1305", - 2: "FERNET_AES_128_CBC", -} +// Enum value maps for MaybeEncryptedRecord_Algorithm. +var ( + MaybeEncryptedRecord_Algorithm_name = map[int32]string{ + 0: "NONE", + 1: "SECRETBOX_SALSA20_POLY1305", + 2: "FERNET_AES_128_CBC", + } + MaybeEncryptedRecord_Algorithm_value = map[string]int32{ + "NONE": 0, + "SECRETBOX_SALSA20_POLY1305": 1, + "FERNET_AES_128_CBC": 2, + } +) -var MaybeEncryptedRecord_Algorithm_value = map[string]int32{ - "NONE": 0, - "SECRETBOX_SALSA20_POLY1305": 1, - "FERNET_AES_128_CBC": 2, +func (x MaybeEncryptedRecord_Algorithm) Enum() *MaybeEncryptedRecord_Algorithm { + p := new(MaybeEncryptedRecord_Algorithm) + *p = x + return p } func (x MaybeEncryptedRecord_Algorithm) String() string { - return proto.EnumName(MaybeEncryptedRecord_Algorithm_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (MaybeEncryptedRecord_Algorithm) Descriptor() protoreflect.EnumDescriptor { + return file_api_types_proto_enumTypes[18].Descriptor() +} + +func (MaybeEncryptedRecord_Algorithm) Type() protoreflect.EnumType { + return &file_api_types_proto_enumTypes[18] } +func (x MaybeEncryptedRecord_Algorithm) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use MaybeEncryptedRecord_Algorithm.Descriptor instead. func (MaybeEncryptedRecord_Algorithm) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{54, 0} + return file_api_types_proto_rawDescGZIP(), []int{54, 0} } type Privileges_SeccompOpts_SeccompMode int32 @@ -676,24 +1067,45 @@ const ( Privileges_SeccompOpts_CUSTOM Privileges_SeccompOpts_SeccompMode = 2 ) -var Privileges_SeccompOpts_SeccompMode_name = map[int32]string{ - 0: "DEFAULT", - 1: "UNCONFINED", - 2: "CUSTOM", -} +// Enum value maps for Privileges_SeccompOpts_SeccompMode. +var ( + Privileges_SeccompOpts_SeccompMode_name = map[int32]string{ + 0: "DEFAULT", + 1: "UNCONFINED", + 2: "CUSTOM", + } + Privileges_SeccompOpts_SeccompMode_value = map[string]int32{ + "DEFAULT": 0, + "UNCONFINED": 1, + "CUSTOM": 2, + } +) -var Privileges_SeccompOpts_SeccompMode_value = map[string]int32{ - "DEFAULT": 0, - "UNCONFINED": 1, - "CUSTOM": 2, +func (x Privileges_SeccompOpts_SeccompMode) Enum() *Privileges_SeccompOpts_SeccompMode { + p := new(Privileges_SeccompOpts_SeccompMode) + *p = x + return p } func (x Privileges_SeccompOpts_SeccompMode) String() string { - return proto.EnumName(Privileges_SeccompOpts_SeccompMode_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Privileges_SeccompOpts_SeccompMode) Descriptor() protoreflect.EnumDescriptor { + return file_api_types_proto_enumTypes[19].Descriptor() +} + +func (Privileges_SeccompOpts_SeccompMode) Type() protoreflect.EnumType { + return &file_api_types_proto_enumTypes[19] +} + +func (x Privileges_SeccompOpts_SeccompMode) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } +// Deprecated: Use Privileges_SeccompOpts_SeccompMode.Descriptor instead. func (Privileges_SeccompOpts_SeccompMode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{56, 2, 0} + return file_api_types_proto_rawDescGZIP(), []int{56, 2, 0} } type Privileges_AppArmorOpts_AppArmorMode int32 @@ -703,22 +1115,43 @@ const ( Privileges_AppArmorOpts_DISABLED Privileges_AppArmorOpts_AppArmorMode = 1 ) -var Privileges_AppArmorOpts_AppArmorMode_name = map[int32]string{ - 0: "DEFAULT", - 1: "DISABLED", -} +// Enum value maps for Privileges_AppArmorOpts_AppArmorMode. +var ( + Privileges_AppArmorOpts_AppArmorMode_name = map[int32]string{ + 0: "DEFAULT", + 1: "DISABLED", + } + Privileges_AppArmorOpts_AppArmorMode_value = map[string]int32{ + "DEFAULT": 0, + "DISABLED": 1, + } +) -var Privileges_AppArmorOpts_AppArmorMode_value = map[string]int32{ - "DEFAULT": 0, - "DISABLED": 1, +func (x Privileges_AppArmorOpts_AppArmorMode) Enum() *Privileges_AppArmorOpts_AppArmorMode { + p := new(Privileges_AppArmorOpts_AppArmorMode) + *p = x + return p } func (x Privileges_AppArmorOpts_AppArmorMode) String() string { - return proto.EnumName(Privileges_AppArmorOpts_AppArmorMode_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Privileges_AppArmorOpts_AppArmorMode) Descriptor() protoreflect.EnumDescriptor { + return file_api_types_proto_enumTypes[20].Descriptor() +} + +func (Privileges_AppArmorOpts_AppArmorMode) Type() protoreflect.EnumType { + return &file_api_types_proto_enumTypes[20] +} + +func (x Privileges_AppArmorOpts_AppArmorMode) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } +// Deprecated: Use Privileges_AppArmorOpts_AppArmorMode.Descriptor instead. func (Privileges_AppArmorOpts_AppArmorMode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{56, 3, 0} + return file_api_types_proto_rawDescGZIP(), []int{56, 3, 0} } // Scope enumerates the possible volume access scopes. @@ -733,22 +1166,43 @@ const ( VolumeScopeMultiNode VolumeAccessMode_Scope = 1 ) -var VolumeAccessMode_Scope_name = map[int32]string{ - 0: "SINGLE_NODE", - 1: "MULTI_NODE", -} +// Enum value maps for VolumeAccessMode_Scope. +var ( + VolumeAccessMode_Scope_name = map[int32]string{ + 0: "SINGLE_NODE", + 1: "MULTI_NODE", + } + VolumeAccessMode_Scope_value = map[string]int32{ + "SINGLE_NODE": 0, + "MULTI_NODE": 1, + } +) -var VolumeAccessMode_Scope_value = map[string]int32{ - "SINGLE_NODE": 0, - "MULTI_NODE": 1, +func (x VolumeAccessMode_Scope) Enum() *VolumeAccessMode_Scope { + p := new(VolumeAccessMode_Scope) + *p = x + return p } func (x VolumeAccessMode_Scope) String() string { - return proto.EnumName(VolumeAccessMode_Scope_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (VolumeAccessMode_Scope) Descriptor() protoreflect.EnumDescriptor { + return file_api_types_proto_enumTypes[21].Descriptor() +} + +func (VolumeAccessMode_Scope) Type() protoreflect.EnumType { + return &file_api_types_proto_enumTypes[21] +} + +func (x VolumeAccessMode_Scope) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } +// Deprecated: Use VolumeAccessMode_Scope.Descriptor instead. func (VolumeAccessMode_Scope) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{58, 0} + return file_api_types_proto_rawDescGZIP(), []int{58, 0} } // Sharing enumerates the possible volume sharing modes. @@ -770,26 +1224,47 @@ const ( VolumeSharingAll VolumeAccessMode_Sharing = 3 ) -var VolumeAccessMode_Sharing_name = map[int32]string{ - 0: "NONE", - 1: "READ_ONLY", - 2: "ONE_WRITER", - 3: "ALL", -} +// Enum value maps for VolumeAccessMode_Sharing. +var ( + VolumeAccessMode_Sharing_name = map[int32]string{ + 0: "NONE", + 1: "READ_ONLY", + 2: "ONE_WRITER", + 3: "ALL", + } + VolumeAccessMode_Sharing_value = map[string]int32{ + "NONE": 0, + "READ_ONLY": 1, + "ONE_WRITER": 2, + "ALL": 3, + } +) -var VolumeAccessMode_Sharing_value = map[string]int32{ - "NONE": 0, - "READ_ONLY": 1, - "ONE_WRITER": 2, - "ALL": 3, +func (x VolumeAccessMode_Sharing) Enum() *VolumeAccessMode_Sharing { + p := new(VolumeAccessMode_Sharing) + *p = x + return p } func (x VolumeAccessMode_Sharing) String() string { - return proto.EnumName(VolumeAccessMode_Sharing_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (VolumeAccessMode_Sharing) Descriptor() protoreflect.EnumDescriptor { + return file_api_types_proto_enumTypes[22].Descriptor() +} + +func (VolumeAccessMode_Sharing) Type() protoreflect.EnumType { + return &file_api_types_proto_enumTypes[22] +} + +func (x VolumeAccessMode_Sharing) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } +// Deprecated: Use VolumeAccessMode_Sharing.Descriptor instead. func (VolumeAccessMode_Sharing) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{58, 1} + return file_api_types_proto_rawDescGZIP(), []int{58, 1} } // State is the state of the volume in the publish/unpublish @@ -816,26 +1291,47 @@ const ( VolumePublishStatus_PENDING_UNPUBLISH VolumePublishStatus_State = 3 ) -var VolumePublishStatus_State_name = map[int32]string{ - 0: "PENDING_PUBLISH", - 1: "PUBLISHED", - 2: "PENDING_NODE_UNPUBLISH", - 3: "PENDING_UNPUBLISH", -} +// Enum value maps for VolumePublishStatus_State. +var ( + VolumePublishStatus_State_name = map[int32]string{ + 0: "PENDING_PUBLISH", + 1: "PUBLISHED", + 2: "PENDING_NODE_UNPUBLISH", + 3: "PENDING_UNPUBLISH", + } + VolumePublishStatus_State_value = map[string]int32{ + "PENDING_PUBLISH": 0, + "PUBLISHED": 1, + "PENDING_NODE_UNPUBLISH": 2, + "PENDING_UNPUBLISH": 3, + } +) -var VolumePublishStatus_State_value = map[string]int32{ - "PENDING_PUBLISH": 0, - "PUBLISHED": 1, - "PENDING_NODE_UNPUBLISH": 2, - "PENDING_UNPUBLISH": 3, +func (x VolumePublishStatus_State) Enum() *VolumePublishStatus_State { + p := new(VolumePublishStatus_State) + *p = x + return p } func (x VolumePublishStatus_State) String() string { - return proto.EnumName(VolumePublishStatus_State_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (VolumePublishStatus_State) Descriptor() protoreflect.EnumDescriptor { + return file_api_types_proto_enumTypes[23].Descriptor() +} + +func (VolumePublishStatus_State) Type() protoreflect.EnumType { + return &file_api_types_proto_enumTypes[23] +} + +func (x VolumePublishStatus_State) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } +// Deprecated: Use VolumePublishStatus_State.Descriptor instead. func (VolumePublishStatus_State) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{60, 0} + return file_api_types_proto_rawDescGZIP(), []int{60, 0} } type VolumeCapability_AccessMode_Mode int32 @@ -858,527 +1354,724 @@ const ( VolumeCapability_AccessMode_MULTI_NODE_MULTI_WRITER VolumeCapability_AccessMode_Mode = 5 ) -var VolumeCapability_AccessMode_Mode_name = map[int32]string{ - 0: "UNKNOWN", - 1: "SINGLE_NODE_WRITER", - 2: "SINGLE_NODE_READER_ONLY", - 3: "MULTI_NODE_READER_ONLY", - 4: "MULTI_NODE_SINGLE_WRITER", - 5: "MULTI_NODE_MULTI_WRITER", -} +// Enum value maps for VolumeCapability_AccessMode_Mode. +var ( + VolumeCapability_AccessMode_Mode_name = map[int32]string{ + 0: "UNKNOWN", + 1: "SINGLE_NODE_WRITER", + 2: "SINGLE_NODE_READER_ONLY", + 3: "MULTI_NODE_READER_ONLY", + 4: "MULTI_NODE_SINGLE_WRITER", + 5: "MULTI_NODE_MULTI_WRITER", + } + VolumeCapability_AccessMode_Mode_value = map[string]int32{ + "UNKNOWN": 0, + "SINGLE_NODE_WRITER": 1, + "SINGLE_NODE_READER_ONLY": 2, + "MULTI_NODE_READER_ONLY": 3, + "MULTI_NODE_SINGLE_WRITER": 4, + "MULTI_NODE_MULTI_WRITER": 5, + } +) -var VolumeCapability_AccessMode_Mode_value = map[string]int32{ - "UNKNOWN": 0, - "SINGLE_NODE_WRITER": 1, - "SINGLE_NODE_READER_ONLY": 2, - "MULTI_NODE_READER_ONLY": 3, - "MULTI_NODE_SINGLE_WRITER": 4, - "MULTI_NODE_MULTI_WRITER": 5, +func (x VolumeCapability_AccessMode_Mode) Enum() *VolumeCapability_AccessMode_Mode { + p := new(VolumeCapability_AccessMode_Mode) + *p = x + return p } func (x VolumeCapability_AccessMode_Mode) String() string { - return proto.EnumName(VolumeCapability_AccessMode_Mode_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } -func (VolumeCapability_AccessMode_Mode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{67, 2, 0} +func (VolumeCapability_AccessMode_Mode) Descriptor() protoreflect.EnumDescriptor { + return file_api_types_proto_enumTypes[24].Descriptor() } -// Version tracks the last time an object in the store was updated. -type Version struct { - Index uint64 `protobuf:"varint,1,opt,name=index,proto3" json:"index,omitempty"` +func (VolumeCapability_AccessMode_Mode) Type() protoreflect.EnumType { + return &file_api_types_proto_enumTypes[24] } -func (m *Version) Reset() { *m = Version{} } -func (*Version) ProtoMessage() {} -func (*Version) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{0} -} -func (m *Version) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Version) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_Version.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err +func (x VolumeCapability_AccessMode_Mode) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use VolumeCapability_AccessMode_Mode.Descriptor instead. +func (VolumeCapability_AccessMode_Mode) EnumDescriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{67, 2, 0} +} + +// Version tracks the last time an object in the store was updated. +type Version struct { + state protoimpl.MessageState `protogen:"open.v1"` + Index uint64 `protobuf:"varint,1,opt,name=index,proto3" json:"index,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Version) Reset() { + *x = Version{} + mi := &file_api_types_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Version) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Version) ProtoMessage() {} + +func (x *Version) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *Version) XXX_Merge(src proto.Message) { - xxx_messageInfo_Version.Merge(m, src) + +// Deprecated: Use Version.ProtoReflect.Descriptor instead. +func (*Version) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{0} } -func (m *Version) XXX_Size() int { - return m.Size() + +func (x *Version) GetIndex() uint64 { + if x != nil { + return x.Index + } + return 0 } -func (m *Version) XXX_DiscardUnknown() { - xxx_messageInfo_Version.DiscardUnknown(m) + +type IndexEntry struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + Val string `protobuf:"bytes,2,opt,name=val,proto3" json:"val,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -var xxx_messageInfo_Version proto.InternalMessageInfo +func (x *IndexEntry) Reset() { + *x = IndexEntry{} + mi := &file_api_types_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} -type IndexEntry struct { - Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` - Val string `protobuf:"bytes,2,opt,name=val,proto3" json:"val,omitempty"` +func (x *IndexEntry) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *IndexEntry) Reset() { *m = IndexEntry{} } func (*IndexEntry) ProtoMessage() {} -func (*IndexEntry) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{1} -} -func (m *IndexEntry) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *IndexEntry) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_IndexEntry.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *IndexEntry) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *IndexEntry) XXX_Merge(src proto.Message) { - xxx_messageInfo_IndexEntry.Merge(m, src) -} -func (m *IndexEntry) XXX_Size() int { - return m.Size() + +// Deprecated: Use IndexEntry.ProtoReflect.Descriptor instead. +func (*IndexEntry) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{1} } -func (m *IndexEntry) XXX_DiscardUnknown() { - xxx_messageInfo_IndexEntry.DiscardUnknown(m) + +func (x *IndexEntry) GetKey() string { + if x != nil { + return x.Key + } + return "" } -var xxx_messageInfo_IndexEntry proto.InternalMessageInfo +func (x *IndexEntry) GetVal() string { + if x != nil { + return x.Val + } + return "" +} // Annotations provide useful information to identify API objects. They are // common to all API specs. type Annotations struct { - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Labels map[string]string `protobuf:"bytes,2,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Labels map[string]string `protobuf:"bytes,2,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // Indices provides keys and values for indexing this object. // A single key may have multiple values. - Indices []IndexEntry `protobuf:"bytes,4,rep,name=indices,proto3" json:"indices"` + Indices []*IndexEntry `protobuf:"bytes,4,rep,name=indices,proto3" json:"indices,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Annotations) Reset() { + *x = Annotations{} + mi := &file_api_types_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Annotations) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Annotations) Reset() { *m = Annotations{} } func (*Annotations) ProtoMessage() {} -func (*Annotations) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{2} -} -func (m *Annotations) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Annotations) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_Annotations.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *Annotations) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *Annotations) XXX_Merge(src proto.Message) { - xxx_messageInfo_Annotations.Merge(m, src) + +// Deprecated: Use Annotations.ProtoReflect.Descriptor instead. +func (*Annotations) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{2} } -func (m *Annotations) XXX_Size() int { - return m.Size() + +func (x *Annotations) GetName() string { + if x != nil { + return x.Name + } + return "" } -func (m *Annotations) XXX_DiscardUnknown() { - xxx_messageInfo_Annotations.DiscardUnknown(m) + +func (x *Annotations) GetLabels() map[string]string { + if x != nil { + return x.Labels + } + return nil } -var xxx_messageInfo_Annotations proto.InternalMessageInfo +func (x *Annotations) GetIndices() []*IndexEntry { + if x != nil { + return x.Indices + } + return nil +} // NamedGenericResource represents a "user defined" resource which is defined // as a string. // "Kind" is used to describe the Kind of a resource (e.g: "GPU", "FPGA", "SSD", ...) // Value is used to identify the resource (GPU="UUID-1", FPGA="/dev/sdb5", ...) type NamedGenericResource struct { - Kind string `protobuf:"bytes,1,opt,name=kind,proto3" json:"kind,omitempty"` - Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Kind string `protobuf:"bytes,1,opt,name=kind,proto3" json:"kind,omitempty"` + Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *NamedGenericResource) Reset() { + *x = NamedGenericResource{} + mi := &file_api_types_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *NamedGenericResource) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *NamedGenericResource) Reset() { *m = NamedGenericResource{} } func (*NamedGenericResource) ProtoMessage() {} -func (*NamedGenericResource) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{3} -} -func (m *NamedGenericResource) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *NamedGenericResource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_NamedGenericResource.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *NamedGenericResource) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[3] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *NamedGenericResource) XXX_Merge(src proto.Message) { - xxx_messageInfo_NamedGenericResource.Merge(m, src) -} -func (m *NamedGenericResource) XXX_Size() int { - return m.Size() + +// Deprecated: Use NamedGenericResource.ProtoReflect.Descriptor instead. +func (*NamedGenericResource) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{3} } -func (m *NamedGenericResource) XXX_DiscardUnknown() { - xxx_messageInfo_NamedGenericResource.DiscardUnknown(m) + +func (x *NamedGenericResource) GetKind() string { + if x != nil { + return x.Kind + } + return "" } -var xxx_messageInfo_NamedGenericResource proto.InternalMessageInfo +func (x *NamedGenericResource) GetValue() string { + if x != nil { + return x.Value + } + return "" +} // DiscreteGenericResource represents a "user defined" resource which is defined // as an integer // "Kind" is used to describe the Kind of a resource (e.g: "GPU", "FPGA", "SSD", ...) // Value is used to count the resource (SSD=5, HDD=3, ...) type DiscreteGenericResource struct { - Kind string `protobuf:"bytes,1,opt,name=kind,proto3" json:"kind,omitempty"` - Value int64 `protobuf:"varint,2,opt,name=value,proto3" json:"value,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Kind string `protobuf:"bytes,1,opt,name=kind,proto3" json:"kind,omitempty"` + Value int64 `protobuf:"varint,2,opt,name=value,proto3" json:"value,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DiscreteGenericResource) Reset() { + *x = DiscreteGenericResource{} + mi := &file_api_types_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DiscreteGenericResource) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *DiscreteGenericResource) Reset() { *m = DiscreteGenericResource{} } func (*DiscreteGenericResource) ProtoMessage() {} -func (*DiscreteGenericResource) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{4} -} -func (m *DiscreteGenericResource) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *DiscreteGenericResource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_DiscreteGenericResource.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *DiscreteGenericResource) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[4] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *DiscreteGenericResource) XXX_Merge(src proto.Message) { - xxx_messageInfo_DiscreteGenericResource.Merge(m, src) -} -func (m *DiscreteGenericResource) XXX_Size() int { - return m.Size() + +// Deprecated: Use DiscreteGenericResource.ProtoReflect.Descriptor instead. +func (*DiscreteGenericResource) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{4} } -func (m *DiscreteGenericResource) XXX_DiscardUnknown() { - xxx_messageInfo_DiscreteGenericResource.DiscardUnknown(m) + +func (x *DiscreteGenericResource) GetKind() string { + if x != nil { + return x.Kind + } + return "" } -var xxx_messageInfo_DiscreteGenericResource proto.InternalMessageInfo +func (x *DiscreteGenericResource) GetValue() int64 { + if x != nil { + return x.Value + } + return 0 +} // GenericResource represents a "user defined" resource which can // be either an integer (e.g: SSD=3) or a string (e.g: SSD=sda1) type GenericResource struct { + state protoimpl.MessageState `protogen:"open.v1"` // Types that are valid to be assigned to Resource: // // *GenericResource_NamedResourceSpec // *GenericResource_DiscreteResourceSpec - Resource isGenericResource_Resource `protobuf_oneof:"resource"` + Resource isGenericResource_Resource `protobuf_oneof:"resource"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *GenericResource) Reset() { *m = GenericResource{} } -func (*GenericResource) ProtoMessage() {} -func (*GenericResource) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{5} -} -func (m *GenericResource) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *GenericResource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_GenericResource.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 *GenericResource) XXX_Merge(src proto.Message) { - xxx_messageInfo_GenericResource.Merge(m, src) +func (x *GenericResource) Reset() { + *x = GenericResource{} + mi := &file_api_types_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *GenericResource) XXX_Size() int { - return m.Size() -} -func (m *GenericResource) XXX_DiscardUnknown() { - xxx_messageInfo_GenericResource.DiscardUnknown(m) + +func (x *GenericResource) String() string { + return protoimpl.X.MessageStringOf(x) } -var xxx_messageInfo_GenericResource proto.InternalMessageInfo +func (*GenericResource) ProtoMessage() {} -type isGenericResource_Resource interface { - isGenericResource_Resource() - MarshalTo([]byte) (int, error) - Size() int +func (x *GenericResource) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[5] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -type GenericResource_NamedResourceSpec struct { - NamedResourceSpec *NamedGenericResource `protobuf:"bytes,1,opt,name=named_resource_spec,json=namedResourceSpec,proto3,oneof" json:"named_resource_spec,omitempty"` -} -type GenericResource_DiscreteResourceSpec struct { - DiscreteResourceSpec *DiscreteGenericResource `protobuf:"bytes,2,opt,name=discrete_resource_spec,json=discreteResourceSpec,proto3,oneof" json:"discrete_resource_spec,omitempty"` +// Deprecated: Use GenericResource.ProtoReflect.Descriptor instead. +func (*GenericResource) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{5} } -func (*GenericResource_NamedResourceSpec) isGenericResource_Resource() {} -func (*GenericResource_DiscreteResourceSpec) isGenericResource_Resource() {} - -func (m *GenericResource) GetResource() isGenericResource_Resource { - if m != nil { - return m.Resource +func (x *GenericResource) GetResource() isGenericResource_Resource { + if x != nil { + return x.Resource } return nil } -func (m *GenericResource) GetNamedResourceSpec() *NamedGenericResource { - if x, ok := m.GetResource().(*GenericResource_NamedResourceSpec); ok { - return x.NamedResourceSpec +func (x *GenericResource) GetNamedResourceSpec() *NamedGenericResource { + if x != nil { + if x, ok := x.Resource.(*GenericResource_NamedResourceSpec); ok { + return x.NamedResourceSpec + } } return nil } -func (m *GenericResource) GetDiscreteResourceSpec() *DiscreteGenericResource { - if x, ok := m.GetResource().(*GenericResource_DiscreteResourceSpec); ok { - return x.DiscreteResourceSpec +func (x *GenericResource) GetDiscreteResourceSpec() *DiscreteGenericResource { + if x != nil { + if x, ok := x.Resource.(*GenericResource_DiscreteResourceSpec); ok { + return x.DiscreteResourceSpec + } } return nil } -// XXX_OneofWrappers is for the internal use of the proto package. -func (*GenericResource) XXX_OneofWrappers() []interface{} { - return []interface{}{ - (*GenericResource_NamedResourceSpec)(nil), - (*GenericResource_DiscreteResourceSpec)(nil), - } +type isGenericResource_Resource interface { + isGenericResource_Resource() +} + +type GenericResource_NamedResourceSpec struct { + NamedResourceSpec *NamedGenericResource `protobuf:"bytes,1,opt,name=named_resource_spec,json=namedResourceSpec,proto3,oneof"` +} + +type GenericResource_DiscreteResourceSpec struct { + DiscreteResourceSpec *DiscreteGenericResource `protobuf:"bytes,2,opt,name=discrete_resource_spec,json=discreteResourceSpec,proto3,oneof"` } +func (*GenericResource_NamedResourceSpec) isGenericResource_Resource() {} + +func (*GenericResource_DiscreteResourceSpec) isGenericResource_Resource() {} + type Resources struct { + state protoimpl.MessageState `protogen:"open.v1"` // Amount of CPUs (e.g. 2000000000 = 2 CPU cores) NanoCPUs int64 `protobuf:"varint,1,opt,name=nano_cpus,json=nanoCpus,proto3" json:"nano_cpus,omitempty"` // Amount of memory in bytes. MemoryBytes int64 `protobuf:"varint,2,opt,name=memory_bytes,json=memoryBytes,proto3" json:"memory_bytes,omitempty"` // User specified resource (e.g: bananas=2;apple={red,yellow,green}) - Generic []*GenericResource `protobuf:"bytes,3,rep,name=generic,proto3" json:"generic,omitempty"` + Generic []*GenericResource `protobuf:"bytes,3,rep,name=generic,proto3" json:"generic,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Resources) Reset() { + *x = Resources{} + mi := &file_api_types_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Resources) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Resources) Reset() { *m = Resources{} } func (*Resources) ProtoMessage() {} -func (*Resources) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{6} -} -func (m *Resources) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Resources) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_Resources.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *Resources) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[6] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *Resources) XXX_Merge(src proto.Message) { - xxx_messageInfo_Resources.Merge(m, src) + +// Deprecated: Use Resources.ProtoReflect.Descriptor instead. +func (*Resources) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{6} } -func (m *Resources) XXX_Size() int { - return m.Size() + +func (x *Resources) GetNanoCPUs() int64 { + if x != nil { + return x.NanoCPUs + } + return 0 } -func (m *Resources) XXX_DiscardUnknown() { - xxx_messageInfo_Resources.DiscardUnknown(m) + +func (x *Resources) GetMemoryBytes() int64 { + if x != nil { + return x.MemoryBytes + } + return 0 } -var xxx_messageInfo_Resources proto.InternalMessageInfo +func (x *Resources) GetGeneric() []*GenericResource { + if x != nil { + return x.Generic + } + return nil +} type ResourceRequirements struct { - Limits *Resources `protobuf:"bytes,1,opt,name=limits,proto3" json:"limits,omitempty"` - Reservations *Resources `protobuf:"bytes,2,opt,name=reservations,proto3" json:"reservations,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Limits *Resources `protobuf:"bytes,1,opt,name=limits,proto3" json:"limits,omitempty"` + Reservations *Resources `protobuf:"bytes,2,opt,name=reservations,proto3" json:"reservations,omitempty"` // Amount of swap in bytes - can only be used together with a memory limit // -1 means unlimited // a null pointer indicates that the default behaviour of granting twice // the memory is maintained - SwapBytes *types.Int64Value `protobuf:"bytes,3,opt,name=swap_bytes,json=swapBytes,proto3" json:"swap_bytes,omitempty"` + SwapBytes *wrapperspb.Int64Value `protobuf:"bytes,3,opt,name=swap_bytes,json=swapBytes,proto3" json:"swap_bytes,omitempty"` // Tune container memory swappiness (0 to 100) - if not specified, defaults // to the container OS's default - generally 60, or the value predefined in // the image; set to -1 to unset a previously set value - MemorySwappiness *types.Int64Value `protobuf:"bytes,4,opt,name=memory_swappiness,json=memorySwappiness,proto3" json:"memory_swappiness,omitempty"` + MemorySwappiness *wrapperspb.Int64Value `protobuf:"bytes,4,opt,name=memory_swappiness,json=memorySwappiness,proto3" json:"memory_swappiness,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ResourceRequirements) Reset() { + *x = ResourceRequirements{} + mi := &file_api_types_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ResourceRequirements) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ResourceRequirements) Reset() { *m = ResourceRequirements{} } func (*ResourceRequirements) ProtoMessage() {} -func (*ResourceRequirements) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{7} -} -func (m *ResourceRequirements) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ResourceRequirements) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ResourceRequirements.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *ResourceRequirements) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[7] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *ResourceRequirements) XXX_Merge(src proto.Message) { - xxx_messageInfo_ResourceRequirements.Merge(m, src) + +// Deprecated: Use ResourceRequirements.ProtoReflect.Descriptor instead. +func (*ResourceRequirements) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{7} +} + +func (x *ResourceRequirements) GetLimits() *Resources { + if x != nil { + return x.Limits + } + return nil } -func (m *ResourceRequirements) XXX_Size() int { - return m.Size() + +func (x *ResourceRequirements) GetReservations() *Resources { + if x != nil { + return x.Reservations + } + return nil } -func (m *ResourceRequirements) XXX_DiscardUnknown() { - xxx_messageInfo_ResourceRequirements.DiscardUnknown(m) + +func (x *ResourceRequirements) GetSwapBytes() *wrapperspb.Int64Value { + if x != nil { + return x.SwapBytes + } + return nil } -var xxx_messageInfo_ResourceRequirements proto.InternalMessageInfo +func (x *ResourceRequirements) GetMemorySwappiness() *wrapperspb.Int64Value { + if x != nil { + return x.MemorySwappiness + } + return nil +} type Platform struct { + state protoimpl.MessageState `protogen:"open.v1"` // Architecture (e.g. x86_64) Architecture string `protobuf:"bytes,1,opt,name=architecture,proto3" json:"architecture,omitempty"` // Operating System (e.g. linux) - OS string `protobuf:"bytes,2,opt,name=os,proto3" json:"os,omitempty"` + OS string `protobuf:"bytes,2,opt,name=os,proto3" json:"os,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Platform) Reset() { + *x = Platform{} + mi := &file_api_types_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Platform) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Platform) Reset() { *m = Platform{} } func (*Platform) ProtoMessage() {} -func (*Platform) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{8} -} -func (m *Platform) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Platform) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_Platform.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *Platform) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[8] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *Platform) XXX_Merge(src proto.Message) { - xxx_messageInfo_Platform.Merge(m, src) -} -func (m *Platform) XXX_Size() int { - return m.Size() + +// Deprecated: Use Platform.ProtoReflect.Descriptor instead. +func (*Platform) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{8} } -func (m *Platform) XXX_DiscardUnknown() { - xxx_messageInfo_Platform.DiscardUnknown(m) + +func (x *Platform) GetArchitecture() string { + if x != nil { + return x.Architecture + } + return "" } -var xxx_messageInfo_Platform proto.InternalMessageInfo +func (x *Platform) GetOS() string { + if x != nil { + return x.OS + } + return "" +} // PluginDescription describes an engine plugin. type PluginDescription struct { + state protoimpl.MessageState `protogen:"open.v1"` // Type of plugin. Canonical values for existing types are // Volume, Network, and Authorization. More types could be // supported in the future. Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` // Name of the plugin - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PluginDescription) Reset() { + *x = PluginDescription{} + mi := &file_api_types_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PluginDescription) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *PluginDescription) Reset() { *m = PluginDescription{} } func (*PluginDescription) ProtoMessage() {} -func (*PluginDescription) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{9} -} -func (m *PluginDescription) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *PluginDescription) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_PluginDescription.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *PluginDescription) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[9] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *PluginDescription) XXX_Merge(src proto.Message) { - xxx_messageInfo_PluginDescription.Merge(m, src) -} -func (m *PluginDescription) XXX_Size() int { - return m.Size() + +// Deprecated: Use PluginDescription.ProtoReflect.Descriptor instead. +func (*PluginDescription) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{9} } -func (m *PluginDescription) XXX_DiscardUnknown() { - xxx_messageInfo_PluginDescription.DiscardUnknown(m) + +func (x *PluginDescription) GetType() string { + if x != nil { + return x.Type + } + return "" } -var xxx_messageInfo_PluginDescription proto.InternalMessageInfo +func (x *PluginDescription) GetName() string { + if x != nil { + return x.Name + } + return "" +} type EngineDescription struct { + state protoimpl.MessageState `protogen:"open.v1"` // Docker daemon version running on the node. EngineVersion string `protobuf:"bytes,1,opt,name=engine_version,json=engineVersion,proto3" json:"engine_version,omitempty"` // Labels attached to the engine. - Labels map[string]string `protobuf:"bytes,2,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Labels map[string]string `protobuf:"bytes,2,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // Volume, Network, and Auth plugins - Plugins []PluginDescription `protobuf:"bytes,3,rep,name=plugins,proto3" json:"plugins"` + Plugins []*PluginDescription `protobuf:"bytes,3,rep,name=plugins,proto3" json:"plugins,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *EngineDescription) Reset() { + *x = EngineDescription{} + mi := &file_api_types_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *EngineDescription) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *EngineDescription) Reset() { *m = EngineDescription{} } func (*EngineDescription) ProtoMessage() {} -func (*EngineDescription) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{10} -} -func (m *EngineDescription) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *EngineDescription) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_EngineDescription.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *EngineDescription) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[10] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *EngineDescription) XXX_Merge(src proto.Message) { - xxx_messageInfo_EngineDescription.Merge(m, src) + +// Deprecated: Use EngineDescription.ProtoReflect.Descriptor instead. +func (*EngineDescription) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{10} } -func (m *EngineDescription) XXX_Size() int { - return m.Size() + +func (x *EngineDescription) GetEngineVersion() string { + if x != nil { + return x.EngineVersion + } + return "" } -func (m *EngineDescription) XXX_DiscardUnknown() { - xxx_messageInfo_EngineDescription.DiscardUnknown(m) + +func (x *EngineDescription) GetLabels() map[string]string { + if x != nil { + return x.Labels + } + return nil } -var xxx_messageInfo_EngineDescription proto.InternalMessageInfo +func (x *EngineDescription) GetPlugins() []*PluginDescription { + if x != nil { + return x.Plugins + } + return nil +} type NodeDescription struct { + state protoimpl.MessageState `protogen:"open.v1"` // Hostname of the node as reported by the agent. // This is different from spec.meta.name which is user-defined. Hostname string `protobuf:"bytes,1,opt,name=hostname,proto3" json:"hostname,omitempty"` @@ -1391,86 +2084,158 @@ type NodeDescription struct { // Information on the node's TLS setup TLSInfo *NodeTLSInfo `protobuf:"bytes,5,opt,name=tls_info,json=tlsInfo,proto3" json:"tls_info,omitempty"` // FIPS indicates whether the node has FIPS-enabled - FIPS bool `protobuf:"varint,6,opt,name=fips,proto3" json:"fips,omitempty"` - CSIInfo []*NodeCSIInfo `protobuf:"bytes,7,rep,name=csi_info,json=csiInfo,proto3" json:"csi_info,omitempty"` + FIPS bool `protobuf:"varint,6,opt,name=fips,proto3" json:"fips,omitempty"` + CSIInfo []*NodeCSIInfo `protobuf:"bytes,7,rep,name=csi_info,json=csiInfo,proto3" json:"csi_info,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *NodeDescription) Reset() { + *x = NodeDescription{} + mi := &file_api_types_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *NodeDescription) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *NodeDescription) Reset() { *m = NodeDescription{} } func (*NodeDescription) ProtoMessage() {} -func (*NodeDescription) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{11} -} -func (m *NodeDescription) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *NodeDescription) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_NodeDescription.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *NodeDescription) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[11] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use NodeDescription.ProtoReflect.Descriptor instead. +func (*NodeDescription) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{11} +} + +func (x *NodeDescription) GetHostname() string { + if x != nil { + return x.Hostname + } + return "" +} + +func (x *NodeDescription) GetPlatform() *Platform { + if x != nil { + return x.Platform + } + return nil +} + +func (x *NodeDescription) GetResources() *Resources { + if x != nil { + return x.Resources } + return nil } -func (m *NodeDescription) XXX_Merge(src proto.Message) { - xxx_messageInfo_NodeDescription.Merge(m, src) + +func (x *NodeDescription) GetEngine() *EngineDescription { + if x != nil { + return x.Engine + } + return nil } -func (m *NodeDescription) XXX_Size() int { - return m.Size() + +func (x *NodeDescription) GetTLSInfo() *NodeTLSInfo { + if x != nil { + return x.TLSInfo + } + return nil } -func (m *NodeDescription) XXX_DiscardUnknown() { - xxx_messageInfo_NodeDescription.DiscardUnknown(m) + +func (x *NodeDescription) GetFIPS() bool { + if x != nil { + return x.FIPS + } + return false } -var xxx_messageInfo_NodeDescription proto.InternalMessageInfo +func (x *NodeDescription) GetCSIInfo() []*NodeCSIInfo { + if x != nil { + return x.CSIInfo + } + return nil +} type NodeTLSInfo struct { + state protoimpl.MessageState `protogen:"open.v1"` // Information about which root certs the node trusts TrustRoot []byte `protobuf:"bytes,1,opt,name=trust_root,json=trustRoot,proto3" json:"trust_root,omitempty"` // Information about the node's current TLS certificate CertIssuerSubject []byte `protobuf:"bytes,2,opt,name=cert_issuer_subject,json=certIssuerSubject,proto3" json:"cert_issuer_subject,omitempty"` CertIssuerPublicKey []byte `protobuf:"bytes,3,opt,name=cert_issuer_public_key,json=certIssuerPublicKey,proto3" json:"cert_issuer_public_key,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *NodeTLSInfo) Reset() { + *x = NodeTLSInfo{} + mi := &file_api_types_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *NodeTLSInfo) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *NodeTLSInfo) Reset() { *m = NodeTLSInfo{} } func (*NodeTLSInfo) ProtoMessage() {} -func (*NodeTLSInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{12} -} -func (m *NodeTLSInfo) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *NodeTLSInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_NodeTLSInfo.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *NodeTLSInfo) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[12] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *NodeTLSInfo) XXX_Merge(src proto.Message) { - xxx_messageInfo_NodeTLSInfo.Merge(m, src) + +// Deprecated: Use NodeTLSInfo.ProtoReflect.Descriptor instead. +func (*NodeTLSInfo) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{12} } -func (m *NodeTLSInfo) XXX_Size() int { - return m.Size() + +func (x *NodeTLSInfo) GetTrustRoot() []byte { + if x != nil { + return x.TrustRoot + } + return nil } -func (m *NodeTLSInfo) XXX_DiscardUnknown() { - xxx_messageInfo_NodeTLSInfo.DiscardUnknown(m) + +func (x *NodeTLSInfo) GetCertIssuerSubject() []byte { + if x != nil { + return x.CertIssuerSubject + } + return nil } -var xxx_messageInfo_NodeTLSInfo proto.InternalMessageInfo +func (x *NodeTLSInfo) GetCertIssuerPublicKey() []byte { + if x != nil { + return x.CertIssuerPublicKey + } + return nil +} // NodeCSIInfo represents information about a Node returned by calling the // NodeGetInfo RPC on the CSI plugin present on the node. There is a separate // NodeCSIInfo object for each CSI plugin present. type NodeCSIInfo struct { + state protoimpl.MessageState `protogen:"open.v1"` // PluginName is the name of the CSI plugin. PluginName string `protobuf:"bytes,1,opt,name=plugin_name,json=pluginName,proto3" json:"plugin_name,omitempty"` // NodeID is the ID of the node as reported by the CSI plugin. This will be @@ -1482,155 +2247,235 @@ type NodeCSIInfo struct { // AccessibleTopology indicates the location of this node in the CSI plugin's // topology AccessibleTopology *Topology `protobuf:"bytes,4,opt,name=accessible_topology,json=accessibleTopology,proto3" json:"accessible_topology,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *NodeCSIInfo) Reset() { + *x = NodeCSIInfo{} + mi := &file_api_types_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *NodeCSIInfo) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *NodeCSIInfo) Reset() { *m = NodeCSIInfo{} } func (*NodeCSIInfo) ProtoMessage() {} -func (*NodeCSIInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{13} -} -func (m *NodeCSIInfo) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *NodeCSIInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_NodeCSIInfo.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *NodeCSIInfo) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[13] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } -} -func (m *NodeCSIInfo) XXX_Merge(src proto.Message) { - xxx_messageInfo_NodeCSIInfo.Merge(m, src) -} -func (m *NodeCSIInfo) XXX_Size() int { - return m.Size() -} -func (m *NodeCSIInfo) XXX_DiscardUnknown() { - xxx_messageInfo_NodeCSIInfo.DiscardUnknown(m) + return mi.MessageOf(x) } -var xxx_messageInfo_NodeCSIInfo proto.InternalMessageInfo +// Deprecated: Use NodeCSIInfo.ProtoReflect.Descriptor instead. +func (*NodeCSIInfo) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{13} +} + +func (x *NodeCSIInfo) GetPluginName() string { + if x != nil { + return x.PluginName + } + return "" +} + +func (x *NodeCSIInfo) GetNodeID() string { + if x != nil { + return x.NodeID + } + return "" +} + +func (x *NodeCSIInfo) GetMaxVolumesPerNode() int64 { + if x != nil { + return x.MaxVolumesPerNode + } + return 0 +} + +func (x *NodeCSIInfo) GetAccessibleTopology() *Topology { + if x != nil { + return x.AccessibleTopology + } + return nil +} type RaftMemberStatus struct { - Leader bool `protobuf:"varint,1,opt,name=leader,proto3" json:"leader,omitempty"` - Reachability RaftMemberStatus_Reachability `protobuf:"varint,2,opt,name=reachability,proto3,enum=docker.swarmkit.v1.RaftMemberStatus_Reachability" json:"reachability,omitempty"` - Message string `protobuf:"bytes,3,opt,name=message,proto3" json:"message,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Leader bool `protobuf:"varint,1,opt,name=leader,proto3" json:"leader,omitempty"` + Reachability RaftMemberStatus_Reachability `protobuf:"varint,2,opt,name=reachability,proto3,enum=docker.swarmkit.v1.RaftMemberStatus_Reachability" json:"reachability,omitempty"` + Message string `protobuf:"bytes,3,opt,name=message,proto3" json:"message,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RaftMemberStatus) Reset() { + *x = RaftMemberStatus{} + mi := &file_api_types_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RaftMemberStatus) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *RaftMemberStatus) Reset() { *m = RaftMemberStatus{} } func (*RaftMemberStatus) ProtoMessage() {} -func (*RaftMemberStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{14} -} -func (m *RaftMemberStatus) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *RaftMemberStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_RaftMemberStatus.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *RaftMemberStatus) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[14] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *RaftMemberStatus) XXX_Merge(src proto.Message) { - xxx_messageInfo_RaftMemberStatus.Merge(m, src) + +// Deprecated: Use RaftMemberStatus.ProtoReflect.Descriptor instead. +func (*RaftMemberStatus) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{14} } -func (m *RaftMemberStatus) XXX_Size() int { - return m.Size() + +func (x *RaftMemberStatus) GetLeader() bool { + if x != nil { + return x.Leader + } + return false } -func (m *RaftMemberStatus) XXX_DiscardUnknown() { - xxx_messageInfo_RaftMemberStatus.DiscardUnknown(m) + +func (x *RaftMemberStatus) GetReachability() RaftMemberStatus_Reachability { + if x != nil { + return x.Reachability + } + return RaftMemberStatus_UNKNOWN } -var xxx_messageInfo_RaftMemberStatus proto.InternalMessageInfo +func (x *RaftMemberStatus) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} type NodeStatus struct { - State NodeStatus_State `protobuf:"varint,1,opt,name=state,proto3,enum=docker.swarmkit.v1.NodeStatus_State" json:"state,omitempty"` - Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + State NodeStatus_State `protobuf:"varint,1,opt,name=state,proto3,enum=docker.swarmkit.v1.NodeStatus_State" json:"state,omitempty"` + Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` // Addr is the node's IP address as observed by the manager - Addr string `protobuf:"bytes,3,opt,name=addr,proto3" json:"addr,omitempty"` + Addr string `protobuf:"bytes,3,opt,name=addr,proto3" json:"addr,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *NodeStatus) Reset() { + *x = NodeStatus{} + mi := &file_api_types_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *NodeStatus) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *NodeStatus) Reset() { *m = NodeStatus{} } func (*NodeStatus) ProtoMessage() {} -func (*NodeStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{15} -} -func (m *NodeStatus) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *NodeStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_NodeStatus.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *NodeStatus) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[15] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *NodeStatus) XXX_Merge(src proto.Message) { - xxx_messageInfo_NodeStatus.Merge(m, src) + +// Deprecated: Use NodeStatus.ProtoReflect.Descriptor instead. +func (*NodeStatus) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{15} } -func (m *NodeStatus) XXX_Size() int { - return m.Size() + +func (x *NodeStatus) GetState() NodeStatus_State { + if x != nil { + return x.State + } + return NodeStatus_UNKNOWN } -func (m *NodeStatus) XXX_DiscardUnknown() { - xxx_messageInfo_NodeStatus.DiscardUnknown(m) + +func (x *NodeStatus) GetMessage() string { + if x != nil { + return x.Message + } + return "" } -var xxx_messageInfo_NodeStatus proto.InternalMessageInfo +func (x *NodeStatus) GetAddr() string { + if x != nil { + return x.Addr + } + return "" +} type Image struct { + state protoimpl.MessageState `protogen:"open.v1"` // reference is a docker image reference. This can include a rpository, tag // or be fully qualified witha digest. The format is specified in the // distribution/reference package. - Reference string `protobuf:"bytes,1,opt,name=reference,proto3" json:"reference,omitempty"` + Reference string `protobuf:"bytes,1,opt,name=reference,proto3" json:"reference,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Image) Reset() { + *x = Image{} + mi := &file_api_types_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Image) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Image) Reset() { *m = Image{} } func (*Image) ProtoMessage() {} -func (*Image) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{16} -} -func (m *Image) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Image) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_Image.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *Image) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[16] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *Image) XXX_Merge(src proto.Message) { - xxx_messageInfo_Image.Merge(m, src) -} -func (m *Image) XXX_Size() int { - return m.Size() -} -func (m *Image) XXX_DiscardUnknown() { - xxx_messageInfo_Image.DiscardUnknown(m) + +// Deprecated: Use Image.ProtoReflect.Descriptor instead. +func (*Image) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{16} } -var xxx_messageInfo_Image proto.InternalMessageInfo +func (x *Image) GetReference() string { + if x != nil { + return x.Reference + } + return "" +} // Mount describes volume mounts for a container. // @@ -1639,8 +2484,9 @@ var xxx_messageInfo_Image proto.InternalMessageInfo // of mounts, where we also provide options that are specific to a type of // mount. This corresponds to flags and data, respectively, in the syscall. type Mount struct { + state protoimpl.MessageState `protogen:"open.v1"` // Type defines the nature of the mount. - Type Mount_MountType `protobuf:"varint,1,opt,name=type,proto3,enum=docker.swarmkit.v1.Mount_MountType" json:"type,omitempty"` + Type MountType `protobuf:"varint,1,opt,name=type,proto3,enum=docker.swarmkit.v1.Mount_Type" json:"type,omitempty"` // Source specifies the name of the mount. Depending on mount type, this // may be a volume name or a host path, or even ignored. // @@ -1651,8 +2497,8 @@ type Mount struct { // Target path in container Target string `protobuf:"bytes,3,opt,name=target,proto3" json:"target,omitempty"` // ReadOnly should be set to true if the mount should not be writable. - ReadOnly bool `protobuf:"varint,4,opt,name=readonly,proto3" json:"readonly,omitempty"` - Consistency Mount_MountConsistency `protobuf:"varint,8,opt,name=consistency,proto3,enum=docker.swarmkit.v1.Mount_MountConsistency" json:"consistency,omitempty"` + ReadOnly bool `protobuf:"varint,4,opt,name=readonly,proto3" json:"readonly,omitempty"` + Consistency MountConsistency `protobuf:"varint,8,opt,name=consistency,proto3,enum=docker.swarmkit.v1.Mount_Consistency" json:"consistency,omitempty"` // BindOptions configures properties of a bind mount type. // // For mounts of type bind, the source must be an absolute host path. @@ -1665,237 +2511,181 @@ type Mount struct { // filesystem. // // The source field will be ignored when using mounts of type tmpfs. - TmpfsOptions *Mount_TmpfsOptions `protobuf:"bytes,7,opt,name=tmpfs_options,json=tmpfsOptions,proto3" json:"tmpfs_options,omitempty"` + TmpfsOptions *Mount_TmpfsOptions `protobuf:"bytes,7,opt,name=tmpfs_options,json=tmpfsOptions,proto3" json:"tmpfs_options,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *Mount) Reset() { *m = Mount{} } -func (*Mount) ProtoMessage() {} -func (*Mount) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{17} -} -func (m *Mount) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Mount) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_Mount.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 *Mount) XXX_Merge(src proto.Message) { - xxx_messageInfo_Mount.Merge(m, src) -} -func (m *Mount) XXX_Size() int { - return m.Size() -} -func (m *Mount) XXX_DiscardUnknown() { - xxx_messageInfo_Mount.DiscardUnknown(m) +func (x *Mount) Reset() { + *x = Mount{} + mi := &file_api_types_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -var xxx_messageInfo_Mount proto.InternalMessageInfo - -// BindOptions specifies options that are specific to a bind mount. -type Mount_BindOptions struct { - // Propagation mode of mount. - Propagation Mount_BindOptions_MountPropagation `protobuf:"varint,1,opt,name=propagation,proto3,enum=docker.swarmkit.v1.Mount_BindOptions_MountPropagation" json:"propagation,omitempty"` - // allows non-recursive bind-mount, i.e. mount(2) with "bind" rather than "rbind". - NonRecursive bool `protobuf:"varint,2,opt,name=nonrecursive,proto3" json:"nonrecursive,omitempty"` - // Create the mount point - CreateMountpoint bool `protobuf:"varint,3,opt,name=createmountpoint,proto3" json:"createmountpoint,omitempty"` - // ReadOnlyNonRecursive makes the mount non-recursively read-only, but still leaves the mount recursive - // (unless NonRecursive is set to true in conjunction). - ReadOnlyNonRecursive bool `protobuf:"varint,4,opt,name=readonlynonrecursive,proto3" json:"readonlynonrecursive,omitempty"` - // ReadOnlyForceRecursive raises an error if the mount cannot be made recursively read-only. - ReadOnlyForceRecursive bool `protobuf:"varint,5,opt,name=readonlyforcerecursive,proto3" json:"readonlyforcerecursive,omitempty"` +func (x *Mount) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Mount_BindOptions) Reset() { *m = Mount_BindOptions{} } -func (*Mount_BindOptions) ProtoMessage() {} -func (*Mount_BindOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{17, 0} -} -func (m *Mount_BindOptions) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Mount_BindOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_Mount_BindOptions.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err +func (*Mount) ProtoMessage() {} + +func (x *Mount) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[17] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } -} -func (m *Mount_BindOptions) XXX_Merge(src proto.Message) { - xxx_messageInfo_Mount_BindOptions.Merge(m, src) -} -func (m *Mount_BindOptions) XXX_Size() int { - return m.Size() -} -func (m *Mount_BindOptions) XXX_DiscardUnknown() { - xxx_messageInfo_Mount_BindOptions.DiscardUnknown(m) + return mi.MessageOf(x) } -var xxx_messageInfo_Mount_BindOptions proto.InternalMessageInfo - -// VolumeOptions contains parameters for mounting the volume. -type Mount_VolumeOptions struct { - // nocopy prevents automatic copying of data to the volume with data from target - NoCopy bool `protobuf:"varint,1,opt,name=nocopy,proto3" json:"nocopy,omitempty"` - // labels to apply to the volume if creating - Labels map[string]string `protobuf:"bytes,2,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // DriverConfig specifies the options that may be passed to the driver - // if the volume is created. - // - // If this is empty, no volume will be created if the volume is missing. - DriverConfig *Driver `protobuf:"bytes,3,opt,name=driver_config,json=driverConfig,proto3" json:"driver_config,omitempty"` - // subpath inside the volume to mount. - Subpath string `protobuf:"bytes,4,opt,name=subpath,proto3" json:"subpath,omitempty"` +// Deprecated: Use Mount.ProtoReflect.Descriptor instead. +func (*Mount) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{17} } -func (m *Mount_VolumeOptions) Reset() { *m = Mount_VolumeOptions{} } -func (*Mount_VolumeOptions) ProtoMessage() {} -func (*Mount_VolumeOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{17, 1} -} -func (m *Mount_VolumeOptions) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Mount_VolumeOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_Mount_VolumeOptions.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 (x *Mount) GetType() MountType { + if x != nil { + return x.Type } -} -func (m *Mount_VolumeOptions) XXX_Merge(src proto.Message) { - xxx_messageInfo_Mount_VolumeOptions.Merge(m, src) -} -func (m *Mount_VolumeOptions) XXX_Size() int { - return m.Size() -} -func (m *Mount_VolumeOptions) XXX_DiscardUnknown() { - xxx_messageInfo_Mount_VolumeOptions.DiscardUnknown(m) + return MountTypeBind } -var xxx_messageInfo_Mount_VolumeOptions proto.InternalMessageInfo +func (x *Mount) GetSource() string { + if x != nil { + return x.Source + } + return "" +} -type Mount_TmpfsOptions struct { - // Size sets the size of the tmpfs, in bytes. - // - // This will be converted to an operating system specific value - // depending on the host. For example, on linux, it will be convered to - // use a 'k', 'm' or 'g' syntax. BSD, though not widely supported with - // docker, uses a straight byte value. - // - // Percentages are not supported. - SizeBytes int64 `protobuf:"varint,1,opt,name=size_bytes,json=sizeBytes,proto3" json:"size_bytes,omitempty"` - // Mode of the tmpfs upon creation - Mode os.FileMode `protobuf:"varint,2,opt,name=mode,proto3,customtype=os.FileMode" json:"mode"` - // Options passed to tmpfs mount - Options string `protobuf:"bytes,3,opt,name=options,proto3" json:"options,omitempty"` +func (x *Mount) GetTarget() string { + if x != nil { + return x.Target + } + return "" } -func (m *Mount_TmpfsOptions) Reset() { *m = Mount_TmpfsOptions{} } -func (*Mount_TmpfsOptions) ProtoMessage() {} -func (*Mount_TmpfsOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{17, 2} -} -func (m *Mount_TmpfsOptions) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Mount_TmpfsOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_Mount_TmpfsOptions.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 (x *Mount) GetReadOnly() bool { + if x != nil { + return x.ReadOnly } + return false } -func (m *Mount_TmpfsOptions) XXX_Merge(src proto.Message) { - xxx_messageInfo_Mount_TmpfsOptions.Merge(m, src) + +func (x *Mount) GetConsistency() MountConsistency { + if x != nil { + return x.Consistency + } + return MountConsistencyDefault } -func (m *Mount_TmpfsOptions) XXX_Size() int { - return m.Size() + +func (x *Mount) GetBindOptions() *Mount_BindOptions { + if x != nil { + return x.BindOptions + } + return nil } -func (m *Mount_TmpfsOptions) XXX_DiscardUnknown() { - xxx_messageInfo_Mount_TmpfsOptions.DiscardUnknown(m) + +func (x *Mount) GetVolumeOptions() *Mount_VolumeOptions { + if x != nil { + return x.VolumeOptions + } + return nil } -var xxx_messageInfo_Mount_TmpfsOptions proto.InternalMessageInfo +func (x *Mount) GetTmpfsOptions() *Mount_TmpfsOptions { + if x != nil { + return x.TmpfsOptions + } + return nil +} type RestartPolicy struct { - Condition RestartPolicy_RestartCondition `protobuf:"varint,1,opt,name=condition,proto3,enum=docker.swarmkit.v1.RestartPolicy_RestartCondition" json:"condition,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Condition RestartCondition `protobuf:"varint,1,opt,name=condition,proto3,enum=docker.swarmkit.v1.RestartPolicy_RestartCondition" json:"condition,omitempty"` // Delay between restart attempts // Note: can't use stdduration because this field needs to be nullable. - Delay *types.Duration `protobuf:"bytes,2,opt,name=delay,proto3" json:"delay,omitempty"` + Delay *durationpb.Duration `protobuf:"bytes,2,opt,name=delay,proto3" json:"delay,omitempty"` // MaxAttempts is the maximum number of restarts to attempt on an // instance before giving up. Ignored if 0. MaxAttempts uint64 `protobuf:"varint,3,opt,name=max_attempts,json=maxAttempts,proto3" json:"max_attempts,omitempty"` // Window is the time window used to evaluate the restart policy. // The time window is unbounded if this is 0. // Note: can't use stdduration because this field needs to be nullable. - Window *types.Duration `protobuf:"bytes,4,opt,name=window,proto3" json:"window,omitempty"` + Window *durationpb.Duration `protobuf:"bytes,4,opt,name=window,proto3" json:"window,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RestartPolicy) Reset() { + *x = RestartPolicy{} + mi := &file_api_types_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RestartPolicy) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *RestartPolicy) Reset() { *m = RestartPolicy{} } func (*RestartPolicy) ProtoMessage() {} -func (*RestartPolicy) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{18} -} -func (m *RestartPolicy) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *RestartPolicy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_RestartPolicy.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *RestartPolicy) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[18] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *RestartPolicy) XXX_Merge(src proto.Message) { - xxx_messageInfo_RestartPolicy.Merge(m, src) + +// Deprecated: Use RestartPolicy.ProtoReflect.Descriptor instead. +func (*RestartPolicy) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{18} +} + +func (x *RestartPolicy) GetCondition() RestartCondition { + if x != nil { + return x.Condition + } + return RestartOnNone } -func (m *RestartPolicy) XXX_Size() int { - return m.Size() + +func (x *RestartPolicy) GetDelay() *durationpb.Duration { + if x != nil { + return x.Delay + } + return nil } -func (m *RestartPolicy) XXX_DiscardUnknown() { - xxx_messageInfo_RestartPolicy.DiscardUnknown(m) + +func (x *RestartPolicy) GetMaxAttempts() uint64 { + if x != nil { + return x.MaxAttempts + } + return 0 } -var xxx_messageInfo_RestartPolicy proto.InternalMessageInfo +func (x *RestartPolicy) GetWindow() *durationpb.Duration { + if x != nil { + return x.Window + } + return nil +} // UpdateConfig specifies the rate and policy of updates. // TODO(aluzzardi): Consider making this a oneof with RollingStrategy and LockstepStrategy. type UpdateConfig struct { + state protoimpl.MessageState `protogen:"open.v1"` // Maximum number of tasks to be updated in one iteration. // 0 means unlimited parallelism. Parallelism uint64 `protobuf:"varint,1,opt,name=parallelism,proto3" json:"parallelism,omitempty"` // Amount of time between updates. - Delay time.Duration `protobuf:"bytes,2,opt,name=delay,proto3,stdduration" json:"delay"` + Delay *durationpb.Duration `protobuf:"bytes,2,opt,name=delay,proto3" json:"delay,omitempty"` // FailureAction is the action to take when an update failures. FailureAction UpdateConfig_FailureAction `protobuf:"varint,3,opt,name=failure_action,json=failureAction,proto3,enum=docker.swarmkit.v1.UpdateConfig_FailureAction" json:"failure_action,omitempty"` // Monitor indicates how long to monitor a task for failure after it is @@ -1905,7 +2695,7 @@ type UpdateConfig struct { // count as a failure. If Monitor is unspecified, a default value will // be used. // Note: can't use stdduration because this field needs to be nullable. - Monitor *types.Duration `protobuf:"bytes,4,opt,name=monitor,proto3" json:"monitor,omitempty"` + Monitor *durationpb.Duration `protobuf:"bytes,4,opt,name=monitor,proto3" json:"monitor,omitempty"` // MaxFailureRatio is the fraction of tasks that may fail during // an update before the failure action is invoked. Any task created by // the current update which ends up in one of the states REJECTED, @@ -1922,172 +2712,274 @@ type UpdateConfig struct { // threshold is hit during the rollback, the rollback will pause. MaxFailureRatio float32 `protobuf:"fixed32,5,opt,name=max_failure_ratio,json=maxFailureRatio,proto3" json:"max_failure_ratio,omitempty"` Order UpdateConfig_UpdateOrder `protobuf:"varint,6,opt,name=order,proto3,enum=docker.swarmkit.v1.UpdateConfig_UpdateOrder" json:"order,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *UpdateConfig) Reset() { + *x = UpdateConfig{} + mi := &file_api_types_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *UpdateConfig) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *UpdateConfig) Reset() { *m = UpdateConfig{} } func (*UpdateConfig) ProtoMessage() {} -func (*UpdateConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{19} -} -func (m *UpdateConfig) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *UpdateConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_UpdateConfig.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *UpdateConfig) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[19] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpdateConfig.ProtoReflect.Descriptor instead. +func (*UpdateConfig) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{19} +} + +func (x *UpdateConfig) GetParallelism() uint64 { + if x != nil { + return x.Parallelism + } + return 0 +} + +func (x *UpdateConfig) GetDelay() *durationpb.Duration { + if x != nil { + return x.Delay } + return nil } -func (m *UpdateConfig) XXX_Merge(src proto.Message) { - xxx_messageInfo_UpdateConfig.Merge(m, src) + +func (x *UpdateConfig) GetFailureAction() UpdateConfig_FailureAction { + if x != nil { + return x.FailureAction + } + return UpdateConfig_PAUSE } -func (m *UpdateConfig) XXX_Size() int { - return m.Size() + +func (x *UpdateConfig) GetMonitor() *durationpb.Duration { + if x != nil { + return x.Monitor + } + return nil } -func (m *UpdateConfig) XXX_DiscardUnknown() { - xxx_messageInfo_UpdateConfig.DiscardUnknown(m) + +func (x *UpdateConfig) GetMaxFailureRatio() float32 { + if x != nil { + return x.MaxFailureRatio + } + return 0 } -var xxx_messageInfo_UpdateConfig proto.InternalMessageInfo +func (x *UpdateConfig) GetOrder() UpdateConfig_UpdateOrder { + if x != nil { + return x.Order + } + return UpdateConfig_STOP_FIRST +} // UpdateStatus is the status of an update in progress. type UpdateStatus struct { + state protoimpl.MessageState `protogen:"open.v1"` // State is the state of this update. It indicates whether the // update is in progress, completed, paused, rolling back, or // finished rolling back. State UpdateStatus_UpdateState `protobuf:"varint,1,opt,name=state,proto3,enum=docker.swarmkit.v1.UpdateStatus_UpdateState" json:"state,omitempty"` // StartedAt is the time at which the update was started. // Note: can't use stdtime because this field is nullable. - StartedAt *types.Timestamp `protobuf:"bytes,2,opt,name=started_at,json=startedAt,proto3" json:"started_at,omitempty"` + StartedAt *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=started_at,json=startedAt,proto3" json:"started_at,omitempty"` // CompletedAt is the time at which the update completed successfully, // paused, or finished rolling back. // Note: can't use stdtime because this field is nullable. - CompletedAt *types.Timestamp `protobuf:"bytes,3,opt,name=completed_at,json=completedAt,proto3" json:"completed_at,omitempty"` + CompletedAt *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=completed_at,json=completedAt,proto3" json:"completed_at,omitempty"` // Message explains how the update got into its current state. For // example, if the update is paused, it will explain what is preventing // the update from proceeding (typically the failure of a task to start up // when OnFailure is PAUSE). - Message string `protobuf:"bytes,4,opt,name=message,proto3" json:"message,omitempty"` + Message string `protobuf:"bytes,4,opt,name=message,proto3" json:"message,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *UpdateStatus) Reset() { + *x = UpdateStatus{} + mi := &file_api_types_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *UpdateStatus) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *UpdateStatus) Reset() { *m = UpdateStatus{} } func (*UpdateStatus) ProtoMessage() {} -func (*UpdateStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{20} -} -func (m *UpdateStatus) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *UpdateStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_UpdateStatus.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *UpdateStatus) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[20] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *UpdateStatus) XXX_Merge(src proto.Message) { - xxx_messageInfo_UpdateStatus.Merge(m, src) + +// Deprecated: Use UpdateStatus.ProtoReflect.Descriptor instead. +func (*UpdateStatus) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{20} +} + +func (x *UpdateStatus) GetState() UpdateStatus_UpdateState { + if x != nil { + return x.State + } + return UpdateStatus_UNKNOWN } -func (m *UpdateStatus) XXX_Size() int { - return m.Size() + +func (x *UpdateStatus) GetStartedAt() *timestamppb.Timestamp { + if x != nil { + return x.StartedAt + } + return nil } -func (m *UpdateStatus) XXX_DiscardUnknown() { - xxx_messageInfo_UpdateStatus.DiscardUnknown(m) + +func (x *UpdateStatus) GetCompletedAt() *timestamppb.Timestamp { + if x != nil { + return x.CompletedAt + } + return nil } -var xxx_messageInfo_UpdateStatus proto.InternalMessageInfo +func (x *UpdateStatus) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} // Container specific status. type ContainerStatus struct { - ContainerID string `protobuf:"bytes,1,opt,name=container_id,json=containerId,proto3" json:"container_id,omitempty"` - PID int32 `protobuf:"varint,2,opt,name=pid,proto3" json:"pid,omitempty"` - ExitCode int32 `protobuf:"varint,3,opt,name=exit_code,json=exitCode,proto3" json:"exit_code,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + ContainerID string `protobuf:"bytes,1,opt,name=container_id,json=containerId,proto3" json:"container_id,omitempty"` + PID int32 `protobuf:"varint,2,opt,name=pid,proto3" json:"pid,omitempty"` + ExitCode int32 `protobuf:"varint,3,opt,name=exit_code,json=exitCode,proto3" json:"exit_code,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ContainerStatus) Reset() { + *x = ContainerStatus{} + mi := &file_api_types_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ContainerStatus) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ContainerStatus) Reset() { *m = ContainerStatus{} } func (*ContainerStatus) ProtoMessage() {} -func (*ContainerStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{21} -} -func (m *ContainerStatus) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ContainerStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ContainerStatus.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *ContainerStatus) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[21] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *ContainerStatus) XXX_Merge(src proto.Message) { - xxx_messageInfo_ContainerStatus.Merge(m, src) + +// Deprecated: Use ContainerStatus.ProtoReflect.Descriptor instead. +func (*ContainerStatus) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{21} } -func (m *ContainerStatus) XXX_Size() int { - return m.Size() + +func (x *ContainerStatus) GetContainerID() string { + if x != nil { + return x.ContainerID + } + return "" } -func (m *ContainerStatus) XXX_DiscardUnknown() { - xxx_messageInfo_ContainerStatus.DiscardUnknown(m) + +func (x *ContainerStatus) GetPID() int32 { + if x != nil { + return x.PID + } + return 0 } -var xxx_messageInfo_ContainerStatus proto.InternalMessageInfo +func (x *ContainerStatus) GetExitCode() int32 { + if x != nil { + return x.ExitCode + } + return 0 +} // PortStatus specifies the actual allocated runtime state of a list // of port configs. type PortStatus struct { - Ports []*PortConfig `protobuf:"bytes,1,rep,name=ports,proto3" json:"ports,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Ports []*PortConfig `protobuf:"bytes,1,rep,name=ports,proto3" json:"ports,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PortStatus) Reset() { + *x = PortStatus{} + mi := &file_api_types_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PortStatus) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *PortStatus) Reset() { *m = PortStatus{} } func (*PortStatus) ProtoMessage() {} -func (*PortStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{22} -} -func (m *PortStatus) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *PortStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_PortStatus.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *PortStatus) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[22] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *PortStatus) XXX_Merge(src proto.Message) { - xxx_messageInfo_PortStatus.Merge(m, src) -} -func (m *PortStatus) XXX_Size() int { - return m.Size() -} -func (m *PortStatus) XXX_DiscardUnknown() { - xxx_messageInfo_PortStatus.DiscardUnknown(m) + +// Deprecated: Use PortStatus.ProtoReflect.Descriptor instead. +func (*PortStatus) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{22} } -var xxx_messageInfo_PortStatus proto.InternalMessageInfo +func (x *PortStatus) GetPorts() []*PortConfig { + if x != nil { + return x.Ports + } + return nil +} type TaskStatus struct { + state protoimpl.MessageState `protogen:"open.v1"` // Note: can't use stdtime because this field is nullable. - Timestamp *types.Timestamp `protobuf:"bytes,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + Timestamp *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // State expresses the current state of the task. State TaskState `protobuf:"varint,2,opt,name=state,proto3,enum=docker.swarmkit.v1.TaskState" json:"state,omitempty"` // Message reports a message for the task status. This should provide a @@ -2128,80 +3020,123 @@ type TaskStatus struct { // AppliedAt gives a timestamp of when this status update was applied to // the Task object. // Note: can't use stdtime because this field is nullable. - AppliedAt *types.Timestamp `protobuf:"bytes,8,opt,name=applied_at,json=appliedAt,proto3" json:"applied_at,omitempty"` + AppliedAt *timestamppb.Timestamp `protobuf:"bytes,8,opt,name=applied_at,json=appliedAt,proto3" json:"applied_at,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *TaskStatus) Reset() { + *x = TaskStatus{} + mi := &file_api_types_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *TaskStatus) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *TaskStatus) Reset() { *m = TaskStatus{} } func (*TaskStatus) ProtoMessage() {} -func (*TaskStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{23} -} -func (m *TaskStatus) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *TaskStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_TaskStatus.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *TaskStatus) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[23] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *TaskStatus) XXX_Merge(src proto.Message) { - xxx_messageInfo_TaskStatus.Merge(m, src) -} -func (m *TaskStatus) XXX_Size() int { - return m.Size() -} -func (m *TaskStatus) XXX_DiscardUnknown() { - xxx_messageInfo_TaskStatus.DiscardUnknown(m) + +// Deprecated: Use TaskStatus.ProtoReflect.Descriptor instead. +func (*TaskStatus) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{23} } -var xxx_messageInfo_TaskStatus proto.InternalMessageInfo +func (x *TaskStatus) GetTimestamp() *timestamppb.Timestamp { + if x != nil { + return x.Timestamp + } + return nil +} -type isTaskStatus_RuntimeStatus interface { - isTaskStatus_RuntimeStatus() - MarshalTo([]byte) (int, error) - Size() int +func (x *TaskStatus) GetState() TaskState { + if x != nil { + return x.State + } + return TaskStateNew } -type TaskStatus_Container struct { - Container *ContainerStatus `protobuf:"bytes,5,opt,name=container,proto3,oneof" json:"container,omitempty"` +func (x *TaskStatus) GetMessage() string { + if x != nil { + return x.Message + } + return "" } -func (*TaskStatus_Container) isTaskStatus_RuntimeStatus() {} +func (x *TaskStatus) GetErr() string { + if x != nil { + return x.Err + } + return "" +} -func (m *TaskStatus) GetRuntimeStatus() isTaskStatus_RuntimeStatus { - if m != nil { - return m.RuntimeStatus +func (x *TaskStatus) GetRuntimeStatus() isTaskStatus_RuntimeStatus { + if x != nil { + return x.RuntimeStatus } return nil } -func (m *TaskStatus) GetContainer() *ContainerStatus { - if x, ok := m.GetRuntimeStatus().(*TaskStatus_Container); ok { - return x.Container +func (x *TaskStatus) GetContainer() *ContainerStatus { + if x != nil { + if x, ok := x.RuntimeStatus.(*TaskStatus_Container); ok { + return x.Container + } } return nil } -// XXX_OneofWrappers is for the internal use of the proto package. -func (*TaskStatus) XXX_OneofWrappers() []interface{} { - return []interface{}{ - (*TaskStatus_Container)(nil), +func (x *TaskStatus) GetPortStatus() *PortStatus { + if x != nil { + return x.PortStatus } + return nil } +func (x *TaskStatus) GetAppliedBy() string { + if x != nil { + return x.AppliedBy + } + return "" +} + +func (x *TaskStatus) GetAppliedAt() *timestamppb.Timestamp { + if x != nil { + return x.AppliedAt + } + return nil +} + +type isTaskStatus_RuntimeStatus interface { + isTaskStatus_RuntimeStatus() +} + +type TaskStatus_Container struct { + Container *ContainerStatus `protobuf:"bytes,5,opt,name=container,proto3,oneof"` +} + +func (*TaskStatus_Container) isTaskStatus_RuntimeStatus() {} + // NetworkAttachmentConfig specifies how a service should be attached to a particular network. // // For now, this is a simple struct, but this can include future information // instructing Swarm on how this service should work on the particular // network. type NetworkAttachmentConfig struct { + state protoimpl.MessageState `protogen:"open.v1"` // Target specifies the target network for attachment. This value must be a // network ID. Target string `protobuf:"bytes,1,opt,name=target,proto3" json:"target,omitempty"` @@ -2212,43 +3147,72 @@ type NetworkAttachmentConfig struct { // attachment might fail. Addresses []string `protobuf:"bytes,3,rep,name=addresses,proto3" json:"addresses,omitempty"` // DriverAttachmentOpts is a map of driver attachment options for the network target - DriverAttachmentOpts map[string]string `protobuf:"bytes,4,rep,name=driver_attachment_opts,json=driverAttachmentOpts,proto3" json:"driver_attachment_opts,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + DriverAttachmentOpts map[string]string `protobuf:"bytes,4,rep,name=driver_attachment_opts,json=driverAttachmentOpts,proto3" json:"driver_attachment_opts,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *NetworkAttachmentConfig) Reset() { + *x = NetworkAttachmentConfig{} + mi := &file_api_types_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *NetworkAttachmentConfig) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *NetworkAttachmentConfig) Reset() { *m = NetworkAttachmentConfig{} } func (*NetworkAttachmentConfig) ProtoMessage() {} -func (*NetworkAttachmentConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{24} -} -func (m *NetworkAttachmentConfig) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *NetworkAttachmentConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_NetworkAttachmentConfig.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *NetworkAttachmentConfig) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[24] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) +} + +// Deprecated: Use NetworkAttachmentConfig.ProtoReflect.Descriptor instead. +func (*NetworkAttachmentConfig) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{24} } -func (m *NetworkAttachmentConfig) XXX_Merge(src proto.Message) { - xxx_messageInfo_NetworkAttachmentConfig.Merge(m, src) + +func (x *NetworkAttachmentConfig) GetTarget() string { + if x != nil { + return x.Target + } + return "" } -func (m *NetworkAttachmentConfig) XXX_Size() int { - return m.Size() + +func (x *NetworkAttachmentConfig) GetAliases() []string { + if x != nil { + return x.Aliases + } + return nil } -func (m *NetworkAttachmentConfig) XXX_DiscardUnknown() { - xxx_messageInfo_NetworkAttachmentConfig.DiscardUnknown(m) + +func (x *NetworkAttachmentConfig) GetAddresses() []string { + if x != nil { + return x.Addresses + } + return nil } -var xxx_messageInfo_NetworkAttachmentConfig proto.InternalMessageInfo +func (x *NetworkAttachmentConfig) GetDriverAttachmentOpts() map[string]string { + if x != nil { + return x.DriverAttachmentOpts + } + return nil +} // IPAMConfig specifies parameters for IP Address Management. type IPAMConfig struct { + state protoimpl.MessageState `protogen:"open.v1"` Family IPAMConfig_AddressFamily `protobuf:"varint,1,opt,name=family,proto3,enum=docker.swarmkit.v1.IPAMConfig_AddressFamily" json:"family,omitempty"` // Subnet defines a network as a CIDR address (ie network and mask // 192.168.0.1/24). @@ -2261,40 +3225,75 @@ type IPAMConfig struct { // Reserved is a list of address from the master pool that should *not* be // allocated. These addresses may have already been allocated or may be // reserved for another allocation manager. - Reserved map[string]string `protobuf:"bytes,5,rep,name=reserved,proto3" json:"reserved,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Reserved map[string]string `protobuf:"bytes,5,rep,name=reserved,proto3" json:"reserved,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *IPAMConfig) Reset() { + *x = IPAMConfig{} + mi := &file_api_types_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *IPAMConfig) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *IPAMConfig) Reset() { *m = IPAMConfig{} } func (*IPAMConfig) ProtoMessage() {} -func (*IPAMConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{25} -} -func (m *IPAMConfig) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *IPAMConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_IPAMConfig.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *IPAMConfig) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[25] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use IPAMConfig.ProtoReflect.Descriptor instead. +func (*IPAMConfig) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{25} +} + +func (x *IPAMConfig) GetFamily() IPAMConfig_AddressFamily { + if x != nil { + return x.Family } + return IPAMConfig_UNKNOWN } -func (m *IPAMConfig) XXX_Merge(src proto.Message) { - xxx_messageInfo_IPAMConfig.Merge(m, src) + +func (x *IPAMConfig) GetSubnet() string { + if x != nil { + return x.Subnet + } + return "" } -func (m *IPAMConfig) XXX_Size() int { - return m.Size() + +func (x *IPAMConfig) GetRange() string { + if x != nil { + return x.Range + } + return "" } -func (m *IPAMConfig) XXX_DiscardUnknown() { - xxx_messageInfo_IPAMConfig.DiscardUnknown(m) + +func (x *IPAMConfig) GetGateway() string { + if x != nil { + return x.Gateway + } + return "" } -var xxx_messageInfo_IPAMConfig proto.InternalMessageInfo +func (x *IPAMConfig) GetReserved() map[string]string { + if x != nil { + return x.Reserved + } + return nil +} // PortConfig specifies an exposed port which can be // addressed using the given name. This can be later queried @@ -2303,6 +3302,7 @@ var xxx_messageInfo_IPAMConfig proto.InternalMessageInfo // service external to the cluster by sending a connection // request to this port to any node on the cluster. type PortConfig struct { + state protoimpl.MessageState `protogen:"open.v1"` // Name for the port. If provided the port information can // be queried using the name as in a DNS SRV query. Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` @@ -2315,404 +3315,469 @@ type PortConfig struct { // (value is zero), an available port is automatically assigned. PublishedPort uint32 `protobuf:"varint,4,opt,name=published_port,json=publishedPort,proto3" json:"published_port,omitempty"` // PublishMode controls how the port is published. - PublishMode PortConfig_PublishMode `protobuf:"varint,5,opt,name=publish_mode,json=publishMode,proto3,enum=docker.swarmkit.v1.PortConfig_PublishMode" json:"publish_mode,omitempty"` + PublishMode PublishMode `protobuf:"varint,5,opt,name=publish_mode,json=publishMode,proto3,enum=docker.swarmkit.v1.PortConfig_PublishMode" json:"publish_mode,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PortConfig) Reset() { + *x = PortConfig{} + mi := &file_api_types_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PortConfig) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *PortConfig) Reset() { *m = PortConfig{} } func (*PortConfig) ProtoMessage() {} -func (*PortConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{26} -} -func (m *PortConfig) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *PortConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_PortConfig.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *PortConfig) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[26] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PortConfig.ProtoReflect.Descriptor instead. +func (*PortConfig) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{26} +} + +func (x *PortConfig) GetName() string { + if x != nil { + return x.Name } + return "" } -func (m *PortConfig) XXX_Merge(src proto.Message) { - xxx_messageInfo_PortConfig.Merge(m, src) + +func (x *PortConfig) GetProtocol() PortConfig_Protocol { + if x != nil { + return x.Protocol + } + return ProtocolTCP } -func (m *PortConfig) XXX_Size() int { - return m.Size() + +func (x *PortConfig) GetTargetPort() uint32 { + if x != nil { + return x.TargetPort + } + return 0 } -func (m *PortConfig) XXX_DiscardUnknown() { - xxx_messageInfo_PortConfig.DiscardUnknown(m) + +func (x *PortConfig) GetPublishedPort() uint32 { + if x != nil { + return x.PublishedPort + } + return 0 } -var xxx_messageInfo_PortConfig proto.InternalMessageInfo +func (x *PortConfig) GetPublishMode() PublishMode { + if x != nil { + return x.PublishMode + } + return PublishModeIngress +} // Driver is a generic driver type to be used throughout the API. For now, a // driver is simply a name and set of options. The field contents depend on the // target use case and driver application. For example, a network driver may // have different rules than a volume driver. type Driver struct { - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Options map[string]string `protobuf:"bytes,2,rep,name=options,proto3" json:"options,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Options map[string]string `protobuf:"bytes,2,rep,name=options,proto3" json:"options,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Driver) Reset() { + *x = Driver{} + mi := &file_api_types_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Driver) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Driver) Reset() { *m = Driver{} } func (*Driver) ProtoMessage() {} -func (*Driver) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{27} -} -func (m *Driver) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Driver) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_Driver.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *Driver) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[27] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *Driver) XXX_Merge(src proto.Message) { - xxx_messageInfo_Driver.Merge(m, src) -} -func (m *Driver) XXX_Size() int { - return m.Size() + +// Deprecated: Use Driver.ProtoReflect.Descriptor instead. +func (*Driver) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{27} } -func (m *Driver) XXX_DiscardUnknown() { - xxx_messageInfo_Driver.DiscardUnknown(m) + +func (x *Driver) GetName() string { + if x != nil { + return x.Name + } + return "" } -var xxx_messageInfo_Driver proto.InternalMessageInfo +func (x *Driver) GetOptions() map[string]string { + if x != nil { + return x.Options + } + return nil +} type IPAMOptions struct { - Driver *Driver `protobuf:"bytes,1,opt,name=driver,proto3" json:"driver,omitempty"` - Configs []*IPAMConfig `protobuf:"bytes,3,rep,name=configs,proto3" json:"configs,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Driver *Driver `protobuf:"bytes,1,opt,name=driver,proto3" json:"driver,omitempty"` + Configs []*IPAMConfig `protobuf:"bytes,3,rep,name=configs,proto3" json:"configs,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *IPAMOptions) Reset() { + *x = IPAMOptions{} + mi := &file_api_types_proto_msgTypes[28] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *IPAMOptions) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *IPAMOptions) Reset() { *m = IPAMOptions{} } func (*IPAMOptions) ProtoMessage() {} -func (*IPAMOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{28} -} -func (m *IPAMOptions) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *IPAMOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_IPAMOptions.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *IPAMOptions) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[28] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *IPAMOptions) XXX_Merge(src proto.Message) { - xxx_messageInfo_IPAMOptions.Merge(m, src) -} -func (m *IPAMOptions) XXX_Size() int { - return m.Size() + +// Deprecated: Use IPAMOptions.ProtoReflect.Descriptor instead. +func (*IPAMOptions) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{28} } -func (m *IPAMOptions) XXX_DiscardUnknown() { - xxx_messageInfo_IPAMOptions.DiscardUnknown(m) + +func (x *IPAMOptions) GetDriver() *Driver { + if x != nil { + return x.Driver + } + return nil } -var xxx_messageInfo_IPAMOptions proto.InternalMessageInfo +func (x *IPAMOptions) GetConfigs() []*IPAMConfig { + if x != nil { + return x.Configs + } + return nil +} // Peer should be used anywhere where we are describing a remote peer. type Peer struct { - NodeID string `protobuf:"bytes,1,opt,name=node_id,json=nodeId,proto3" json:"node_id,omitempty"` - Addr string `protobuf:"bytes,2,opt,name=addr,proto3" json:"addr,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + NodeID string `protobuf:"bytes,1,opt,name=node_id,json=nodeId,proto3" json:"node_id,omitempty"` + Addr string `protobuf:"bytes,2,opt,name=addr,proto3" json:"addr,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Peer) Reset() { + *x = Peer{} + mi := &file_api_types_proto_msgTypes[29] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Peer) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Peer) Reset() { *m = Peer{} } func (*Peer) ProtoMessage() {} -func (*Peer) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{29} -} -func (m *Peer) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Peer) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_Peer.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *Peer) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[29] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *Peer) XXX_Merge(src proto.Message) { - xxx_messageInfo_Peer.Merge(m, src) -} -func (m *Peer) XXX_Size() int { - return m.Size() + +// Deprecated: Use Peer.ProtoReflect.Descriptor instead. +func (*Peer) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{29} } -func (m *Peer) XXX_DiscardUnknown() { - xxx_messageInfo_Peer.DiscardUnknown(m) + +func (x *Peer) GetNodeID() string { + if x != nil { + return x.NodeID + } + return "" } -var xxx_messageInfo_Peer proto.InternalMessageInfo +func (x *Peer) GetAddr() string { + if x != nil { + return x.Addr + } + return "" +} // WeightedPeer should be used anywhere where we are describing a remote peer // with a weight. type WeightedPeer struct { - Peer *Peer `protobuf:"bytes,1,opt,name=peer,proto3" json:"peer,omitempty"` - Weight int64 `protobuf:"varint,2,opt,name=weight,proto3" json:"weight,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Peer *Peer `protobuf:"bytes,1,opt,name=peer,proto3" json:"peer,omitempty"` + Weight int64 `protobuf:"varint,2,opt,name=weight,proto3" json:"weight,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *WeightedPeer) Reset() { + *x = WeightedPeer{} + mi := &file_api_types_proto_msgTypes[30] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *WeightedPeer) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *WeightedPeer) Reset() { *m = WeightedPeer{} } func (*WeightedPeer) ProtoMessage() {} -func (*WeightedPeer) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{30} -} -func (m *WeightedPeer) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *WeightedPeer) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_WeightedPeer.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *WeightedPeer) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[30] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *WeightedPeer) XXX_Merge(src proto.Message) { - xxx_messageInfo_WeightedPeer.Merge(m, src) -} -func (m *WeightedPeer) XXX_Size() int { - return m.Size() + +// Deprecated: Use WeightedPeer.ProtoReflect.Descriptor instead. +func (*WeightedPeer) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{30} } -func (m *WeightedPeer) XXX_DiscardUnknown() { - xxx_messageInfo_WeightedPeer.DiscardUnknown(m) + +func (x *WeightedPeer) GetPeer() *Peer { + if x != nil { + return x.Peer + } + return nil } -var xxx_messageInfo_WeightedPeer proto.InternalMessageInfo +func (x *WeightedPeer) GetWeight() int64 { + if x != nil { + return x.Weight + } + return 0 +} type IssuanceStatus struct { - State IssuanceStatus_State `protobuf:"varint,1,opt,name=state,proto3,enum=docker.swarmkit.v1.IssuanceStatus_State" json:"state,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + State IssuanceStatus_State `protobuf:"varint,1,opt,name=state,proto3,enum=docker.swarmkit.v1.IssuanceStatus_State" json:"state,omitempty"` // Err is set if the Certificate Issuance is in an error state. // The following states should report a companion error: // // FAILED - Err string `protobuf:"bytes,2,opt,name=err,proto3" json:"err,omitempty"` + Err string `protobuf:"bytes,2,opt,name=err,proto3" json:"err,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *IssuanceStatus) Reset() { *m = IssuanceStatus{} } -func (*IssuanceStatus) ProtoMessage() {} -func (*IssuanceStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{31} -} -func (m *IssuanceStatus) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *IssuanceStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_IssuanceStatus.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 *IssuanceStatus) XXX_Merge(src proto.Message) { - xxx_messageInfo_IssuanceStatus.Merge(m, src) -} -func (m *IssuanceStatus) XXX_Size() int { - return m.Size() -} -func (m *IssuanceStatus) XXX_DiscardUnknown() { - xxx_messageInfo_IssuanceStatus.DiscardUnknown(m) +func (x *IssuanceStatus) Reset() { + *x = IssuanceStatus{} + mi := &file_api_types_proto_msgTypes[31] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -var xxx_messageInfo_IssuanceStatus proto.InternalMessageInfo - -type AcceptancePolicy struct { - Policies []*AcceptancePolicy_RoleAdmissionPolicy `protobuf:"bytes,1,rep,name=policies,proto3" json:"policies,omitempty"` +func (x *IssuanceStatus) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *AcceptancePolicy) Reset() { *m = AcceptancePolicy{} } -func (*AcceptancePolicy) ProtoMessage() {} -func (*AcceptancePolicy) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{32} -} -func (m *AcceptancePolicy) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *AcceptancePolicy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_AcceptancePolicy.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err +func (*IssuanceStatus) ProtoMessage() {} + +func (x *IssuanceStatus) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[31] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *AcceptancePolicy) XXX_Merge(src proto.Message) { - xxx_messageInfo_AcceptancePolicy.Merge(m, src) -} -func (m *AcceptancePolicy) XXX_Size() int { - return m.Size() -} -func (m *AcceptancePolicy) XXX_DiscardUnknown() { - xxx_messageInfo_AcceptancePolicy.DiscardUnknown(m) -} - -var xxx_messageInfo_AcceptancePolicy proto.InternalMessageInfo -type AcceptancePolicy_RoleAdmissionPolicy struct { - Role NodeRole `protobuf:"varint,1,opt,name=role,proto3,enum=docker.swarmkit.v1.NodeRole" json:"role,omitempty"` - // Autoaccept controls which roles' certificates are automatically - // issued without administrator intervention. - Autoaccept bool `protobuf:"varint,2,opt,name=autoaccept,proto3" json:"autoaccept,omitempty"` - // Secret represents a user-provided string that is necessary for new - // nodes to join the cluster - Secret *AcceptancePolicy_RoleAdmissionPolicy_Secret `protobuf:"bytes,3,opt,name=secret,proto3" json:"secret,omitempty"` +// Deprecated: Use IssuanceStatus.ProtoReflect.Descriptor instead. +func (*IssuanceStatus) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{31} } -func (m *AcceptancePolicy_RoleAdmissionPolicy) Reset() { *m = AcceptancePolicy_RoleAdmissionPolicy{} } -func (*AcceptancePolicy_RoleAdmissionPolicy) ProtoMessage() {} -func (*AcceptancePolicy_RoleAdmissionPolicy) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{32, 0} -} -func (m *AcceptancePolicy_RoleAdmissionPolicy) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *AcceptancePolicy_RoleAdmissionPolicy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_AcceptancePolicy_RoleAdmissionPolicy.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 (x *IssuanceStatus) GetState() IssuanceStatus_State { + if x != nil { + return x.State } + return IssuanceStateUnknown } -func (m *AcceptancePolicy_RoleAdmissionPolicy) XXX_Merge(src proto.Message) { - xxx_messageInfo_AcceptancePolicy_RoleAdmissionPolicy.Merge(m, src) -} -func (m *AcceptancePolicy_RoleAdmissionPolicy) XXX_Size() int { - return m.Size() -} -func (m *AcceptancePolicy_RoleAdmissionPolicy) XXX_DiscardUnknown() { - xxx_messageInfo_AcceptancePolicy_RoleAdmissionPolicy.DiscardUnknown(m) + +func (x *IssuanceStatus) GetErr() string { + if x != nil { + return x.Err + } + return "" } -var xxx_messageInfo_AcceptancePolicy_RoleAdmissionPolicy proto.InternalMessageInfo +type AcceptancePolicy struct { + state protoimpl.MessageState `protogen:"open.v1"` + Policies []*AcceptancePolicy_RoleAdmissionPolicy `protobuf:"bytes,1,rep,name=policies,proto3" json:"policies,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} -type AcceptancePolicy_RoleAdmissionPolicy_Secret struct { - // The actual content (possibly hashed) - Data []byte `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` - // The type of hash we are using, or "plaintext" - Alg string `protobuf:"bytes,2,opt,name=alg,proto3" json:"alg,omitempty"` +func (x *AcceptancePolicy) Reset() { + *x = AcceptancePolicy{} + mi := &file_api_types_proto_msgTypes[32] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *AcceptancePolicy_RoleAdmissionPolicy_Secret) Reset() { - *m = AcceptancePolicy_RoleAdmissionPolicy_Secret{} +func (x *AcceptancePolicy) String() string { + return protoimpl.X.MessageStringOf(x) } -func (*AcceptancePolicy_RoleAdmissionPolicy_Secret) ProtoMessage() {} -func (*AcceptancePolicy_RoleAdmissionPolicy_Secret) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{32, 0, 0} -} -func (m *AcceptancePolicy_RoleAdmissionPolicy_Secret) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *AcceptancePolicy_RoleAdmissionPolicy_Secret) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_AcceptancePolicy_RoleAdmissionPolicy_Secret.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (*AcceptancePolicy) ProtoMessage() {} + +func (x *AcceptancePolicy) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[32] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *AcceptancePolicy_RoleAdmissionPolicy_Secret) XXX_Merge(src proto.Message) { - xxx_messageInfo_AcceptancePolicy_RoleAdmissionPolicy_Secret.Merge(m, src) -} -func (m *AcceptancePolicy_RoleAdmissionPolicy_Secret) XXX_Size() int { - return m.Size() -} -func (m *AcceptancePolicy_RoleAdmissionPolicy_Secret) XXX_DiscardUnknown() { - xxx_messageInfo_AcceptancePolicy_RoleAdmissionPolicy_Secret.DiscardUnknown(m) + +// Deprecated: Use AcceptancePolicy.ProtoReflect.Descriptor instead. +func (*AcceptancePolicy) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{32} } -var xxx_messageInfo_AcceptancePolicy_RoleAdmissionPolicy_Secret proto.InternalMessageInfo +func (x *AcceptancePolicy) GetPolicies() []*AcceptancePolicy_RoleAdmissionPolicy { + if x != nil { + return x.Policies + } + return nil +} type ExternalCA struct { + state protoimpl.MessageState `protogen:"open.v1"` // Protocol is the protocol used by this external CA. Protocol ExternalCA_CAProtocol `protobuf:"varint,1,opt,name=protocol,proto3,enum=docker.swarmkit.v1.ExternalCA_CAProtocol" json:"protocol,omitempty"` // URL is the URL where the external CA can be reached. URL string `protobuf:"bytes,2,opt,name=url,proto3" json:"url,omitempty"` // Options is a set of additional key/value pairs whose interpretation // depends on the specified CA type. - Options map[string]string `protobuf:"bytes,3,rep,name=options,proto3" json:"options,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Options map[string]string `protobuf:"bytes,3,rep,name=options,proto3" json:"options,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // CACert specifies which root CA is used by this external CA - CACert []byte `protobuf:"bytes,4,opt,name=ca_cert,json=caCert,proto3" json:"ca_cert,omitempty"` + CACert []byte `protobuf:"bytes,4,opt,name=ca_cert,json=caCert,proto3" json:"ca_cert,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ExternalCA) Reset() { + *x = ExternalCA{} + mi := &file_api_types_proto_msgTypes[33] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ExternalCA) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ExternalCA) Reset() { *m = ExternalCA{} } func (*ExternalCA) ProtoMessage() {} -func (*ExternalCA) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{33} -} -func (m *ExternalCA) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ExternalCA) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ExternalCA.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *ExternalCA) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[33] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) +} + +// Deprecated: Use ExternalCA.ProtoReflect.Descriptor instead. +func (*ExternalCA) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{33} } -func (m *ExternalCA) XXX_Merge(src proto.Message) { - xxx_messageInfo_ExternalCA.Merge(m, src) + +func (x *ExternalCA) GetProtocol() ExternalCA_CAProtocol { + if x != nil { + return x.Protocol + } + return CAProtocolCFSSL } -func (m *ExternalCA) XXX_Size() int { - return m.Size() + +func (x *ExternalCA) GetURL() string { + if x != nil { + return x.URL + } + return "" } -func (m *ExternalCA) XXX_DiscardUnknown() { - xxx_messageInfo_ExternalCA.DiscardUnknown(m) + +func (x *ExternalCA) GetOptions() map[string]string { + if x != nil { + return x.Options + } + return nil } -var xxx_messageInfo_ExternalCA proto.InternalMessageInfo +func (x *ExternalCA) GetCACert() []byte { + if x != nil { + return x.CACert + } + return nil +} type CAConfig struct { + state protoimpl.MessageState `protogen:"open.v1"` // NodeCertExpiry is the duration certificates should be issued for // Note: can't use stdduration because this field needs to be nullable. - NodeCertExpiry *types.Duration `protobuf:"bytes,1,opt,name=node_cert_expiry,json=nodeCertExpiry,proto3" json:"node_cert_expiry,omitempty"` + NodeCertExpiry *durationpb.Duration `protobuf:"bytes,1,opt,name=node_cert_expiry,json=nodeCertExpiry,proto3" json:"node_cert_expiry,omitempty"` // ExternalCAs is a list of CAs to which a manager node will make // certificate signing requests for node certificates. ExternalCAs []*ExternalCA `protobuf:"bytes,2,rep,name=external_cas,json=externalCas,proto3" json:"external_cas,omitempty"` @@ -2727,164 +3792,224 @@ type CAConfig struct { // ForceRotate is a counter that triggers a root CA rotation even if no relevant // parameters have been in the spec. This will force the manager to generate a new // certificate and key, if none have been provided. - ForceRotate uint64 `protobuf:"varint,5,opt,name=force_rotate,json=forceRotate,proto3" json:"force_rotate,omitempty"` + ForceRotate uint64 `protobuf:"varint,5,opt,name=force_rotate,json=forceRotate,proto3" json:"force_rotate,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *CAConfig) Reset() { + *x = CAConfig{} + mi := &file_api_types_proto_msgTypes[34] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CAConfig) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *CAConfig) Reset() { *m = CAConfig{} } func (*CAConfig) ProtoMessage() {} -func (*CAConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{34} -} -func (m *CAConfig) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *CAConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_CAConfig.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *CAConfig) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[34] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CAConfig.ProtoReflect.Descriptor instead. +func (*CAConfig) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{34} +} + +func (x *CAConfig) GetNodeCertExpiry() *durationpb.Duration { + if x != nil { + return x.NodeCertExpiry } + return nil } -func (m *CAConfig) XXX_Merge(src proto.Message) { - xxx_messageInfo_CAConfig.Merge(m, src) + +func (x *CAConfig) GetExternalCAs() []*ExternalCA { + if x != nil { + return x.ExternalCAs + } + return nil } -func (m *CAConfig) XXX_Size() int { - return m.Size() + +func (x *CAConfig) GetSigningCACert() []byte { + if x != nil { + return x.SigningCACert + } + return nil } -func (m *CAConfig) XXX_DiscardUnknown() { - xxx_messageInfo_CAConfig.DiscardUnknown(m) + +func (x *CAConfig) GetSigningCAKey() []byte { + if x != nil { + return x.SigningCAKey + } + return nil } -var xxx_messageInfo_CAConfig proto.InternalMessageInfo +func (x *CAConfig) GetForceRotate() uint64 { + if x != nil { + return x.ForceRotate + } + return 0 +} // OrchestrationConfig defines cluster-level orchestration settings. type OrchestrationConfig struct { + state protoimpl.MessageState `protogen:"open.v1"` // TaskHistoryRetentionLimit is the number of historic tasks to keep per instance or // node. If negative, never remove completed or failed tasks. TaskHistoryRetentionLimit int64 `protobuf:"varint,1,opt,name=task_history_retention_limit,json=taskHistoryRetentionLimit,proto3" json:"task_history_retention_limit,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *OrchestrationConfig) Reset() { + *x = OrchestrationConfig{} + mi := &file_api_types_proto_msgTypes[35] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *OrchestrationConfig) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *OrchestrationConfig) Reset() { *m = OrchestrationConfig{} } func (*OrchestrationConfig) ProtoMessage() {} -func (*OrchestrationConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{35} -} -func (m *OrchestrationConfig) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *OrchestrationConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_OrchestrationConfig.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *OrchestrationConfig) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[35] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *OrchestrationConfig) XXX_Merge(src proto.Message) { - xxx_messageInfo_OrchestrationConfig.Merge(m, src) -} -func (m *OrchestrationConfig) XXX_Size() int { - return m.Size() -} -func (m *OrchestrationConfig) XXX_DiscardUnknown() { - xxx_messageInfo_OrchestrationConfig.DiscardUnknown(m) + +// Deprecated: Use OrchestrationConfig.ProtoReflect.Descriptor instead. +func (*OrchestrationConfig) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{35} } -var xxx_messageInfo_OrchestrationConfig proto.InternalMessageInfo +func (x *OrchestrationConfig) GetTaskHistoryRetentionLimit() int64 { + if x != nil { + return x.TaskHistoryRetentionLimit + } + return 0 +} // TaskDefaults specifies default values for task creation. type TaskDefaults struct { + state protoimpl.MessageState `protogen:"open.v1"` // LogDriver specifies the log driver to use for the cluster if not // specified for each task. // // If this is changed, only new tasks will pick up the new log driver. // Existing tasks will continue to use the previous default until rescheduled. - LogDriver *Driver `protobuf:"bytes,1,opt,name=log_driver,json=logDriver,proto3" json:"log_driver,omitempty"` + LogDriver *Driver `protobuf:"bytes,1,opt,name=log_driver,json=logDriver,proto3" json:"log_driver,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *TaskDefaults) Reset() { + *x = TaskDefaults{} + mi := &file_api_types_proto_msgTypes[36] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *TaskDefaults) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *TaskDefaults) Reset() { *m = TaskDefaults{} } func (*TaskDefaults) ProtoMessage() {} -func (*TaskDefaults) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{36} -} -func (m *TaskDefaults) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *TaskDefaults) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_TaskDefaults.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *TaskDefaults) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[36] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *TaskDefaults) XXX_Merge(src proto.Message) { - xxx_messageInfo_TaskDefaults.Merge(m, src) -} -func (m *TaskDefaults) XXX_Size() int { - return m.Size() -} -func (m *TaskDefaults) XXX_DiscardUnknown() { - xxx_messageInfo_TaskDefaults.DiscardUnknown(m) + +// Deprecated: Use TaskDefaults.ProtoReflect.Descriptor instead. +func (*TaskDefaults) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{36} } -var xxx_messageInfo_TaskDefaults proto.InternalMessageInfo +func (x *TaskDefaults) GetLogDriver() *Driver { + if x != nil { + return x.LogDriver + } + return nil +} // DispatcherConfig defines cluster-level dispatcher settings. type DispatcherConfig struct { + state protoimpl.MessageState `protogen:"open.v1"` // HeartbeatPeriod defines how often agent should send heartbeats to // dispatcher. // Note: can't use stdduration because this field needs to be nullable. - HeartbeatPeriod *types.Duration `protobuf:"bytes,1,opt,name=heartbeat_period,json=heartbeatPeriod,proto3" json:"heartbeat_period,omitempty"` + HeartbeatPeriod *durationpb.Duration `protobuf:"bytes,1,opt,name=heartbeat_period,json=heartbeatPeriod,proto3" json:"heartbeat_period,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DispatcherConfig) Reset() { + *x = DispatcherConfig{} + mi := &file_api_types_proto_msgTypes[37] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DispatcherConfig) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *DispatcherConfig) Reset() { *m = DispatcherConfig{} } func (*DispatcherConfig) ProtoMessage() {} -func (*DispatcherConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{37} -} -func (m *DispatcherConfig) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *DispatcherConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_DispatcherConfig.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *DispatcherConfig) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[37] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *DispatcherConfig) XXX_Merge(src proto.Message) { - xxx_messageInfo_DispatcherConfig.Merge(m, src) -} -func (m *DispatcherConfig) XXX_Size() int { - return m.Size() -} -func (m *DispatcherConfig) XXX_DiscardUnknown() { - xxx_messageInfo_DispatcherConfig.DiscardUnknown(m) + +// Deprecated: Use DispatcherConfig.ProtoReflect.Descriptor instead. +func (*DispatcherConfig) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{37} } -var xxx_messageInfo_DispatcherConfig proto.InternalMessageInfo +func (x *DispatcherConfig) GetHeartbeatPeriod() *durationpb.Duration { + if x != nil { + return x.HeartbeatPeriod + } + return nil +} // RaftConfig defines raft settings for the cluster. type RaftConfig struct { + state protoimpl.MessageState `protogen:"open.v1"` // SnapshotInterval is the number of log entries between snapshots. SnapshotInterval uint64 `protobuf:"varint,1,opt,name=snapshot_interval,json=snapshotInterval,proto3" json:"snapshot_interval,omitempty"` // KeepOldSnapshots is the number of snapshots to keep beyond the @@ -2898,190 +4023,236 @@ type RaftConfig struct { HeartbeatTick uint32 `protobuf:"varint,4,opt,name=heartbeat_tick,json=heartbeatTick,proto3" json:"heartbeat_tick,omitempty"` // ElectionTick defines the amount of ticks (in seconds) needed // without a leader to trigger a new election. - ElectionTick uint32 `protobuf:"varint,5,opt,name=election_tick,json=electionTick,proto3" json:"election_tick,omitempty"` + ElectionTick uint32 `protobuf:"varint,5,opt,name=election_tick,json=electionTick,proto3" json:"election_tick,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RaftConfig) Reset() { + *x = RaftConfig{} + mi := &file_api_types_proto_msgTypes[38] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RaftConfig) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *RaftConfig) Reset() { *m = RaftConfig{} } func (*RaftConfig) ProtoMessage() {} -func (*RaftConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{38} -} -func (m *RaftConfig) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *RaftConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_RaftConfig.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *RaftConfig) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[38] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RaftConfig.ProtoReflect.Descriptor instead. +func (*RaftConfig) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{38} +} + +func (x *RaftConfig) GetSnapshotInterval() uint64 { + if x != nil { + return x.SnapshotInterval } + return 0 } -func (m *RaftConfig) XXX_Merge(src proto.Message) { - xxx_messageInfo_RaftConfig.Merge(m, src) + +func (x *RaftConfig) GetKeepOldSnapshots() uint64 { + if x != nil { + return x.KeepOldSnapshots + } + return 0 } -func (m *RaftConfig) XXX_Size() int { - return m.Size() + +func (x *RaftConfig) GetLogEntriesForSlowFollowers() uint64 { + if x != nil { + return x.LogEntriesForSlowFollowers + } + return 0 } -func (m *RaftConfig) XXX_DiscardUnknown() { - xxx_messageInfo_RaftConfig.DiscardUnknown(m) + +func (x *RaftConfig) GetHeartbeatTick() uint32 { + if x != nil { + return x.HeartbeatTick + } + return 0 } -var xxx_messageInfo_RaftConfig proto.InternalMessageInfo +func (x *RaftConfig) GetElectionTick() uint32 { + if x != nil { + return x.ElectionTick + } + return 0 +} type EncryptionConfig struct { + state protoimpl.MessageState `protogen:"open.v1"` // AutoLockManagers specifies whether or not managers TLS keys and raft data // should be encrypted at rest in such a way that they must be unlocked // before the manager node starts up again. AutoLockManagers bool `protobuf:"varint,1,opt,name=auto_lock_managers,json=autoLockManagers,proto3" json:"auto_lock_managers,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *EncryptionConfig) Reset() { + *x = EncryptionConfig{} + mi := &file_api_types_proto_msgTypes[39] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *EncryptionConfig) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *EncryptionConfig) Reset() { *m = EncryptionConfig{} } func (*EncryptionConfig) ProtoMessage() {} -func (*EncryptionConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{39} -} -func (m *EncryptionConfig) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *EncryptionConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_EncryptionConfig.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *EncryptionConfig) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[39] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *EncryptionConfig) XXX_Merge(src proto.Message) { - xxx_messageInfo_EncryptionConfig.Merge(m, src) + +// Deprecated: Use EncryptionConfig.ProtoReflect.Descriptor instead. +func (*EncryptionConfig) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{39} } -func (m *EncryptionConfig) XXX_Size() int { - return m.Size() + +func (x *EncryptionConfig) GetAutoLockManagers() bool { + if x != nil { + return x.AutoLockManagers + } + return false } -func (m *EncryptionConfig) XXX_DiscardUnknown() { - xxx_messageInfo_EncryptionConfig.DiscardUnknown(m) + +type SpreadOver struct { + state protoimpl.MessageState `protogen:"open.v1"` + SpreadDescriptor string `protobuf:"bytes,1,opt,name=spread_descriptor,json=spreadDescriptor,proto3" json:"spread_descriptor,omitempty"` // label descriptor, such as engine.labels.az + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -var xxx_messageInfo_EncryptionConfig proto.InternalMessageInfo +func (x *SpreadOver) Reset() { + *x = SpreadOver{} + mi := &file_api_types_proto_msgTypes[40] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} -type SpreadOver struct { - SpreadDescriptor string `protobuf:"bytes,1,opt,name=spread_descriptor,json=spreadDescriptor,proto3" json:"spread_descriptor,omitempty"` +func (x *SpreadOver) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *SpreadOver) Reset() { *m = SpreadOver{} } func (*SpreadOver) ProtoMessage() {} -func (*SpreadOver) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{40} -} -func (m *SpreadOver) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *SpreadOver) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_SpreadOver.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *SpreadOver) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[40] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *SpreadOver) XXX_Merge(src proto.Message) { - xxx_messageInfo_SpreadOver.Merge(m, src) -} -func (m *SpreadOver) XXX_Size() int { - return m.Size() -} -func (m *SpreadOver) XXX_DiscardUnknown() { - xxx_messageInfo_SpreadOver.DiscardUnknown(m) + +// Deprecated: Use SpreadOver.ProtoReflect.Descriptor instead. +func (*SpreadOver) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{40} } -var xxx_messageInfo_SpreadOver proto.InternalMessageInfo +func (x *SpreadOver) GetSpreadDescriptor() string { + if x != nil { + return x.SpreadDescriptor + } + return "" +} type PlacementPreference struct { + state protoimpl.MessageState `protogen:"open.v1"` // Types that are valid to be assigned to Preference: // // *PlacementPreference_Spread - Preference isPlacementPreference_Preference `protobuf_oneof:"Preference"` + Preference isPlacementPreference_Preference `protobuf_oneof:"Preference"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *PlacementPreference) Reset() { *m = PlacementPreference{} } -func (*PlacementPreference) ProtoMessage() {} -func (*PlacementPreference) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{41} -} -func (m *PlacementPreference) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *PlacementPreference) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_PlacementPreference.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 *PlacementPreference) XXX_Merge(src proto.Message) { - xxx_messageInfo_PlacementPreference.Merge(m, src) -} -func (m *PlacementPreference) XXX_Size() int { - return m.Size() +func (x *PlacementPreference) Reset() { + *x = PlacementPreference{} + mi := &file_api_types_proto_msgTypes[41] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *PlacementPreference) XXX_DiscardUnknown() { - xxx_messageInfo_PlacementPreference.DiscardUnknown(m) + +func (x *PlacementPreference) String() string { + return protoimpl.X.MessageStringOf(x) } -var xxx_messageInfo_PlacementPreference proto.InternalMessageInfo +func (*PlacementPreference) ProtoMessage() {} -type isPlacementPreference_Preference interface { - isPlacementPreference_Preference() - MarshalTo([]byte) (int, error) - Size() int +func (x *PlacementPreference) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[41] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -type PlacementPreference_Spread struct { - Spread *SpreadOver `protobuf:"bytes,1,opt,name=spread,proto3,oneof" json:"spread,omitempty"` +// Deprecated: Use PlacementPreference.ProtoReflect.Descriptor instead. +func (*PlacementPreference) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{41} } -func (*PlacementPreference_Spread) isPlacementPreference_Preference() {} - -func (m *PlacementPreference) GetPreference() isPlacementPreference_Preference { - if m != nil { - return m.Preference +func (x *PlacementPreference) GetPreference() isPlacementPreference_Preference { + if x != nil { + return x.Preference } return nil } -func (m *PlacementPreference) GetSpread() *SpreadOver { - if x, ok := m.GetPreference().(*PlacementPreference_Spread); ok { - return x.Spread +func (x *PlacementPreference) GetSpread() *SpreadOver { + if x != nil { + if x, ok := x.Preference.(*PlacementPreference_Spread); ok { + return x.Spread + } } return nil } -// XXX_OneofWrappers is for the internal use of the proto package. -func (*PlacementPreference) XXX_OneofWrappers() []interface{} { - return []interface{}{ - (*PlacementPreference_Spread)(nil), - } +type isPlacementPreference_Preference interface { + isPlacementPreference_Preference() +} + +type PlacementPreference_Spread struct { + Spread *SpreadOver `protobuf:"bytes,1,opt,name=spread,proto3,oneof"` } +func (*PlacementPreference_Spread) isPlacementPreference_Preference() {} + // Placement specifies task distribution constraints. type Placement struct { + state protoimpl.MessageState `protogen:"open.v1"` // Constraints specifies a set of requirements a node should meet for a task. Constraints []string `protobuf:"bytes,1,rep,name=constraints,proto3" json:"constraints,omitempty"` // Preferences provide a way to make the scheduler aware of factors @@ -3093,82 +4264,126 @@ type Placement struct { // then the platform filter is off, meaning there are no scheduling restrictions. Platforms []*Platform `protobuf:"bytes,3,rep,name=platforms,proto3" json:"platforms,omitempty"` // MaxReplicas specifies the limit for maximum number of replicas running on one node. - MaxReplicas uint64 `protobuf:"varint,4,opt,name=max_replicas,json=maxReplicas,proto3" json:"max_replicas,omitempty"` + MaxReplicas uint64 `protobuf:"varint,4,opt,name=max_replicas,json=maxReplicas,proto3" json:"max_replicas,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Placement) Reset() { + *x = Placement{} + mi := &file_api_types_proto_msgTypes[42] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Placement) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Placement) Reset() { *m = Placement{} } func (*Placement) ProtoMessage() {} -func (*Placement) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{42} -} -func (m *Placement) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Placement) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_Placement.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *Placement) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[42] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) +} + +// Deprecated: Use Placement.ProtoReflect.Descriptor instead. +func (*Placement) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{42} } -func (m *Placement) XXX_Merge(src proto.Message) { - xxx_messageInfo_Placement.Merge(m, src) + +func (x *Placement) GetConstraints() []string { + if x != nil { + return x.Constraints + } + return nil } -func (m *Placement) XXX_Size() int { - return m.Size() + +func (x *Placement) GetPreferences() []*PlacementPreference { + if x != nil { + return x.Preferences + } + return nil } -func (m *Placement) XXX_DiscardUnknown() { - xxx_messageInfo_Placement.DiscardUnknown(m) + +func (x *Placement) GetPlatforms() []*Platform { + if x != nil { + return x.Platforms + } + return nil } -var xxx_messageInfo_Placement proto.InternalMessageInfo +func (x *Placement) GetMaxReplicas() uint64 { + if x != nil { + return x.MaxReplicas + } + return 0 +} // JoinToken contains the join tokens for workers and managers. type JoinTokens struct { + state protoimpl.MessageState `protogen:"open.v1"` // Worker is the join token workers may use to join the swarm. Worker string `protobuf:"bytes,1,opt,name=worker,proto3" json:"worker,omitempty"` // Manager is the join token workers may use to join the swarm. - Manager string `protobuf:"bytes,2,opt,name=manager,proto3" json:"manager,omitempty"` + Manager string `protobuf:"bytes,2,opt,name=manager,proto3" json:"manager,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *JoinTokens) Reset() { + *x = JoinTokens{} + mi := &file_api_types_proto_msgTypes[43] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *JoinTokens) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *JoinTokens) Reset() { *m = JoinTokens{} } func (*JoinTokens) ProtoMessage() {} -func (*JoinTokens) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{43} -} -func (m *JoinTokens) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *JoinTokens) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_JoinTokens.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *JoinTokens) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[43] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *JoinTokens) XXX_Merge(src proto.Message) { - xxx_messageInfo_JoinTokens.Merge(m, src) -} -func (m *JoinTokens) XXX_Size() int { - return m.Size() + +// Deprecated: Use JoinTokens.ProtoReflect.Descriptor instead. +func (*JoinTokens) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{43} } -func (m *JoinTokens) XXX_DiscardUnknown() { - xxx_messageInfo_JoinTokens.DiscardUnknown(m) + +func (x *JoinTokens) GetWorker() string { + if x != nil { + return x.Worker + } + return "" } -var xxx_messageInfo_JoinTokens proto.InternalMessageInfo +func (x *JoinTokens) GetManager() string { + if x != nil { + return x.Manager + } + return "" +} type RootCA struct { + state protoimpl.MessageState `protogen:"open.v1"` // CAKey is the root CA private key. CAKey []byte `protobuf:"bytes,1,opt,name=ca_key,json=caKey,proto3" json:"ca_key,omitempty"` // CACert is the root CA certificate. @@ -3176,90 +4391,169 @@ type RootCA struct { // CACertHash is the digest of the CA Certificate. CACertHash string `protobuf:"bytes,3,opt,name=ca_cert_hash,json=caCertHash,proto3" json:"ca_cert_hash,omitempty"` // JoinTokens contains the join tokens for workers and managers. - JoinTokens JoinTokens `protobuf:"bytes,4,opt,name=join_tokens,json=joinTokens,proto3" json:"join_tokens"` + JoinTokens *JoinTokens `protobuf:"bytes,4,opt,name=join_tokens,json=joinTokens,proto3" json:"join_tokens,omitempty"` // RootRotation contains the new root cert and key we want to rotate to - if this is nil, we are not in the // middle of a root rotation RootRotation *RootRotation `protobuf:"bytes,5,opt,name=root_rotation,json=rootRotation,proto3" json:"root_rotation,omitempty"` // LastForcedRotation matches the Cluster Spec's CAConfig's ForceRotation counter. // It indicates when the current CA cert and key were generated (or updated). LastForcedRotation uint64 `protobuf:"varint,6,opt,name=last_forced_rotation,json=lastForcedRotation,proto3" json:"last_forced_rotation,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RootCA) Reset() { + *x = RootCA{} + mi := &file_api_types_proto_msgTypes[44] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RootCA) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *RootCA) Reset() { *m = RootCA{} } func (*RootCA) ProtoMessage() {} -func (*RootCA) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{44} -} -func (m *RootCA) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *RootCA) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_RootCA.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *RootCA) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[44] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RootCA.ProtoReflect.Descriptor instead. +func (*RootCA) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{44} +} + +func (x *RootCA) GetCAKey() []byte { + if x != nil { + return x.CAKey + } + return nil +} + +func (x *RootCA) GetCACert() []byte { + if x != nil { + return x.CACert } + return nil } -func (m *RootCA) XXX_Merge(src proto.Message) { - xxx_messageInfo_RootCA.Merge(m, src) + +func (x *RootCA) GetCACertHash() string { + if x != nil { + return x.CACertHash + } + return "" } -func (m *RootCA) XXX_Size() int { - return m.Size() + +func (x *RootCA) GetJoinTokens() *JoinTokens { + if x != nil { + return x.JoinTokens + } + return nil } -func (m *RootCA) XXX_DiscardUnknown() { - xxx_messageInfo_RootCA.DiscardUnknown(m) + +func (x *RootCA) GetRootRotation() *RootRotation { + if x != nil { + return x.RootRotation + } + return nil } -var xxx_messageInfo_RootCA proto.InternalMessageInfo +func (x *RootCA) GetLastForcedRotation() uint64 { + if x != nil { + return x.LastForcedRotation + } + return 0 +} type Certificate struct { - Role NodeRole `protobuf:"varint,1,opt,name=role,proto3,enum=docker.swarmkit.v1.NodeRole" json:"role,omitempty"` - CSR []byte `protobuf:"bytes,2,opt,name=csr,proto3" json:"csr,omitempty"` - Status IssuanceStatus `protobuf:"bytes,3,opt,name=status,proto3" json:"status"` - Certificate []byte `protobuf:"bytes,4,opt,name=certificate,proto3" json:"certificate,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Role NodeRole `protobuf:"varint,1,opt,name=role,proto3,enum=docker.swarmkit.v1.NodeRole" json:"role,omitempty"` + CSR []byte `protobuf:"bytes,2,opt,name=csr,proto3" json:"csr,omitempty"` + Status *IssuanceStatus `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` + Certificate []byte `protobuf:"bytes,4,opt,name=certificate,proto3" json:"certificate,omitempty"` // CN represents the node ID. - CN string `protobuf:"bytes,5,opt,name=cn,proto3" json:"cn,omitempty"` + CN string `protobuf:"bytes,5,opt,name=cn,proto3" json:"cn,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Certificate) Reset() { + *x = Certificate{} + mi := &file_api_types_proto_msgTypes[45] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Certificate) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Certificate) Reset() { *m = Certificate{} } func (*Certificate) ProtoMessage() {} -func (*Certificate) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{45} -} -func (m *Certificate) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Certificate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_Certificate.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *Certificate) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[45] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Certificate.ProtoReflect.Descriptor instead. +func (*Certificate) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{45} +} + +func (x *Certificate) GetRole() NodeRole { + if x != nil { + return x.Role } + return NodeRoleWorker } -func (m *Certificate) XXX_Merge(src proto.Message) { - xxx_messageInfo_Certificate.Merge(m, src) + +func (x *Certificate) GetCSR() []byte { + if x != nil { + return x.CSR + } + return nil } -func (m *Certificate) XXX_Size() int { - return m.Size() + +func (x *Certificate) GetStatus() *IssuanceStatus { + if x != nil { + return x.Status + } + return nil } -func (m *Certificate) XXX_DiscardUnknown() { - xxx_messageInfo_Certificate.DiscardUnknown(m) + +func (x *Certificate) GetCertificate() []byte { + if x != nil { + return x.Certificate + } + return nil } -var xxx_messageInfo_Certificate proto.InternalMessageInfo +func (x *Certificate) GetCN() string { + if x != nil { + return x.CN + } + return "" +} // Symmetric keys to encrypt inter-agent communication. type EncryptionKey struct { + state protoimpl.MessageState `protogen:"open.v1"` // Agent subsystem the key is intended for. Example: // networking:gossip Subsystem string `protobuf:"bytes,1,opt,name=subsystem,proto3" json:"subsystem,omitempty"` @@ -3267,43 +4561,72 @@ type EncryptionKey struct { Key []byte `protobuf:"bytes,3,opt,name=key,proto3" json:"key,omitempty"` // Time stamp from the lamport clock of the key allocator to // identify the relative age of the key. - LamportTime uint64 `protobuf:"varint,4,opt,name=lamport_time,json=lamportTime,proto3" json:"lamport_time,omitempty"` + LamportTime uint64 `protobuf:"varint,4,opt,name=lamport_time,json=lamportTime,proto3" json:"lamport_time,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *EncryptionKey) Reset() { + *x = EncryptionKey{} + mi := &file_api_types_proto_msgTypes[46] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *EncryptionKey) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *EncryptionKey) Reset() { *m = EncryptionKey{} } func (*EncryptionKey) ProtoMessage() {} -func (*EncryptionKey) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{46} -} -func (m *EncryptionKey) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *EncryptionKey) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_EncryptionKey.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *EncryptionKey) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[46] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) +} + +// Deprecated: Use EncryptionKey.ProtoReflect.Descriptor instead. +func (*EncryptionKey) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{46} } -func (m *EncryptionKey) XXX_Merge(src proto.Message) { - xxx_messageInfo_EncryptionKey.Merge(m, src) + +func (x *EncryptionKey) GetSubsystem() string { + if x != nil { + return x.Subsystem + } + return "" } -func (m *EncryptionKey) XXX_Size() int { - return m.Size() + +func (x *EncryptionKey) GetAlgorithm() EncryptionKey_Algorithm { + if x != nil { + return x.Algorithm + } + return EncryptionKey_AES_128_GCM } -func (m *EncryptionKey) XXX_DiscardUnknown() { - xxx_messageInfo_EncryptionKey.DiscardUnknown(m) + +func (x *EncryptionKey) GetKey() []byte { + if x != nil { + return x.Key + } + return nil } -var xxx_messageInfo_EncryptionKey proto.InternalMessageInfo +func (x *EncryptionKey) GetLamportTime() uint64 { + if x != nil { + return x.LamportTime + } + return 0 +} // ManagerStatus provides informations about the state of a manager in the cluster. type ManagerStatus struct { + state protoimpl.MessageState `protogen:"open.v1"` // RaftID specifies the internal ID used by the manager in a raft context, it can never be modified // and is used only for information purposes RaftID uint64 `protobuf:"varint,1,opt,name=raft_id,json=raftId,proto3" json:"raft_id,omitempty"` @@ -3312,43 +4635,72 @@ type ManagerStatus struct { // Leader is set to true if this node is the raft leader. Leader bool `protobuf:"varint,3,opt,name=leader,proto3" json:"leader,omitempty"` // Reachability specifies whether this node is reachable. - Reachability RaftMemberStatus_Reachability `protobuf:"varint,4,opt,name=reachability,proto3,enum=docker.swarmkit.v1.RaftMemberStatus_Reachability" json:"reachability,omitempty"` + Reachability RaftMemberStatus_Reachability `protobuf:"varint,4,opt,name=reachability,proto3,enum=docker.swarmkit.v1.RaftMemberStatus_Reachability" json:"reachability,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ManagerStatus) Reset() { + *x = ManagerStatus{} + mi := &file_api_types_proto_msgTypes[47] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ManagerStatus) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ManagerStatus) Reset() { *m = ManagerStatus{} } func (*ManagerStatus) ProtoMessage() {} -func (*ManagerStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{47} -} -func (m *ManagerStatus) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ManagerStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ManagerStatus.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *ManagerStatus) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[47] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *ManagerStatus) XXX_Merge(src proto.Message) { - xxx_messageInfo_ManagerStatus.Merge(m, src) + +// Deprecated: Use ManagerStatus.ProtoReflect.Descriptor instead. +func (*ManagerStatus) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{47} +} + +func (x *ManagerStatus) GetRaftID() uint64 { + if x != nil { + return x.RaftID + } + return 0 } -func (m *ManagerStatus) XXX_Size() int { - return m.Size() + +func (x *ManagerStatus) GetAddr() string { + if x != nil { + return x.Addr + } + return "" } -func (m *ManagerStatus) XXX_DiscardUnknown() { - xxx_messageInfo_ManagerStatus.DiscardUnknown(m) + +func (x *ManagerStatus) GetLeader() bool { + if x != nil { + return x.Leader + } + return false } -var xxx_messageInfo_ManagerStatus proto.InternalMessageInfo +func (x *ManagerStatus) GetReachability() RaftMemberStatus_Reachability { + if x != nil { + return x.Reachability + } + return RaftMemberStatus_UNKNOWN +} // FileTarget represents a specific target that is backed by a file type FileTarget struct { + state protoimpl.MessageState `protogen:"open.v1"` // Name represents the final filename in the filesystem Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // UID represents the file UID @@ -3356,82 +4708,112 @@ type FileTarget struct { // GID represents the file GID GID string `protobuf:"bytes,3,opt,name=gid,proto3" json:"gid,omitempty"` // Mode represents the FileMode of the file - Mode os.FileMode `protobuf:"varint,4,opt,name=mode,proto3,customtype=os.FileMode" json:"mode"` + Mode uint32 `protobuf:"varint,4,opt,name=mode,proto3" json:"mode,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *FileTarget) Reset() { + *x = FileTarget{} + mi := &file_api_types_proto_msgTypes[48] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *FileTarget) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *FileTarget) Reset() { *m = FileTarget{} } func (*FileTarget) ProtoMessage() {} -func (*FileTarget) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{48} -} -func (m *FileTarget) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *FileTarget) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_FileTarget.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *FileTarget) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[48] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) +} + +// Deprecated: Use FileTarget.ProtoReflect.Descriptor instead. +func (*FileTarget) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{48} } -func (m *FileTarget) XXX_Merge(src proto.Message) { - xxx_messageInfo_FileTarget.Merge(m, src) + +func (x *FileTarget) GetName() string { + if x != nil { + return x.Name + } + return "" } -func (m *FileTarget) XXX_Size() int { - return m.Size() + +func (x *FileTarget) GetUID() string { + if x != nil { + return x.UID + } + return "" } -func (m *FileTarget) XXX_DiscardUnknown() { - xxx_messageInfo_FileTarget.DiscardUnknown(m) + +func (x *FileTarget) GetGID() string { + if x != nil { + return x.GID + } + return "" } -var xxx_messageInfo_FileTarget proto.InternalMessageInfo +func (x *FileTarget) GetMode() uint32 { + if x != nil { + return x.Mode + } + return 0 +} // RuntimeTarget represents that this secret is _not_ mounted into the // container, but is used for some other purpose by the container runtime. // // Currently, RuntimeTarget has no fields; it's just a placeholder. type RuntimeTarget struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RuntimeTarget) Reset() { + *x = RuntimeTarget{} + mi := &file_api_types_proto_msgTypes[49] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RuntimeTarget) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *RuntimeTarget) Reset() { *m = RuntimeTarget{} } func (*RuntimeTarget) ProtoMessage() {} -func (*RuntimeTarget) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{49} -} -func (m *RuntimeTarget) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *RuntimeTarget) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_RuntimeTarget.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *RuntimeTarget) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[49] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } -} -func (m *RuntimeTarget) XXX_Merge(src proto.Message) { - xxx_messageInfo_RuntimeTarget.Merge(m, src) -} -func (m *RuntimeTarget) XXX_Size() int { - return m.Size() -} -func (m *RuntimeTarget) XXX_DiscardUnknown() { - xxx_messageInfo_RuntimeTarget.DiscardUnknown(m) + return mi.MessageOf(x) } -var xxx_messageInfo_RuntimeTarget proto.InternalMessageInfo +// Deprecated: Use RuntimeTarget.ProtoReflect.Descriptor instead. +func (*RuntimeTarget) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{49} +} // SecretReference is the linkage between a service and a secret that it uses. type SecretReference struct { + state protoimpl.MessageState `protogen:"open.v1"` // SecretID represents the ID of the specific Secret that we're // referencing. This identifier exists so that SecretReferences don't leak // any information about the secret contents. @@ -3444,76 +4826,84 @@ type SecretReference struct { // Types that are valid to be assigned to Target: // // *SecretReference_File - Target isSecretReference_Target `protobuf_oneof:"target"` + Target isSecretReference_Target `protobuf_oneof:"target"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SecretReference) Reset() { + *x = SecretReference{} + mi := &file_api_types_proto_msgTypes[50] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SecretReference) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *SecretReference) Reset() { *m = SecretReference{} } func (*SecretReference) ProtoMessage() {} -func (*SecretReference) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{50} -} -func (m *SecretReference) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *SecretReference) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_SecretReference.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *SecretReference) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[50] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } -} -func (m *SecretReference) XXX_Merge(src proto.Message) { - xxx_messageInfo_SecretReference.Merge(m, src) -} -func (m *SecretReference) XXX_Size() int { - return m.Size() -} -func (m *SecretReference) XXX_DiscardUnknown() { - xxx_messageInfo_SecretReference.DiscardUnknown(m) + return mi.MessageOf(x) } -var xxx_messageInfo_SecretReference proto.InternalMessageInfo - -type isSecretReference_Target interface { - isSecretReference_Target() - MarshalTo([]byte) (int, error) - Size() int +// Deprecated: Use SecretReference.ProtoReflect.Descriptor instead. +func (*SecretReference) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{50} } -type SecretReference_File struct { - File *FileTarget `protobuf:"bytes,3,opt,name=file,proto3,oneof" json:"file,omitempty"` +func (x *SecretReference) GetSecretID() string { + if x != nil { + return x.SecretID + } + return "" } -func (*SecretReference_File) isSecretReference_Target() {} +func (x *SecretReference) GetSecretName() string { + if x != nil { + return x.SecretName + } + return "" +} -func (m *SecretReference) GetTarget() isSecretReference_Target { - if m != nil { - return m.Target +func (x *SecretReference) GetTarget() isSecretReference_Target { + if x != nil { + return x.Target } return nil } -func (m *SecretReference) GetFile() *FileTarget { - if x, ok := m.GetTarget().(*SecretReference_File); ok { - return x.File +func (x *SecretReference) GetFile() *FileTarget { + if x != nil { + if x, ok := x.Target.(*SecretReference_File); ok { + return x.File + } } return nil } -// XXX_OneofWrappers is for the internal use of the proto package. -func (*SecretReference) XXX_OneofWrappers() []interface{} { - return []interface{}{ - (*SecretReference_File)(nil), - } +type isSecretReference_Target interface { + isSecretReference_Target() } +type SecretReference_File struct { + File *FileTarget `protobuf:"bytes,3,opt,name=file,proto3,oneof"` +} + +func (*SecretReference_File) isSecretReference_Target() {} + // ConfigReference is the linkage between a service and a config that it uses. type ConfigReference struct { + state protoimpl.MessageState `protogen:"open.v1"` // ConfigID represents the ID of the specific Config that we're // referencing. ConfigID string `protobuf:"bytes,1,opt,name=config_id,json=configId,proto3" json:"config_id,omitempty"` @@ -3526,129 +4916,148 @@ type ConfigReference struct { // // *ConfigReference_File // *ConfigReference_Runtime - Target isConfigReference_Target `protobuf_oneof:"target"` + Target isConfigReference_Target `protobuf_oneof:"target"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *ConfigReference) Reset() { *m = ConfigReference{} } -func (*ConfigReference) ProtoMessage() {} -func (*ConfigReference) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{51} -} -func (m *ConfigReference) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ConfigReference) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ConfigReference.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 *ConfigReference) XXX_Merge(src proto.Message) { - xxx_messageInfo_ConfigReference.Merge(m, src) +func (x *ConfigReference) Reset() { + *x = ConfigReference{} + mi := &file_api_types_proto_msgTypes[51] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *ConfigReference) XXX_Size() int { - return m.Size() -} -func (m *ConfigReference) XXX_DiscardUnknown() { - xxx_messageInfo_ConfigReference.DiscardUnknown(m) + +func (x *ConfigReference) String() string { + return protoimpl.X.MessageStringOf(x) } -var xxx_messageInfo_ConfigReference proto.InternalMessageInfo +func (*ConfigReference) ProtoMessage() {} -type isConfigReference_Target interface { - isConfigReference_Target() - MarshalTo([]byte) (int, error) - Size() int +func (x *ConfigReference) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[51] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -type ConfigReference_File struct { - File *FileTarget `protobuf:"bytes,3,opt,name=file,proto3,oneof" json:"file,omitempty"` +// Deprecated: Use ConfigReference.ProtoReflect.Descriptor instead. +func (*ConfigReference) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{51} } -type ConfigReference_Runtime struct { - Runtime *RuntimeTarget `protobuf:"bytes,4,opt,name=runtime,proto3,oneof" json:"runtime,omitempty"` + +func (x *ConfigReference) GetConfigID() string { + if x != nil { + return x.ConfigID + } + return "" } -func (*ConfigReference_File) isConfigReference_Target() {} -func (*ConfigReference_Runtime) isConfigReference_Target() {} +func (x *ConfigReference) GetConfigName() string { + if x != nil { + return x.ConfigName + } + return "" +} -func (m *ConfigReference) GetTarget() isConfigReference_Target { - if m != nil { - return m.Target +func (x *ConfigReference) GetTarget() isConfigReference_Target { + if x != nil { + return x.Target } return nil } -func (m *ConfigReference) GetFile() *FileTarget { - if x, ok := m.GetTarget().(*ConfigReference_File); ok { - return x.File +func (x *ConfigReference) GetFile() *FileTarget { + if x != nil { + if x, ok := x.Target.(*ConfigReference_File); ok { + return x.File + } } return nil } -func (m *ConfigReference) GetRuntime() *RuntimeTarget { - if x, ok := m.GetTarget().(*ConfigReference_Runtime); ok { - return x.Runtime +func (x *ConfigReference) GetRuntime() *RuntimeTarget { + if x != nil { + if x, ok := x.Target.(*ConfigReference_Runtime); ok { + return x.Runtime + } } return nil } -// XXX_OneofWrappers is for the internal use of the proto package. -func (*ConfigReference) XXX_OneofWrappers() []interface{} { - return []interface{}{ - (*ConfigReference_File)(nil), - (*ConfigReference_Runtime)(nil), - } +type isConfigReference_Target interface { + isConfigReference_Target() +} + +type ConfigReference_File struct { + File *FileTarget `protobuf:"bytes,3,opt,name=file,proto3,oneof"` +} + +type ConfigReference_Runtime struct { + Runtime *RuntimeTarget `protobuf:"bytes,4,opt,name=runtime,proto3,oneof"` } +func (*ConfigReference_File) isConfigReference_Target() {} + +func (*ConfigReference_Runtime) isConfigReference_Target() {} + // BlacklistedCertificate is a record for a blacklisted certificate. It does not // contain the certificate's CN, because these records are indexed by CN. type BlacklistedCertificate struct { + state protoimpl.MessageState `protogen:"open.v1"` // Expiry is the latest known expiration time of a certificate that // was issued for the given CN. // Note: can't use stdtime because this field is nullable. - Expiry *types.Timestamp `protobuf:"bytes,1,opt,name=expiry,proto3" json:"expiry,omitempty"` + Expiry *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=expiry,proto3" json:"expiry,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BlacklistedCertificate) Reset() { + *x = BlacklistedCertificate{} + mi := &file_api_types_proto_msgTypes[52] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BlacklistedCertificate) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *BlacklistedCertificate) Reset() { *m = BlacklistedCertificate{} } func (*BlacklistedCertificate) ProtoMessage() {} -func (*BlacklistedCertificate) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{52} -} -func (m *BlacklistedCertificate) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *BlacklistedCertificate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_BlacklistedCertificate.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *BlacklistedCertificate) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[52] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *BlacklistedCertificate) XXX_Merge(src proto.Message) { - xxx_messageInfo_BlacklistedCertificate.Merge(m, src) -} -func (m *BlacklistedCertificate) XXX_Size() int { - return m.Size() -} -func (m *BlacklistedCertificate) XXX_DiscardUnknown() { - xxx_messageInfo_BlacklistedCertificate.DiscardUnknown(m) + +// Deprecated: Use BlacklistedCertificate.ProtoReflect.Descriptor instead. +func (*BlacklistedCertificate) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{52} } -var xxx_messageInfo_BlacklistedCertificate proto.InternalMessageInfo +func (x *BlacklistedCertificate) GetExpiry() *timestamppb.Timestamp { + if x != nil { + return x.Expiry + } + return nil +} // HealthConfig holds configuration settings for the HEALTHCHECK feature. type HealthConfig struct { + state protoimpl.MessageState `protogen:"open.v1"` // Test is the test to perform to check that the container is healthy. // An empty slice means to inherit the default. // The options are: @@ -3659,444 +5068,360 @@ type HealthConfig struct { Test []string `protobuf:"bytes,1,rep,name=test,proto3" json:"test,omitempty"` // Interval is the time to wait between checks. Zero means inherit. // Note: can't use stdduration because this field needs to be nullable. - Interval *types.Duration `protobuf:"bytes,2,opt,name=interval,proto3" json:"interval,omitempty"` + Interval *durationpb.Duration `protobuf:"bytes,2,opt,name=interval,proto3" json:"interval,omitempty"` // Timeout is the time to wait before considering the check to have hung. // Zero means inherit. // Note: can't use stdduration because this field needs to be nullable. - Timeout *types.Duration `protobuf:"bytes,3,opt,name=timeout,proto3" json:"timeout,omitempty"` + Timeout *durationpb.Duration `protobuf:"bytes,3,opt,name=timeout,proto3" json:"timeout,omitempty"` // Retries is the number of consecutive failures needed to consider a // container as unhealthy. Zero means inherit. Retries int32 `protobuf:"varint,4,opt,name=retries,proto3" json:"retries,omitempty"` // Start period is the period for container initialization during // which health check failures will note count towards the maximum // number of retries. - StartPeriod *types.Duration `protobuf:"bytes,5,opt,name=start_period,json=startPeriod,proto3" json:"start_period,omitempty"` + StartPeriod *durationpb.Duration `protobuf:"bytes,5,opt,name=start_period,json=startPeriod,proto3" json:"start_period,omitempty"` // StartInterval is the time to wait between checks during the start period. // Zero means inherit. // Note: can't use stdduration because this field needs to be nullable. - StartInterval *types.Duration `protobuf:"bytes,6,opt,name=start_interval,json=startInterval,proto3" json:"start_interval,omitempty"` + StartInterval *durationpb.Duration `protobuf:"bytes,6,opt,name=start_interval,json=startInterval,proto3" json:"start_interval,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *HealthConfig) Reset() { *m = HealthConfig{} } -func (*HealthConfig) ProtoMessage() {} -func (*HealthConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{53} -} -func (m *HealthConfig) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *HealthConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_HealthConfig.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 (x *HealthConfig) Reset() { + *x = HealthConfig{} + mi := &file_api_types_proto_msgTypes[53] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *HealthConfig) XXX_Merge(src proto.Message) { - xxx_messageInfo_HealthConfig.Merge(m, src) -} -func (m *HealthConfig) XXX_Size() int { - return m.Size() -} -func (m *HealthConfig) XXX_DiscardUnknown() { - xxx_messageInfo_HealthConfig.DiscardUnknown(m) -} - -var xxx_messageInfo_HealthConfig proto.InternalMessageInfo -type MaybeEncryptedRecord struct { - Algorithm MaybeEncryptedRecord_Algorithm `protobuf:"varint,1,opt,name=algorithm,proto3,enum=docker.swarmkit.v1.MaybeEncryptedRecord_Algorithm" json:"algorithm,omitempty"` - Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"` - Nonce []byte `protobuf:"bytes,3,opt,name=nonce,proto3" json:"nonce,omitempty"` +func (x *HealthConfig) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *MaybeEncryptedRecord) Reset() { *m = MaybeEncryptedRecord{} } -func (*MaybeEncryptedRecord) ProtoMessage() {} -func (*MaybeEncryptedRecord) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{54} -} -func (m *MaybeEncryptedRecord) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MaybeEncryptedRecord) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MaybeEncryptedRecord.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err +func (*HealthConfig) ProtoMessage() {} + +func (x *HealthConfig) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[53] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *MaybeEncryptedRecord) XXX_Merge(src proto.Message) { - xxx_messageInfo_MaybeEncryptedRecord.Merge(m, src) -} -func (m *MaybeEncryptedRecord) XXX_Size() int { - return m.Size() + +// Deprecated: Use HealthConfig.ProtoReflect.Descriptor instead. +func (*HealthConfig) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{53} } -func (m *MaybeEncryptedRecord) XXX_DiscardUnknown() { - xxx_messageInfo_MaybeEncryptedRecord.DiscardUnknown(m) + +func (x *HealthConfig) GetTest() []string { + if x != nil { + return x.Test + } + return nil } -var xxx_messageInfo_MaybeEncryptedRecord proto.InternalMessageInfo +func (x *HealthConfig) GetInterval() *durationpb.Duration { + if x != nil { + return x.Interval + } + return nil +} -type RootRotation struct { - CACert []byte `protobuf:"bytes,1,opt,name=ca_cert,json=caCert,proto3" json:"ca_cert,omitempty"` - CAKey []byte `protobuf:"bytes,2,opt,name=ca_key,json=caKey,proto3" json:"ca_key,omitempty"` - // cross-signed CA cert is the CACert that has been cross-signed by the previous root - CrossSignedCACert []byte `protobuf:"bytes,3,opt,name=cross_signed_ca_cert,json=crossSignedCaCert,proto3" json:"cross_signed_ca_cert,omitempty"` +func (x *HealthConfig) GetTimeout() *durationpb.Duration { + if x != nil { + return x.Timeout + } + return nil } -func (m *RootRotation) Reset() { *m = RootRotation{} } -func (*RootRotation) ProtoMessage() {} -func (*RootRotation) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{55} -} -func (m *RootRotation) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *RootRotation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_RootRotation.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 (x *HealthConfig) GetRetries() int32 { + if x != nil { + return x.Retries } + return 0 } -func (m *RootRotation) XXX_Merge(src proto.Message) { - xxx_messageInfo_RootRotation.Merge(m, src) + +func (x *HealthConfig) GetStartPeriod() *durationpb.Duration { + if x != nil { + return x.StartPeriod + } + return nil } -func (m *RootRotation) XXX_Size() int { - return m.Size() + +func (x *HealthConfig) GetStartInterval() *durationpb.Duration { + if x != nil { + return x.StartInterval + } + return nil } -func (m *RootRotation) XXX_DiscardUnknown() { - xxx_messageInfo_RootRotation.DiscardUnknown(m) + +type MaybeEncryptedRecord struct { + state protoimpl.MessageState `protogen:"open.v1"` + Algorithm MaybeEncryptedRecord_Algorithm `protobuf:"varint,1,opt,name=algorithm,proto3,enum=docker.swarmkit.v1.MaybeEncryptedRecord_Algorithm" json:"algorithm,omitempty"` + Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"` + Nonce []byte `protobuf:"bytes,3,opt,name=nonce,proto3" json:"nonce,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -var xxx_messageInfo_RootRotation proto.InternalMessageInfo +func (x *MaybeEncryptedRecord) Reset() { + *x = MaybeEncryptedRecord{} + mi := &file_api_types_proto_msgTypes[54] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} -// Privileges specifies security configuration/permissions. -type Privileges struct { - CredentialSpec *Privileges_CredentialSpec `protobuf:"bytes,1,opt,name=credential_spec,json=credentialSpec,proto3" json:"credential_spec,omitempty"` - SELinuxContext *Privileges_SELinuxContext `protobuf:"bytes,2,opt,name=selinux_context,json=selinuxContext,proto3" json:"selinux_context,omitempty"` - Seccomp *Privileges_SeccompOpts `protobuf:"bytes,3,opt,name=seccomp,proto3" json:"seccomp,omitempty"` - Apparmor *Privileges_AppArmorOpts `protobuf:"bytes,4,opt,name=apparmor,proto3" json:"apparmor,omitempty"` - // NoNewPrivileges, if set to true, disables the container from gaining new - // privileges. See https://docs.kernel.org/userspace-api/no_new_privs.html - // for details. - NoNewPrivileges bool `protobuf:"varint,5,opt,name=no_new_privileges,json=noNewPrivileges,proto3" json:"no_new_privileges,omitempty"` +func (x *MaybeEncryptedRecord) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Privileges) Reset() { *m = Privileges{} } -func (*Privileges) ProtoMessage() {} -func (*Privileges) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{56} -} -func (m *Privileges) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Privileges) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_Privileges.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err +func (*MaybeEncryptedRecord) ProtoMessage() {} + +func (x *MaybeEncryptedRecord) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[54] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *Privileges) XXX_Merge(src proto.Message) { - xxx_messageInfo_Privileges.Merge(m, src) -} -func (m *Privileges) XXX_Size() int { - return m.Size() -} -func (m *Privileges) XXX_DiscardUnknown() { - xxx_messageInfo_Privileges.DiscardUnknown(m) + +// Deprecated: Use MaybeEncryptedRecord.ProtoReflect.Descriptor instead. +func (*MaybeEncryptedRecord) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{54} } -var xxx_messageInfo_Privileges proto.InternalMessageInfo +func (x *MaybeEncryptedRecord) GetAlgorithm() MaybeEncryptedRecord_Algorithm { + if x != nil { + return x.Algorithm + } + return NotEncrypted +} -// CredentialSpec for managed service account (Windows only). -type Privileges_CredentialSpec struct { - // Types that are valid to be assigned to Source: - // - // *Privileges_CredentialSpec_File - // *Privileges_CredentialSpec_Registry - // *Privileges_CredentialSpec_Config - Source isPrivileges_CredentialSpec_Source `protobuf_oneof:"source"` +func (x *MaybeEncryptedRecord) GetData() []byte { + if x != nil { + return x.Data + } + return nil } -func (m *Privileges_CredentialSpec) Reset() { *m = Privileges_CredentialSpec{} } -func (*Privileges_CredentialSpec) ProtoMessage() {} -func (*Privileges_CredentialSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{56, 0} -} -func (m *Privileges_CredentialSpec) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Privileges_CredentialSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_Privileges_CredentialSpec.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 (x *MaybeEncryptedRecord) GetNonce() []byte { + if x != nil { + return x.Nonce } + return nil } -func (m *Privileges_CredentialSpec) XXX_Merge(src proto.Message) { - xxx_messageInfo_Privileges_CredentialSpec.Merge(m, src) + +type RootRotation struct { + state protoimpl.MessageState `protogen:"open.v1"` + CACert []byte `protobuf:"bytes,1,opt,name=ca_cert,json=caCert,proto3" json:"ca_cert,omitempty"` + CAKey []byte `protobuf:"bytes,2,opt,name=ca_key,json=caKey,proto3" json:"ca_key,omitempty"` + // cross-signed CA cert is the CACert that has been cross-signed by the previous root + CrossSignedCACert []byte `protobuf:"bytes,3,opt,name=cross_signed_ca_cert,json=crossSignedCaCert,proto3" json:"cross_signed_ca_cert,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *Privileges_CredentialSpec) XXX_Size() int { - return m.Size() + +func (x *RootRotation) Reset() { + *x = RootRotation{} + mi := &file_api_types_proto_msgTypes[55] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *Privileges_CredentialSpec) XXX_DiscardUnknown() { - xxx_messageInfo_Privileges_CredentialSpec.DiscardUnknown(m) + +func (x *RootRotation) String() string { + return protoimpl.X.MessageStringOf(x) } -var xxx_messageInfo_Privileges_CredentialSpec proto.InternalMessageInfo +func (*RootRotation) ProtoMessage() {} -type isPrivileges_CredentialSpec_Source interface { - isPrivileges_CredentialSpec_Source() - MarshalTo([]byte) (int, error) - Size() int +func (x *RootRotation) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[55] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -type Privileges_CredentialSpec_File struct { - File string `protobuf:"bytes,1,opt,name=file,proto3,oneof" json:"file,omitempty"` -} -type Privileges_CredentialSpec_Registry struct { - Registry string `protobuf:"bytes,2,opt,name=registry,proto3,oneof" json:"registry,omitempty"` -} -type Privileges_CredentialSpec_Config struct { - Config string `protobuf:"bytes,3,opt,name=config,proto3,oneof" json:"config,omitempty"` +// Deprecated: Use RootRotation.ProtoReflect.Descriptor instead. +func (*RootRotation) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{55} } -func (*Privileges_CredentialSpec_File) isPrivileges_CredentialSpec_Source() {} -func (*Privileges_CredentialSpec_Registry) isPrivileges_CredentialSpec_Source() {} -func (*Privileges_CredentialSpec_Config) isPrivileges_CredentialSpec_Source() {} - -func (m *Privileges_CredentialSpec) GetSource() isPrivileges_CredentialSpec_Source { - if m != nil { - return m.Source +func (x *RootRotation) GetCACert() []byte { + if x != nil { + return x.CACert } return nil } -func (m *Privileges_CredentialSpec) GetFile() string { - if x, ok := m.GetSource().(*Privileges_CredentialSpec_File); ok { - return x.File +func (x *RootRotation) GetCAKey() []byte { + if x != nil { + return x.CAKey } - return "" + return nil } -func (m *Privileges_CredentialSpec) GetRegistry() string { - if x, ok := m.GetSource().(*Privileges_CredentialSpec_Registry); ok { - return x.Registry +func (x *RootRotation) GetCrossSignedCACert() []byte { + if x != nil { + return x.CrossSignedCACert } - return "" + return nil } -func (m *Privileges_CredentialSpec) GetConfig() string { - if x, ok := m.GetSource().(*Privileges_CredentialSpec_Config); ok { - return x.Config - } - return "" +// Privileges specifies security configuration/permissions. +type Privileges struct { + state protoimpl.MessageState `protogen:"open.v1"` + CredentialSpec *Privileges_CredentialSpec `protobuf:"bytes,1,opt,name=credential_spec,json=credentialSpec,proto3" json:"credential_spec,omitempty"` + SELinuxContext *Privileges_SELinuxContext `protobuf:"bytes,2,opt,name=selinux_context,json=selinuxContext,proto3" json:"selinux_context,omitempty"` + Seccomp *Privileges_SeccompOpts `protobuf:"bytes,3,opt,name=seccomp,proto3" json:"seccomp,omitempty"` + Apparmor *Privileges_AppArmorOpts `protobuf:"bytes,4,opt,name=apparmor,proto3" json:"apparmor,omitempty"` + // NoNewPrivileges, if set to true, disables the container from gaining new + // privileges. See https://docs.kernel.org/userspace-api/no_new_privs.html + // for details. + NoNewPrivileges bool `protobuf:"varint,5,opt,name=no_new_privileges,json=noNewPrivileges,proto3" json:"no_new_privileges,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -// XXX_OneofWrappers is for the internal use of the proto package. -func (*Privileges_CredentialSpec) XXX_OneofWrappers() []interface{} { - return []interface{}{ - (*Privileges_CredentialSpec_File)(nil), - (*Privileges_CredentialSpec_Registry)(nil), - (*Privileges_CredentialSpec_Config)(nil), - } +func (x *Privileges) Reset() { + *x = Privileges{} + mi := &file_api_types_proto_msgTypes[56] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -// SELinuxContext contains the SELinux labels for the container. -type Privileges_SELinuxContext struct { - Disable bool `protobuf:"varint,1,opt,name=disable,proto3" json:"disable,omitempty"` - User string `protobuf:"bytes,2,opt,name=user,proto3" json:"user,omitempty"` - Role string `protobuf:"bytes,3,opt,name=role,proto3" json:"role,omitempty"` - Type string `protobuf:"bytes,4,opt,name=type,proto3" json:"type,omitempty"` - Level string `protobuf:"bytes,5,opt,name=level,proto3" json:"level,omitempty"` +func (x *Privileges) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Privileges_SELinuxContext) Reset() { *m = Privileges_SELinuxContext{} } -func (*Privileges_SELinuxContext) ProtoMessage() {} -func (*Privileges_SELinuxContext) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{56, 1} -} -func (m *Privileges_SELinuxContext) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Privileges_SELinuxContext) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_Privileges_SELinuxContext.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err +func (*Privileges) ProtoMessage() {} + +func (x *Privileges) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[56] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } -} -func (m *Privileges_SELinuxContext) XXX_Merge(src proto.Message) { - xxx_messageInfo_Privileges_SELinuxContext.Merge(m, src) -} -func (m *Privileges_SELinuxContext) XXX_Size() int { - return m.Size() -} -func (m *Privileges_SELinuxContext) XXX_DiscardUnknown() { - xxx_messageInfo_Privileges_SELinuxContext.DiscardUnknown(m) + return mi.MessageOf(x) } -var xxx_messageInfo_Privileges_SELinuxContext proto.InternalMessageInfo - -// SeccompOpts contains options for configuring seccomp profiles on the -// container. See https://docs.docker.com/engine/security/seccomp/ for more -// information. -type Privileges_SeccompOpts struct { - Mode Privileges_SeccompOpts_SeccompMode `protobuf:"varint,1,opt,name=mode,proto3,enum=docker.swarmkit.v1.Privileges_SeccompOpts_SeccompMode" json:"mode,omitempty"` - // Profile contains the json definition of the seccomp profile to use, - // if Mode is set to custom. - Profile []byte `protobuf:"bytes,2,opt,name=profile,proto3" json:"profile,omitempty"` +// Deprecated: Use Privileges.ProtoReflect.Descriptor instead. +func (*Privileges) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{56} } -func (m *Privileges_SeccompOpts) Reset() { *m = Privileges_SeccompOpts{} } -func (*Privileges_SeccompOpts) ProtoMessage() {} -func (*Privileges_SeccompOpts) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{56, 2} -} -func (m *Privileges_SeccompOpts) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Privileges_SeccompOpts) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_Privileges_SeccompOpts.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 (x *Privileges) GetCredentialSpec() *Privileges_CredentialSpec { + if x != nil { + return x.CredentialSpec } + return nil } -func (m *Privileges_SeccompOpts) XXX_Merge(src proto.Message) { - xxx_messageInfo_Privileges_SeccompOpts.Merge(m, src) -} -func (m *Privileges_SeccompOpts) XXX_Size() int { - return m.Size() -} -func (m *Privileges_SeccompOpts) XXX_DiscardUnknown() { - xxx_messageInfo_Privileges_SeccompOpts.DiscardUnknown(m) -} - -var xxx_messageInfo_Privileges_SeccompOpts proto.InternalMessageInfo -// AppArmorOpts contains options for configuring AppArmor profiles on the -// container. Currently, custom profiles are not supported. See -// https://docs.docker.com/engine/security/apparmor/ for more information. -type Privileges_AppArmorOpts struct { - Mode Privileges_AppArmorOpts_AppArmorMode `protobuf:"varint,1,opt,name=mode,proto3,enum=docker.swarmkit.v1.Privileges_AppArmorOpts_AppArmorMode" json:"mode,omitempty"` +func (x *Privileges) GetSELinuxContext() *Privileges_SELinuxContext { + if x != nil { + return x.SELinuxContext + } + return nil } -func (m *Privileges_AppArmorOpts) Reset() { *m = Privileges_AppArmorOpts{} } -func (*Privileges_AppArmorOpts) ProtoMessage() {} -func (*Privileges_AppArmorOpts) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{56, 3} -} -func (m *Privileges_AppArmorOpts) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Privileges_AppArmorOpts) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_Privileges_AppArmorOpts.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 (x *Privileges) GetSeccomp() *Privileges_SeccompOpts { + if x != nil { + return x.Seccomp } + return nil } -func (m *Privileges_AppArmorOpts) XXX_Merge(src proto.Message) { - xxx_messageInfo_Privileges_AppArmorOpts.Merge(m, src) -} -func (m *Privileges_AppArmorOpts) XXX_Size() int { - return m.Size() -} -func (m *Privileges_AppArmorOpts) XXX_DiscardUnknown() { - xxx_messageInfo_Privileges_AppArmorOpts.DiscardUnknown(m) + +func (x *Privileges) GetApparmor() *Privileges_AppArmorOpts { + if x != nil { + return x.Apparmor + } + return nil } -var xxx_messageInfo_Privileges_AppArmorOpts proto.InternalMessageInfo +func (x *Privileges) GetNoNewPrivileges() bool { + if x != nil { + return x.NoNewPrivileges + } + return false +} // JobStatus indicates the status of a Service that is in one of the Job modes. type JobStatus struct { + state protoimpl.MessageState `protogen:"open.v1"` // JobIteration is the count of how many times the Job has been excecuted, // successfully or otherwise. "Executed" refers to the job as a whole being // started, not to the individual Tasks being launched. This is used to // disambiguate which Tasks belong to which iteration of a Job. - JobIteration Version `protobuf:"bytes,1,opt,name=job_iteration,json=jobIteration,proto3" json:"job_iteration"` + JobIteration *Version `protobuf:"bytes,1,opt,name=job_iteration,json=jobIteration,proto3" json:"job_iteration,omitempty"` // LastExecution is the time that the job was last executed. This is set by // the orchestrator in the same transaction that JobIteration is incremented. // While time is a fungible concept in distributed systems like Swarmkit, // this value gives us a best-effort attempt to prevent weird behavior like // newly added nodes executing long-forgotten jobs. - LastExecution *types.Timestamp `protobuf:"bytes,2,opt,name=last_execution,json=lastExecution,proto3" json:"last_execution,omitempty"` + LastExecution *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=last_execution,json=lastExecution,proto3" json:"last_execution,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *JobStatus) Reset() { + *x = JobStatus{} + mi := &file_api_types_proto_msgTypes[57] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *JobStatus) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *JobStatus) Reset() { *m = JobStatus{} } func (*JobStatus) ProtoMessage() {} -func (*JobStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{57} -} -func (m *JobStatus) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *JobStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_JobStatus.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *JobStatus) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[57] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *JobStatus) XXX_Merge(src proto.Message) { - xxx_messageInfo_JobStatus.Merge(m, src) -} -func (m *JobStatus) XXX_Size() int { - return m.Size() + +// Deprecated: Use JobStatus.ProtoReflect.Descriptor instead. +func (*JobStatus) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{57} } -func (m *JobStatus) XXX_DiscardUnknown() { - xxx_messageInfo_JobStatus.DiscardUnknown(m) + +func (x *JobStatus) GetJobIteration() *Version { + if x != nil { + return x.JobIteration + } + return nil } -var xxx_messageInfo_JobStatus proto.InternalMessageInfo +func (x *JobStatus) GetLastExecution() *timestamppb.Timestamp { + if x != nil { + return x.LastExecution + } + return nil +} // VolumeAccessMode is the access mode of the volume, and is used to determine // the CSI AccessMode value, as well as the volume access type (block vs @@ -4110,6 +5435,7 @@ var xxx_messageInfo_JobStatus proto.InternalMessageInfo // them at a time, and so would have a scope of "Single". But, it can be used // by any number of programs simultaneously, so would have a sharing of "All". type VolumeAccessMode struct { + state protoimpl.MessageState `protogen:"open.v1"` // Scope defines on how many nodes this volume can be accessed // simultaneously. If unset, will default to the zero-value of SINGLE_NODE. Scope VolumeAccessMode_Scope `protobuf:"varint,1,opt,name=scope,proto3,enum=docker.swarmkit.v1.VolumeAccessMode_Scope" json:"scope,omitempty"` @@ -4124,168 +5450,100 @@ type VolumeAccessMode struct { // // *VolumeAccessMode_Block // *VolumeAccessMode_Mount - AccessType isVolumeAccessMode_AccessType `protobuf_oneof:"access_type"` + AccessType isVolumeAccessMode_AccessType `protobuf_oneof:"access_type"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *VolumeAccessMode) Reset() { *m = VolumeAccessMode{} } -func (*VolumeAccessMode) ProtoMessage() {} -func (*VolumeAccessMode) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{58} -} -func (m *VolumeAccessMode) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *VolumeAccessMode) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_VolumeAccessMode.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 (x *VolumeAccessMode) Reset() { + *x = VolumeAccessMode{} + mi := &file_api_types_proto_msgTypes[58] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *VolumeAccessMode) XXX_Merge(src proto.Message) { - xxx_messageInfo_VolumeAccessMode.Merge(m, src) -} -func (m *VolumeAccessMode) XXX_Size() int { - return m.Size() -} -func (m *VolumeAccessMode) XXX_DiscardUnknown() { - xxx_messageInfo_VolumeAccessMode.DiscardUnknown(m) + +func (x *VolumeAccessMode) String() string { + return protoimpl.X.MessageStringOf(x) } -var xxx_messageInfo_VolumeAccessMode proto.InternalMessageInfo +func (*VolumeAccessMode) ProtoMessage() {} -type isVolumeAccessMode_AccessType interface { - isVolumeAccessMode_AccessType() - MarshalTo([]byte) (int, error) - Size() int +func (x *VolumeAccessMode) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[58] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -type VolumeAccessMode_Block struct { - Block *VolumeAccessMode_BlockVolume `protobuf:"bytes,3,opt,name=block,proto3,oneof" json:"block,omitempty"` -} -type VolumeAccessMode_Mount struct { - Mount *VolumeAccessMode_MountVolume `protobuf:"bytes,4,opt,name=mount,proto3,oneof" json:"mount,omitempty"` +// Deprecated: Use VolumeAccessMode.ProtoReflect.Descriptor instead. +func (*VolumeAccessMode) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{58} } -func (*VolumeAccessMode_Block) isVolumeAccessMode_AccessType() {} -func (*VolumeAccessMode_Mount) isVolumeAccessMode_AccessType() {} - -func (m *VolumeAccessMode) GetAccessType() isVolumeAccessMode_AccessType { - if m != nil { - return m.AccessType +func (x *VolumeAccessMode) GetScope() VolumeAccessMode_Scope { + if x != nil { + return x.Scope } - return nil + return VolumeScopeSingleNode } -func (m *VolumeAccessMode) GetBlock() *VolumeAccessMode_BlockVolume { - if x, ok := m.GetAccessType().(*VolumeAccessMode_Block); ok { - return x.Block +func (x *VolumeAccessMode) GetSharing() VolumeAccessMode_Sharing { + if x != nil { + return x.Sharing } - return nil + return VolumeSharingNone } -func (m *VolumeAccessMode) GetMount() *VolumeAccessMode_MountVolume { - if x, ok := m.GetAccessType().(*VolumeAccessMode_Mount); ok { - return x.Mount +func (x *VolumeAccessMode) GetAccessType() isVolumeAccessMode_AccessType { + if x != nil { + return x.AccessType } return nil } -// XXX_OneofWrappers is for the internal use of the proto package. -func (*VolumeAccessMode) XXX_OneofWrappers() []interface{} { - return []interface{}{ - (*VolumeAccessMode_Block)(nil), - (*VolumeAccessMode_Mount)(nil), +func (x *VolumeAccessMode) GetBlock() *VolumeAccessMode_BlockVolume { + if x != nil { + if x, ok := x.AccessType.(*VolumeAccessMode_Block); ok { + return x.Block + } } + return nil } -// BlockVolume indicates the volume will be accessed with the block device -// API. -type VolumeAccessMode_BlockVolume struct { -} - -func (m *VolumeAccessMode_BlockVolume) Reset() { *m = VolumeAccessMode_BlockVolume{} } -func (*VolumeAccessMode_BlockVolume) ProtoMessage() {} -func (*VolumeAccessMode_BlockVolume) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{58, 0} -} -func (m *VolumeAccessMode_BlockVolume) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *VolumeAccessMode_BlockVolume) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_VolumeAccessMode_BlockVolume.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err +func (x *VolumeAccessMode) GetMount() *VolumeAccessMode_MountVolume { + if x != nil { + if x, ok := x.AccessType.(*VolumeAccessMode_Mount); ok { + return x.Mount } - return b[:n], nil } -} -func (m *VolumeAccessMode_BlockVolume) XXX_Merge(src proto.Message) { - xxx_messageInfo_VolumeAccessMode_BlockVolume.Merge(m, src) -} -func (m *VolumeAccessMode_BlockVolume) XXX_Size() int { - return m.Size() -} -func (m *VolumeAccessMode_BlockVolume) XXX_DiscardUnknown() { - xxx_messageInfo_VolumeAccessMode_BlockVolume.DiscardUnknown(m) + return nil } -var xxx_messageInfo_VolumeAccessMode_BlockVolume proto.InternalMessageInfo - -// MountVolume indicates the volume will be access with the filesystem API. -type VolumeAccessMode_MountVolume struct { - // FsType is the filesystem type. This field is optional, and an empty - // string is equal to an unspecified value. - FsType string `protobuf:"bytes,1,opt,name=fs_type,json=fsType,proto3" json:"fs_type,omitempty"` - // MountFlags indicates mount options to be used for the volume. This - // field is optional, and may contain sensitive data. - MountFlags []string `protobuf:"bytes,2,rep,name=mount_flags,json=mountFlags,proto3" json:"mount_flags,omitempty"` +type isVolumeAccessMode_AccessType interface { + isVolumeAccessMode_AccessType() } -func (m *VolumeAccessMode_MountVolume) Reset() { *m = VolumeAccessMode_MountVolume{} } -func (*VolumeAccessMode_MountVolume) ProtoMessage() {} -func (*VolumeAccessMode_MountVolume) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{58, 1} -} -func (m *VolumeAccessMode_MountVolume) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *VolumeAccessMode_MountVolume) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_VolumeAccessMode_MountVolume.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 *VolumeAccessMode_MountVolume) XXX_Merge(src proto.Message) { - xxx_messageInfo_VolumeAccessMode_MountVolume.Merge(m, src) -} -func (m *VolumeAccessMode_MountVolume) XXX_Size() int { - return m.Size() +type VolumeAccessMode_Block struct { + Block *VolumeAccessMode_BlockVolume `protobuf:"bytes,3,opt,name=block,proto3,oneof"` } -func (m *VolumeAccessMode_MountVolume) XXX_DiscardUnknown() { - xxx_messageInfo_VolumeAccessMode_MountVolume.DiscardUnknown(m) + +type VolumeAccessMode_Mount struct { + Mount *VolumeAccessMode_MountVolume `protobuf:"bytes,4,opt,name=mount,proto3,oneof"` } -var xxx_messageInfo_VolumeAccessMode_MountVolume proto.InternalMessageInfo +func (*VolumeAccessMode_Block) isVolumeAccessMode_AccessType() {} + +func (*VolumeAccessMode_Mount) isVolumeAccessMode_AccessType() {} // VolumeSecret indicates a secret value that must be passed to CSI plugin // operations. type VolumeSecret struct { + state protoimpl.MessageState `protogen:"open.v1"` // Key represents the key that will be passed as a controller secret to the // CSI plugin. Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` @@ -4294,40 +5552,54 @@ type VolumeSecret struct { // name or ID. // // TODO(dperny): should this be a SecretReference instead? - Secret string `protobuf:"bytes,2,opt,name=secret,proto3" json:"secret,omitempty"` + Secret string `protobuf:"bytes,2,opt,name=secret,proto3" json:"secret,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VolumeSecret) Reset() { + *x = VolumeSecret{} + mi := &file_api_types_proto_msgTypes[59] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VolumeSecret) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *VolumeSecret) Reset() { *m = VolumeSecret{} } func (*VolumeSecret) ProtoMessage() {} -func (*VolumeSecret) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{59} -} -func (m *VolumeSecret) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *VolumeSecret) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_VolumeSecret.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *VolumeSecret) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[59] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *VolumeSecret) XXX_Merge(src proto.Message) { - xxx_messageInfo_VolumeSecret.Merge(m, src) -} -func (m *VolumeSecret) XXX_Size() int { - return m.Size() + +// Deprecated: Use VolumeSecret.ProtoReflect.Descriptor instead. +func (*VolumeSecret) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{59} } -func (m *VolumeSecret) XXX_DiscardUnknown() { - xxx_messageInfo_VolumeSecret.DiscardUnknown(m) + +func (x *VolumeSecret) GetKey() string { + if x != nil { + return x.Key + } + return "" } -var xxx_messageInfo_VolumeSecret proto.InternalMessageInfo +func (x *VolumeSecret) GetSecret() string { + if x != nil { + return x.Secret + } + return "" +} // VolumePublishStatus contains information about the volume's publishing to a // specific node. @@ -4362,6 +5634,7 @@ var xxx_messageInfo_VolumeSecret proto.InternalMessageInfo // Volume itself is sufficient to know which Nodes it may have been published // to. type VolumePublishStatus struct { + state protoimpl.MessageState `protogen:"open.v1"` // NodeID is the swarm (not CSI plugin) node ID that this volume is // published to. NodeID string `protobuf:"bytes,1,opt,name=node_id,json=nodeId,proto3" json:"node_id,omitempty"` @@ -4369,54 +5642,83 @@ type VolumePublishStatus struct { State VolumePublishStatus_State `protobuf:"varint,2,opt,name=state,proto3,enum=docker.swarmkit.v1.VolumePublishStatus_State" json:"state,omitempty"` // PublishContext is the same PublishContext returned by a call to // ControllerPublishVolume. - PublishContext map[string]string `protobuf:"bytes,3,rep,name=publish_context,json=publishContext,proto3" json:"publish_context,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + PublishContext map[string]string `protobuf:"bytes,3,rep,name=publish_context,json=publishContext,proto3" json:"publish_context,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // Message is a human-readable message explaining the state of the volume. // It exists to convey the current situation with the volume to the user, // allowing, for example, the user to see error messages why a volume might // not be published yet. - Message string `protobuf:"bytes,5,opt,name=message,proto3" json:"message,omitempty"` + Message string `protobuf:"bytes,5,opt,name=message,proto3" json:"message,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VolumePublishStatus) Reset() { + *x = VolumePublishStatus{} + mi := &file_api_types_proto_msgTypes[60] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VolumePublishStatus) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *VolumePublishStatus) Reset() { *m = VolumePublishStatus{} } func (*VolumePublishStatus) ProtoMessage() {} -func (*VolumePublishStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{60} -} -func (m *VolumePublishStatus) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *VolumePublishStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_VolumePublishStatus.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *VolumePublishStatus) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[60] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) +} + +// Deprecated: Use VolumePublishStatus.ProtoReflect.Descriptor instead. +func (*VolumePublishStatus) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{60} } -func (m *VolumePublishStatus) XXX_Merge(src proto.Message) { - xxx_messageInfo_VolumePublishStatus.Merge(m, src) + +func (x *VolumePublishStatus) GetNodeID() string { + if x != nil { + return x.NodeID + } + return "" } -func (m *VolumePublishStatus) XXX_Size() int { - return m.Size() + +func (x *VolumePublishStatus) GetState() VolumePublishStatus_State { + if x != nil { + return x.State + } + return VolumePublishStatus_PENDING_PUBLISH } -func (m *VolumePublishStatus) XXX_DiscardUnknown() { - xxx_messageInfo_VolumePublishStatus.DiscardUnknown(m) + +func (x *VolumePublishStatus) GetPublishContext() map[string]string { + if x != nil { + return x.PublishContext + } + return nil } -var xxx_messageInfo_VolumePublishStatus proto.InternalMessageInfo +func (x *VolumePublishStatus) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} // VolumeInfo contains information about the volume originating from the CSI // plugin. type VolumeInfo struct { + state protoimpl.MessageState `protogen:"open.v1"` // CapacityBytes is the capacity of this volume in bytes. A value of 0 // indicates that the capcity is unknown. CapacityBytes int64 `protobuf:"varint,1,opt,name=capacity_bytes,json=capacityBytes,proto3" json:"capacity_bytes,omitempty"` // VolumeContext includes fields that are opaque to Swarmkit. - VolumeContext map[string]string `protobuf:"bytes,2,rep,name=volume_context,json=volumeContext,proto3" json:"volume_context,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + VolumeContext map[string]string `protobuf:"bytes,2,rep,name=volume_context,json=volumeContext,proto3" json:"volume_context,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // VolumeID is the ID of the volume as reported by the CSI plugin. // Information about the volume is not cached in swarmkit's object store; // instead, it is retrieved on-demand as needed. If the VolumeID field is an @@ -4426,87 +5728,131 @@ type VolumeInfo struct { // AccessibleTopology is the topology this volume is actually accessible // from. AccessibleTopology []*Topology `protobuf:"bytes,4,rep,name=accessible_topology,json=accessibleTopology,proto3" json:"accessible_topology,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VolumeInfo) Reset() { + *x = VolumeInfo{} + mi := &file_api_types_proto_msgTypes[61] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VolumeInfo) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *VolumeInfo) Reset() { *m = VolumeInfo{} } func (*VolumeInfo) ProtoMessage() {} -func (*VolumeInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{61} -} -func (m *VolumeInfo) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *VolumeInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_VolumeInfo.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *VolumeInfo) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[61] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) +} + +// Deprecated: Use VolumeInfo.ProtoReflect.Descriptor instead. +func (*VolumeInfo) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{61} } -func (m *VolumeInfo) XXX_Merge(src proto.Message) { - xxx_messageInfo_VolumeInfo.Merge(m, src) + +func (x *VolumeInfo) GetCapacityBytes() int64 { + if x != nil { + return x.CapacityBytes + } + return 0 } -func (m *VolumeInfo) XXX_Size() int { - return m.Size() + +func (x *VolumeInfo) GetVolumeContext() map[string]string { + if x != nil { + return x.VolumeContext + } + return nil } -func (m *VolumeInfo) XXX_DiscardUnknown() { - xxx_messageInfo_VolumeInfo.DiscardUnknown(m) + +func (x *VolumeInfo) GetVolumeID() string { + if x != nil { + return x.VolumeID + } + return "" } -var xxx_messageInfo_VolumeInfo proto.InternalMessageInfo +func (x *VolumeInfo) GetAccessibleTopology() []*Topology { + if x != nil { + return x.AccessibleTopology + } + return nil +} // CapacityRange describes the minimum and maximum capacity a volume should be // created with. type CapacityRange struct { + state protoimpl.MessageState `protogen:"open.v1"` // RequiredBytes specifies that a volume must be at least this big. The value // of 0 indicates an unspecified minimum. Must not be negative. RequiredBytes int64 `protobuf:"varint,1,opt,name=required_bytes,json=requiredBytes,proto3" json:"required_bytes,omitempty"` // LimitBytes specifies that a volume must not be bigger than this. The value // of 0 indicates an unspecified maximum. Must not be negative. - LimitBytes int64 `protobuf:"varint,2,opt,name=limit_bytes,json=limitBytes,proto3" json:"limit_bytes,omitempty"` + LimitBytes int64 `protobuf:"varint,2,opt,name=limit_bytes,json=limitBytes,proto3" json:"limit_bytes,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *CapacityRange) Reset() { + *x = CapacityRange{} + mi := &file_api_types_proto_msgTypes[62] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CapacityRange) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *CapacityRange) Reset() { *m = CapacityRange{} } func (*CapacityRange) ProtoMessage() {} -func (*CapacityRange) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{62} -} -func (m *CapacityRange) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *CapacityRange) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_CapacityRange.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *CapacityRange) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[62] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *CapacityRange) XXX_Merge(src proto.Message) { - xxx_messageInfo_CapacityRange.Merge(m, src) -} -func (m *CapacityRange) XXX_Size() int { - return m.Size() + +// Deprecated: Use CapacityRange.ProtoReflect.Descriptor instead. +func (*CapacityRange) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{62} } -func (m *CapacityRange) XXX_DiscardUnknown() { - xxx_messageInfo_CapacityRange.DiscardUnknown(m) + +func (x *CapacityRange) GetRequiredBytes() int64 { + if x != nil { + return x.RequiredBytes + } + return 0 } -var xxx_messageInfo_CapacityRange proto.InternalMessageInfo +func (x *CapacityRange) GetLimitBytes() int64 { + if x != nil { + return x.LimitBytes + } + return 0 +} // VolumeAssignment contains the information needed by a Node to use a CSI // volume. This includes the information need to Stage and Publish the volume // on the node, but never the full Volume object. type VolumeAssignment struct { + state protoimpl.MessageState `protogen:"open.v1"` // ID is the swarmkit ID for the volume. This is used by swarmkit components // to identify the volume. ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` @@ -4518,96 +5864,168 @@ type VolumeAssignment struct { // VolumeContext is a map returned from the CSI Controller service when a // Volume is created. It is optional for the driver to provide, but if it is // provided, it must be passed to subsequent calls. - VolumeContext map[string]string `protobuf:"bytes,4,rep,name=volume_context,json=volumeContext,proto3" json:"volume_context,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + VolumeContext map[string]string `protobuf:"bytes,4,rep,name=volume_context,json=volumeContext,proto3" json:"volume_context,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // PublishContext is a map returned from the Controller service when // ControllerPublishVolume is called. Again, it is optional, but if provided, // must be passed. - PublishContext map[string]string `protobuf:"bytes,5,rep,name=publish_context,json=publishContext,proto3" json:"publish_context,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + PublishContext map[string]string `protobuf:"bytes,5,rep,name=publish_context,json=publishContext,proto3" json:"publish_context,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // AccessMode specifies the access mode of the volume. AccessMode *VolumeAccessMode `protobuf:"bytes,6,opt,name=access_mode,json=accessMode,proto3" json:"access_mode,omitempty"` // Secrets is the set of secrets required by the CSI plugin. These refer to // swarmkit Secrets that will be distributed separately to the node. - Secrets []*VolumeSecret `protobuf:"bytes,7,rep,name=secrets,proto3" json:"secrets,omitempty"` + Secrets []*VolumeSecret `protobuf:"bytes,7,rep,name=secrets,proto3" json:"secrets,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VolumeAssignment) Reset() { + *x = VolumeAssignment{} + mi := &file_api_types_proto_msgTypes[63] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VolumeAssignment) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *VolumeAssignment) Reset() { *m = VolumeAssignment{} } func (*VolumeAssignment) ProtoMessage() {} -func (*VolumeAssignment) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{63} -} -func (m *VolumeAssignment) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *VolumeAssignment) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_VolumeAssignment.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *VolumeAssignment) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[63] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *VolumeAssignment) XXX_Merge(src proto.Message) { - xxx_messageInfo_VolumeAssignment.Merge(m, src) + +// Deprecated: Use VolumeAssignment.ProtoReflect.Descriptor instead. +func (*VolumeAssignment) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{63} +} + +func (x *VolumeAssignment) GetID() string { + if x != nil { + return x.ID + } + return "" +} + +func (x *VolumeAssignment) GetVolumeID() string { + if x != nil { + return x.VolumeID + } + return "" +} + +func (x *VolumeAssignment) GetDriver() *Driver { + if x != nil { + return x.Driver + } + return nil +} + +func (x *VolumeAssignment) GetVolumeContext() map[string]string { + if x != nil { + return x.VolumeContext + } + return nil } -func (m *VolumeAssignment) XXX_Size() int { - return m.Size() + +func (x *VolumeAssignment) GetPublishContext() map[string]string { + if x != nil { + return x.PublishContext + } + return nil } -func (m *VolumeAssignment) XXX_DiscardUnknown() { - xxx_messageInfo_VolumeAssignment.DiscardUnknown(m) + +func (x *VolumeAssignment) GetAccessMode() *VolumeAccessMode { + if x != nil { + return x.AccessMode + } + return nil } -var xxx_messageInfo_VolumeAssignment proto.InternalMessageInfo +func (x *VolumeAssignment) GetSecrets() []*VolumeSecret { + if x != nil { + return x.Secrets + } + return nil +} // VolumeAttachment is the information associating a Volume with a Task. type VolumeAttachment struct { + state protoimpl.MessageState `protogen:"open.v1"` // ID is the swarmkit ID of the volume assigned to this task, not the CSI // volume ID. ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // Source indicates the Mount source that this volume is assigned for. Source string `protobuf:"bytes,2,opt,name=source,proto3" json:"source,omitempty"` // Target indicates the Mount target that this volume is assigned for. - Target string `protobuf:"bytes,3,opt,name=target,proto3" json:"target,omitempty"` + Target string `protobuf:"bytes,3,opt,name=target,proto3" json:"target,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VolumeAttachment) Reset() { + *x = VolumeAttachment{} + mi := &file_api_types_proto_msgTypes[64] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VolumeAttachment) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *VolumeAttachment) Reset() { *m = VolumeAttachment{} } func (*VolumeAttachment) ProtoMessage() {} -func (*VolumeAttachment) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{64} -} -func (m *VolumeAttachment) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *VolumeAttachment) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_VolumeAttachment.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *VolumeAttachment) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[64] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *VolumeAttachment) XXX_Merge(src proto.Message) { - xxx_messageInfo_VolumeAttachment.Merge(m, src) + +// Deprecated: Use VolumeAttachment.ProtoReflect.Descriptor instead. +func (*VolumeAttachment) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{64} } -func (m *VolumeAttachment) XXX_Size() int { - return m.Size() + +func (x *VolumeAttachment) GetID() string { + if x != nil { + return x.ID + } + return "" } -func (m *VolumeAttachment) XXX_DiscardUnknown() { - xxx_messageInfo_VolumeAttachment.DiscardUnknown(m) + +func (x *VolumeAttachment) GetSource() string { + if x != nil { + return x.Source + } + return "" } -var xxx_messageInfo_VolumeAttachment proto.InternalMessageInfo +func (x *VolumeAttachment) GetTarget() string { + if x != nil { + return x.Target + } + return "" +} // TopologyRequirement expresses the user's requirements for a volume's // accessible topology. type TopologyRequirement struct { + state protoimpl.MessageState `protogen:"open.v1"` // Specifies the list of topologies the provisioned volume MUST be // accessible from. // This field is OPTIONAL. If TopologyRequirement is specified either @@ -4759,40 +6177,54 @@ type TopologyRequirement struct { // combination of "Z3" and other possibilities from the list of // requisite. If that's not possible, it should fall back to a // combination of other possibilities from the list of requisite. - Preferred []*Topology `protobuf:"bytes,2,rep,name=preferred,proto3" json:"preferred,omitempty"` + Preferred []*Topology `protobuf:"bytes,2,rep,name=preferred,proto3" json:"preferred,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *TopologyRequirement) Reset() { + *x = TopologyRequirement{} + mi := &file_api_types_proto_msgTypes[65] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *TopologyRequirement) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *TopologyRequirement) Reset() { *m = TopologyRequirement{} } func (*TopologyRequirement) ProtoMessage() {} -func (*TopologyRequirement) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{65} -} -func (m *TopologyRequirement) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *TopologyRequirement) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_TopologyRequirement.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *TopologyRequirement) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[65] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *TopologyRequirement) XXX_Merge(src proto.Message) { - xxx_messageInfo_TopologyRequirement.Merge(m, src) -} -func (m *TopologyRequirement) XXX_Size() int { - return m.Size() + +// Deprecated: Use TopologyRequirement.ProtoReflect.Descriptor instead. +func (*TopologyRequirement) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{65} } -func (m *TopologyRequirement) XXX_DiscardUnknown() { - xxx_messageInfo_TopologyRequirement.DiscardUnknown(m) + +func (x *TopologyRequirement) GetRequisite() []*Topology { + if x != nil { + return x.Requisite + } + return nil } -var xxx_messageInfo_TopologyRequirement proto.InternalMessageInfo +func (x *TopologyRequirement) GetPreferred() []*Topology { + if x != nil { + return x.Preferred + } + return nil +} // Topology is a map of topological domains to topological segments. // A topological domain is a sub-division of a cluster, like "region", @@ -4824,43 +6256,52 @@ var xxx_messageInfo_TopologyRequirement proto.InternalMessageInfo // alphanumeric character with '-', '_', '.', or alphanumerics in // between. type Topology struct { - Segments map[string]string `protobuf:"bytes,1,rep,name=segments,proto3" json:"segments,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + state protoimpl.MessageState `protogen:"open.v1"` + Segments map[string]string `protobuf:"bytes,1,rep,name=segments,proto3" json:"segments,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Topology) Reset() { + *x = Topology{} + mi := &file_api_types_proto_msgTypes[66] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Topology) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Topology) Reset() { *m = Topology{} } func (*Topology) ProtoMessage() {} -func (*Topology) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{66} -} -func (m *Topology) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Topology) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_Topology.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *Topology) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[66] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *Topology) XXX_Merge(src proto.Message) { - xxx_messageInfo_Topology.Merge(m, src) -} -func (m *Topology) XXX_Size() int { - return m.Size() -} -func (m *Topology) XXX_DiscardUnknown() { - xxx_messageInfo_Topology.DiscardUnknown(m) + +// Deprecated: Use Topology.ProtoReflect.Descriptor instead. +func (*Topology) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{66} } -var xxx_messageInfo_Topology proto.InternalMessageInfo +func (x *Topology) GetSegments() map[string]string { + if x != nil { + return x.Segments + } + return nil +} // VolumeCapability specifies a capability of a volume. type VolumeCapability struct { + state protoimpl.MessageState `protogen:"open.v1"` // Specifies what API the volume will be accessed using. One of the // following fields MUST be specified. // @@ -4870,22589 +6311,1816 @@ type VolumeCapability struct { // *VolumeCapability_Mount AccessType isVolumeCapability_AccessType `protobuf_oneof:"access_type"` // This is a REQUIRED field. - AccessMode *VolumeCapability_AccessMode `protobuf:"bytes,3,opt,name=access_mode,json=accessMode,proto3" json:"access_mode,omitempty"` + AccessMode *VolumeCapability_AccessMode `protobuf:"bytes,3,opt,name=access_mode,json=accessMode,proto3" json:"access_mode,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VolumeCapability) Reset() { + *x = VolumeCapability{} + mi := &file_api_types_proto_msgTypes[67] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VolumeCapability) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *VolumeCapability) Reset() { *m = VolumeCapability{} } func (*VolumeCapability) ProtoMessage() {} -func (*VolumeCapability) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{67} -} -func (m *VolumeCapability) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *VolumeCapability) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_VolumeCapability.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (x *VolumeCapability) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[67] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) +} + +// Deprecated: Use VolumeCapability.ProtoReflect.Descriptor instead. +func (*VolumeCapability) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{67} } -func (m *VolumeCapability) XXX_Merge(src proto.Message) { - xxx_messageInfo_VolumeCapability.Merge(m, src) + +func (x *VolumeCapability) GetAccessType() isVolumeCapability_AccessType { + if x != nil { + return x.AccessType + } + return nil } -func (m *VolumeCapability) XXX_Size() int { - return m.Size() + +func (x *VolumeCapability) GetBlock() *VolumeCapability_BlockVolume { + if x != nil { + if x, ok := x.AccessType.(*VolumeCapability_Block); ok { + return x.Block + } + } + return nil } -func (m *VolumeCapability) XXX_DiscardUnknown() { - xxx_messageInfo_VolumeCapability.DiscardUnknown(m) + +func (x *VolumeCapability) GetMount() *VolumeCapability_MountVolume { + if x != nil { + if x, ok := x.AccessType.(*VolumeCapability_Mount); ok { + return x.Mount + } + } + return nil } -var xxx_messageInfo_VolumeCapability proto.InternalMessageInfo +func (x *VolumeCapability) GetAccessMode() *VolumeCapability_AccessMode { + if x != nil { + return x.AccessMode + } + return nil +} type isVolumeCapability_AccessType interface { isVolumeCapability_AccessType() - MarshalTo([]byte) (int, error) - Size() int } type VolumeCapability_Block struct { - Block *VolumeCapability_BlockVolume `protobuf:"bytes,1,opt,name=block,proto3,oneof" json:"block,omitempty"` + Block *VolumeCapability_BlockVolume `protobuf:"bytes,1,opt,name=block,proto3,oneof"` } + type VolumeCapability_Mount struct { - Mount *VolumeCapability_MountVolume `protobuf:"bytes,2,opt,name=mount,proto3,oneof" json:"mount,omitempty"` + Mount *VolumeCapability_MountVolume `protobuf:"bytes,2,opt,name=mount,proto3,oneof"` } func (*VolumeCapability_Block) isVolumeCapability_AccessType() {} + func (*VolumeCapability_Mount) isVolumeCapability_AccessType() {} -func (m *VolumeCapability) GetAccessType() isVolumeCapability_AccessType { - if m != nil { - return m.AccessType - } - return nil +// BindOptions specifies options that are specific to a bind mount. +type Mount_BindOptions struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Propagation mode of mount. + Propagation MountPropagation `protobuf:"varint,1,opt,name=propagation,proto3,enum=docker.swarmkit.v1.Mount_BindOptions_Propagation" json:"propagation,omitempty"` + // allows non-recursive bind-mount, i.e. mount(2) with "bind" rather than "rbind". + NonRecursive bool `protobuf:"varint,2,opt,name=nonrecursive,proto3" json:"nonrecursive,omitempty"` + // Create the mount point + CreateMountpoint bool `protobuf:"varint,3,opt,name=createmountpoint,proto3" json:"createmountpoint,omitempty"` + // ReadOnlyNonRecursive makes the mount non-recursively read-only, but still leaves the mount recursive + // (unless NonRecursive is set to true in conjunction). + ReadOnlyNonRecursive bool `protobuf:"varint,4,opt,name=readonlynonrecursive,proto3" json:"readonlynonrecursive,omitempty"` + // ReadOnlyForceRecursive raises an error if the mount cannot be made recursively read-only. + ReadOnlyForceRecursive bool `protobuf:"varint,5,opt,name=readonlyforcerecursive,proto3" json:"readonlyforcerecursive,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *VolumeCapability) GetBlock() *VolumeCapability_BlockVolume { - if x, ok := m.GetAccessType().(*VolumeCapability_Block); ok { - return x.Block - } - return nil +func (x *Mount_BindOptions) Reset() { + *x = Mount_BindOptions{} + mi := &file_api_types_proto_msgTypes[70] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *VolumeCapability) GetMount() *VolumeCapability_MountVolume { - if x, ok := m.GetAccessType().(*VolumeCapability_Mount); ok { - return x.Mount - } - return nil +func (x *Mount_BindOptions) String() string { + return protoimpl.X.MessageStringOf(x) } -// XXX_OneofWrappers is for the internal use of the proto package. -func (*VolumeCapability) XXX_OneofWrappers() []interface{} { - return []interface{}{ - (*VolumeCapability_Block)(nil), - (*VolumeCapability_Mount)(nil), +func (*Mount_BindOptions) ProtoMessage() {} + +func (x *Mount_BindOptions) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[70] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } + return mi.MessageOf(x) } -// Indicate that the volume will be accessed via the block device API. -type VolumeCapability_BlockVolume struct { +// Deprecated: Use Mount_BindOptions.ProtoReflect.Descriptor instead. +func (*Mount_BindOptions) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{17, 0} } -func (m *VolumeCapability_BlockVolume) Reset() { *m = VolumeCapability_BlockVolume{} } -func (*VolumeCapability_BlockVolume) ProtoMessage() {} -func (*VolumeCapability_BlockVolume) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{67, 0} -} -func (m *VolumeCapability_BlockVolume) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *VolumeCapability_BlockVolume) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_VolumeCapability_BlockVolume.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 (x *Mount_BindOptions) GetPropagation() MountPropagation { + if x != nil { + return x.Propagation } + return MountPropagationRPrivate } -func (m *VolumeCapability_BlockVolume) XXX_Merge(src proto.Message) { - xxx_messageInfo_VolumeCapability_BlockVolume.Merge(m, src) -} -func (m *VolumeCapability_BlockVolume) XXX_Size() int { - return m.Size() -} -func (m *VolumeCapability_BlockVolume) XXX_DiscardUnknown() { - xxx_messageInfo_VolumeCapability_BlockVolume.DiscardUnknown(m) + +func (x *Mount_BindOptions) GetNonRecursive() bool { + if x != nil { + return x.NonRecursive + } + return false } -var xxx_messageInfo_VolumeCapability_BlockVolume proto.InternalMessageInfo +func (x *Mount_BindOptions) GetCreateMountpoint() bool { + if x != nil { + return x.CreateMountpoint + } + return false +} -// Indicate that the volume will be accessed via the filesystem API. -type VolumeCapability_MountVolume struct { - // The filesystem type. This field is OPTIONAL. - // An empty string is equal to an unspecified field value. - FsType string `protobuf:"bytes,1,opt,name=fs_type,json=fsType,proto3" json:"fs_type,omitempty"` - // The mount options that can be used for the volume. This field is - // OPTIONAL. `mount_flags` MAY contain sensitive information. - // Therefore, the CO and the Plugin MUST NOT leak this information - // to untrusted entities. The total size of this repeated field - // SHALL NOT exceed 4 KiB. - MountFlags []string `protobuf:"bytes,2,rep,name=mount_flags,json=mountFlags,proto3" json:"mount_flags,omitempty"` +func (x *Mount_BindOptions) GetReadOnlyNonRecursive() bool { + if x != nil { + return x.ReadOnlyNonRecursive + } + return false } -func (m *VolumeCapability_MountVolume) Reset() { *m = VolumeCapability_MountVolume{} } -func (*VolumeCapability_MountVolume) ProtoMessage() {} -func (*VolumeCapability_MountVolume) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{67, 1} -} -func (m *VolumeCapability_MountVolume) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *VolumeCapability_MountVolume) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_VolumeCapability_MountVolume.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 (x *Mount_BindOptions) GetReadOnlyForceRecursive() bool { + if x != nil { + return x.ReadOnlyForceRecursive } + return false } -func (m *VolumeCapability_MountVolume) XXX_Merge(src proto.Message) { - xxx_messageInfo_VolumeCapability_MountVolume.Merge(m, src) -} -func (m *VolumeCapability_MountVolume) XXX_Size() int { - return m.Size() -} -func (m *VolumeCapability_MountVolume) XXX_DiscardUnknown() { - xxx_messageInfo_VolumeCapability_MountVolume.DiscardUnknown(m) + +// VolumeOptions contains parameters for mounting the volume. +type Mount_VolumeOptions struct { + state protoimpl.MessageState `protogen:"open.v1"` + // nocopy prevents automatic copying of data to the volume with data from target + NoCopy bool `protobuf:"varint,1,opt,name=nocopy,proto3" json:"nocopy,omitempty"` + // labels to apply to the volume if creating + Labels map[string]string `protobuf:"bytes,2,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // DriverConfig specifies the options that may be passed to the driver + // if the volume is created. + // + // If this is empty, no volume will be created if the volume is missing. + DriverConfig *Driver `protobuf:"bytes,3,opt,name=driver_config,json=driverConfig,proto3" json:"driver_config,omitempty"` + // subpath inside the volume to mount. + Subpath string `protobuf:"bytes,4,opt,name=subpath,proto3" json:"subpath,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -var xxx_messageInfo_VolumeCapability_MountVolume proto.InternalMessageInfo +func (x *Mount_VolumeOptions) Reset() { + *x = Mount_VolumeOptions{} + mi := &file_api_types_proto_msgTypes[71] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} -// Specify how a volume can be accessed. -type VolumeCapability_AccessMode struct { - // This field is REQUIRED. - Mode VolumeCapability_AccessMode_Mode `protobuf:"varint,1,opt,name=mode,proto3,enum=docker.swarmkit.v1.VolumeCapability_AccessMode_Mode" json:"mode,omitempty"` +func (x *Mount_VolumeOptions) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *VolumeCapability_AccessMode) Reset() { *m = VolumeCapability_AccessMode{} } -func (*VolumeCapability_AccessMode) ProtoMessage() {} -func (*VolumeCapability_AccessMode) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5eafd0404ded3d, []int{67, 2} -} -func (m *VolumeCapability_AccessMode) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *VolumeCapability_AccessMode) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_VolumeCapability_AccessMode.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 *VolumeCapability_AccessMode) XXX_Merge(src proto.Message) { - xxx_messageInfo_VolumeCapability_AccessMode.Merge(m, src) -} -func (m *VolumeCapability_AccessMode) XXX_Size() int { - return m.Size() -} -func (m *VolumeCapability_AccessMode) XXX_DiscardUnknown() { - xxx_messageInfo_VolumeCapability_AccessMode.DiscardUnknown(m) -} - -var xxx_messageInfo_VolumeCapability_AccessMode proto.InternalMessageInfo - -func init() { - proto.RegisterEnum("docker.swarmkit.v1.ResourceType", ResourceType_name, ResourceType_value) - proto.RegisterEnum("docker.swarmkit.v1.TaskState", TaskState_name, TaskState_value) - proto.RegisterEnum("docker.swarmkit.v1.NodeRole", NodeRole_name, NodeRole_value) - proto.RegisterEnum("docker.swarmkit.v1.RaftMemberStatus_Reachability", RaftMemberStatus_Reachability_name, RaftMemberStatus_Reachability_value) - proto.RegisterEnum("docker.swarmkit.v1.NodeStatus_State", NodeStatus_State_name, NodeStatus_State_value) - proto.RegisterEnum("docker.swarmkit.v1.Mount_MountType", Mount_MountType_name, Mount_MountType_value) - proto.RegisterEnum("docker.swarmkit.v1.Mount_MountConsistency", Mount_MountConsistency_name, Mount_MountConsistency_value) - proto.RegisterEnum("docker.swarmkit.v1.Mount_BindOptions_MountPropagation", Mount_BindOptions_MountPropagation_name, Mount_BindOptions_MountPropagation_value) - proto.RegisterEnum("docker.swarmkit.v1.RestartPolicy_RestartCondition", RestartPolicy_RestartCondition_name, RestartPolicy_RestartCondition_value) - proto.RegisterEnum("docker.swarmkit.v1.UpdateConfig_FailureAction", UpdateConfig_FailureAction_name, UpdateConfig_FailureAction_value) - proto.RegisterEnum("docker.swarmkit.v1.UpdateConfig_UpdateOrder", UpdateConfig_UpdateOrder_name, UpdateConfig_UpdateOrder_value) - proto.RegisterEnum("docker.swarmkit.v1.UpdateStatus_UpdateState", UpdateStatus_UpdateState_name, UpdateStatus_UpdateState_value) - proto.RegisterEnum("docker.swarmkit.v1.IPAMConfig_AddressFamily", IPAMConfig_AddressFamily_name, IPAMConfig_AddressFamily_value) - proto.RegisterEnum("docker.swarmkit.v1.PortConfig_Protocol", PortConfig_Protocol_name, PortConfig_Protocol_value) - proto.RegisterEnum("docker.swarmkit.v1.PortConfig_PublishMode", PortConfig_PublishMode_name, PortConfig_PublishMode_value) - proto.RegisterEnum("docker.swarmkit.v1.IssuanceStatus_State", IssuanceStatus_State_name, IssuanceStatus_State_value) - proto.RegisterEnum("docker.swarmkit.v1.ExternalCA_CAProtocol", ExternalCA_CAProtocol_name, ExternalCA_CAProtocol_value) - proto.RegisterEnum("docker.swarmkit.v1.EncryptionKey_Algorithm", EncryptionKey_Algorithm_name, EncryptionKey_Algorithm_value) - proto.RegisterEnum("docker.swarmkit.v1.MaybeEncryptedRecord_Algorithm", MaybeEncryptedRecord_Algorithm_name, MaybeEncryptedRecord_Algorithm_value) - proto.RegisterEnum("docker.swarmkit.v1.Privileges_SeccompOpts_SeccompMode", Privileges_SeccompOpts_SeccompMode_name, Privileges_SeccompOpts_SeccompMode_value) - proto.RegisterEnum("docker.swarmkit.v1.Privileges_AppArmorOpts_AppArmorMode", Privileges_AppArmorOpts_AppArmorMode_name, Privileges_AppArmorOpts_AppArmorMode_value) - proto.RegisterEnum("docker.swarmkit.v1.VolumeAccessMode_Scope", VolumeAccessMode_Scope_name, VolumeAccessMode_Scope_value) - proto.RegisterEnum("docker.swarmkit.v1.VolumeAccessMode_Sharing", VolumeAccessMode_Sharing_name, VolumeAccessMode_Sharing_value) - proto.RegisterEnum("docker.swarmkit.v1.VolumePublishStatus_State", VolumePublishStatus_State_name, VolumePublishStatus_State_value) - proto.RegisterEnum("docker.swarmkit.v1.VolumeCapability_AccessMode_Mode", VolumeCapability_AccessMode_Mode_name, VolumeCapability_AccessMode_Mode_value) - proto.RegisterType((*Version)(nil), "docker.swarmkit.v1.Version") - proto.RegisterType((*IndexEntry)(nil), "docker.swarmkit.v1.IndexEntry") - proto.RegisterType((*Annotations)(nil), "docker.swarmkit.v1.Annotations") - proto.RegisterMapType((map[string]string)(nil), "docker.swarmkit.v1.Annotations.LabelsEntry") - proto.RegisterType((*NamedGenericResource)(nil), "docker.swarmkit.v1.NamedGenericResource") - proto.RegisterType((*DiscreteGenericResource)(nil), "docker.swarmkit.v1.DiscreteGenericResource") - proto.RegisterType((*GenericResource)(nil), "docker.swarmkit.v1.GenericResource") - proto.RegisterType((*Resources)(nil), "docker.swarmkit.v1.Resources") - proto.RegisterType((*ResourceRequirements)(nil), "docker.swarmkit.v1.ResourceRequirements") - proto.RegisterType((*Platform)(nil), "docker.swarmkit.v1.Platform") - proto.RegisterType((*PluginDescription)(nil), "docker.swarmkit.v1.PluginDescription") - proto.RegisterType((*EngineDescription)(nil), "docker.swarmkit.v1.EngineDescription") - proto.RegisterMapType((map[string]string)(nil), "docker.swarmkit.v1.EngineDescription.LabelsEntry") - proto.RegisterType((*NodeDescription)(nil), "docker.swarmkit.v1.NodeDescription") - proto.RegisterType((*NodeTLSInfo)(nil), "docker.swarmkit.v1.NodeTLSInfo") - proto.RegisterType((*NodeCSIInfo)(nil), "docker.swarmkit.v1.NodeCSIInfo") - proto.RegisterType((*RaftMemberStatus)(nil), "docker.swarmkit.v1.RaftMemberStatus") - proto.RegisterType((*NodeStatus)(nil), "docker.swarmkit.v1.NodeStatus") - proto.RegisterType((*Image)(nil), "docker.swarmkit.v1.Image") - proto.RegisterType((*Mount)(nil), "docker.swarmkit.v1.Mount") - proto.RegisterType((*Mount_BindOptions)(nil), "docker.swarmkit.v1.Mount.BindOptions") - proto.RegisterType((*Mount_VolumeOptions)(nil), "docker.swarmkit.v1.Mount.VolumeOptions") - proto.RegisterMapType((map[string]string)(nil), "docker.swarmkit.v1.Mount.VolumeOptions.LabelsEntry") - proto.RegisterType((*Mount_TmpfsOptions)(nil), "docker.swarmkit.v1.Mount.TmpfsOptions") - proto.RegisterType((*RestartPolicy)(nil), "docker.swarmkit.v1.RestartPolicy") - proto.RegisterType((*UpdateConfig)(nil), "docker.swarmkit.v1.UpdateConfig") - proto.RegisterType((*UpdateStatus)(nil), "docker.swarmkit.v1.UpdateStatus") - proto.RegisterType((*ContainerStatus)(nil), "docker.swarmkit.v1.ContainerStatus") - proto.RegisterType((*PortStatus)(nil), "docker.swarmkit.v1.PortStatus") - proto.RegisterType((*TaskStatus)(nil), "docker.swarmkit.v1.TaskStatus") - proto.RegisterType((*NetworkAttachmentConfig)(nil), "docker.swarmkit.v1.NetworkAttachmentConfig") - proto.RegisterMapType((map[string]string)(nil), "docker.swarmkit.v1.NetworkAttachmentConfig.DriverAttachmentOptsEntry") - proto.RegisterType((*IPAMConfig)(nil), "docker.swarmkit.v1.IPAMConfig") - proto.RegisterMapType((map[string]string)(nil), "docker.swarmkit.v1.IPAMConfig.ReservedEntry") - proto.RegisterType((*PortConfig)(nil), "docker.swarmkit.v1.PortConfig") - proto.RegisterType((*Driver)(nil), "docker.swarmkit.v1.Driver") - proto.RegisterMapType((map[string]string)(nil), "docker.swarmkit.v1.Driver.OptionsEntry") - proto.RegisterType((*IPAMOptions)(nil), "docker.swarmkit.v1.IPAMOptions") - proto.RegisterType((*Peer)(nil), "docker.swarmkit.v1.Peer") - proto.RegisterType((*WeightedPeer)(nil), "docker.swarmkit.v1.WeightedPeer") - proto.RegisterType((*IssuanceStatus)(nil), "docker.swarmkit.v1.IssuanceStatus") - proto.RegisterType((*AcceptancePolicy)(nil), "docker.swarmkit.v1.AcceptancePolicy") - proto.RegisterType((*AcceptancePolicy_RoleAdmissionPolicy)(nil), "docker.swarmkit.v1.AcceptancePolicy.RoleAdmissionPolicy") - proto.RegisterType((*AcceptancePolicy_RoleAdmissionPolicy_Secret)(nil), "docker.swarmkit.v1.AcceptancePolicy.RoleAdmissionPolicy.Secret") - proto.RegisterType((*ExternalCA)(nil), "docker.swarmkit.v1.ExternalCA") - proto.RegisterMapType((map[string]string)(nil), "docker.swarmkit.v1.ExternalCA.OptionsEntry") - proto.RegisterType((*CAConfig)(nil), "docker.swarmkit.v1.CAConfig") - proto.RegisterType((*OrchestrationConfig)(nil), "docker.swarmkit.v1.OrchestrationConfig") - proto.RegisterType((*TaskDefaults)(nil), "docker.swarmkit.v1.TaskDefaults") - proto.RegisterType((*DispatcherConfig)(nil), "docker.swarmkit.v1.DispatcherConfig") - proto.RegisterType((*RaftConfig)(nil), "docker.swarmkit.v1.RaftConfig") - proto.RegisterType((*EncryptionConfig)(nil), "docker.swarmkit.v1.EncryptionConfig") - proto.RegisterType((*SpreadOver)(nil), "docker.swarmkit.v1.SpreadOver") - proto.RegisterType((*PlacementPreference)(nil), "docker.swarmkit.v1.PlacementPreference") - proto.RegisterType((*Placement)(nil), "docker.swarmkit.v1.Placement") - proto.RegisterType((*JoinTokens)(nil), "docker.swarmkit.v1.JoinTokens") - proto.RegisterType((*RootCA)(nil), "docker.swarmkit.v1.RootCA") - proto.RegisterType((*Certificate)(nil), "docker.swarmkit.v1.Certificate") - proto.RegisterType((*EncryptionKey)(nil), "docker.swarmkit.v1.EncryptionKey") - proto.RegisterType((*ManagerStatus)(nil), "docker.swarmkit.v1.ManagerStatus") - proto.RegisterType((*FileTarget)(nil), "docker.swarmkit.v1.FileTarget") - proto.RegisterType((*RuntimeTarget)(nil), "docker.swarmkit.v1.RuntimeTarget") - proto.RegisterType((*SecretReference)(nil), "docker.swarmkit.v1.SecretReference") - proto.RegisterType((*ConfigReference)(nil), "docker.swarmkit.v1.ConfigReference") - proto.RegisterType((*BlacklistedCertificate)(nil), "docker.swarmkit.v1.BlacklistedCertificate") - proto.RegisterType((*HealthConfig)(nil), "docker.swarmkit.v1.HealthConfig") - proto.RegisterType((*MaybeEncryptedRecord)(nil), "docker.swarmkit.v1.MaybeEncryptedRecord") - proto.RegisterType((*RootRotation)(nil), "docker.swarmkit.v1.RootRotation") - proto.RegisterType((*Privileges)(nil), "docker.swarmkit.v1.Privileges") - proto.RegisterType((*Privileges_CredentialSpec)(nil), "docker.swarmkit.v1.Privileges.CredentialSpec") - proto.RegisterType((*Privileges_SELinuxContext)(nil), "docker.swarmkit.v1.Privileges.SELinuxContext") - proto.RegisterType((*Privileges_SeccompOpts)(nil), "docker.swarmkit.v1.Privileges.SeccompOpts") - proto.RegisterType((*Privileges_AppArmorOpts)(nil), "docker.swarmkit.v1.Privileges.AppArmorOpts") - proto.RegisterType((*JobStatus)(nil), "docker.swarmkit.v1.JobStatus") - proto.RegisterType((*VolumeAccessMode)(nil), "docker.swarmkit.v1.VolumeAccessMode") - proto.RegisterType((*VolumeAccessMode_BlockVolume)(nil), "docker.swarmkit.v1.VolumeAccessMode.BlockVolume") - proto.RegisterType((*VolumeAccessMode_MountVolume)(nil), "docker.swarmkit.v1.VolumeAccessMode.MountVolume") - proto.RegisterType((*VolumeSecret)(nil), "docker.swarmkit.v1.VolumeSecret") - proto.RegisterType((*VolumePublishStatus)(nil), "docker.swarmkit.v1.VolumePublishStatus") - proto.RegisterMapType((map[string]string)(nil), "docker.swarmkit.v1.VolumePublishStatus.PublishContextEntry") - proto.RegisterType((*VolumeInfo)(nil), "docker.swarmkit.v1.VolumeInfo") - proto.RegisterMapType((map[string]string)(nil), "docker.swarmkit.v1.VolumeInfo.VolumeContextEntry") - proto.RegisterType((*CapacityRange)(nil), "docker.swarmkit.v1.CapacityRange") - proto.RegisterType((*VolumeAssignment)(nil), "docker.swarmkit.v1.VolumeAssignment") - proto.RegisterMapType((map[string]string)(nil), "docker.swarmkit.v1.VolumeAssignment.PublishContextEntry") - proto.RegisterMapType((map[string]string)(nil), "docker.swarmkit.v1.VolumeAssignment.VolumeContextEntry") - proto.RegisterType((*VolumeAttachment)(nil), "docker.swarmkit.v1.VolumeAttachment") - proto.RegisterType((*TopologyRequirement)(nil), "docker.swarmkit.v1.TopologyRequirement") - proto.RegisterType((*Topology)(nil), "docker.swarmkit.v1.Topology") - proto.RegisterMapType((map[string]string)(nil), "docker.swarmkit.v1.Topology.SegmentsEntry") - proto.RegisterType((*VolumeCapability)(nil), "docker.swarmkit.v1.VolumeCapability") - proto.RegisterType((*VolumeCapability_BlockVolume)(nil), "docker.swarmkit.v1.VolumeCapability.BlockVolume") - proto.RegisterType((*VolumeCapability_MountVolume)(nil), "docker.swarmkit.v1.VolumeCapability.MountVolume") - proto.RegisterType((*VolumeCapability_AccessMode)(nil), "docker.swarmkit.v1.VolumeCapability.AccessMode") -} - -func init() { - proto.RegisterFile("github.com/docker/swarmkit/api/types.proto", fileDescriptor_0b5eafd0404ded3d) -} - -var fileDescriptor_0b5eafd0404ded3d = []byte{ - // 6589 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x7b, 0x5d, 0x6c, 0x24, 0xc7, - 0x99, 0x18, 0xe7, 0x97, 0x33, 0xdf, 0x0c, 0xc9, 0xde, 0x22, 0x45, 0x71, 0x47, 0x2b, 0x92, 0x6a, - 0x69, 0xad, 0xd5, 0x4a, 0xe6, 0xae, 0x56, 0xb2, 0xb2, 0x92, 0x2c, 0x6b, 0xe7, 0x8f, 0xcb, 0xd1, - 0x92, 0x33, 0x83, 0x9a, 0xe1, 0xae, 0x65, 0x20, 0xee, 0x34, 0xbb, 0x8b, 0xc3, 0xd6, 0xf6, 0x74, - 0x77, 0xba, 0x7b, 0xc8, 0x65, 0x9c, 0x20, 0x7a, 0x8a, 0x03, 0x02, 0x81, 0x13, 0x04, 0x70, 0x1c, - 0x24, 0x44, 0x82, 0xd8, 0x01, 0x02, 0xf8, 0x21, 0x0f, 0x79, 0x08, 0x12, 0xdc, 0x83, 0x0e, 0x38, - 0x1c, 0x7c, 0x4f, 0x67, 0x9f, 0x0f, 0x77, 0x86, 0xef, 0xc0, 0x3b, 0xd3, 0xcf, 0x87, 0xbb, 0x97, - 0xc3, 0xdd, 0xe3, 0xa1, 0xfe, 0xba, 0x7b, 0xb8, 0x43, 0x72, 0xd7, 0xf2, 0xbd, 0x90, 0x5d, 0xdf, - 0x5f, 0x55, 0x7d, 0x55, 0xf5, 0xd5, 0xf7, 0x7d, 0xf5, 0x0d, 0xdc, 0x1c, 0x58, 0xe1, 0xde, 0x68, - 0x67, 0xcd, 0x70, 0x87, 0xb7, 0x4c, 0xd7, 0x78, 0x4c, 0xfc, 0x5b, 0xc1, 0x81, 0xee, 0x0f, 0x1f, - 0x5b, 0xe1, 0x2d, 0xdd, 0xb3, 0x6e, 0x85, 0x87, 0x1e, 0x09, 0xd6, 0x3c, 0xdf, 0x0d, 0x5d, 0x84, - 0x38, 0xc1, 0x9a, 0x24, 0x58, 0xdb, 0x7f, 0xbb, 0xb2, 0x32, 0x70, 0xdd, 0x81, 0x4d, 0x6e, 0x31, - 0x8a, 0x9d, 0xd1, 0xee, 0xad, 0xd0, 0x1a, 0x92, 0x20, 0xd4, 0x87, 0x1e, 0x67, 0xaa, 0x2c, 0x9f, - 0x25, 0x30, 0x47, 0xbe, 0x1e, 0x5a, 0xae, 0x73, 0x1e, 0xfe, 0xc0, 0xd7, 0x3d, 0x8f, 0xf8, 0xa2, - 0xd3, 0xca, 0xc2, 0xc0, 0x1d, 0xb8, 0xec, 0xf3, 0x16, 0xfd, 0xe2, 0x50, 0x75, 0x05, 0xa6, 0x1f, - 0x12, 0x3f, 0xb0, 0x5c, 0x07, 0x2d, 0x40, 0xce, 0x72, 0x4c, 0xf2, 0x64, 0x29, 0xb5, 0x9a, 0xba, - 0x91, 0xc5, 0xbc, 0xa1, 0xde, 0x06, 0x68, 0xd1, 0x8f, 0xa6, 0x13, 0xfa, 0x87, 0x48, 0x81, 0xcc, - 0x63, 0x72, 0xc8, 0x28, 0x8a, 0x98, 0x7e, 0x52, 0xc8, 0xbe, 0x6e, 0x2f, 0xa5, 0x39, 0x64, 0x5f, - 0xb7, 0xd5, 0x5f, 0xa5, 0xa0, 0x54, 0x75, 0x1c, 0x37, 0x64, 0xa3, 0x0b, 0x10, 0x82, 0xac, 0xa3, - 0x0f, 0x89, 0x60, 0x62, 0xdf, 0xa8, 0x0e, 0x79, 0x5b, 0xdf, 0x21, 0x76, 0xb0, 0x94, 0x5e, 0xcd, - 0xdc, 0x28, 0xdd, 0x79, 0x73, 0xed, 0x69, 0x95, 0xac, 0x25, 0x84, 0xac, 0x6d, 0x32, 0x6a, 0x36, - 0x08, 0x2c, 0x58, 0xd1, 0x37, 0x60, 0xda, 0x72, 0x4c, 0xcb, 0x20, 0xc1, 0x52, 0x96, 0x49, 0x59, - 0x9e, 0x24, 0x25, 0x1e, 0x7d, 0x2d, 0xfb, 0x93, 0x93, 0x95, 0x29, 0x2c, 0x99, 0x2a, 0xef, 0x43, - 0x29, 0x21, 0x76, 0xc2, 0xdc, 0x16, 0x20, 0xb7, 0xaf, 0xdb, 0x23, 0x22, 0x66, 0xc7, 0x1b, 0x1f, - 0xa4, 0xef, 0xa6, 0xd4, 0x7b, 0xb0, 0xd0, 0xd6, 0x87, 0xc4, 0xbc, 0x4f, 0x1c, 0xe2, 0x5b, 0x06, - 0x26, 0x81, 0x3b, 0xf2, 0x0d, 0x42, 0xe7, 0xfa, 0xd8, 0x72, 0x4c, 0x39, 0x57, 0xfa, 0x3d, 0x59, - 0x8a, 0x5a, 0x87, 0x17, 0x1b, 0x56, 0x60, 0xf8, 0x24, 0x24, 0xcf, 0x2d, 0x24, 0x23, 0x85, 0x9c, - 0xa4, 0x60, 0xee, 0x2c, 0xf7, 0xb7, 0x60, 0x9e, 0xaa, 0xd8, 0xd4, 0x7c, 0x01, 0xd1, 0x02, 0x8f, - 0x18, 0x4c, 0x58, 0xe9, 0xce, 0x8d, 0x49, 0x1a, 0x9a, 0x34, 0x93, 0x8d, 0x29, 0x7c, 0x85, 0x89, - 0x91, 0x80, 0x9e, 0x47, 0x0c, 0x64, 0xc0, 0xa2, 0x29, 0x06, 0x7d, 0x46, 0x7c, 0x9a, 0x89, 0x9f, - 0xb8, 0x8c, 0xe7, 0x4c, 0x73, 0x63, 0x0a, 0x2f, 0x48, 0x61, 0xc9, 0x4e, 0x6a, 0x00, 0x05, 0x29, - 0x5b, 0xfd, 0x41, 0x0a, 0x8a, 0x12, 0x19, 0xa0, 0x37, 0xa0, 0xe8, 0xe8, 0x8e, 0xab, 0x19, 0xde, - 0x28, 0x60, 0x13, 0xca, 0xd4, 0xca, 0xa7, 0x27, 0x2b, 0x85, 0xb6, 0xee, 0xb8, 0xf5, 0xee, 0x76, - 0x80, 0x0b, 0x14, 0x5d, 0xf7, 0x46, 0x01, 0x7a, 0x05, 0xca, 0x43, 0x32, 0x74, 0xfd, 0x43, 0x6d, - 0xe7, 0x30, 0x24, 0x81, 0x50, 0x5b, 0x89, 0xc3, 0x6a, 0x14, 0x84, 0x3e, 0x82, 0xe9, 0x01, 0x1f, - 0xd2, 0x52, 0x86, 0x6d, 0x9f, 0x57, 0x27, 0x8d, 0xfe, 0xcc, 0xa8, 0xb1, 0xe4, 0x51, 0xbf, 0x9f, - 0x86, 0x85, 0x08, 0x4a, 0xfe, 0xf9, 0xc8, 0xf2, 0xc9, 0x90, 0x38, 0x61, 0x80, 0xbe, 0x06, 0x79, - 0xdb, 0x1a, 0x5a, 0x61, 0x20, 0x74, 0xfe, 0xf2, 0x24, 0xb1, 0xd1, 0xa4, 0xb0, 0x20, 0x46, 0x55, - 0x28, 0xfb, 0x24, 0x20, 0xfe, 0x3e, 0xdf, 0xf1, 0x42, 0xa3, 0x97, 0x30, 0x8f, 0xb1, 0xa0, 0x0f, - 0x00, 0x82, 0x03, 0xdd, 0x13, 0x53, 0xce, 0x30, 0x01, 0x2f, 0xad, 0x71, 0xbb, 0xb0, 0x26, 0xed, - 0xc2, 0x5a, 0xcb, 0x09, 0xdf, 0x7b, 0xf7, 0x21, 0xdd, 0x3f, 0xb8, 0x48, 0xc9, 0xb9, 0x36, 0x36, - 0xe0, 0x8a, 0x50, 0x18, 0x85, 0x79, 0x96, 0x43, 0x02, 0x7a, 0xac, 0x2e, 0x15, 0xa1, 0x70, 0xae, - 0x5e, 0xc4, 0xa4, 0xae, 0x43, 0xa1, 0x6b, 0xeb, 0xe1, 0xae, 0xeb, 0x0f, 0x91, 0x0a, 0x65, 0xdd, - 0x37, 0xf6, 0xac, 0x90, 0x18, 0xe1, 0xc8, 0x97, 0x36, 0x60, 0x0c, 0x86, 0x16, 0x21, 0xed, 0xf2, - 0xe9, 0x16, 0x6b, 0xf9, 0xd3, 0x93, 0x95, 0x74, 0xa7, 0x87, 0xd3, 0x6e, 0xa0, 0x7e, 0x08, 0x57, - 0xba, 0xf6, 0x68, 0x60, 0x39, 0x0d, 0x12, 0x18, 0xbe, 0xe5, 0xd1, 0x39, 0xd2, 0xb3, 0x41, 0x2d, - 0xa9, 0x3c, 0x1b, 0xf4, 0x3b, 0x32, 0x30, 0xe9, 0xd8, 0xc0, 0xa8, 0xdf, 0x4d, 0xc3, 0x95, 0xa6, - 0x33, 0xb0, 0x1c, 0x92, 0xe4, 0xbe, 0x0e, 0xb3, 0x84, 0x01, 0xb5, 0x7d, 0x6e, 0xf4, 0x84, 0x9c, - 0x19, 0x0e, 0x95, 0x96, 0xb0, 0x75, 0xc6, 0x3a, 0xbd, 0x3d, 0x69, 0x11, 0x9e, 0x92, 0x3e, 0xd1, - 0x46, 0x35, 0x61, 0xda, 0x63, 0x93, 0x08, 0xc4, 0x26, 0xbb, 0x3e, 0x49, 0xd6, 0x53, 0xf3, 0x94, - 0xa6, 0x4a, 0xf0, 0x7e, 0x19, 0x53, 0xf5, 0x1f, 0x33, 0x30, 0xd7, 0x76, 0xcd, 0x31, 0x3d, 0x54, - 0xa0, 0xb0, 0xe7, 0x06, 0x61, 0xc2, 0x2c, 0x47, 0x6d, 0x74, 0x17, 0x0a, 0x9e, 0x58, 0x3e, 0xb1, - 0x07, 0xaf, 0x4d, 0x1e, 0x32, 0xa7, 0xc1, 0x11, 0x35, 0xfa, 0x10, 0x8a, 0xf2, 0xe0, 0xca, 0xdd, - 0x77, 0xc9, 0xf6, 0x8d, 0xe9, 0xd1, 0x47, 0x90, 0xe7, 0x8b, 0x20, 0x36, 0xdd, 0xf5, 0x67, 0xd2, - 0x39, 0x16, 0x4c, 0xe8, 0x3e, 0x14, 0x42, 0x3b, 0xd0, 0x2c, 0x67, 0xd7, 0x5d, 0xca, 0x31, 0x01, - 0x2b, 0x13, 0x4d, 0x9d, 0x6b, 0x92, 0xfe, 0x66, 0xaf, 0xe5, 0xec, 0xba, 0xb5, 0xd2, 0xe9, 0xc9, - 0xca, 0xb4, 0x68, 0xe0, 0xe9, 0xd0, 0x0e, 0xe8, 0x07, 0xba, 0x06, 0xd9, 0x5d, 0xcb, 0x0b, 0x96, - 0xf2, 0xab, 0xa9, 0x1b, 0x85, 0x5a, 0xe1, 0xf4, 0x64, 0x25, 0xbb, 0xde, 0xea, 0xf6, 0x30, 0x83, - 0xd2, 0x6e, 0x8c, 0xc0, 0xe2, 0xdd, 0x4c, 0xb3, 0xf5, 0x3c, 0xb7, 0x9b, 0x7a, 0xaf, 0x15, 0x77, - 0x23, 0x1a, 0x78, 0xda, 0x08, 0x2c, 0xfa, 0xa1, 0xfe, 0x87, 0x14, 0x94, 0x12, 0x83, 0x41, 0x2f, - 0x03, 0x84, 0xfe, 0x28, 0x08, 0x35, 0xdf, 0x75, 0x43, 0xb6, 0x26, 0x65, 0x5c, 0x64, 0x10, 0xec, - 0xba, 0x21, 0x5a, 0x83, 0x79, 0x83, 0xf8, 0xa1, 0x66, 0x05, 0xc1, 0x88, 0xf8, 0x5a, 0x30, 0xda, - 0xf9, 0x8c, 0x18, 0x21, 0x5b, 0x9f, 0x32, 0xbe, 0x42, 0x51, 0x2d, 0x86, 0xe9, 0x71, 0x04, 0x7a, - 0x07, 0x16, 0x93, 0xf4, 0xde, 0x68, 0xc7, 0xb6, 0x0c, 0x8d, 0xee, 0x99, 0x0c, 0x63, 0x99, 0x8f, - 0x59, 0xba, 0x0c, 0xf7, 0x80, 0x1c, 0xaa, 0x3f, 0x17, 0x63, 0x12, 0x83, 0x45, 0x2b, 0x50, 0xe2, - 0xfb, 0x4f, 0x4b, 0x6c, 0x14, 0xe0, 0x20, 0x7a, 0x67, 0xa0, 0x57, 0x61, 0xda, 0x71, 0x4d, 0xa2, - 0x59, 0xa6, 0x38, 0xbe, 0x70, 0x7a, 0xb2, 0x92, 0xa7, 0x22, 0x5a, 0x0d, 0x9c, 0xa7, 0xa8, 0x96, - 0x89, 0x6e, 0xc1, 0xc2, 0x50, 0x7f, 0xa2, 0xed, 0xbb, 0xf6, 0x68, 0x48, 0x02, 0xcd, 0x23, 0xbe, - 0x46, 0x31, 0x6c, 0x20, 0x19, 0x7c, 0x65, 0xa8, 0x3f, 0x79, 0xc8, 0x51, 0x5d, 0xe2, 0x53, 0x56, - 0xb4, 0x05, 0xf3, 0xba, 0x61, 0x90, 0x20, 0xb0, 0x76, 0x6c, 0xa2, 0x85, 0xae, 0xe7, 0xda, 0xee, - 0xe0, 0x50, 0x6c, 0x8b, 0x89, 0x7b, 0xb1, 0x2f, 0x68, 0x30, 0x8a, 0x19, 0x25, 0x4c, 0xfd, 0x45, - 0x0a, 0x14, 0xac, 0xef, 0x86, 0x5b, 0x64, 0xb8, 0x43, 0xfc, 0x5e, 0xa8, 0x87, 0xa3, 0x00, 0x2d, - 0x42, 0xde, 0x26, 0xba, 0x49, 0x7c, 0x36, 0xab, 0x02, 0x16, 0x2d, 0xb4, 0x4d, 0x8d, 0xb0, 0x6e, - 0xec, 0xe9, 0x3b, 0x96, 0x6d, 0x85, 0x87, 0x6c, 0x5a, 0xb3, 0x93, 0xcf, 0xff, 0x59, 0x99, 0x6b, - 0x38, 0xc1, 0x88, 0xc7, 0xc4, 0xa0, 0x25, 0x98, 0x1e, 0x92, 0x20, 0xd0, 0x07, 0x7c, 0xda, 0x45, - 0x2c, 0x9b, 0xea, 0x87, 0x50, 0x4e, 0xf2, 0xa1, 0x12, 0x4c, 0x6f, 0xb7, 0x1f, 0xb4, 0x3b, 0x8f, - 0xda, 0xca, 0x14, 0x9a, 0x83, 0xd2, 0x76, 0x1b, 0x37, 0xab, 0xf5, 0x8d, 0x6a, 0x6d, 0xb3, 0xa9, - 0xa4, 0xd0, 0x0c, 0x14, 0xe3, 0x66, 0x5a, 0xfd, 0x3f, 0x29, 0x00, 0xaa, 0x32, 0x31, 0xa9, 0x0f, - 0x20, 0x17, 0x84, 0x7a, 0xc8, 0x57, 0x6a, 0xf6, 0xce, 0x6b, 0xe7, 0xed, 0x4c, 0x31, 0x5e, 0xfa, - 0x8f, 0x60, 0xce, 0x92, 0x1c, 0x61, 0x7a, 0x6c, 0x84, 0xd4, 0xba, 0xea, 0xa6, 0xe9, 0x8b, 0x81, - 0xb3, 0x6f, 0xf5, 0x43, 0xc8, 0x31, 0xee, 0xf1, 0xe1, 0x16, 0x20, 0xdb, 0xa0, 0x5f, 0x29, 0x54, - 0x84, 0x1c, 0x6e, 0x56, 0x1b, 0x9f, 0x2a, 0x69, 0xa4, 0x40, 0xb9, 0xd1, 0xea, 0xd5, 0x3b, 0xed, - 0x76, 0xb3, 0xde, 0x6f, 0x36, 0x94, 0x8c, 0x7a, 0x1d, 0x72, 0xad, 0x21, 0x95, 0x7c, 0x8d, 0xda, - 0x8b, 0x5d, 0xe2, 0x13, 0xc7, 0x90, 0xbb, 0x2b, 0x06, 0xa8, 0xdf, 0x9b, 0x83, 0xdc, 0x96, 0x3b, - 0x72, 0x42, 0x74, 0x27, 0x61, 0xf3, 0x67, 0x27, 0x3b, 0x79, 0x8c, 0x70, 0xad, 0x7f, 0xe8, 0x11, - 0x71, 0x27, 0x2c, 0x42, 0x9e, 0x5b, 0x16, 0x31, 0x1d, 0xd1, 0xa2, 0xf0, 0x50, 0xf7, 0x07, 0x24, - 0x14, 0xf3, 0x11, 0x2d, 0x74, 0x83, 0x3a, 0x1d, 0xba, 0xe9, 0x3a, 0x36, 0xdf, 0x69, 0x05, 0xee, - 0x59, 0x60, 0xa2, 0x9b, 0x1d, 0xc7, 0x3e, 0xc4, 0x11, 0x16, 0xdd, 0x87, 0x92, 0xe1, 0x3a, 0x81, - 0x15, 0x84, 0xc4, 0x31, 0x0e, 0x97, 0x0a, 0x6c, 0x50, 0xd7, 0xcf, 0x1f, 0x54, 0x3d, 0x26, 0xc6, - 0x49, 0x4e, 0xb4, 0x01, 0xe5, 0x1d, 0xcb, 0x31, 0x35, 0xd7, 0xe3, 0x17, 0x7e, 0xee, 0x7c, 0xbb, - 0xc7, 0x25, 0xd5, 0x2c, 0xc7, 0xec, 0x70, 0x62, 0x5c, 0xda, 0x89, 0x1b, 0xa8, 0x0d, 0xb3, 0xfc, - 0x78, 0x45, 0xb2, 0xf2, 0x4c, 0xd6, 0xeb, 0xe7, 0xcb, 0xe2, 0x67, 0x4e, 0x4a, 0x9b, 0xd9, 0x4f, - 0x36, 0xd1, 0x03, 0x98, 0x09, 0x87, 0xde, 0x6e, 0x10, 0x89, 0x9b, 0x66, 0xe2, 0xbe, 0x72, 0x81, - 0xe6, 0x29, 0xb9, 0x94, 0x56, 0x0e, 0x13, 0xad, 0xca, 0x7f, 0xcd, 0x41, 0x29, 0x31, 0x72, 0xd4, - 0x83, 0x92, 0xe7, 0xbb, 0x9e, 0x3e, 0x60, 0x4e, 0x8b, 0x58, 0xd4, 0xb7, 0x9f, 0x69, 0xd6, 0x6b, - 0xdd, 0x98, 0x11, 0x27, 0xa5, 0xa0, 0x77, 0xa1, 0xec, 0xb8, 0x8e, 0x4f, 0x8c, 0x91, 0x1f, 0x58, - 0xfb, 0x7c, 0xd1, 0x0b, 0x35, 0xe5, 0xf4, 0x64, 0xa5, 0xdc, 0x76, 0x1d, 0x2c, 0xe1, 0x78, 0x8c, - 0x0a, 0xdd, 0x03, 0xc5, 0xf0, 0x89, 0x1e, 0x92, 0x21, 0xed, 0xc9, 0x73, 0x2d, 0x87, 0x6f, 0x8b, - 0x42, 0x6d, 0xe1, 0xf4, 0x64, 0x45, 0xa9, 0x33, 0xdc, 0x56, 0x84, 0xc3, 0x4f, 0x51, 0xa3, 0x4d, - 0x58, 0x90, 0x1b, 0x63, 0xac, 0x7f, 0xbe, 0x85, 0x96, 0x4e, 0x4f, 0x56, 0x16, 0xe4, 0x16, 0x1a, - 0x1b, 0xc7, 0x44, 0x2e, 0x84, 0x61, 0x51, 0xc2, 0x77, 0x5d, 0xdf, 0x20, 0xb1, 0xbc, 0x1c, 0x93, - 0x57, 0x39, 0x3d, 0x59, 0x59, 0x94, 0xf2, 0xd6, 0x5d, 0xe6, 0x78, 0x4a, 0x89, 0xe7, 0x70, 0xaa, - 0xc7, 0x69, 0x28, 0x25, 0xd4, 0x86, 0x6e, 0x42, 0x01, 0x77, 0x71, 0xeb, 0x61, 0xb5, 0xdf, 0x54, - 0xa6, 0x2a, 0xd7, 0x8e, 0x8e, 0x57, 0x97, 0xd8, 0x0c, 0x93, 0xaa, 0xed, 0xfa, 0xd6, 0x3e, 0x3d, - 0xdd, 0x37, 0x60, 0x5a, 0x92, 0xa6, 0x2a, 0x2f, 0x1d, 0x1d, 0xaf, 0xbe, 0x78, 0x96, 0x34, 0x41, - 0x89, 0x7b, 0x1b, 0x55, 0xdc, 0x6c, 0x28, 0xe9, 0xc9, 0x94, 0xb8, 0xb7, 0xa7, 0xfb, 0xc4, 0x44, - 0x5f, 0x81, 0xbc, 0x20, 0xcc, 0x54, 0x2a, 0x47, 0xc7, 0xab, 0x8b, 0x67, 0x09, 0x63, 0x3a, 0xdc, - 0xdb, 0xac, 0x3e, 0x6c, 0x2a, 0xd9, 0xc9, 0x74, 0xb8, 0x67, 0xeb, 0xfb, 0x04, 0xbd, 0x06, 0x39, - 0x4e, 0x96, 0xab, 0x5c, 0x3d, 0x3a, 0x5e, 0x7d, 0xe1, 0x29, 0x71, 0x94, 0xaa, 0xb2, 0xf4, 0x6f, - 0x7f, 0xb8, 0x3c, 0xf5, 0xff, 0x7f, 0xb4, 0xac, 0x9c, 0x45, 0x57, 0x7e, 0x98, 0x86, 0x99, 0xb1, - 0xc3, 0x80, 0x54, 0xc8, 0x3b, 0xae, 0xe1, 0x7a, 0xdc, 0xbf, 0x2a, 0xc8, 0x4b, 0xad, 0xee, 0x7a, - 0x87, 0x58, 0x60, 0xd0, 0x83, 0x33, 0x1e, 0xe2, 0x3b, 0xcf, 0x78, 0xd2, 0x26, 0xfa, 0x88, 0x1f, - 0xc3, 0x8c, 0xe9, 0x5b, 0xfb, 0xc4, 0xd7, 0x0c, 0xd7, 0xd9, 0xb5, 0x06, 0xc2, 0x77, 0xaa, 0x4c, - 0x0c, 0xa6, 0x18, 0x21, 0x2e, 0x73, 0x86, 0x3a, 0xa3, 0x47, 0xd7, 0x61, 0x3a, 0x18, 0xed, 0x78, - 0x7a, 0xb8, 0xc7, 0x36, 0x5e, 0x91, 0xfb, 0x1c, 0x3d, 0x0e, 0xc2, 0x12, 0xf7, 0x25, 0x9c, 0xc8, - 0x8a, 0x07, 0xe5, 0xe4, 0x11, 0xa7, 0xee, 0x4a, 0x60, 0xfd, 0x0b, 0x22, 0x22, 0x0d, 0x16, 0x8a, - 0xe1, 0x22, 0x85, 0xf0, 0x60, 0xe2, 0x75, 0xc8, 0x0e, 0xe9, 0x1d, 0x4f, 0xe5, 0xcc, 0xd4, 0xe6, - 0xa9, 0x2f, 0xfb, 0xcb, 0x93, 0x95, 0x92, 0x1b, 0xac, 0xad, 0x5b, 0x36, 0xd9, 0x72, 0x4d, 0x82, - 0x19, 0x01, 0xbd, 0x76, 0xa4, 0x8d, 0x11, 0x17, 0xa3, 0x68, 0xaa, 0xbf, 0x93, 0x82, 0x2c, 0xb5, - 0xe7, 0xe8, 0x25, 0xc8, 0xd6, 0x5a, 0xed, 0x86, 0x32, 0x55, 0xb9, 0x72, 0x74, 0xbc, 0x3a, 0xc3, - 0x94, 0x4a, 0x11, 0xd4, 0x2e, 0xa0, 0x15, 0xc8, 0x3f, 0xec, 0x6c, 0x6e, 0x6f, 0xd1, 0x0d, 0x3a, - 0x7f, 0x74, 0xbc, 0x3a, 0x17, 0xa1, 0xb9, 0xda, 0xd1, 0xcb, 0x90, 0xeb, 0x6f, 0x75, 0xd7, 0x7b, - 0x4a, 0xba, 0x82, 0x8e, 0x8e, 0x57, 0x67, 0x23, 0x3c, 0x9b, 0x0e, 0x7a, 0x05, 0x72, 0xed, 0x6e, - 0xab, 0xdb, 0x54, 0x32, 0x95, 0xc5, 0xa3, 0xe3, 0x55, 0x14, 0xa1, 0x59, 0x4c, 0xdc, 0xb5, 0x3c, - 0x82, 0x5e, 0x81, 0xe9, 0xfa, 0xe6, 0x76, 0xaf, 0xdf, 0xc4, 0x4a, 0xb6, 0xb2, 0x70, 0x74, 0xbc, - 0xaa, 0x44, 0x44, 0x75, 0x7b, 0x14, 0x84, 0xc4, 0xaf, 0x5c, 0x11, 0xbb, 0xab, 0x18, 0x61, 0xd4, - 0x9f, 0xa5, 0xa0, 0x94, 0xb0, 0xfc, 0xf4, 0x80, 0x34, 0x9a, 0xeb, 0xd5, 0xed, 0xcd, 0xbe, 0x32, - 0x95, 0x38, 0x20, 0x09, 0x92, 0x06, 0xd9, 0xd5, 0x47, 0x36, 0xbd, 0x89, 0xa0, 0xde, 0x69, 0xf7, - 0x5a, 0xbd, 0x7e, 0xb3, 0xdd, 0x57, 0x52, 0x95, 0xa5, 0xa3, 0xe3, 0xd5, 0x85, 0xb3, 0xc4, 0xeb, - 0x23, 0xdb, 0xa6, 0x47, 0xa4, 0x5e, 0xad, 0x6f, 0xb0, 0x33, 0x17, 0x1f, 0x91, 0x04, 0x55, 0x5d, - 0x37, 0xf6, 0x88, 0x89, 0xde, 0x82, 0x62, 0xa3, 0xb9, 0xd9, 0xbc, 0x5f, 0x65, 0xf7, 0x6f, 0xe5, - 0xe5, 0xa3, 0xe3, 0xd5, 0xab, 0x4f, 0xf7, 0x6e, 0x93, 0x81, 0x1e, 0x12, 0xf3, 0xcc, 0x51, 0x49, - 0x90, 0xa8, 0x7f, 0x9b, 0x86, 0x19, 0x4c, 0x82, 0x50, 0xf7, 0xc3, 0xae, 0x6b, 0x5b, 0xc6, 0x21, - 0xea, 0x42, 0xd1, 0x70, 0x1d, 0xd3, 0x4a, 0x58, 0xf2, 0x3b, 0xe7, 0x78, 0xfc, 0x31, 0x97, 0x6c, - 0xd5, 0x25, 0x27, 0x8e, 0x85, 0xa0, 0x5b, 0x90, 0x33, 0x89, 0xad, 0x1f, 0x8a, 0xd0, 0xe3, 0xea, - 0x53, 0xa1, 0x67, 0x43, 0x64, 0xbd, 0x30, 0xa7, 0x63, 0x81, 0xbe, 0xfe, 0x44, 0xd3, 0xc3, 0x90, - 0x0c, 0xbd, 0x90, 0x6f, 0xa3, 0x2c, 0x2e, 0x0d, 0xf5, 0x27, 0x55, 0x01, 0x42, 0x6f, 0x43, 0xfe, - 0xc0, 0x72, 0x4c, 0xf7, 0x40, 0xf8, 0x90, 0x17, 0x08, 0x15, 0x84, 0xea, 0x11, 0x75, 0x1a, 0xcf, - 0x0c, 0x93, 0xee, 0xc4, 0x76, 0xa7, 0xdd, 0x94, 0x3b, 0x51, 0xe0, 0x3b, 0x4e, 0xdb, 0x75, 0xa8, - 0x1d, 0x82, 0x4e, 0x5b, 0x5b, 0xaf, 0xb6, 0x36, 0xb7, 0x31, 0xdd, 0x8d, 0x6c, 0xa7, 0x44, 0x24, - 0xeb, 0xba, 0x65, 0xd3, 0x58, 0xf7, 0x2a, 0x64, 0xaa, 0xed, 0x4f, 0x95, 0x74, 0x45, 0x39, 0x3a, - 0x5e, 0x2d, 0x47, 0xe8, 0xaa, 0x73, 0x18, 0xeb, 0xfd, 0x6c, 0xbf, 0xea, 0x1f, 0x66, 0xa0, 0xbc, - 0xed, 0x99, 0x7a, 0x48, 0xc4, 0x79, 0x5f, 0x85, 0x92, 0xa7, 0xfb, 0xba, 0x6d, 0x13, 0xdb, 0x0a, - 0x86, 0x22, 0x5f, 0x97, 0x04, 0xa1, 0xf7, 0x9f, 0x55, 0x8d, 0xb5, 0x02, 0x3d, 0x9c, 0x3f, 0xf8, - 0x8b, 0x95, 0x94, 0x54, 0xe8, 0x36, 0xcc, 0xee, 0xf2, 0xd1, 0x6a, 0xba, 0xc1, 0x16, 0x36, 0xc3, - 0x16, 0x76, 0x6d, 0xd2, 0xc2, 0x26, 0x87, 0xb5, 0x26, 0x26, 0x59, 0x65, 0x5c, 0x78, 0x66, 0x37, - 0xd9, 0x44, 0xef, 0xc0, 0xf4, 0xd0, 0x75, 0xac, 0xd0, 0xf5, 0x2f, 0x5f, 0x05, 0x49, 0x89, 0x6e, - 0x02, 0x8d, 0x0f, 0x34, 0x39, 0x1e, 0x86, 0x66, 0x77, 0x61, 0x1a, 0xcf, 0x0d, 0xf5, 0x27, 0xa2, - 0x43, 0x4c, 0xc1, 0xa8, 0x06, 0x39, 0xd7, 0xa7, 0x1e, 0x7d, 0x9e, 0x0d, 0xf7, 0xad, 0x4b, 0x87, - 0xcb, 0x1b, 0x1d, 0xca, 0x83, 0x39, 0xab, 0xfa, 0x1e, 0xcc, 0x8c, 0x4d, 0x82, 0x3a, 0xb2, 0xdd, - 0xea, 0x76, 0xaf, 0xa9, 0x4c, 0xa1, 0x32, 0x14, 0xea, 0x9d, 0x76, 0xbf, 0xd5, 0xde, 0xa6, 0x9e, - 0x78, 0x19, 0x0a, 0xb8, 0xb3, 0xb9, 0x59, 0xab, 0xd6, 0x1f, 0x28, 0x69, 0x75, 0x0d, 0x4a, 0x09, - 0x69, 0x68, 0x16, 0xa0, 0xd7, 0xef, 0x74, 0xb5, 0xf5, 0x16, 0xee, 0xf5, 0xb9, 0x1f, 0xdf, 0xeb, - 0x57, 0x71, 0x5f, 0x00, 0x52, 0xea, 0x5f, 0xa7, 0xe5, 0x8a, 0x0a, 0xd7, 0xbd, 0x36, 0xee, 0xba, - 0x5f, 0x30, 0x78, 0xe1, 0xbc, 0xc7, 0x8d, 0xc8, 0x85, 0x7f, 0x1f, 0x80, 0x6d, 0x1c, 0x62, 0x6a, - 0x7a, 0x28, 0x16, 0xbe, 0xf2, 0x94, 0x92, 0xfb, 0x32, 0xad, 0x8c, 0x8b, 0x82, 0xba, 0x1a, 0xa2, - 0x8f, 0xa0, 0x6c, 0xb8, 0x43, 0xcf, 0x26, 0x82, 0x39, 0x73, 0x29, 0x73, 0x29, 0xa2, 0xaf, 0x86, - 0xc9, 0xe0, 0x21, 0x3b, 0x1e, 0xde, 0xfc, 0x9b, 0x94, 0xd4, 0xcc, 0x84, 0x78, 0xa1, 0x0c, 0x85, - 0xed, 0x6e, 0xa3, 0xda, 0x6f, 0xb5, 0xef, 0x2b, 0x29, 0x04, 0x90, 0x67, 0xaa, 0x6e, 0x28, 0x69, - 0x1a, 0xe7, 0xd4, 0x3b, 0x5b, 0xdd, 0xcd, 0x26, 0xb3, 0x58, 0x68, 0x01, 0x14, 0xa9, 0x6c, 0x8d, - 0x29, 0xb2, 0xd9, 0x50, 0xb2, 0x68, 0x1e, 0xe6, 0x22, 0xa8, 0xe0, 0xcc, 0xa1, 0x45, 0x40, 0x11, - 0x30, 0x16, 0x91, 0x57, 0xff, 0x15, 0xcc, 0xd5, 0x5d, 0x27, 0xd4, 0x2d, 0x27, 0x8a, 0x01, 0xef, - 0xd0, 0x49, 0x0b, 0x10, 0x0d, 0x61, 0xd9, 0x45, 0x58, 0x9b, 0x3b, 0x3d, 0x59, 0x29, 0x45, 0xa4, - 0xad, 0x06, 0xf3, 0xd9, 0x45, 0xc3, 0xa4, 0xe7, 0xd7, 0x13, 0xd1, 0x6e, 0xae, 0x36, 0x7d, 0x7a, - 0xb2, 0x92, 0xe9, 0xb6, 0x1a, 0x98, 0xc2, 0xd0, 0x4b, 0x50, 0x24, 0x4f, 0xac, 0x50, 0x33, 0x64, - 0x70, 0x9b, 0xc3, 0x05, 0x0a, 0xa8, 0xbb, 0x26, 0x51, 0x6b, 0x00, 0x5d, 0xd7, 0x0f, 0x45, 0xcf, - 0xef, 0x42, 0xce, 0x73, 0x7d, 0x96, 0x20, 0x3c, 0x37, 0x6d, 0x4d, 0xc9, 0xf9, 0x46, 0xc5, 0x9c, - 0x58, 0xfd, 0xcf, 0x19, 0x80, 0xbe, 0x1e, 0x3c, 0x16, 0x42, 0xee, 0x42, 0x31, 0x7a, 0x22, 0x10, - 0x99, 0xc6, 0x0b, 0x57, 0x3b, 0x22, 0x46, 0xef, 0xc8, 0xcd, 0xc6, 0xa3, 0xdb, 0x89, 0x39, 0x1a, - 0xd9, 0xd1, 0xa4, 0x00, 0x71, 0x3c, 0x84, 0xa5, 0x7e, 0x04, 0xf1, 0x7d, 0xb1, 0xf2, 0xf4, 0x13, - 0xd5, 0xd9, 0xb5, 0xc0, 0x95, 0x26, 0xc2, 0x9a, 0x89, 0xb9, 0xd5, 0x33, 0x2b, 0xb2, 0x31, 0x85, - 0x63, 0x3e, 0xf4, 0x31, 0x94, 0xe8, 0xbc, 0xb5, 0x80, 0xe1, 0x44, 0x44, 0x73, 0xae, 0xaa, 0xb8, - 0x04, 0x0c, 0x5e, 0xac, 0xe5, 0x97, 0x01, 0x74, 0xcf, 0xb3, 0x2d, 0x62, 0x6a, 0x3b, 0x87, 0x2c, - 0x84, 0x29, 0xe2, 0xa2, 0x80, 0xd4, 0x0e, 0xe9, 0x71, 0x91, 0x68, 0x3d, 0x64, 0x61, 0xdc, 0x25, - 0x0a, 0x14, 0xd4, 0xd5, 0xb0, 0xa6, 0xc0, 0xac, 0x3f, 0x72, 0xa8, 0x42, 0xc5, 0xe8, 0xd4, 0xff, - 0x9d, 0x86, 0x17, 0xdb, 0x24, 0x3c, 0x70, 0xfd, 0xc7, 0xd5, 0x30, 0xd4, 0x8d, 0xbd, 0x21, 0x71, - 0xc4, 0xf2, 0x25, 0x42, 0xce, 0xd4, 0x58, 0xc8, 0xb9, 0x04, 0xd3, 0xba, 0x6d, 0xe9, 0x01, 0xe1, - 0x4e, 0x64, 0x11, 0xcb, 0x26, 0x0d, 0x8c, 0x69, 0x98, 0x4d, 0x82, 0x80, 0xf0, 0xb4, 0x21, 0x1d, - 0xb8, 0x04, 0xa0, 0xef, 0xc0, 0xa2, 0x70, 0x17, 0xf5, 0xa8, 0x2b, 0x1a, 0xa9, 0xc9, 0x57, 0x90, - 0xe6, 0xc4, 0xb8, 0x7f, 0xf2, 0xe0, 0x84, 0x3f, 0x19, 0x83, 0x3b, 0x5e, 0x28, 0xbc, 0xd3, 0x05, - 0x73, 0x02, 0xaa, 0x72, 0x1f, 0xae, 0x9e, 0xcb, 0xf2, 0x5c, 0x69, 0xc9, 0x9f, 0xa7, 0x01, 0x5a, - 0xdd, 0xea, 0x96, 0x50, 0x52, 0x03, 0xf2, 0xbb, 0xfa, 0xd0, 0xb2, 0x0f, 0x2f, 0xb2, 0x80, 0x31, - 0xfd, 0x5a, 0x95, 0xab, 0x63, 0x9d, 0xf1, 0x60, 0xc1, 0xcb, 0xa2, 0xfe, 0xd1, 0x8e, 0x43, 0xc2, - 0x28, 0xea, 0x67, 0x2d, 0x3a, 0x0c, 0x5f, 0x77, 0xa2, 0xad, 0xcb, 0x1b, 0x74, 0x01, 0xa8, 0xcb, - 0x73, 0xa0, 0x1f, 0x4a, 0xb3, 0x25, 0x9a, 0x68, 0x83, 0x3d, 0x41, 0x10, 0x7f, 0x9f, 0x98, 0x4b, - 0x39, 0xa6, 0xd4, 0xcb, 0xc6, 0x83, 0x05, 0x39, 0xd7, 0x5d, 0xc4, 0x5d, 0xf9, 0x90, 0xb9, 0x4c, - 0x31, 0xea, 0xb9, 0x74, 0x74, 0x1b, 0x66, 0xc6, 0xe6, 0xf9, 0x54, 0xba, 0xa5, 0xd5, 0x7d, 0xf8, - 0xae, 0x92, 0x15, 0x5f, 0xef, 0x29, 0x79, 0xf5, 0xf7, 0x33, 0xdc, 0xd0, 0x08, 0xad, 0x4e, 0x7e, - 0x7a, 0x2b, 0xb0, 0xdd, 0x6d, 0xb8, 0xb6, 0x30, 0x00, 0xaf, 0x5f, 0x6c, 0x7f, 0x68, 0xd4, 0xcd, - 0xc8, 0x71, 0xc4, 0x88, 0x56, 0xa0, 0xc4, 0x77, 0xb1, 0x46, 0x0f, 0x1c, 0x53, 0xeb, 0x0c, 0x06, - 0x0e, 0xa2, 0x9c, 0xe8, 0x3a, 0xcc, 0xb2, 0xa4, 0x63, 0xb0, 0x47, 0x4c, 0x4e, 0x93, 0x65, 0x34, - 0x33, 0x11, 0x94, 0x91, 0x6d, 0x41, 0x59, 0x00, 0x34, 0x16, 0x30, 0xe4, 0xd8, 0x80, 0x6e, 0x5e, - 0x36, 0x20, 0xce, 0xc2, 0xe2, 0x88, 0x92, 0x17, 0x37, 0xd4, 0x7f, 0x06, 0x05, 0x39, 0x58, 0xb4, - 0x04, 0x99, 0x7e, 0xbd, 0xab, 0x4c, 0x55, 0xe6, 0x8e, 0x8e, 0x57, 0x4b, 0x12, 0xdc, 0xaf, 0x77, - 0x29, 0x66, 0xbb, 0xd1, 0x55, 0x52, 0xe3, 0x98, 0xed, 0x46, 0x17, 0x55, 0x20, 0xdb, 0xab, 0xf7, - 0xbb, 0xd2, 0x3f, 0x93, 0x28, 0x0a, 0xab, 0x64, 0xa9, 0x7f, 0xa6, 0xee, 0x42, 0x29, 0xd1, 0x3b, - 0x7a, 0x15, 0xa6, 0x5b, 0xed, 0xfb, 0xb8, 0xd9, 0xeb, 0x29, 0x53, 0x3c, 0x82, 0x48, 0x60, 0x5b, - 0xce, 0x80, 0xae, 0x1d, 0x7a, 0x19, 0xb2, 0x1b, 0x1d, 0x7a, 0xef, 0xf3, 0x10, 0x25, 0x41, 0xb1, - 0xe1, 0x06, 0x61, 0x65, 0x5e, 0x38, 0x7e, 0x49, 0xc1, 0xea, 0x7f, 0x49, 0x41, 0x9e, 0x1f, 0xb4, - 0x89, 0x8b, 0x58, 0x8d, 0xe3, 0x26, 0x1e, 0x80, 0xbe, 0x7e, 0x7e, 0xb0, 0xb8, 0x26, 0x82, 0x36, - 0xbe, 0x35, 0x25, 0x5f, 0xe5, 0x03, 0x28, 0x27, 0x11, 0xcf, 0xb5, 0x31, 0xbf, 0x03, 0x25, 0xba, - 0xf7, 0x65, 0x34, 0x78, 0x07, 0xf2, 0xdc, 0x58, 0x44, 0xf7, 0xd0, 0xf9, 0x91, 0xab, 0xa0, 0x44, - 0x77, 0x61, 0x9a, 0x47, 0xbb, 0xf2, 0x61, 0x64, 0xf9, 0xe2, 0x13, 0x86, 0x25, 0xb9, 0xfa, 0x31, - 0x64, 0xbb, 0x84, 0xf8, 0xc9, 0xec, 0x73, 0xea, 0xdc, 0xec, 0xb3, 0xcc, 0x5e, 0xa6, 0x13, 0xd9, - 0xcb, 0x3e, 0x94, 0x1f, 0x11, 0x6b, 0xb0, 0x17, 0x12, 0x93, 0x09, 0x7a, 0x0b, 0xb2, 0x1e, 0x89, - 0x06, 0xbf, 0x34, 0x71, 0xf3, 0x11, 0xe2, 0x63, 0x46, 0x45, 0x6d, 0xcc, 0x01, 0xe3, 0x16, 0x6f, - 0x8a, 0xa2, 0xa5, 0xfe, 0x51, 0x1a, 0x66, 0x5b, 0x41, 0x30, 0xd2, 0x1d, 0x43, 0x7a, 0x75, 0xdf, - 0x18, 0xf7, 0xea, 0x26, 0x3e, 0xbe, 0x8e, 0xb3, 0x8c, 0x27, 0x65, 0xc5, 0xcd, 0x9a, 0x8e, 0x6e, - 0x56, 0xf5, 0xaf, 0x52, 0x32, 0xf3, 0x7a, 0x3d, 0x61, 0x0a, 0x78, 0x8c, 0x98, 0x94, 0x44, 0xb6, - 0x9d, 0xc7, 0x8e, 0x7b, 0xe0, 0xd0, 0x00, 0x17, 0x37, 0xdb, 0xcd, 0x47, 0x4a, 0x8a, 0x6f, 0xcf, - 0x31, 0x22, 0x4c, 0x1c, 0x72, 0x40, 0x25, 0x75, 0x9b, 0xed, 0x06, 0xf5, 0xc2, 0xd2, 0x13, 0x24, - 0x75, 0x89, 0x63, 0x5a, 0xce, 0x00, 0xbd, 0x0a, 0xf9, 0x56, 0xaf, 0xb7, 0xcd, 0x42, 0xc8, 0x17, - 0x8f, 0x8e, 0x57, 0xe7, 0xc7, 0xa8, 0xd8, 0x5b, 0x82, 0x49, 0x89, 0x68, 0x08, 0x44, 0xfd, 0xb3, - 0x09, 0x44, 0xd4, 0xb7, 0xe6, 0x44, 0xb8, 0xd3, 0xaf, 0xf6, 0x9b, 0x4a, 0x6e, 0x02, 0x11, 0x76, - 0xe9, 0x5f, 0x71, 0xdc, 0xfe, 0x2c, 0x0d, 0x4a, 0xd5, 0x30, 0x88, 0x17, 0x52, 0xbc, 0x88, 0x3a, - 0xfb, 0x50, 0xf0, 0xe8, 0x97, 0x45, 0xa4, 0x07, 0x75, 0x77, 0x62, 0xf9, 0xc0, 0x19, 0xbe, 0x35, - 0xec, 0xda, 0xa4, 0x6a, 0x0e, 0xad, 0x20, 0xb0, 0x5c, 0x87, 0xc3, 0x70, 0x24, 0xa9, 0xf2, 0x37, - 0x29, 0x98, 0x9f, 0x40, 0x81, 0x6e, 0x43, 0xd6, 0x77, 0x6d, 0xb9, 0x86, 0xd7, 0xce, 0x4b, 0xaa, - 0x53, 0x56, 0xcc, 0x28, 0xd1, 0x32, 0x80, 0x3e, 0x0a, 0x5d, 0x9d, 0xf5, 0xcf, 0x53, 0x91, 0x38, - 0x01, 0x41, 0x8f, 0x20, 0x1f, 0x10, 0xc3, 0x27, 0xd2, 0xcf, 0xfe, 0xf8, 0x37, 0x1d, 0xfd, 0x5a, - 0x8f, 0x89, 0xc1, 0x42, 0x5c, 0x65, 0x0d, 0xf2, 0x1c, 0x42, 0xb7, 0xbd, 0xa9, 0x87, 0xba, 0x78, - 0x48, 0x62, 0xdf, 0x74, 0x37, 0xe9, 0xf6, 0x40, 0xee, 0x26, 0xdd, 0x1e, 0xa8, 0xbf, 0x97, 0x06, - 0x68, 0x3e, 0x09, 0x89, 0xef, 0xe8, 0x76, 0xbd, 0x8a, 0x9a, 0x89, 0x9b, 0x81, 0xcf, 0xf6, 0x8d, - 0x89, 0x8f, 0x70, 0x11, 0xc7, 0x5a, 0xbd, 0x3a, 0xe1, 0x6e, 0xb8, 0x0a, 0x99, 0x91, 0x2f, 0x2a, - 0x42, 0xb8, 0x8f, 0xbc, 0x8d, 0x37, 0x31, 0x85, 0xa1, 0x66, 0x32, 0xdd, 0x73, 0x6e, 0xdd, 0x47, - 0xa2, 0x83, 0x89, 0xa6, 0x8b, 0x9e, 0x7c, 0x43, 0xd7, 0x0c, 0x22, 0x6e, 0x95, 0x32, 0x3f, 0xf9, - 0xf5, 0x6a, 0x9d, 0xf8, 0x21, 0xce, 0x1b, 0x3a, 0xfd, 0xff, 0xa5, 0xec, 0xdb, 0x5b, 0x00, 0xf1, - 0xd4, 0xd0, 0x32, 0xe4, 0xea, 0xeb, 0xbd, 0xde, 0xa6, 0x32, 0xc5, 0x0d, 0x78, 0x8c, 0x62, 0x60, - 0xf5, 0xff, 0xa5, 0xa1, 0x50, 0xaf, 0x8a, 0x2b, 0xb7, 0x0e, 0x0a, 0xb3, 0x4a, 0xec, 0xf9, 0x8d, - 0x3c, 0xf1, 0x2c, 0xff, 0x50, 0x18, 0x96, 0x0b, 0x02, 0xde, 0x59, 0xca, 0x42, 0x47, 0xdd, 0x64, - 0x0c, 0x08, 0x43, 0x99, 0x08, 0x25, 0x68, 0x86, 0x2e, 0x6d, 0xfc, 0xf2, 0xc5, 0xca, 0xe2, 0xa1, - 0x4b, 0xdc, 0x0e, 0x70, 0x49, 0x0a, 0xa9, 0xeb, 0x01, 0x7a, 0x1f, 0xe6, 0x02, 0x6b, 0xe0, 0x58, - 0xce, 0x40, 0x93, 0xca, 0x63, 0x6f, 0x81, 0xb5, 0x2b, 0xa7, 0x27, 0x2b, 0x33, 0x3d, 0x8e, 0x12, - 0x3a, 0x9c, 0x11, 0x94, 0x75, 0xa6, 0x4a, 0xf4, 0x1e, 0xcc, 0x26, 0x58, 0xa9, 0x16, 0xb9, 0xda, - 0x59, 0x7e, 0x3d, 0xe2, 0x7c, 0x40, 0x0e, 0x71, 0x39, 0x62, 0x7c, 0x40, 0x58, 0x6e, 0x86, 0x65, - 0xa3, 0x35, 0x9f, 0x9d, 0x69, 0x76, 0xbb, 0x67, 0x71, 0x89, 0xc1, 0xf8, 0x31, 0x57, 0x1f, 0xc2, - 0x7c, 0xc7, 0x37, 0xf6, 0x48, 0x10, 0x72, 0x55, 0x08, 0x2d, 0x7e, 0x0c, 0xd7, 0x42, 0x3d, 0x78, - 0xac, 0xed, 0x59, 0x41, 0xe8, 0xfa, 0x87, 0x9a, 0x4f, 0x42, 0xe2, 0x50, 0xbc, 0xc6, 0xaa, 0x25, - 0x44, 0xc6, 0xf1, 0x2a, 0xa5, 0xd9, 0xe0, 0x24, 0x58, 0x52, 0x6c, 0x52, 0x02, 0xb5, 0x05, 0x65, - 0x1a, 0xc2, 0x88, 0xa4, 0x1a, 0x9d, 0x3d, 0xd8, 0xee, 0x40, 0x7b, 0xe6, 0x6b, 0xaa, 0x68, 0xbb, - 0x03, 0xfe, 0xa9, 0x7e, 0x13, 0x94, 0x86, 0x15, 0x78, 0x7a, 0x68, 0xec, 0x45, 0x19, 0xd7, 0x06, - 0x28, 0x7b, 0x44, 0xf7, 0xc3, 0x1d, 0xa2, 0x87, 0x9a, 0x47, 0x7c, 0xcb, 0x35, 0x2f, 0x5f, 0xe5, - 0xb9, 0x88, 0xa5, 0xcb, 0x38, 0xd4, 0xbf, 0x4b, 0x01, 0x60, 0x7d, 0x57, 0x7a, 0x6b, 0x6f, 0xc2, - 0x95, 0xc0, 0xd1, 0xbd, 0x60, 0xcf, 0x0d, 0x35, 0xcb, 0x09, 0x89, 0xbf, 0xaf, 0xdb, 0x22, 0xb9, - 0xa3, 0x48, 0x44, 0x4b, 0xc0, 0xd1, 0x5b, 0x80, 0x1e, 0x13, 0xe2, 0x69, 0xae, 0x6d, 0x6a, 0x12, - 0xc9, 0xab, 0x28, 0xb2, 0x58, 0xa1, 0x98, 0x8e, 0x6d, 0xf6, 0x24, 0x1c, 0xd5, 0x60, 0x99, 0x4e, - 0x9f, 0x38, 0xa1, 0x6f, 0x91, 0x40, 0xdb, 0x75, 0x7d, 0x2d, 0xb0, 0xdd, 0x03, 0x6d, 0xd7, 0xb5, - 0x6d, 0xf7, 0x80, 0xf8, 0x32, 0x6f, 0x56, 0xb1, 0xdd, 0x41, 0x93, 0x13, 0xad, 0xbb, 0x7e, 0xcf, - 0x76, 0x0f, 0xd6, 0x25, 0x05, 0x75, 0xe9, 0xe2, 0x39, 0x87, 0x96, 0xf1, 0x58, 0xba, 0x74, 0x11, - 0xb4, 0x6f, 0x19, 0x8f, 0xd1, 0xab, 0x30, 0x43, 0x6c, 0xc2, 0xd2, 0x27, 0x9c, 0x2a, 0xc7, 0xa8, - 0xca, 0x12, 0x48, 0x89, 0xd4, 0x7b, 0xa0, 0x34, 0x1d, 0xc3, 0x3f, 0xf4, 0x12, 0x6b, 0xfe, 0x16, - 0x20, 0x6a, 0x24, 0x35, 0xdb, 0x35, 0x1e, 0x6b, 0x43, 0xdd, 0xd1, 0x07, 0x74, 0x5c, 0xfc, 0x7d, - 0x56, 0xa1, 0x98, 0x4d, 0xd7, 0x78, 0xbc, 0x25, 0xe0, 0xea, 0xfb, 0x00, 0x3d, 0xcf, 0x27, 0xba, - 0xd9, 0xa1, 0xde, 0x04, 0x55, 0x1d, 0x6b, 0x69, 0xa6, 0x28, 0x0e, 0x70, 0x7d, 0x71, 0xd4, 0x15, - 0x8e, 0x68, 0x44, 0x70, 0xf5, 0x9f, 0xc2, 0x7c, 0xd7, 0xd6, 0x0d, 0x56, 0xae, 0xd3, 0x8d, 0x1e, - 0x1c, 0xd1, 0x5d, 0xc8, 0x73, 0x52, 0xb1, 0x92, 0x13, 0x8f, 0x5b, 0xdc, 0xe7, 0xc6, 0x14, 0x16, - 0xf4, 0xb5, 0x32, 0x40, 0x2c, 0x47, 0xfd, 0xd3, 0x14, 0x14, 0x23, 0xf9, 0x68, 0x95, 0x3f, 0x17, - 0x86, 0xbe, 0x6e, 0x39, 0x22, 0xe2, 0x2f, 0xe2, 0x24, 0x08, 0xb5, 0xa0, 0xe4, 0x45, 0xdc, 0x17, - 0xfa, 0x73, 0x13, 0x46, 0x8d, 0x93, 0xbc, 0xe8, 0x03, 0x28, 0xca, 0x6a, 0x0c, 0x69, 0x61, 0x2f, - 0x2e, 0xde, 0x88, 0xc9, 0x65, 0x22, 0xd5, 0x27, 0x9e, 0x6d, 0x51, 0x9b, 0x93, 0x8d, 0x12, 0xa9, - 0x58, 0x80, 0xd4, 0x6f, 0x00, 0x7c, 0xe2, 0x5a, 0x4e, 0xdf, 0x7d, 0x4c, 0x1c, 0xf6, 0x86, 0x4e, - 0x43, 0x4a, 0x22, 0x15, 0x2d, 0x5a, 0x2c, 0x53, 0xc0, 0x57, 0x29, 0x7a, 0x4a, 0xe6, 0x4d, 0xf5, - 0x77, 0xd3, 0x90, 0xc7, 0xae, 0x1b, 0xd6, 0xab, 0x68, 0x15, 0xf2, 0xc2, 0x94, 0xb0, 0x2b, 0xaa, - 0x56, 0x3c, 0x3d, 0x59, 0xc9, 0x71, 0x1b, 0x92, 0x33, 0x98, 0xf1, 0x48, 0x18, 0xf9, 0xf4, 0x79, - 0x46, 0x1e, 0xdd, 0x86, 0xb2, 0x20, 0xd2, 0xf6, 0xf4, 0x60, 0x8f, 0xc7, 0x77, 0xb5, 0xd9, 0xd3, - 0x93, 0x15, 0xe0, 0x94, 0x1b, 0x7a, 0xb0, 0x87, 0x81, 0x53, 0xd3, 0x6f, 0xd4, 0x84, 0xd2, 0x67, - 0xae, 0xe5, 0x68, 0x21, 0x9b, 0x84, 0xc8, 0x45, 0x4e, 0x5c, 0xea, 0x78, 0xaa, 0xa2, 0x1a, 0x07, - 0x3e, 0x8b, 0x27, 0xdf, 0x84, 0x19, 0xdf, 0x75, 0x43, 0x6e, 0xd9, 0x2c, 0xd7, 0x11, 0x69, 0x8e, - 0xd5, 0x89, 0xd9, 0x6f, 0xd7, 0x0d, 0xb1, 0xa0, 0xc3, 0x65, 0x3f, 0xd1, 0x42, 0xb7, 0x61, 0xc1, - 0xd6, 0x83, 0x50, 0x63, 0x26, 0xd1, 0x8c, 0xa5, 0xe5, 0x99, 0xf2, 0x11, 0xc5, 0xb1, 0x77, 0x3e, - 0x53, 0x72, 0xa8, 0x7f, 0x92, 0x82, 0x12, 0x9d, 0x8c, 0xb5, 0x6b, 0x19, 0xd4, 0x0f, 0x7c, 0x7e, - 0xf7, 0xe4, 0x2a, 0x64, 0x8c, 0xc0, 0x17, 0x4a, 0x65, 0xf7, 0x73, 0xbd, 0x87, 0x31, 0x85, 0xa1, - 0x7b, 0x90, 0x17, 0xe9, 0x16, 0xee, 0x99, 0xa8, 0x97, 0x7b, 0xac, 0x42, 0x37, 0x82, 0x8f, 0x6d, - 0xf7, 0x78, 0x74, 0xfc, 0x9e, 0xc0, 0x49, 0x10, 0x5a, 0x84, 0xb4, 0xc1, 0xd5, 0x25, 0xca, 0xbd, - 0xea, 0x6d, 0x9c, 0x36, 0x1c, 0xf5, 0x67, 0x29, 0x98, 0x89, 0x6d, 0x02, 0xdd, 0x01, 0xd7, 0xa0, - 0x18, 0x8c, 0x76, 0x82, 0xc3, 0x20, 0x24, 0x43, 0x59, 0x1f, 0x10, 0x01, 0x50, 0x0b, 0x8a, 0xba, - 0x3d, 0x70, 0x7d, 0x2b, 0xdc, 0x1b, 0x8a, 0x40, 0x76, 0xb2, 0x37, 0x91, 0x94, 0xb9, 0x56, 0x95, - 0x2c, 0x38, 0xe6, 0x96, 0xae, 0x01, 0x2f, 0x8d, 0x61, 0xae, 0xc1, 0x2b, 0x50, 0xb6, 0xf5, 0x21, - 0xcb, 0x3f, 0x85, 0xd6, 0x90, 0xc8, 0xc3, 0x20, 0x60, 0x7d, 0x6b, 0x48, 0x54, 0x15, 0x8a, 0x91, - 0x30, 0x34, 0x07, 0xa5, 0x6a, 0xb3, 0xa7, 0xbd, 0x7d, 0xe7, 0xae, 0x76, 0xbf, 0xbe, 0xa5, 0x4c, - 0x09, 0xf7, 0xf5, 0xff, 0xa6, 0x60, 0x46, 0x58, 0x2c, 0x11, 0x12, 0xbc, 0x0a, 0xd3, 0xbe, 0xbe, - 0x1b, 0xca, 0xa0, 0x25, 0xcb, 0x77, 0x35, 0xbd, 0x04, 0x68, 0xd0, 0x42, 0x51, 0x93, 0x83, 0x96, - 0x44, 0xc5, 0x4a, 0xe6, 0xc2, 0x8a, 0x95, 0xec, 0x6f, 0xa5, 0x62, 0x45, 0xfd, 0xd7, 0x00, 0xeb, - 0x96, 0x4d, 0xfa, 0x3c, 0x55, 0x35, 0x29, 0x04, 0xa5, 0x6e, 0x5e, 0x54, 0xf8, 0xc3, 0xdd, 0xbc, - 0x56, 0x03, 0x53, 0x18, 0x45, 0x0d, 0x2c, 0x53, 0x1c, 0x46, 0x86, 0xba, 0x4f, 0x51, 0x03, 0xcb, - 0x8c, 0x5e, 0x06, 0xb3, 0x97, 0xbc, 0x0c, 0xaa, 0x73, 0x30, 0x83, 0x79, 0x8e, 0x8d, 0x8f, 0x41, - 0x3d, 0x4e, 0xc1, 0x9c, 0xf0, 0x77, 0x23, 0x93, 0xfd, 0x06, 0x14, 0xb9, 0xeb, 0x1b, 0x07, 0x81, - 0xac, 0x6c, 0x83, 0xd3, 0xb5, 0x1a, 0xb8, 0xc0, 0xd1, 0x2d, 0x13, 0xad, 0x40, 0x49, 0x90, 0x26, - 0x6a, 0x05, 0x81, 0x83, 0x58, 0x31, 0xd3, 0xbb, 0x90, 0xdd, 0xb5, 0x6c, 0x22, 0x76, 0xfe, 0x44, - 0x8b, 0x10, 0x6b, 0x64, 0x63, 0x0a, 0x33, 0xea, 0x5a, 0x41, 0x26, 0xf7, 0xd4, 0x3f, 0x4f, 0xb1, - 0x14, 0x33, 0x0d, 0x55, 0x93, 0xe3, 0xe3, 0x51, 0xeb, 0x99, 0xf1, 0x71, 0x3a, 0x3a, 0x3e, 0x8e, - 0xe6, 0xe3, 0x13, 0xa4, 0xc9, 0xf1, 0x71, 0xd0, 0x6f, 0x3e, 0x3e, 0xf4, 0x11, 0x4c, 0x8b, 0x54, - 0xa5, 0x30, 0x75, 0xaf, 0x4c, 0xdc, 0x19, 0x49, 0x4d, 0x6f, 0x4c, 0x61, 0xc9, 0x93, 0x98, 0xde, - 0x26, 0x2c, 0xd6, 0x6c, 0xdd, 0x78, 0x6c, 0x5b, 0x41, 0x48, 0xcc, 0xa4, 0x05, 0xba, 0x03, 0xf9, - 0x31, 0x3f, 0xf7, 0xa2, 0x24, 0xaa, 0xa0, 0x54, 0xff, 0x57, 0x1a, 0xca, 0x1b, 0x44, 0xb7, 0xc3, - 0xbd, 0x38, 0x53, 0x15, 0x92, 0x20, 0x14, 0xf7, 0x23, 0xfb, 0x46, 0x5f, 0x83, 0x42, 0xe4, 0x06, - 0x5d, 0xfa, 0x1c, 0x18, 0x91, 0xa2, 0x77, 0x60, 0x9a, 0x8e, 0xdd, 0x1d, 0xc9, 0xf8, 0xea, 0xa2, - 0x97, 0x26, 0x41, 0x49, 0x2f, 0x2d, 0x9f, 0x30, 0xbf, 0x87, 0xe9, 0x29, 0x87, 0x65, 0x13, 0x7d, - 0x1d, 0xca, 0xec, 0xa1, 0x44, 0xba, 0x79, 0xb9, 0xcb, 0x64, 0x96, 0xf8, 0x5b, 0x27, 0xa3, 0x46, - 0xf7, 0x60, 0x96, 0x73, 0x47, 0x33, 0xc9, 0x5f, 0xc6, 0x3f, 0xc3, 0x18, 0xa4, 0xa3, 0xa7, 0xfe, - 0x38, 0x0d, 0x0b, 0x5b, 0xfa, 0xe1, 0x0e, 0x11, 0x86, 0x8c, 0x98, 0x98, 0x18, 0xae, 0x6f, 0xa2, - 0x6e, 0xd2, 0x00, 0x5e, 0xf0, 0xf8, 0x3a, 0x89, 0x79, 0xb2, 0x1d, 0x94, 0x51, 0x63, 0x3a, 0x11, - 0x35, 0x2e, 0x40, 0xce, 0x71, 0x1d, 0x83, 0x08, 0xeb, 0xc8, 0x1b, 0xea, 0xf7, 0x53, 0x49, 0xeb, - 0x57, 0x89, 0x1e, 0x46, 0x59, 0xda, 0xac, 0xed, 0x86, 0x51, 0x77, 0xe8, 0x1e, 0x54, 0x7a, 0xcd, - 0x3a, 0x6e, 0xf6, 0x6b, 0x9d, 0x6f, 0x6a, 0xbd, 0xea, 0x66, 0xaf, 0x7a, 0xe7, 0xb6, 0xd6, 0xed, - 0x6c, 0x7e, 0xfa, 0xf6, 0x3b, 0xb7, 0xbf, 0xa6, 0xa4, 0x2a, 0xab, 0x47, 0xc7, 0xab, 0xd7, 0xda, - 0xd5, 0xfa, 0x26, 0x3f, 0xb3, 0x3b, 0xee, 0x93, 0x9e, 0x6e, 0x07, 0xfa, 0x9d, 0xdb, 0x5d, 0xd7, - 0x3e, 0xa4, 0x34, 0xe8, 0x4d, 0x40, 0xeb, 0x4d, 0xdc, 0x6e, 0xf6, 0x35, 0x69, 0x62, 0xeb, 0xb5, - 0xba, 0x92, 0xe6, 0xb1, 0xd8, 0x3a, 0xf1, 0x1d, 0x12, 0x56, 0x9b, 0xbd, 0xb7, 0xef, 0xdc, 0xad, - 0xd7, 0xea, 0xd4, 0x4a, 0x94, 0x93, 0xf7, 0x6d, 0xd2, 0x8d, 0x48, 0x9d, 0xeb, 0x46, 0xc4, 0xde, - 0x48, 0xfa, 0x1c, 0x6f, 0x64, 0x1d, 0x16, 0x0c, 0xdf, 0x0d, 0x02, 0x8d, 0x06, 0x38, 0xc4, 0x3c, - 0x13, 0x42, 0xbd, 0x70, 0x7a, 0xb2, 0x72, 0xa5, 0x4e, 0xf1, 0x3d, 0x86, 0x16, 0xe2, 0xaf, 0x18, - 0x09, 0x10, 0xeb, 0x49, 0xfd, 0xf1, 0x34, 0xf5, 0x15, 0xad, 0x7d, 0xcb, 0x26, 0x03, 0x12, 0xa0, - 0x87, 0x30, 0x67, 0xf8, 0xc4, 0xa4, 0x91, 0x8b, 0x6e, 0x27, 0x0b, 0xf5, 0xbf, 0x3a, 0xd1, 0x6d, - 0x8b, 0x18, 0xd7, 0xea, 0x11, 0x57, 0xcf, 0x23, 0x06, 0x9e, 0x35, 0xc6, 0xda, 0xe8, 0x33, 0x98, - 0x0b, 0x88, 0x6d, 0x39, 0xa3, 0x27, 0x9a, 0xe1, 0x3a, 0x21, 0x79, 0x22, 0x1f, 0x04, 0x2f, 0x93, - 0xdb, 0x6b, 0x6e, 0x52, 0xae, 0x3a, 0x67, 0xaa, 0xa1, 0xd3, 0x93, 0x95, 0xd9, 0x71, 0x18, 0x9e, - 0x15, 0x92, 0x45, 0x1b, 0x35, 0x60, 0x3a, 0x20, 0x86, 0xe1, 0x0e, 0x3d, 0x71, 0xde, 0x6e, 0x5e, - 0xd6, 0x07, 0xa7, 0xee, 0x78, 0x61, 0x80, 0x25, 0x2b, 0xba, 0x0f, 0x05, 0xdd, 0xf3, 0x74, 0x7f, - 0x18, 0x3d, 0x10, 0xbf, 0x79, 0x89, 0x98, 0xaa, 0xe7, 0x55, 0x29, 0x39, 0x93, 0x13, 0x31, 0xa3, - 0x9b, 0x70, 0xc5, 0x71, 0x35, 0x87, 0x1c, 0x68, 0x5e, 0x44, 0xcb, 0xeb, 0xa7, 0xf0, 0x9c, 0xe3, - 0xb6, 0xc9, 0x41, 0x2c, 0xa2, 0xb2, 0x07, 0xb3, 0xe3, 0x8a, 0x44, 0x0b, 0xc2, 0xca, 0x32, 0x63, - 0x1d, 0x59, 0xd1, 0x6b, 0x50, 0xf0, 0xc9, 0xc0, 0x0a, 0x42, 0x9f, 0xef, 0x10, 0x8a, 0x89, 0x20, - 0x68, 0x09, 0xf2, 0x89, 0xc2, 0x1d, 0x8a, 0x13, 0x6d, 0x6a, 0x3e, 0x79, 0xdd, 0x61, 0xe5, 0x5f, - 0xc2, 0x19, 0x35, 0x52, 0x8b, 0x63, 0x5a, 0x81, 0xbe, 0x23, 0x3a, 0x2b, 0x60, 0xd9, 0xa4, 0xc7, - 0x70, 0x14, 0x44, 0xde, 0x33, 0xfb, 0xa6, 0x30, 0xe6, 0xe6, 0x89, 0x2a, 0x4c, 0xe6, 0xc8, 0xc9, - 0x5a, 0xf8, 0x6c, 0xa2, 0x16, 0x7e, 0x01, 0x72, 0x36, 0xd9, 0x27, 0x36, 0x77, 0xb0, 0x30, 0x6f, - 0x54, 0x7e, 0x9c, 0x82, 0x52, 0x42, 0xeb, 0xe8, 0x13, 0x71, 0x0b, 0x73, 0xab, 0xf1, 0xde, 0xb3, - 0xaf, 0x97, 0xfc, 0x1e, 0x2f, 0xe1, 0xf1, 0x7c, 0x97, 0x29, 0x8d, 0xdb, 0x0d, 0xd9, 0x54, 0xdf, - 0x8b, 0x3a, 0x65, 0xb9, 0xf2, 0x52, 0xa2, 0x04, 0x06, 0xcd, 0x02, 0x6c, 0xb7, 0xeb, 0x9d, 0xf6, - 0x7a, 0xab, 0xdd, 0x6c, 0xf0, 0xd7, 0xdf, 0xfa, 0x76, 0xaf, 0xdf, 0xd9, 0x52, 0xd2, 0x95, 0xef, - 0xa6, 0xa0, 0x9c, 0x5c, 0x5c, 0xb4, 0x39, 0x36, 0xdc, 0xbb, 0xcf, 0xb1, 0x2f, 0xa2, 0x46, 0xc2, - 0xb3, 0x78, 0x23, 0x96, 0xfe, 0xf4, 0xb8, 0xca, 0x50, 0x68, 0xb4, 0x7a, 0xd5, 0xda, 0x26, 0x1d, - 0x15, 0x33, 0x73, 0x9f, 0xb8, 0x3b, 0xc2, 0x77, 0x5b, 0x87, 0x99, 0xcf, 0xdc, 0x1d, 0xcd, 0x0a, - 0x89, 0x1f, 0xd7, 0x2e, 0x96, 0xee, 0xbc, 0x34, 0x69, 0x3c, 0xe2, 0xa7, 0x04, 0xc2, 0x3b, 0x2e, - 0x7f, 0xe6, 0xee, 0xb4, 0x24, 0x1b, 0xaa, 0xc2, 0x2c, 0x73, 0xfa, 0xc9, 0x13, 0x62, 0x8c, 0x98, - 0xa0, 0xcb, 0x1f, 0xeb, 0x67, 0x28, 0x47, 0x53, 0x32, 0xa8, 0x3f, 0xca, 0x81, 0xc2, 0x2b, 0x9c, - 0xaa, 0xac, 0xe2, 0x99, 0x4d, 0xe4, 0x1e, 0xe4, 0x02, 0xc3, 0x8d, 0x0a, 0x65, 0x27, 0x1e, 0xc3, - 0xb3, 0x4c, 0x6b, 0x3d, 0xca, 0x81, 0x39, 0x23, 0x5a, 0x87, 0xe9, 0x60, 0x4f, 0xf7, 0x2d, 0x67, - 0x20, 0x3c, 0xea, 0xb7, 0x9e, 0x4d, 0x06, 0xe7, 0xc1, 0x92, 0x19, 0x6d, 0x40, 0x6e, 0x87, 0x86, - 0xf1, 0xc2, 0x20, 0xdc, 0x7e, 0x26, 0x29, 0x35, 0xca, 0xc1, 0xa1, 0x1b, 0x53, 0x98, 0x0b, 0xa0, - 0x92, 0x58, 0xb9, 0xa5, 0xb0, 0x09, 0xcf, 0x26, 0x89, 0x55, 0x2e, 0xc5, 0x92, 0x98, 0x80, 0xca, - 0x0c, 0x94, 0x12, 0x3d, 0x54, 0xee, 0x43, 0x29, 0x41, 0x86, 0x5e, 0x84, 0xe9, 0xdd, 0x40, 0x4b, - 0xfc, 0xb4, 0x24, 0xbf, 0x1b, 0xb0, 0xf2, 0xb3, 0x15, 0x28, 0x31, 0x7e, 0x6d, 0xd7, 0xd6, 0x07, - 0xf2, 0xa5, 0x16, 0x18, 0x68, 0x9d, 0x42, 0x54, 0x03, 0x72, 0x4c, 0x87, 0xe8, 0x26, 0x94, 0x7a, - 0xad, 0xf6, 0xfd, 0xcd, 0xa6, 0xd6, 0xee, 0x34, 0xe8, 0x65, 0xc8, 0xea, 0x11, 0xb9, 0x7c, 0x46, - 0xd1, 0xb3, 0x9c, 0x81, 0x4d, 0x58, 0x8d, 0xfb, 0x0d, 0x80, 0xad, 0xed, 0xcd, 0x7e, 0x8b, 0x93, - 0x8a, 0x22, 0xaf, 0x04, 0xe9, 0xd6, 0xc8, 0x0e, 0x2d, 0x4a, 0x29, 0x02, 0x89, 0xff, 0x99, 0x82, - 0x69, 0xa1, 0x65, 0xb4, 0x12, 0xdd, 0xb6, 0x2f, 0x1c, 0x1d, 0xaf, 0x5e, 0x11, 0x5c, 0x1c, 0xc9, - 0x4a, 0x91, 0x6e, 0xb0, 0x2a, 0xf1, 0x86, 0xd6, 0x69, 0x6f, 0x7e, 0xaa, 0xa4, 0xc6, 0x86, 0x21, - 0x16, 0x4a, 0x94, 0x90, 0xa2, 0x9b, 0x00, 0x9d, 0x76, 0x53, 0x7b, 0x84, 0x5b, 0xfd, 0x26, 0x96, - 0x55, 0x64, 0x63, 0xa4, 0x1d, 0x87, 0x3c, 0xf2, 0xe9, 0x8e, 0x47, 0x2f, 0x43, 0xa6, 0xba, 0xb9, - 0xa9, 0x64, 0x78, 0x65, 0xd3, 0x18, 0x51, 0xd5, 0xb6, 0xf9, 0x38, 0x6b, 0x33, 0x50, 0xe2, 0x25, - 0xf8, 0x4c, 0x95, 0xea, 0x5d, 0x28, 0x0b, 0x42, 0x9e, 0x96, 0x7e, 0x3a, 0x07, 0xbb, 0x18, 0xe5, - 0xc2, 0xe5, 0x8b, 0x2d, 0x6b, 0xa9, 0xff, 0x23, 0x03, 0xf3, 0x9c, 0x55, 0xbc, 0x8a, 0xc5, 0xf1, - 0xd3, 0xe5, 0x8f, 0x3e, 0xf5, 0xf1, 0x02, 0x87, 0xaf, 0x9e, 0xbf, 0x69, 0xc6, 0x84, 0x8f, 0x3f, - 0xbe, 0x98, 0x30, 0x27, 0x9f, 0x26, 0xe5, 0x15, 0xca, 0x33, 0x2a, 0x1f, 0x3e, 0xab, 0x38, 0xd1, - 0x12, 0x06, 0x9f, 0xe7, 0xb0, 0xe5, 0xab, 0x68, 0xe2, 0x16, 0x90, 0x65, 0x15, 0xb9, 0xb1, 0xb2, - 0x8a, 0x4a, 0x15, 0xe6, 0x27, 0x08, 0x78, 0xae, 0x34, 0xf6, 0xb7, 0xe5, 0x63, 0xd1, 0x3c, 0xcc, - 0x89, 0x27, 0x1e, 0xad, 0xbb, 0x5d, 0xdb, 0x6c, 0xf5, 0x36, 0x94, 0x29, 0x34, 0x03, 0x45, 0xd1, - 0x60, 0x16, 0xb8, 0x02, 0x8b, 0x92, 0x86, 0x6e, 0x4a, 0x6d, 0xbb, 0x2d, 0x49, 0xd3, 0xe8, 0x05, - 0xb8, 0x22, 0x71, 0x31, 0x38, 0xa3, 0xfe, 0x41, 0x1a, 0x80, 0x4f, 0x9c, 0xfd, 0x5e, 0xe4, 0x3a, - 0xcc, 0x1a, 0xba, 0xa7, 0x1b, 0x56, 0x78, 0x38, 0x56, 0x18, 0x3a, 0x23, 0xa1, 0xbc, 0x38, 0xf4, - 0x9b, 0x51, 0xb5, 0x7a, 0xec, 0x9a, 0x9c, 0xfb, 0x2b, 0xab, 0x58, 0xbc, 0xf8, 0x1c, 0xd3, 0xa6, - 0xa8, 0x5b, 0x97, 0xca, 0x7c, 0x03, 0x8a, 0x42, 0x72, 0x14, 0x7d, 0xb2, 0x70, 0x4b, 0x08, 0x69, - 0xe0, 0x02, 0x47, 0xb7, 0xcc, 0xf3, 0x7f, 0x64, 0x92, 0xf9, 0x4d, 0x7e, 0x64, 0x52, 0xb9, 0x07, - 0xe8, 0xe9, 0xe1, 0x3d, 0xd7, 0x5a, 0x3d, 0x82, 0x99, 0xba, 0x50, 0x13, 0x66, 0xd5, 0x09, 0xd7, - 0x61, 0xd6, 0xe7, 0x3f, 0x2b, 0x34, 0xc7, 0xb5, 0x29, 0xa1, 0x5c, 0x9b, 0x2b, 0x50, 0x62, 0x29, - 0xf1, 0xb1, 0xdf, 0x39, 0x02, 0x03, 0x31, 0x02, 0xf5, 0x8f, 0xb3, 0xd1, 0x55, 0x11, 0x50, 0xe7, - 0x95, 0x65, 0x25, 0x17, 0x21, 0x1d, 0x9d, 0x20, 0x96, 0x84, 0x69, 0x35, 0x70, 0xda, 0x32, 0xc7, - 0x35, 0x98, 0xbe, 0x50, 0x83, 0xf1, 0xa3, 0x6f, 0xe6, 0x99, 0x1f, 0x7d, 0xbf, 0xfd, 0xd4, 0xd2, - 0x73, 0x85, 0xff, 0x93, 0x0b, 0xcc, 0x7a, 0x34, 0xe8, 0x67, 0xd8, 0x00, 0xfa, 0xd3, 0x67, 0x36, - 0x77, 0xfe, 0x03, 0xe1, 0x53, 0x1d, 0x3c, 0xcb, 0x81, 0x6d, 0x46, 0x16, 0x8e, 0xb9, 0x24, 0x3c, - 0x9a, 0x7b, 0xed, 0x59, 0xae, 0x25, 0x0c, 0x7a, 0x7c, 0x57, 0x7f, 0xc0, 0x9c, 0x66, 0x9f, 0x84, - 0x81, 0xf8, 0x1d, 0xd9, 0xea, 0xf9, 0x22, 0x44, 0xd6, 0x43, 0x32, 0x7c, 0xf9, 0xcd, 0xf6, 0xdb, - 0xb0, 0x2d, 0xdf, 0x8a, 0x76, 0x55, 0x54, 0x08, 0x74, 0xee, 0xae, 0x7a, 0xce, 0x1f, 0xe3, 0xa8, - 0xff, 0x2e, 0x05, 0xf3, 0xd1, 0x71, 0x8b, 0x7f, 0x5a, 0x8b, 0x3e, 0x80, 0x22, 0xdb, 0xfc, 0x81, - 0xc5, 0xde, 0xd4, 0x2f, 0x3f, 0xaa, 0x31, 0x39, 0x4b, 0x8d, 0xb3, 0x4c, 0xb9, 0x4f, 0x4c, 0x61, - 0x70, 0x2e, 0xe1, 0x8d, 0xc8, 0xd5, 0xef, 0xa5, 0xa0, 0x20, 0xe1, 0x68, 0x1d, 0x0a, 0x01, 0x19, - 0xb0, 0x9f, 0xfa, 0x8a, 0x31, 0xdc, 0xbc, 0x48, 0xce, 0x5a, 0x4f, 0x10, 0x8b, 0xca, 0x20, 0xc9, - 0x5b, 0xf9, 0x10, 0x66, 0xc6, 0x50, 0xcf, 0xa5, 0xfd, 0x5f, 0x46, 0x87, 0x9a, 0x1a, 0x0d, 0xf1, - 0xdb, 0xb1, 0xc8, 0xeb, 0x4a, 0x5d, 0xe6, 0x2b, 0xc5, 0x4c, 0x97, 0x78, 0x5d, 0xe9, 0xe7, 0x90, - 0x34, 0xc9, 0xeb, 0x42, 0xdd, 0xf1, 0xe3, 0xc2, 0x4d, 0xc5, 0xad, 0x67, 0x92, 0x37, 0xf9, 0xe4, - 0xfc, 0x63, 0xf9, 0x71, 0x95, 0xbf, 0x4f, 0x01, 0x24, 0x9c, 0xe9, 0x8d, 0xb1, 0x98, 0xe3, 0xdd, - 0xe7, 0x1c, 0xf1, 0x5a, 0x22, 0xde, 0xf8, 0x6f, 0x29, 0xc8, 0xca, 0x40, 0x23, 0xae, 0xde, 0x5a, - 0x04, 0x94, 0xf0, 0x16, 0xa5, 0x0b, 0x96, 0x42, 0x2f, 0xc1, 0x8b, 0x49, 0x38, 0x75, 0xe4, 0x9a, - 0x98, 0xbb, 0x72, 0x69, 0x7a, 0x47, 0xc7, 0x6e, 0xe3, 0x18, 0x2e, 0x83, 0xae, 0xc1, 0x52, 0x02, - 0x27, 0x64, 0x08, 0xb1, 0x59, 0x2a, 0x36, 0x81, 0xe5, 0x9f, 0x02, 0x99, 0x3b, 0xe3, 0xb5, 0xdd, - 0xfc, 0x3a, 0x94, 0xe5, 0x4f, 0x74, 0x99, 0xea, 0x0a, 0x90, 0xed, 0x57, 0x7b, 0x0f, 0x94, 0x29, - 0x1a, 0xa5, 0xf1, 0x64, 0x8e, 0x88, 0xd8, 0x68, 0xfc, 0x76, 0x5f, 0x49, 0xd3, 0x6f, 0xf1, 0x33, - 0x8c, 0xcc, 0xcd, 0xff, 0x94, 0x85, 0x62, 0x54, 0x3d, 0x8a, 0xae, 0x42, 0xa6, 0xdd, 0x7c, 0x24, - 0x33, 0x43, 0x11, 0xbc, 0x4d, 0x0e, 0xd0, 0x2b, 0x71, 0xdd, 0xc9, 0x3d, 0xee, 0x54, 0x46, 0x68, - 0x59, 0x73, 0xf2, 0x1a, 0x14, 0xaa, 0xbd, 0x5e, 0xeb, 0x3e, 0x8d, 0x11, 0xbf, 0x48, 0x71, 0x7f, - 0x37, 0x22, 0xe2, 0x86, 0x9b, 0x98, 0x8c, 0xaa, 0x5e, 0x6f, 0x76, 0xfb, 0xcd, 0x86, 0xf2, 0x79, - 0xfa, 0x2c, 0x15, 0xab, 0xa3, 0x60, 0x3f, 0x28, 0x2a, 0x76, 0x71, 0xb3, 0x5b, 0xc5, 0xb4, 0xc3, - 0x2f, 0xd2, 0xbc, 0x1c, 0x26, 0xee, 0xd1, 0x27, 0x1e, 0x77, 0xaf, 0x97, 0xe5, 0x6f, 0x17, 0x3f, - 0xcf, 0xf0, 0x9f, 0x8c, 0xc4, 0xa5, 0xb0, 0x44, 0x37, 0x0f, 0x69, 0x6f, 0xac, 0x06, 0x99, 0x89, - 0xc9, 0x9c, 0xe9, 0xad, 0x17, 0xea, 0x7e, 0x48, 0xa5, 0xa8, 0x30, 0x8d, 0xb7, 0xdb, 0x6d, 0x4a, - 0xf4, 0x79, 0xf6, 0xcc, 0xec, 0xf0, 0xc8, 0x71, 0x28, 0xcd, 0x75, 0x28, 0xc8, 0x12, 0x65, 0xe5, - 0x8b, 0xec, 0x99, 0x01, 0xd5, 0x65, 0x7d, 0x35, 0xeb, 0x70, 0x63, 0xbb, 0xcf, 0x7e, 0x5a, 0xf9, - 0x79, 0xee, 0x6c, 0x87, 0x7b, 0xa3, 0xd0, 0x74, 0x0f, 0x1c, 0xb4, 0x1a, 0x55, 0xde, 0x7c, 0x91, - 0xe3, 0xa9, 0xb1, 0x88, 0x46, 0x94, 0xdd, 0xbc, 0x06, 0x05, 0xdc, 0xfc, 0x84, 0xff, 0x0a, 0xf3, - 0xf3, 0xfc, 0x19, 0x39, 0x98, 0x7c, 0x46, 0x0c, 0xda, 0xdb, 0x2a, 0xe4, 0x71, 0x73, 0xab, 0xf3, - 0xb0, 0xa9, 0xfc, 0xf7, 0xfc, 0x19, 0x39, 0x98, 0x0c, 0x5d, 0xf6, 0x8b, 0xab, 0x42, 0x07, 0x77, - 0x37, 0xaa, 0x6c, 0x51, 0xce, 0xca, 0xe9, 0xf8, 0xde, 0x9e, 0xee, 0x10, 0x33, 0xfe, 0x4d, 0x4c, - 0x84, 0xba, 0xf9, 0x6d, 0x28, 0xc8, 0xa7, 0x28, 0xb4, 0x0c, 0xf9, 0x47, 0x1d, 0xfc, 0xa0, 0x89, - 0x95, 0x29, 0xae, 0x65, 0x89, 0x79, 0xc4, 0x1f, 0x11, 0x57, 0x61, 0x7a, 0xab, 0xda, 0xae, 0xde, - 0xa7, 0x67, 0x82, 0x0f, 0x43, 0x12, 0x88, 0xf7, 0x94, 0x8a, 0x22, 0x3a, 0x88, 0x64, 0xd6, 0x5e, - 0xfb, 0xc9, 0xaf, 0x96, 0xa7, 0x7e, 0xf1, 0xab, 0xe5, 0xa9, 0xcf, 0x4f, 0x97, 0x53, 0x3f, 0x39, - 0x5d, 0x4e, 0xfd, 0xf4, 0x74, 0x39, 0xf5, 0x97, 0xa7, 0xcb, 0xa9, 0x7f, 0xff, 0xeb, 0xe5, 0xa9, - 0x9f, 0xfe, 0x7a, 0x79, 0xea, 0x17, 0xbf, 0x5e, 0x9e, 0xda, 0xc9, 0xb3, 0xe8, 0xfa, 0x9d, 0x7f, - 0x08, 0x00, 0x00, 0xff, 0xff, 0x17, 0xf6, 0x52, 0x33, 0xb1, 0x45, 0x00, 0x00, -} - -func (m *Version) Copy() *Version { - if m == nil { - return nil - } - o := &Version{} - o.CopyFrom(m) - return o -} - -func (m *Version) CopyFrom(src interface{}) { - - o := src.(*Version) - *m = *o -} - -func (m *IndexEntry) Copy() *IndexEntry { - if m == nil { - return nil - } - o := &IndexEntry{} - o.CopyFrom(m) - return o -} - -func (m *IndexEntry) CopyFrom(src interface{}) { - - o := src.(*IndexEntry) - *m = *o -} - -func (m *Annotations) Copy() *Annotations { - if m == nil { - return nil - } - o := &Annotations{} - o.CopyFrom(m) - return o -} - -func (m *Annotations) CopyFrom(src interface{}) { - - o := src.(*Annotations) - *m = *o - if o.Labels != nil { - m.Labels = make(map[string]string, len(o.Labels)) - for k, v := range o.Labels { - m.Labels[k] = v - } - } +func (*Mount_VolumeOptions) ProtoMessage() {} - if o.Indices != nil { - m.Indices = make([]IndexEntry, len(o.Indices)) - for i := range m.Indices { - github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Indices[i], &o.Indices[i]) +func (x *Mount_VolumeOptions) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[71] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } + return ms } + return mi.MessageOf(x) +} +// Deprecated: Use Mount_VolumeOptions.ProtoReflect.Descriptor instead. +func (*Mount_VolumeOptions) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{17, 1} } -func (m *NamedGenericResource) Copy() *NamedGenericResource { - if m == nil { - return nil +func (x *Mount_VolumeOptions) GetNoCopy() bool { + if x != nil { + return x.NoCopy } - o := &NamedGenericResource{} - o.CopyFrom(m) - return o + return false } -func (m *NamedGenericResource) CopyFrom(src interface{}) { +func (x *Mount_VolumeOptions) GetLabels() map[string]string { + if x != nil { + return x.Labels + } + return nil +} - o := src.(*NamedGenericResource) - *m = *o +func (x *Mount_VolumeOptions) GetDriverConfig() *Driver { + if x != nil { + return x.DriverConfig + } + return nil } -func (m *DiscreteGenericResource) Copy() *DiscreteGenericResource { - if m == nil { - return nil +func (x *Mount_VolumeOptions) GetSubpath() string { + if x != nil { + return x.Subpath } - o := &DiscreteGenericResource{} - o.CopyFrom(m) - return o + return "" } -func (m *DiscreteGenericResource) CopyFrom(src interface{}) { +type Mount_TmpfsOptions struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Size sets the size of the tmpfs, in bytes. + // + // This will be converted to an operating system specific value + // depending on the host. For example, on linux, it will be convered to + // use a 'k', 'm' or 'g' syntax. BSD, though not widely supported with + // docker, uses a straight byte value. + // + // Percentages are not supported. + SizeBytes int64 `protobuf:"varint,1,opt,name=size_bytes,json=sizeBytes,proto3" json:"size_bytes,omitempty"` + // Mode of the tmpfs upon creation + Mode uint32 `protobuf:"varint,2,opt,name=mode,proto3" json:"mode,omitempty"` + // Options passed to tmpfs mount + Options string `protobuf:"bytes,3,opt,name=options,proto3" json:"options,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} - o := src.(*DiscreteGenericResource) - *m = *o +func (x *Mount_TmpfsOptions) Reset() { + *x = Mount_TmpfsOptions{} + mi := &file_api_types_proto_msgTypes[72] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *GenericResource) Copy() *GenericResource { - if m == nil { - return nil - } - o := &GenericResource{} - o.CopyFrom(m) - return o +func (x *Mount_TmpfsOptions) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *GenericResource) CopyFrom(src interface{}) { +func (*Mount_TmpfsOptions) ProtoMessage() {} - o := src.(*GenericResource) - *m = *o - if o.Resource != nil { - switch o.Resource.(type) { - case *GenericResource_NamedResourceSpec: - v := GenericResource_NamedResourceSpec{ - NamedResourceSpec: &NamedGenericResource{}, - } - github_com_moby_swarmkit_v2_api_deepcopy.Copy(v.NamedResourceSpec, o.GetNamedResourceSpec()) - m.Resource = &v - case *GenericResource_DiscreteResourceSpec: - v := GenericResource_DiscreteResourceSpec{ - DiscreteResourceSpec: &DiscreteGenericResource{}, - } - github_com_moby_swarmkit_v2_api_deepcopy.Copy(v.DiscreteResourceSpec, o.GetDiscreteResourceSpec()) - m.Resource = &v +func (x *Mount_TmpfsOptions) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[72] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } + return ms } - + return mi.MessageOf(x) } -func (m *Resources) Copy() *Resources { - if m == nil { - return nil - } - o := &Resources{} - o.CopyFrom(m) - return o +// Deprecated: Use Mount_TmpfsOptions.ProtoReflect.Descriptor instead. +func (*Mount_TmpfsOptions) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{17, 2} } -func (m *Resources) CopyFrom(src interface{}) { - - o := src.(*Resources) - *m = *o - if o.Generic != nil { - m.Generic = make([]*GenericResource, len(o.Generic)) - for i := range m.Generic { - m.Generic[i] = &GenericResource{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Generic[i], o.Generic[i]) - } +func (x *Mount_TmpfsOptions) GetSizeBytes() int64 { + if x != nil { + return x.SizeBytes } - + return 0 } -func (m *ResourceRequirements) Copy() *ResourceRequirements { - if m == nil { - return nil +func (x *Mount_TmpfsOptions) GetMode() uint32 { + if x != nil { + return x.Mode } - o := &ResourceRequirements{} - o.CopyFrom(m) - return o + return 0 } -func (m *ResourceRequirements) CopyFrom(src interface{}) { - - o := src.(*ResourceRequirements) - *m = *o - if o.Limits != nil { - m.Limits = &Resources{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Limits, o.Limits) - } - if o.Reservations != nil { - m.Reservations = &Resources{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Reservations, o.Reservations) - } - if o.SwapBytes != nil { - m.SwapBytes = &types.Int64Value{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.SwapBytes, o.SwapBytes) - } - if o.MemorySwappiness != nil { - m.MemorySwappiness = &types.Int64Value{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.MemorySwappiness, o.MemorySwappiness) +func (x *Mount_TmpfsOptions) GetOptions() string { + if x != nil { + return x.Options } + return "" } -func (m *Platform) Copy() *Platform { - if m == nil { - return nil - } - o := &Platform{} - o.CopyFrom(m) - return o +type AcceptancePolicy_RoleAdmissionPolicy struct { + state protoimpl.MessageState `protogen:"open.v1"` + Role NodeRole `protobuf:"varint,1,opt,name=role,proto3,enum=docker.swarmkit.v1.NodeRole" json:"role,omitempty"` + // Autoaccept controls which roles' certificates are automatically + // issued without administrator intervention. + Autoaccept bool `protobuf:"varint,2,opt,name=autoaccept,proto3" json:"autoaccept,omitempty"` + // Secret represents a user-provided string that is necessary for new + // nodes to join the cluster + Secret *AcceptancePolicy_RoleAdmissionPolicy_Secret `protobuf:"bytes,3,opt,name=secret,proto3" json:"secret,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *Platform) CopyFrom(src interface{}) { +func (x *AcceptancePolicy_RoleAdmissionPolicy) Reset() { + *x = AcceptancePolicy_RoleAdmissionPolicy{} + mi := &file_api_types_proto_msgTypes[77] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} - o := src.(*Platform) - *m = *o +func (x *AcceptancePolicy_RoleAdmissionPolicy) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *PluginDescription) Copy() *PluginDescription { - if m == nil { - return nil +func (*AcceptancePolicy_RoleAdmissionPolicy) ProtoMessage() {} + +func (x *AcceptancePolicy_RoleAdmissionPolicy) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[77] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - o := &PluginDescription{} - o.CopyFrom(m) - return o + return mi.MessageOf(x) } -func (m *PluginDescription) CopyFrom(src interface{}) { - - o := src.(*PluginDescription) - *m = *o +// Deprecated: Use AcceptancePolicy_RoleAdmissionPolicy.ProtoReflect.Descriptor instead. +func (*AcceptancePolicy_RoleAdmissionPolicy) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{32, 0} } -func (m *EngineDescription) Copy() *EngineDescription { - if m == nil { - return nil +func (x *AcceptancePolicy_RoleAdmissionPolicy) GetRole() NodeRole { + if x != nil { + return x.Role } - o := &EngineDescription{} - o.CopyFrom(m) - return o + return NodeRoleWorker } -func (m *EngineDescription) CopyFrom(src interface{}) { - - o := src.(*EngineDescription) - *m = *o - if o.Labels != nil { - m.Labels = make(map[string]string, len(o.Labels)) - for k, v := range o.Labels { - m.Labels[k] = v - } +func (x *AcceptancePolicy_RoleAdmissionPolicy) GetAutoaccept() bool { + if x != nil { + return x.Autoaccept } + return false +} - if o.Plugins != nil { - m.Plugins = make([]PluginDescription, len(o.Plugins)) - for i := range m.Plugins { - github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Plugins[i], &o.Plugins[i]) - } +func (x *AcceptancePolicy_RoleAdmissionPolicy) GetSecret() *AcceptancePolicy_RoleAdmissionPolicy_Secret { + if x != nil { + return x.Secret } + return nil +} +type AcceptancePolicy_RoleAdmissionPolicy_Secret struct { + state protoimpl.MessageState `protogen:"open.v1"` + // The actual content (possibly hashed) + Data []byte `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` + // The type of hash we are using, or "plaintext" + Alg string `protobuf:"bytes,2,opt,name=alg,proto3" json:"alg,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *NodeDescription) Copy() *NodeDescription { - if m == nil { - return nil - } - o := &NodeDescription{} - o.CopyFrom(m) - return o +func (x *AcceptancePolicy_RoleAdmissionPolicy_Secret) Reset() { + *x = AcceptancePolicy_RoleAdmissionPolicy_Secret{} + mi := &file_api_types_proto_msgTypes[78] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *NodeDescription) CopyFrom(src interface{}) { +func (x *AcceptancePolicy_RoleAdmissionPolicy_Secret) String() string { + return protoimpl.X.MessageStringOf(x) +} - o := src.(*NodeDescription) - *m = *o - if o.Platform != nil { - m.Platform = &Platform{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Platform, o.Platform) - } - if o.Resources != nil { - m.Resources = &Resources{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Resources, o.Resources) - } - if o.Engine != nil { - m.Engine = &EngineDescription{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Engine, o.Engine) - } - if o.TLSInfo != nil { - m.TLSInfo = &NodeTLSInfo{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.TLSInfo, o.TLSInfo) - } - if o.CSIInfo != nil { - m.CSIInfo = make([]*NodeCSIInfo, len(o.CSIInfo)) - for i := range m.CSIInfo { - m.CSIInfo[i] = &NodeCSIInfo{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.CSIInfo[i], o.CSIInfo[i]) +func (*AcceptancePolicy_RoleAdmissionPolicy_Secret) ProtoMessage() {} + +func (x *AcceptancePolicy_RoleAdmissionPolicy_Secret) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[78] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } + return ms } - + return mi.MessageOf(x) } -func (m *NodeTLSInfo) Copy() *NodeTLSInfo { - if m == nil { - return nil - } - o := &NodeTLSInfo{} - o.CopyFrom(m) - return o +// Deprecated: Use AcceptancePolicy_RoleAdmissionPolicy_Secret.ProtoReflect.Descriptor instead. +func (*AcceptancePolicy_RoleAdmissionPolicy_Secret) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{32, 0, 0} } -func (m *NodeTLSInfo) CopyFrom(src interface{}) { - - o := src.(*NodeTLSInfo) - *m = *o - if o.TrustRoot != nil { - m.TrustRoot = make([]byte, len(o.TrustRoot)) - copy(m.TrustRoot, o.TrustRoot) - } - if o.CertIssuerSubject != nil { - m.CertIssuerSubject = make([]byte, len(o.CertIssuerSubject)) - copy(m.CertIssuerSubject, o.CertIssuerSubject) - } - if o.CertIssuerPublicKey != nil { - m.CertIssuerPublicKey = make([]byte, len(o.CertIssuerPublicKey)) - copy(m.CertIssuerPublicKey, o.CertIssuerPublicKey) +func (x *AcceptancePolicy_RoleAdmissionPolicy_Secret) GetData() []byte { + if x != nil { + return x.Data } + return nil } -func (m *NodeCSIInfo) Copy() *NodeCSIInfo { - if m == nil { - return nil +func (x *AcceptancePolicy_RoleAdmissionPolicy_Secret) GetAlg() string { + if x != nil { + return x.Alg } - o := &NodeCSIInfo{} - o.CopyFrom(m) - return o + return "" } -func (m *NodeCSIInfo) CopyFrom(src interface{}) { - - o := src.(*NodeCSIInfo) - *m = *o - if o.AccessibleTopology != nil { - m.AccessibleTopology = &Topology{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.AccessibleTopology, o.AccessibleTopology) - } +// CredentialSpec for managed service account (Windows only). +type Privileges_CredentialSpec struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to Source: + // + // *Privileges_CredentialSpec_File + // *Privileges_CredentialSpec_Registry + // *Privileges_CredentialSpec_Config + Source isPrivileges_CredentialSpec_Source `protobuf_oneof:"source"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *RaftMemberStatus) Copy() *RaftMemberStatus { - if m == nil { - return nil - } - o := &RaftMemberStatus{} - o.CopyFrom(m) - return o +func (x *Privileges_CredentialSpec) Reset() { + *x = Privileges_CredentialSpec{} + mi := &file_api_types_proto_msgTypes[80] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *RaftMemberStatus) CopyFrom(src interface{}) { - - o := src.(*RaftMemberStatus) - *m = *o +func (x *Privileges_CredentialSpec) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *NodeStatus) Copy() *NodeStatus { - if m == nil { - return nil +func (*Privileges_CredentialSpec) ProtoMessage() {} + +func (x *Privileges_CredentialSpec) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[80] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - o := &NodeStatus{} - o.CopyFrom(m) - return o + return mi.MessageOf(x) } -func (m *NodeStatus) CopyFrom(src interface{}) { - - o := src.(*NodeStatus) - *m = *o +// Deprecated: Use Privileges_CredentialSpec.ProtoReflect.Descriptor instead. +func (*Privileges_CredentialSpec) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{56, 0} } -func (m *Image) Copy() *Image { - if m == nil { - return nil +func (x *Privileges_CredentialSpec) GetSource() isPrivileges_CredentialSpec_Source { + if x != nil { + return x.Source } - o := &Image{} - o.CopyFrom(m) - return o + return nil } -func (m *Image) CopyFrom(src interface{}) { - - o := src.(*Image) - *m = *o +func (x *Privileges_CredentialSpec) GetFile() string { + if x != nil { + if x, ok := x.Source.(*Privileges_CredentialSpec_File); ok { + return x.File + } + } + return "" } -func (m *Mount) Copy() *Mount { - if m == nil { - return nil +func (x *Privileges_CredentialSpec) GetRegistry() string { + if x != nil { + if x, ok := x.Source.(*Privileges_CredentialSpec_Registry); ok { + return x.Registry + } } - o := &Mount{} - o.CopyFrom(m) - return o + return "" } -func (m *Mount) CopyFrom(src interface{}) { - - o := src.(*Mount) - *m = *o - if o.BindOptions != nil { - m.BindOptions = &Mount_BindOptions{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.BindOptions, o.BindOptions) - } - if o.VolumeOptions != nil { - m.VolumeOptions = &Mount_VolumeOptions{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.VolumeOptions, o.VolumeOptions) - } - if o.TmpfsOptions != nil { - m.TmpfsOptions = &Mount_TmpfsOptions{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.TmpfsOptions, o.TmpfsOptions) +func (x *Privileges_CredentialSpec) GetConfig() string { + if x != nil { + if x, ok := x.Source.(*Privileges_CredentialSpec_Config); ok { + return x.Config + } } + return "" } -func (m *Mount_BindOptions) Copy() *Mount_BindOptions { - if m == nil { - return nil - } - o := &Mount_BindOptions{} - o.CopyFrom(m) - return o +type isPrivileges_CredentialSpec_Source interface { + isPrivileges_CredentialSpec_Source() } -func (m *Mount_BindOptions) CopyFrom(src interface{}) { +type Privileges_CredentialSpec_File struct { + File string `protobuf:"bytes,1,opt,name=file,proto3,oneof"` +} - o := src.(*Mount_BindOptions) - *m = *o +type Privileges_CredentialSpec_Registry struct { + Registry string `protobuf:"bytes,2,opt,name=registry,proto3,oneof"` } -func (m *Mount_VolumeOptions) Copy() *Mount_VolumeOptions { - if m == nil { - return nil - } - o := &Mount_VolumeOptions{} - o.CopyFrom(m) - return o +type Privileges_CredentialSpec_Config struct { + // Config represents a Config ID from which to get the CredentialSpec. + // The Config MUST be included in the SecretReferences with a RuntimeTarget + Config string `protobuf:"bytes,3,opt,name=config,proto3,oneof"` } -func (m *Mount_VolumeOptions) CopyFrom(src interface{}) { +func (*Privileges_CredentialSpec_File) isPrivileges_CredentialSpec_Source() {} - o := src.(*Mount_VolumeOptions) - *m = *o - if o.Labels != nil { - m.Labels = make(map[string]string, len(o.Labels)) - for k, v := range o.Labels { - m.Labels[k] = v - } - } +func (*Privileges_CredentialSpec_Registry) isPrivileges_CredentialSpec_Source() {} - if o.DriverConfig != nil { - m.DriverConfig = &Driver{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.DriverConfig, o.DriverConfig) - } -} +func (*Privileges_CredentialSpec_Config) isPrivileges_CredentialSpec_Source() {} -func (m *Mount_TmpfsOptions) Copy() *Mount_TmpfsOptions { - if m == nil { - return nil - } - o := &Mount_TmpfsOptions{} - o.CopyFrom(m) - return o +// SELinuxContext contains the SELinux labels for the container. +type Privileges_SELinuxContext struct { + state protoimpl.MessageState `protogen:"open.v1"` + Disable bool `protobuf:"varint,1,opt,name=disable,proto3" json:"disable,omitempty"` + User string `protobuf:"bytes,2,opt,name=user,proto3" json:"user,omitempty"` + Role string `protobuf:"bytes,3,opt,name=role,proto3" json:"role,omitempty"` + Type string `protobuf:"bytes,4,opt,name=type,proto3" json:"type,omitempty"` + Level string `protobuf:"bytes,5,opt,name=level,proto3" json:"level,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *Mount_TmpfsOptions) CopyFrom(src interface{}) { - - o := src.(*Mount_TmpfsOptions) - *m = *o +func (x *Privileges_SELinuxContext) Reset() { + *x = Privileges_SELinuxContext{} + mi := &file_api_types_proto_msgTypes[81] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *RestartPolicy) Copy() *RestartPolicy { - if m == nil { - return nil - } - o := &RestartPolicy{} - o.CopyFrom(m) - return o +func (x *Privileges_SELinuxContext) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *RestartPolicy) CopyFrom(src interface{}) { +func (*Privileges_SELinuxContext) ProtoMessage() {} - o := src.(*RestartPolicy) - *m = *o - if o.Delay != nil { - m.Delay = &types.Duration{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Delay, o.Delay) - } - if o.Window != nil { - m.Window = &types.Duration{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Window, o.Window) +func (x *Privileges_SELinuxContext) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[81] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } + return mi.MessageOf(x) } -func (m *UpdateConfig) Copy() *UpdateConfig { - if m == nil { - return nil - } - o := &UpdateConfig{} - o.CopyFrom(m) - return o +// Deprecated: Use Privileges_SELinuxContext.ProtoReflect.Descriptor instead. +func (*Privileges_SELinuxContext) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{56, 1} } -func (m *UpdateConfig) CopyFrom(src interface{}) { - - o := src.(*UpdateConfig) - *m = *o - github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Delay, &o.Delay) - if o.Monitor != nil { - m.Monitor = &types.Duration{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Monitor, o.Monitor) +func (x *Privileges_SELinuxContext) GetDisable() bool { + if x != nil { + return x.Disable } + return false } -func (m *UpdateStatus) Copy() *UpdateStatus { - if m == nil { - return nil +func (x *Privileges_SELinuxContext) GetUser() string { + if x != nil { + return x.User } - o := &UpdateStatus{} - o.CopyFrom(m) - return o + return "" } -func (m *UpdateStatus) CopyFrom(src interface{}) { - - o := src.(*UpdateStatus) - *m = *o - if o.StartedAt != nil { - m.StartedAt = &types.Timestamp{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.StartedAt, o.StartedAt) +func (x *Privileges_SELinuxContext) GetRole() string { + if x != nil { + return x.Role } - if o.CompletedAt != nil { - m.CompletedAt = &types.Timestamp{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.CompletedAt, o.CompletedAt) + return "" +} + +func (x *Privileges_SELinuxContext) GetType() string { + if x != nil { + return x.Type } + return "" } -func (m *ContainerStatus) Copy() *ContainerStatus { - if m == nil { - return nil +func (x *Privileges_SELinuxContext) GetLevel() string { + if x != nil { + return x.Level } - o := &ContainerStatus{} - o.CopyFrom(m) - return o + return "" } -func (m *ContainerStatus) CopyFrom(src interface{}) { +// SeccompOpts contains options for configuring seccomp profiles on the +// container. See https://docs.docker.com/engine/security/seccomp/ for more +// information. +type Privileges_SeccompOpts struct { + state protoimpl.MessageState `protogen:"open.v1"` + Mode Privileges_SeccompOpts_SeccompMode `protobuf:"varint,1,opt,name=mode,proto3,enum=docker.swarmkit.v1.Privileges_SeccompOpts_SeccompMode" json:"mode,omitempty"` + // Profile contains the json definition of the seccomp profile to use, + // if Mode is set to custom. + Profile []byte `protobuf:"bytes,2,opt,name=profile,proto3" json:"profile,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} - o := src.(*ContainerStatus) - *m = *o +func (x *Privileges_SeccompOpts) Reset() { + *x = Privileges_SeccompOpts{} + mi := &file_api_types_proto_msgTypes[82] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *PortStatus) Copy() *PortStatus { - if m == nil { - return nil - } - o := &PortStatus{} - o.CopyFrom(m) - return o +func (x *Privileges_SeccompOpts) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *PortStatus) CopyFrom(src interface{}) { +func (*Privileges_SeccompOpts) ProtoMessage() {} - o := src.(*PortStatus) - *m = *o - if o.Ports != nil { - m.Ports = make([]*PortConfig, len(o.Ports)) - for i := range m.Ports { - m.Ports[i] = &PortConfig{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Ports[i], o.Ports[i]) +func (x *Privileges_SeccompOpts) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[82] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } + return ms } + return mi.MessageOf(x) +} +// Deprecated: Use Privileges_SeccompOpts.ProtoReflect.Descriptor instead. +func (*Privileges_SeccompOpts) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{56, 2} } -func (m *TaskStatus) Copy() *TaskStatus { - if m == nil { - return nil +func (x *Privileges_SeccompOpts) GetMode() Privileges_SeccompOpts_SeccompMode { + if x != nil { + return x.Mode } - o := &TaskStatus{} - o.CopyFrom(m) - return o + return Privileges_SeccompOpts_DEFAULT } -func (m *TaskStatus) CopyFrom(src interface{}) { - - o := src.(*TaskStatus) - *m = *o - if o.Timestamp != nil { - m.Timestamp = &types.Timestamp{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Timestamp, o.Timestamp) - } - if o.PortStatus != nil { - m.PortStatus = &PortStatus{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.PortStatus, o.PortStatus) +func (x *Privileges_SeccompOpts) GetProfile() []byte { + if x != nil { + return x.Profile } - if o.AppliedAt != nil { - m.AppliedAt = &types.Timestamp{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.AppliedAt, o.AppliedAt) - } - if o.RuntimeStatus != nil { - switch o.RuntimeStatus.(type) { - case *TaskStatus_Container: - v := TaskStatus_Container{ - Container: &ContainerStatus{}, - } - github_com_moby_swarmkit_v2_api_deepcopy.Copy(v.Container, o.GetContainer()) - m.RuntimeStatus = &v - } - } - + return nil } -func (m *NetworkAttachmentConfig) Copy() *NetworkAttachmentConfig { - if m == nil { - return nil - } - o := &NetworkAttachmentConfig{} - o.CopyFrom(m) - return o +// AppArmorOpts contains options for configuring AppArmor profiles on the +// container. Currently, custom profiles are not supported. See +// https://docs.docker.com/engine/security/apparmor/ for more information. +type Privileges_AppArmorOpts struct { + state protoimpl.MessageState `protogen:"open.v1"` + Mode Privileges_AppArmorOpts_AppArmorMode `protobuf:"varint,1,opt,name=mode,proto3,enum=docker.swarmkit.v1.Privileges_AppArmorOpts_AppArmorMode" json:"mode,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *NetworkAttachmentConfig) CopyFrom(src interface{}) { +func (x *Privileges_AppArmorOpts) Reset() { + *x = Privileges_AppArmorOpts{} + mi := &file_api_types_proto_msgTypes[83] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} - o := src.(*NetworkAttachmentConfig) - *m = *o - if o.Aliases != nil { - m.Aliases = make([]string, len(o.Aliases)) - copy(m.Aliases, o.Aliases) - } +func (x *Privileges_AppArmorOpts) String() string { + return protoimpl.X.MessageStringOf(x) +} - if o.Addresses != nil { - m.Addresses = make([]string, len(o.Addresses)) - copy(m.Addresses, o.Addresses) - } +func (*Privileges_AppArmorOpts) ProtoMessage() {} - if o.DriverAttachmentOpts != nil { - m.DriverAttachmentOpts = make(map[string]string, len(o.DriverAttachmentOpts)) - for k, v := range o.DriverAttachmentOpts { - m.DriverAttachmentOpts[k] = v +func (x *Privileges_AppArmorOpts) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[83] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } + return ms } + return mi.MessageOf(x) +} +// Deprecated: Use Privileges_AppArmorOpts.ProtoReflect.Descriptor instead. +func (*Privileges_AppArmorOpts) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{56, 3} } -func (m *IPAMConfig) Copy() *IPAMConfig { - if m == nil { - return nil +func (x *Privileges_AppArmorOpts) GetMode() Privileges_AppArmorOpts_AppArmorMode { + if x != nil { + return x.Mode } - o := &IPAMConfig{} - o.CopyFrom(m) - return o + return Privileges_AppArmorOpts_DEFAULT +} + +// BlockVolume indicates the volume will be accessed with the block device +// API. +type VolumeAccessMode_BlockVolume struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VolumeAccessMode_BlockVolume) Reset() { + *x = VolumeAccessMode_BlockVolume{} + mi := &file_api_types_proto_msgTypes[84] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *IPAMConfig) CopyFrom(src interface{}) { +func (x *VolumeAccessMode_BlockVolume) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VolumeAccessMode_BlockVolume) ProtoMessage() {} - o := src.(*IPAMConfig) - *m = *o - if o.Reserved != nil { - m.Reserved = make(map[string]string, len(o.Reserved)) - for k, v := range o.Reserved { - m.Reserved[k] = v +func (x *VolumeAccessMode_BlockVolume) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[84] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } + return ms } - + return mi.MessageOf(x) } -func (m *PortConfig) Copy() *PortConfig { - if m == nil { - return nil - } - o := &PortConfig{} - o.CopyFrom(m) - return o +// Deprecated: Use VolumeAccessMode_BlockVolume.ProtoReflect.Descriptor instead. +func (*VolumeAccessMode_BlockVolume) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{58, 0} } -func (m *PortConfig) CopyFrom(src interface{}) { +// MountVolume indicates the volume will be access with the filesystem API. +type VolumeAccessMode_MountVolume struct { + state protoimpl.MessageState `protogen:"open.v1"` + // FsType is the filesystem type. This field is optional, and an empty + // string is equal to an unspecified value. + FsType string `protobuf:"bytes,1,opt,name=fs_type,json=fsType,proto3" json:"fs_type,omitempty"` + // MountFlags indicates mount options to be used for the volume. This + // field is optional, and may contain sensitive data. + MountFlags []string `protobuf:"bytes,2,rep,name=mount_flags,json=mountFlags,proto3" json:"mount_flags,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} - o := src.(*PortConfig) - *m = *o +func (x *VolumeAccessMode_MountVolume) Reset() { + *x = VolumeAccessMode_MountVolume{} + mi := &file_api_types_proto_msgTypes[85] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *Driver) Copy() *Driver { - if m == nil { - return nil - } - o := &Driver{} - o.CopyFrom(m) - return o +func (x *VolumeAccessMode_MountVolume) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Driver) CopyFrom(src interface{}) { +func (*VolumeAccessMode_MountVolume) ProtoMessage() {} - o := src.(*Driver) - *m = *o - if o.Options != nil { - m.Options = make(map[string]string, len(o.Options)) - for k, v := range o.Options { - m.Options[k] = v +func (x *VolumeAccessMode_MountVolume) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[85] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } + return ms } - + return mi.MessageOf(x) } -func (m *IPAMOptions) Copy() *IPAMOptions { - if m == nil { - return nil - } - o := &IPAMOptions{} - o.CopyFrom(m) - return o +// Deprecated: Use VolumeAccessMode_MountVolume.ProtoReflect.Descriptor instead. +func (*VolumeAccessMode_MountVolume) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{58, 1} } -func (m *IPAMOptions) CopyFrom(src interface{}) { - - o := src.(*IPAMOptions) - *m = *o - if o.Driver != nil { - m.Driver = &Driver{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Driver, o.Driver) +func (x *VolumeAccessMode_MountVolume) GetFsType() string { + if x != nil { + return x.FsType } - if o.Configs != nil { - m.Configs = make([]*IPAMConfig, len(o.Configs)) - for i := range m.Configs { - m.Configs[i] = &IPAMConfig{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Configs[i], o.Configs[i]) - } - } - + return "" } -func (m *Peer) Copy() *Peer { - if m == nil { - return nil +func (x *VolumeAccessMode_MountVolume) GetMountFlags() []string { + if x != nil { + return x.MountFlags } - o := &Peer{} - o.CopyFrom(m) - return o + return nil } -func (m *Peer) CopyFrom(src interface{}) { +// Indicate that the volume will be accessed via the block device API. +type VolumeCapability_BlockVolume struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} - o := src.(*Peer) - *m = *o +func (x *VolumeCapability_BlockVolume) Reset() { + *x = VolumeCapability_BlockVolume{} + mi := &file_api_types_proto_msgTypes[91] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *WeightedPeer) Copy() *WeightedPeer { - if m == nil { - return nil - } - o := &WeightedPeer{} - o.CopyFrom(m) - return o +func (x *VolumeCapability_BlockVolume) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *WeightedPeer) CopyFrom(src interface{}) { +func (*VolumeCapability_BlockVolume) ProtoMessage() {} - o := src.(*WeightedPeer) - *m = *o - if o.Peer != nil { - m.Peer = &Peer{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Peer, o.Peer) +func (x *VolumeCapability_BlockVolume) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[91] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } + return mi.MessageOf(x) } -func (m *IssuanceStatus) Copy() *IssuanceStatus { - if m == nil { - return nil - } - o := &IssuanceStatus{} - o.CopyFrom(m) - return o +// Deprecated: Use VolumeCapability_BlockVolume.ProtoReflect.Descriptor instead. +func (*VolumeCapability_BlockVolume) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{67, 0} } -func (m *IssuanceStatus) CopyFrom(src interface{}) { +// Indicate that the volume will be accessed via the filesystem API. +type VolumeCapability_MountVolume struct { + state protoimpl.MessageState `protogen:"open.v1"` + // The filesystem type. This field is OPTIONAL. + // An empty string is equal to an unspecified field value. + FsType string `protobuf:"bytes,1,opt,name=fs_type,json=fsType,proto3" json:"fs_type,omitempty"` + // The mount options that can be used for the volume. This field is + // OPTIONAL. `mount_flags` MAY contain sensitive information. + // Therefore, the CO and the Plugin MUST NOT leak this information + // to untrusted entities. The total size of this repeated field + // SHALL NOT exceed 4 KiB. + MountFlags []string `protobuf:"bytes,2,rep,name=mount_flags,json=mountFlags,proto3" json:"mount_flags,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} - o := src.(*IssuanceStatus) - *m = *o +func (x *VolumeCapability_MountVolume) Reset() { + *x = VolumeCapability_MountVolume{} + mi := &file_api_types_proto_msgTypes[92] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *AcceptancePolicy) Copy() *AcceptancePolicy { - if m == nil { - return nil - } - o := &AcceptancePolicy{} - o.CopyFrom(m) - return o +func (x *VolumeCapability_MountVolume) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *AcceptancePolicy) CopyFrom(src interface{}) { +func (*VolumeCapability_MountVolume) ProtoMessage() {} - o := src.(*AcceptancePolicy) - *m = *o - if o.Policies != nil { - m.Policies = make([]*AcceptancePolicy_RoleAdmissionPolicy, len(o.Policies)) - for i := range m.Policies { - m.Policies[i] = &AcceptancePolicy_RoleAdmissionPolicy{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Policies[i], o.Policies[i]) +func (x *VolumeCapability_MountVolume) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[92] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } + return ms } - + return mi.MessageOf(x) } -func (m *AcceptancePolicy_RoleAdmissionPolicy) Copy() *AcceptancePolicy_RoleAdmissionPolicy { - if m == nil { - return nil - } - o := &AcceptancePolicy_RoleAdmissionPolicy{} - o.CopyFrom(m) - return o +// Deprecated: Use VolumeCapability_MountVolume.ProtoReflect.Descriptor instead. +func (*VolumeCapability_MountVolume) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{67, 1} } -func (m *AcceptancePolicy_RoleAdmissionPolicy) CopyFrom(src interface{}) { - - o := src.(*AcceptancePolicy_RoleAdmissionPolicy) - *m = *o - if o.Secret != nil { - m.Secret = &AcceptancePolicy_RoleAdmissionPolicy_Secret{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Secret, o.Secret) +func (x *VolumeCapability_MountVolume) GetFsType() string { + if x != nil { + return x.FsType } + return "" } -func (m *AcceptancePolicy_RoleAdmissionPolicy_Secret) Copy() *AcceptancePolicy_RoleAdmissionPolicy_Secret { - if m == nil { - return nil +func (x *VolumeCapability_MountVolume) GetMountFlags() []string { + if x != nil { + return x.MountFlags } - o := &AcceptancePolicy_RoleAdmissionPolicy_Secret{} - o.CopyFrom(m) - return o + return nil } -func (m *AcceptancePolicy_RoleAdmissionPolicy_Secret) CopyFrom(src interface{}) { +// Specify how a volume can be accessed. +type VolumeCapability_AccessMode struct { + state protoimpl.MessageState `protogen:"open.v1"` + // This field is REQUIRED. + Mode VolumeCapability_AccessMode_Mode `protobuf:"varint,1,opt,name=mode,proto3,enum=docker.swarmkit.v1.VolumeCapability_AccessMode_Mode" json:"mode,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} - o := src.(*AcceptancePolicy_RoleAdmissionPolicy_Secret) - *m = *o - if o.Data != nil { - m.Data = make([]byte, len(o.Data)) - copy(m.Data, o.Data) - } +func (x *VolumeCapability_AccessMode) Reset() { + *x = VolumeCapability_AccessMode{} + mi := &file_api_types_proto_msgTypes[93] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *ExternalCA) Copy() *ExternalCA { - if m == nil { - return nil - } - o := &ExternalCA{} - o.CopyFrom(m) - return o +func (x *VolumeCapability_AccessMode) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ExternalCA) CopyFrom(src interface{}) { +func (*VolumeCapability_AccessMode) ProtoMessage() {} - o := src.(*ExternalCA) - *m = *o - if o.Options != nil { - m.Options = make(map[string]string, len(o.Options)) - for k, v := range o.Options { - m.Options[k] = v +func (x *VolumeCapability_AccessMode) ProtoReflect() protoreflect.Message { + mi := &file_api_types_proto_msgTypes[93] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } + return ms } + return mi.MessageOf(x) +} - if o.CACert != nil { - m.CACert = make([]byte, len(o.CACert)) - copy(m.CACert, o.CACert) - } -} - -func (m *CAConfig) Copy() *CAConfig { - if m == nil { - return nil - } - o := &CAConfig{} - o.CopyFrom(m) - return o -} - -func (m *CAConfig) CopyFrom(src interface{}) { - - o := src.(*CAConfig) - *m = *o - if o.NodeCertExpiry != nil { - m.NodeCertExpiry = &types.Duration{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.NodeCertExpiry, o.NodeCertExpiry) - } - if o.ExternalCAs != nil { - m.ExternalCAs = make([]*ExternalCA, len(o.ExternalCAs)) - for i := range m.ExternalCAs { - m.ExternalCAs[i] = &ExternalCA{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.ExternalCAs[i], o.ExternalCAs[i]) - } - } - - if o.SigningCACert != nil { - m.SigningCACert = make([]byte, len(o.SigningCACert)) - copy(m.SigningCACert, o.SigningCACert) - } - if o.SigningCAKey != nil { - m.SigningCAKey = make([]byte, len(o.SigningCAKey)) - copy(m.SigningCAKey, o.SigningCAKey) - } -} - -func (m *OrchestrationConfig) Copy() *OrchestrationConfig { - if m == nil { - return nil - } - o := &OrchestrationConfig{} - o.CopyFrom(m) - return o -} - -func (m *OrchestrationConfig) CopyFrom(src interface{}) { - - o := src.(*OrchestrationConfig) - *m = *o -} - -func (m *TaskDefaults) Copy() *TaskDefaults { - if m == nil { - return nil - } - o := &TaskDefaults{} - o.CopyFrom(m) - return o -} - -func (m *TaskDefaults) CopyFrom(src interface{}) { - - o := src.(*TaskDefaults) - *m = *o - if o.LogDriver != nil { - m.LogDriver = &Driver{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.LogDriver, o.LogDriver) - } -} - -func (m *DispatcherConfig) Copy() *DispatcherConfig { - if m == nil { - return nil - } - o := &DispatcherConfig{} - o.CopyFrom(m) - return o -} - -func (m *DispatcherConfig) CopyFrom(src interface{}) { - - o := src.(*DispatcherConfig) - *m = *o - if o.HeartbeatPeriod != nil { - m.HeartbeatPeriod = &types.Duration{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.HeartbeatPeriod, o.HeartbeatPeriod) - } -} - -func (m *RaftConfig) Copy() *RaftConfig { - if m == nil { - return nil - } - o := &RaftConfig{} - o.CopyFrom(m) - return o -} - -func (m *RaftConfig) CopyFrom(src interface{}) { - - o := src.(*RaftConfig) - *m = *o -} - -func (m *EncryptionConfig) Copy() *EncryptionConfig { - if m == nil { - return nil - } - o := &EncryptionConfig{} - o.CopyFrom(m) - return o -} - -func (m *EncryptionConfig) CopyFrom(src interface{}) { - - o := src.(*EncryptionConfig) - *m = *o -} - -func (m *SpreadOver) Copy() *SpreadOver { - if m == nil { - return nil - } - o := &SpreadOver{} - o.CopyFrom(m) - return o -} - -func (m *SpreadOver) CopyFrom(src interface{}) { - - o := src.(*SpreadOver) - *m = *o -} - -func (m *PlacementPreference) Copy() *PlacementPreference { - if m == nil { - return nil - } - o := &PlacementPreference{} - o.CopyFrom(m) - return o -} - -func (m *PlacementPreference) CopyFrom(src interface{}) { - - o := src.(*PlacementPreference) - *m = *o - if o.Preference != nil { - switch o.Preference.(type) { - case *PlacementPreference_Spread: - v := PlacementPreference_Spread{ - Spread: &SpreadOver{}, - } - github_com_moby_swarmkit_v2_api_deepcopy.Copy(v.Spread, o.GetSpread()) - m.Preference = &v - } - } - -} - -func (m *Placement) Copy() *Placement { - if m == nil { - return nil - } - o := &Placement{} - o.CopyFrom(m) - return o -} - -func (m *Placement) CopyFrom(src interface{}) { - - o := src.(*Placement) - *m = *o - if o.Constraints != nil { - m.Constraints = make([]string, len(o.Constraints)) - copy(m.Constraints, o.Constraints) - } - - if o.Preferences != nil { - m.Preferences = make([]*PlacementPreference, len(o.Preferences)) - for i := range m.Preferences { - m.Preferences[i] = &PlacementPreference{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Preferences[i], o.Preferences[i]) - } - } - - if o.Platforms != nil { - m.Platforms = make([]*Platform, len(o.Platforms)) - for i := range m.Platforms { - m.Platforms[i] = &Platform{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Platforms[i], o.Platforms[i]) - } - } - -} - -func (m *JoinTokens) Copy() *JoinTokens { - if m == nil { - return nil - } - o := &JoinTokens{} - o.CopyFrom(m) - return o -} - -func (m *JoinTokens) CopyFrom(src interface{}) { - - o := src.(*JoinTokens) - *m = *o -} - -func (m *RootCA) Copy() *RootCA { - if m == nil { - return nil - } - o := &RootCA{} - o.CopyFrom(m) - return o -} - -func (m *RootCA) CopyFrom(src interface{}) { - - o := src.(*RootCA) - *m = *o - if o.CAKey != nil { - m.CAKey = make([]byte, len(o.CAKey)) - copy(m.CAKey, o.CAKey) - } - if o.CACert != nil { - m.CACert = make([]byte, len(o.CACert)) - copy(m.CACert, o.CACert) - } - github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.JoinTokens, &o.JoinTokens) - if o.RootRotation != nil { - m.RootRotation = &RootRotation{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.RootRotation, o.RootRotation) - } -} - -func (m *Certificate) Copy() *Certificate { - if m == nil { - return nil - } - o := &Certificate{} - o.CopyFrom(m) - return o -} - -func (m *Certificate) CopyFrom(src interface{}) { - - o := src.(*Certificate) - *m = *o - if o.CSR != nil { - m.CSR = make([]byte, len(o.CSR)) - copy(m.CSR, o.CSR) - } - github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Status, &o.Status) - if o.Certificate != nil { - m.Certificate = make([]byte, len(o.Certificate)) - copy(m.Certificate, o.Certificate) - } -} - -func (m *EncryptionKey) Copy() *EncryptionKey { - if m == nil { - return nil - } - o := &EncryptionKey{} - o.CopyFrom(m) - return o -} - -func (m *EncryptionKey) CopyFrom(src interface{}) { - - o := src.(*EncryptionKey) - *m = *o - if o.Key != nil { - m.Key = make([]byte, len(o.Key)) - copy(m.Key, o.Key) - } -} - -func (m *ManagerStatus) Copy() *ManagerStatus { - if m == nil { - return nil - } - o := &ManagerStatus{} - o.CopyFrom(m) - return o -} - -func (m *ManagerStatus) CopyFrom(src interface{}) { - - o := src.(*ManagerStatus) - *m = *o -} - -func (m *FileTarget) Copy() *FileTarget { - if m == nil { - return nil - } - o := &FileTarget{} - o.CopyFrom(m) - return o -} - -func (m *FileTarget) CopyFrom(src interface{}) { - - o := src.(*FileTarget) - *m = *o -} - -func (m *RuntimeTarget) Copy() *RuntimeTarget { - if m == nil { - return nil - } - o := &RuntimeTarget{} - o.CopyFrom(m) - return o -} - -func (m *RuntimeTarget) CopyFrom(src interface{}) {} -func (m *SecretReference) Copy() *SecretReference { - if m == nil { - return nil - } - o := &SecretReference{} - o.CopyFrom(m) - return o -} - -func (m *SecretReference) CopyFrom(src interface{}) { - - o := src.(*SecretReference) - *m = *o - if o.Target != nil { - switch o.Target.(type) { - case *SecretReference_File: - v := SecretReference_File{ - File: &FileTarget{}, - } - github_com_moby_swarmkit_v2_api_deepcopy.Copy(v.File, o.GetFile()) - m.Target = &v - } - } - -} - -func (m *ConfigReference) Copy() *ConfigReference { - if m == nil { - return nil - } - o := &ConfigReference{} - o.CopyFrom(m) - return o -} - -func (m *ConfigReference) CopyFrom(src interface{}) { - - o := src.(*ConfigReference) - *m = *o - if o.Target != nil { - switch o.Target.(type) { - case *ConfigReference_File: - v := ConfigReference_File{ - File: &FileTarget{}, - } - github_com_moby_swarmkit_v2_api_deepcopy.Copy(v.File, o.GetFile()) - m.Target = &v - case *ConfigReference_Runtime: - v := ConfigReference_Runtime{ - Runtime: &RuntimeTarget{}, - } - github_com_moby_swarmkit_v2_api_deepcopy.Copy(v.Runtime, o.GetRuntime()) - m.Target = &v - } - } - -} - -func (m *BlacklistedCertificate) Copy() *BlacklistedCertificate { - if m == nil { - return nil - } - o := &BlacklistedCertificate{} - o.CopyFrom(m) - return o -} - -func (m *BlacklistedCertificate) CopyFrom(src interface{}) { - - o := src.(*BlacklistedCertificate) - *m = *o - if o.Expiry != nil { - m.Expiry = &types.Timestamp{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Expiry, o.Expiry) - } -} - -func (m *HealthConfig) Copy() *HealthConfig { - if m == nil { - return nil - } - o := &HealthConfig{} - o.CopyFrom(m) - return o -} - -func (m *HealthConfig) CopyFrom(src interface{}) { - - o := src.(*HealthConfig) - *m = *o - if o.Test != nil { - m.Test = make([]string, len(o.Test)) - copy(m.Test, o.Test) - } - - if o.Interval != nil { - m.Interval = &types.Duration{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Interval, o.Interval) - } - if o.Timeout != nil { - m.Timeout = &types.Duration{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Timeout, o.Timeout) - } - if o.StartPeriod != nil { - m.StartPeriod = &types.Duration{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.StartPeriod, o.StartPeriod) - } - if o.StartInterval != nil { - m.StartInterval = &types.Duration{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.StartInterval, o.StartInterval) - } -} - -func (m *MaybeEncryptedRecord) Copy() *MaybeEncryptedRecord { - if m == nil { - return nil - } - o := &MaybeEncryptedRecord{} - o.CopyFrom(m) - return o -} - -func (m *MaybeEncryptedRecord) CopyFrom(src interface{}) { - - o := src.(*MaybeEncryptedRecord) - *m = *o - if o.Data != nil { - m.Data = make([]byte, len(o.Data)) - copy(m.Data, o.Data) - } - if o.Nonce != nil { - m.Nonce = make([]byte, len(o.Nonce)) - copy(m.Nonce, o.Nonce) - } -} - -func (m *RootRotation) Copy() *RootRotation { - if m == nil { - return nil - } - o := &RootRotation{} - o.CopyFrom(m) - return o -} - -func (m *RootRotation) CopyFrom(src interface{}) { - - o := src.(*RootRotation) - *m = *o - if o.CACert != nil { - m.CACert = make([]byte, len(o.CACert)) - copy(m.CACert, o.CACert) - } - if o.CAKey != nil { - m.CAKey = make([]byte, len(o.CAKey)) - copy(m.CAKey, o.CAKey) - } - if o.CrossSignedCACert != nil { - m.CrossSignedCACert = make([]byte, len(o.CrossSignedCACert)) - copy(m.CrossSignedCACert, o.CrossSignedCACert) - } -} - -func (m *Privileges) Copy() *Privileges { - if m == nil { - return nil - } - o := &Privileges{} - o.CopyFrom(m) - return o -} - -func (m *Privileges) CopyFrom(src interface{}) { - - o := src.(*Privileges) - *m = *o - if o.CredentialSpec != nil { - m.CredentialSpec = &Privileges_CredentialSpec{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.CredentialSpec, o.CredentialSpec) - } - if o.SELinuxContext != nil { - m.SELinuxContext = &Privileges_SELinuxContext{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.SELinuxContext, o.SELinuxContext) - } - if o.Seccomp != nil { - m.Seccomp = &Privileges_SeccompOpts{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Seccomp, o.Seccomp) - } - if o.Apparmor != nil { - m.Apparmor = &Privileges_AppArmorOpts{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Apparmor, o.Apparmor) - } -} - -func (m *Privileges_CredentialSpec) Copy() *Privileges_CredentialSpec { - if m == nil { - return nil - } - o := &Privileges_CredentialSpec{} - o.CopyFrom(m) - return o -} - -func (m *Privileges_CredentialSpec) CopyFrom(src interface{}) { - - o := src.(*Privileges_CredentialSpec) - *m = *o - if o.Source != nil { - switch o.Source.(type) { - case *Privileges_CredentialSpec_File: - v := Privileges_CredentialSpec_File{ - File: o.GetFile(), - } - m.Source = &v - case *Privileges_CredentialSpec_Registry: - v := Privileges_CredentialSpec_Registry{ - Registry: o.GetRegistry(), - } - m.Source = &v - case *Privileges_CredentialSpec_Config: - v := Privileges_CredentialSpec_Config{ - Config: o.GetConfig(), - } - m.Source = &v - } - } - -} - -func (m *Privileges_SELinuxContext) Copy() *Privileges_SELinuxContext { - if m == nil { - return nil - } - o := &Privileges_SELinuxContext{} - o.CopyFrom(m) - return o -} - -func (m *Privileges_SELinuxContext) CopyFrom(src interface{}) { - - o := src.(*Privileges_SELinuxContext) - *m = *o -} - -func (m *Privileges_SeccompOpts) Copy() *Privileges_SeccompOpts { - if m == nil { - return nil - } - o := &Privileges_SeccompOpts{} - o.CopyFrom(m) - return o -} - -func (m *Privileges_SeccompOpts) CopyFrom(src interface{}) { - - o := src.(*Privileges_SeccompOpts) - *m = *o - if o.Profile != nil { - m.Profile = make([]byte, len(o.Profile)) - copy(m.Profile, o.Profile) - } -} - -func (m *Privileges_AppArmorOpts) Copy() *Privileges_AppArmorOpts { - if m == nil { - return nil - } - o := &Privileges_AppArmorOpts{} - o.CopyFrom(m) - return o -} - -func (m *Privileges_AppArmorOpts) CopyFrom(src interface{}) { - - o := src.(*Privileges_AppArmorOpts) - *m = *o -} - -func (m *JobStatus) Copy() *JobStatus { - if m == nil { - return nil - } - o := &JobStatus{} - o.CopyFrom(m) - return o -} - -func (m *JobStatus) CopyFrom(src interface{}) { - - o := src.(*JobStatus) - *m = *o - github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.JobIteration, &o.JobIteration) - if o.LastExecution != nil { - m.LastExecution = &types.Timestamp{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.LastExecution, o.LastExecution) - } -} - -func (m *VolumeAccessMode) Copy() *VolumeAccessMode { - if m == nil { - return nil - } - o := &VolumeAccessMode{} - o.CopyFrom(m) - return o -} - -func (m *VolumeAccessMode) CopyFrom(src interface{}) { - - o := src.(*VolumeAccessMode) - *m = *o - if o.AccessType != nil { - switch o.AccessType.(type) { - case *VolumeAccessMode_Block: - v := VolumeAccessMode_Block{ - Block: &VolumeAccessMode_BlockVolume{}, - } - github_com_moby_swarmkit_v2_api_deepcopy.Copy(v.Block, o.GetBlock()) - m.AccessType = &v - case *VolumeAccessMode_Mount: - v := VolumeAccessMode_Mount{ - Mount: &VolumeAccessMode_MountVolume{}, - } - github_com_moby_swarmkit_v2_api_deepcopy.Copy(v.Mount, o.GetMount()) - m.AccessType = &v - } - } - -} - -func (m *VolumeAccessMode_BlockVolume) Copy() *VolumeAccessMode_BlockVolume { - if m == nil { - return nil - } - o := &VolumeAccessMode_BlockVolume{} - o.CopyFrom(m) - return o -} - -func (m *VolumeAccessMode_BlockVolume) CopyFrom(src interface{}) {} -func (m *VolumeAccessMode_MountVolume) Copy() *VolumeAccessMode_MountVolume { - if m == nil { - return nil - } - o := &VolumeAccessMode_MountVolume{} - o.CopyFrom(m) - return o -} - -func (m *VolumeAccessMode_MountVolume) CopyFrom(src interface{}) { - - o := src.(*VolumeAccessMode_MountVolume) - *m = *o - if o.MountFlags != nil { - m.MountFlags = make([]string, len(o.MountFlags)) - copy(m.MountFlags, o.MountFlags) - } - -} - -func (m *VolumeSecret) Copy() *VolumeSecret { - if m == nil { - return nil - } - o := &VolumeSecret{} - o.CopyFrom(m) - return o -} - -func (m *VolumeSecret) CopyFrom(src interface{}) { - - o := src.(*VolumeSecret) - *m = *o -} - -func (m *VolumePublishStatus) Copy() *VolumePublishStatus { - if m == nil { - return nil - } - o := &VolumePublishStatus{} - o.CopyFrom(m) - return o -} - -func (m *VolumePublishStatus) CopyFrom(src interface{}) { - - o := src.(*VolumePublishStatus) - *m = *o - if o.PublishContext != nil { - m.PublishContext = make(map[string]string, len(o.PublishContext)) - for k, v := range o.PublishContext { - m.PublishContext[k] = v - } - } - -} - -func (m *VolumeInfo) Copy() *VolumeInfo { - if m == nil { - return nil - } - o := &VolumeInfo{} - o.CopyFrom(m) - return o -} - -func (m *VolumeInfo) CopyFrom(src interface{}) { - - o := src.(*VolumeInfo) - *m = *o - if o.VolumeContext != nil { - m.VolumeContext = make(map[string]string, len(o.VolumeContext)) - for k, v := range o.VolumeContext { - m.VolumeContext[k] = v - } - } - - if o.AccessibleTopology != nil { - m.AccessibleTopology = make([]*Topology, len(o.AccessibleTopology)) - for i := range m.AccessibleTopology { - m.AccessibleTopology[i] = &Topology{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.AccessibleTopology[i], o.AccessibleTopology[i]) - } - } - -} - -func (m *CapacityRange) Copy() *CapacityRange { - if m == nil { - return nil - } - o := &CapacityRange{} - o.CopyFrom(m) - return o -} - -func (m *CapacityRange) CopyFrom(src interface{}) { - - o := src.(*CapacityRange) - *m = *o -} - -func (m *VolumeAssignment) Copy() *VolumeAssignment { - if m == nil { - return nil - } - o := &VolumeAssignment{} - o.CopyFrom(m) - return o -} - -func (m *VolumeAssignment) CopyFrom(src interface{}) { - - o := src.(*VolumeAssignment) - *m = *o - if o.Driver != nil { - m.Driver = &Driver{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Driver, o.Driver) - } - if o.VolumeContext != nil { - m.VolumeContext = make(map[string]string, len(o.VolumeContext)) - for k, v := range o.VolumeContext { - m.VolumeContext[k] = v - } - } - - if o.PublishContext != nil { - m.PublishContext = make(map[string]string, len(o.PublishContext)) - for k, v := range o.PublishContext { - m.PublishContext[k] = v - } - } - - if o.AccessMode != nil { - m.AccessMode = &VolumeAccessMode{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.AccessMode, o.AccessMode) - } - if o.Secrets != nil { - m.Secrets = make([]*VolumeSecret, len(o.Secrets)) - for i := range m.Secrets { - m.Secrets[i] = &VolumeSecret{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Secrets[i], o.Secrets[i]) - } - } - -} - -func (m *VolumeAttachment) Copy() *VolumeAttachment { - if m == nil { - return nil - } - o := &VolumeAttachment{} - o.CopyFrom(m) - return o -} - -func (m *VolumeAttachment) CopyFrom(src interface{}) { - - o := src.(*VolumeAttachment) - *m = *o -} - -func (m *TopologyRequirement) Copy() *TopologyRequirement { - if m == nil { - return nil - } - o := &TopologyRequirement{} - o.CopyFrom(m) - return o -} - -func (m *TopologyRequirement) CopyFrom(src interface{}) { - - o := src.(*TopologyRequirement) - *m = *o - if o.Requisite != nil { - m.Requisite = make([]*Topology, len(o.Requisite)) - for i := range m.Requisite { - m.Requisite[i] = &Topology{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Requisite[i], o.Requisite[i]) - } - } - - if o.Preferred != nil { - m.Preferred = make([]*Topology, len(o.Preferred)) - for i := range m.Preferred { - m.Preferred[i] = &Topology{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Preferred[i], o.Preferred[i]) - } - } - -} - -func (m *Topology) Copy() *Topology { - if m == nil { - return nil - } - o := &Topology{} - o.CopyFrom(m) - return o -} - -func (m *Topology) CopyFrom(src interface{}) { - - o := src.(*Topology) - *m = *o - if o.Segments != nil { - m.Segments = make(map[string]string, len(o.Segments)) - for k, v := range o.Segments { - m.Segments[k] = v - } - } - -} - -func (m *VolumeCapability) Copy() *VolumeCapability { - if m == nil { - return nil - } - o := &VolumeCapability{} - o.CopyFrom(m) - return o -} - -func (m *VolumeCapability) CopyFrom(src interface{}) { - - o := src.(*VolumeCapability) - *m = *o - if o.AccessMode != nil { - m.AccessMode = &VolumeCapability_AccessMode{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.AccessMode, o.AccessMode) - } - if o.AccessType != nil { - switch o.AccessType.(type) { - case *VolumeCapability_Block: - v := VolumeCapability_Block{ - Block: &VolumeCapability_BlockVolume{}, - } - github_com_moby_swarmkit_v2_api_deepcopy.Copy(v.Block, o.GetBlock()) - m.AccessType = &v - case *VolumeCapability_Mount: - v := VolumeCapability_Mount{ - Mount: &VolumeCapability_MountVolume{}, - } - github_com_moby_swarmkit_v2_api_deepcopy.Copy(v.Mount, o.GetMount()) - m.AccessType = &v - } - } - -} - -func (m *VolumeCapability_BlockVolume) Copy() *VolumeCapability_BlockVolume { - if m == nil { - return nil - } - o := &VolumeCapability_BlockVolume{} - o.CopyFrom(m) - return o -} - -func (m *VolumeCapability_BlockVolume) CopyFrom(src interface{}) {} -func (m *VolumeCapability_MountVolume) Copy() *VolumeCapability_MountVolume { - if m == nil { - return nil - } - o := &VolumeCapability_MountVolume{} - o.CopyFrom(m) - return o -} - -func (m *VolumeCapability_MountVolume) CopyFrom(src interface{}) { - - o := src.(*VolumeCapability_MountVolume) - *m = *o - if o.MountFlags != nil { - m.MountFlags = make([]string, len(o.MountFlags)) - copy(m.MountFlags, o.MountFlags) - } - -} - -func (m *VolumeCapability_AccessMode) Copy() *VolumeCapability_AccessMode { - if m == nil { - return nil - } - o := &VolumeCapability_AccessMode{} - o.CopyFrom(m) - return o -} - -func (m *VolumeCapability_AccessMode) CopyFrom(src interface{}) { - - o := src.(*VolumeCapability_AccessMode) - *m = *o -} - -func (m *Version) 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 *Version) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *Version) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Index != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.Index)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *IndexEntry) 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 *IndexEntry) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *IndexEntry) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Val) > 0 { - i -= len(m.Val) - copy(dAtA[i:], m.Val) - i = encodeVarintTypes(dAtA, i, uint64(len(m.Val))) - i-- - dAtA[i] = 0x12 - } - if len(m.Key) > 0 { - i -= len(m.Key) - copy(dAtA[i:], m.Key) - i = encodeVarintTypes(dAtA, i, uint64(len(m.Key))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *Annotations) 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 *Annotations) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *Annotations) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Indices) > 0 { - for iNdEx := len(m.Indices) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Indices[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - } - } - if len(m.Labels) > 0 { - for k := range m.Labels { - v := m.Labels[k] - baseI := i - i -= len(v) - copy(dAtA[i:], v) - i = encodeVarintTypes(dAtA, i, uint64(len(v))) - i-- - dAtA[i] = 0x12 - i -= len(k) - copy(dAtA[i:], k) - i = encodeVarintTypes(dAtA, i, uint64(len(k))) - i-- - dAtA[i] = 0xa - i = encodeVarintTypes(dAtA, i, uint64(baseI-i)) - i-- - dAtA[i] = 0x12 - } - } - if len(m.Name) > 0 { - i -= len(m.Name) - copy(dAtA[i:], m.Name) - i = encodeVarintTypes(dAtA, i, uint64(len(m.Name))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *NamedGenericResource) 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 *NamedGenericResource) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *NamedGenericResource) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Value) > 0 { - i -= len(m.Value) - copy(dAtA[i:], m.Value) - i = encodeVarintTypes(dAtA, i, uint64(len(m.Value))) - i-- - dAtA[i] = 0x12 - } - if len(m.Kind) > 0 { - i -= len(m.Kind) - copy(dAtA[i:], m.Kind) - i = encodeVarintTypes(dAtA, i, uint64(len(m.Kind))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *DiscreteGenericResource) 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 *DiscreteGenericResource) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *DiscreteGenericResource) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Value != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.Value)) - i-- - dAtA[i] = 0x10 - } - if len(m.Kind) > 0 { - i -= len(m.Kind) - copy(dAtA[i:], m.Kind) - i = encodeVarintTypes(dAtA, i, uint64(len(m.Kind))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *GenericResource) 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 *GenericResource) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *GenericResource) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Resource != nil { - { - size := m.Resource.Size() - i -= size - if _, err := m.Resource.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - } - } - return len(dAtA) - i, nil -} - -func (m *GenericResource_NamedResourceSpec) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *GenericResource_NamedResourceSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - if m.NamedResourceSpec != nil { - { - size, err := m.NamedResourceSpec.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} -func (m *GenericResource_DiscreteResourceSpec) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *GenericResource_DiscreteResourceSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - if m.DiscreteResourceSpec != nil { - { - size, err := m.DiscreteResourceSpec.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - return len(dAtA) - i, nil -} -func (m *Resources) 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 *Resources) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *Resources) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Generic) > 0 { - for iNdEx := len(m.Generic) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Generic[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - } - } - if m.MemoryBytes != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.MemoryBytes)) - i-- - dAtA[i] = 0x10 - } - if m.NanoCPUs != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.NanoCPUs)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *ResourceRequirements) 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 *ResourceRequirements) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ResourceRequirements) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.MemorySwappiness != nil { - { - size, err := m.MemorySwappiness.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - } - if m.SwapBytes != nil { - { - size, err := m.SwapBytes.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - } - if m.Reservations != nil { - { - size, err := m.Reservations.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - if m.Limits != nil { - { - size, err := m.Limits.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *Platform) 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 *Platform) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *Platform) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.OS) > 0 { - i -= len(m.OS) - copy(dAtA[i:], m.OS) - i = encodeVarintTypes(dAtA, i, uint64(len(m.OS))) - i-- - dAtA[i] = 0x12 - } - if len(m.Architecture) > 0 { - i -= len(m.Architecture) - copy(dAtA[i:], m.Architecture) - i = encodeVarintTypes(dAtA, i, uint64(len(m.Architecture))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *PluginDescription) 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 *PluginDescription) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *PluginDescription) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Name) > 0 { - i -= len(m.Name) - copy(dAtA[i:], m.Name) - i = encodeVarintTypes(dAtA, i, uint64(len(m.Name))) - i-- - dAtA[i] = 0x12 - } - if len(m.Type) > 0 { - i -= len(m.Type) - copy(dAtA[i:], m.Type) - i = encodeVarintTypes(dAtA, i, uint64(len(m.Type))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *EngineDescription) 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 *EngineDescription) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *EngineDescription) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Plugins) > 0 { - for iNdEx := len(m.Plugins) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Plugins[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - } - } - if len(m.Labels) > 0 { - for k := range m.Labels { - v := m.Labels[k] - baseI := i - i -= len(v) - copy(dAtA[i:], v) - i = encodeVarintTypes(dAtA, i, uint64(len(v))) - i-- - dAtA[i] = 0x12 - i -= len(k) - copy(dAtA[i:], k) - i = encodeVarintTypes(dAtA, i, uint64(len(k))) - i-- - dAtA[i] = 0xa - i = encodeVarintTypes(dAtA, i, uint64(baseI-i)) - i-- - dAtA[i] = 0x12 - } - } - if len(m.EngineVersion) > 0 { - i -= len(m.EngineVersion) - copy(dAtA[i:], m.EngineVersion) - i = encodeVarintTypes(dAtA, i, uint64(len(m.EngineVersion))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *NodeDescription) 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 *NodeDescription) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *NodeDescription) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.CSIInfo) > 0 { - for iNdEx := len(m.CSIInfo) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.CSIInfo[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x3a - } - } - if m.FIPS { - i-- - if m.FIPS { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x30 - } - if m.TLSInfo != nil { - { - size, err := m.TLSInfo.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x2a - } - if m.Engine != nil { - { - size, err := m.Engine.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - } - if m.Resources != nil { - { - size, err := m.Resources.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - } - if m.Platform != nil { - { - size, err := m.Platform.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - if len(m.Hostname) > 0 { - i -= len(m.Hostname) - copy(dAtA[i:], m.Hostname) - i = encodeVarintTypes(dAtA, i, uint64(len(m.Hostname))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *NodeTLSInfo) 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 *NodeTLSInfo) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *NodeTLSInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.CertIssuerPublicKey) > 0 { - i -= len(m.CertIssuerPublicKey) - copy(dAtA[i:], m.CertIssuerPublicKey) - i = encodeVarintTypes(dAtA, i, uint64(len(m.CertIssuerPublicKey))) - i-- - dAtA[i] = 0x1a - } - if len(m.CertIssuerSubject) > 0 { - i -= len(m.CertIssuerSubject) - copy(dAtA[i:], m.CertIssuerSubject) - i = encodeVarintTypes(dAtA, i, uint64(len(m.CertIssuerSubject))) - i-- - dAtA[i] = 0x12 - } - if len(m.TrustRoot) > 0 { - i -= len(m.TrustRoot) - copy(dAtA[i:], m.TrustRoot) - i = encodeVarintTypes(dAtA, i, uint64(len(m.TrustRoot))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *NodeCSIInfo) 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 *NodeCSIInfo) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *NodeCSIInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.AccessibleTopology != nil { - { - size, err := m.AccessibleTopology.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - } - if m.MaxVolumesPerNode != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.MaxVolumesPerNode)) - i-- - dAtA[i] = 0x18 - } - if len(m.NodeID) > 0 { - i -= len(m.NodeID) - copy(dAtA[i:], m.NodeID) - i = encodeVarintTypes(dAtA, i, uint64(len(m.NodeID))) - i-- - dAtA[i] = 0x12 - } - if len(m.PluginName) > 0 { - i -= len(m.PluginName) - copy(dAtA[i:], m.PluginName) - i = encodeVarintTypes(dAtA, i, uint64(len(m.PluginName))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *RaftMemberStatus) 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 *RaftMemberStatus) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *RaftMemberStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Message) > 0 { - i -= len(m.Message) - copy(dAtA[i:], m.Message) - i = encodeVarintTypes(dAtA, i, uint64(len(m.Message))) - i-- - dAtA[i] = 0x1a - } - if m.Reachability != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.Reachability)) - i-- - dAtA[i] = 0x10 - } - if m.Leader { - i-- - if m.Leader { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *NodeStatus) 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 *NodeStatus) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *NodeStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Addr) > 0 { - i -= len(m.Addr) - copy(dAtA[i:], m.Addr) - i = encodeVarintTypes(dAtA, i, uint64(len(m.Addr))) - i-- - dAtA[i] = 0x1a - } - if len(m.Message) > 0 { - i -= len(m.Message) - copy(dAtA[i:], m.Message) - i = encodeVarintTypes(dAtA, i, uint64(len(m.Message))) - i-- - dAtA[i] = 0x12 - } - if m.State != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.State)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *Image) 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 *Image) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *Image) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Reference) > 0 { - i -= len(m.Reference) - copy(dAtA[i:], m.Reference) - i = encodeVarintTypes(dAtA, i, uint64(len(m.Reference))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *Mount) 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 *Mount) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *Mount) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Consistency != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.Consistency)) - i-- - dAtA[i] = 0x40 - } - if m.TmpfsOptions != nil { - { - size, err := m.TmpfsOptions.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x3a - } - if m.VolumeOptions != nil { - { - size, err := m.VolumeOptions.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x32 - } - if m.BindOptions != nil { - { - size, err := m.BindOptions.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x2a - } - if m.ReadOnly { - i-- - if m.ReadOnly { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x20 - } - if len(m.Target) > 0 { - i -= len(m.Target) - copy(dAtA[i:], m.Target) - i = encodeVarintTypes(dAtA, i, uint64(len(m.Target))) - i-- - dAtA[i] = 0x1a - } - if len(m.Source) > 0 { - i -= len(m.Source) - copy(dAtA[i:], m.Source) - i = encodeVarintTypes(dAtA, i, uint64(len(m.Source))) - i-- - dAtA[i] = 0x12 - } - if m.Type != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.Type)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *Mount_BindOptions) 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 *Mount_BindOptions) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *Mount_BindOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.ReadOnlyForceRecursive { - i-- - if m.ReadOnlyForceRecursive { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x28 - } - if m.ReadOnlyNonRecursive { - i-- - if m.ReadOnlyNonRecursive { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x20 - } - if m.CreateMountpoint { - i-- - if m.CreateMountpoint { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x18 - } - if m.NonRecursive { - i-- - if m.NonRecursive { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x10 - } - if m.Propagation != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.Propagation)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *Mount_VolumeOptions) 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 *Mount_VolumeOptions) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *Mount_VolumeOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Subpath) > 0 { - i -= len(m.Subpath) - copy(dAtA[i:], m.Subpath) - i = encodeVarintTypes(dAtA, i, uint64(len(m.Subpath))) - i-- - dAtA[i] = 0x22 - } - if m.DriverConfig != nil { - { - size, err := m.DriverConfig.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - } - if len(m.Labels) > 0 { - for k := range m.Labels { - v := m.Labels[k] - baseI := i - i -= len(v) - copy(dAtA[i:], v) - i = encodeVarintTypes(dAtA, i, uint64(len(v))) - i-- - dAtA[i] = 0x12 - i -= len(k) - copy(dAtA[i:], k) - i = encodeVarintTypes(dAtA, i, uint64(len(k))) - i-- - dAtA[i] = 0xa - i = encodeVarintTypes(dAtA, i, uint64(baseI-i)) - i-- - dAtA[i] = 0x12 - } - } - if m.NoCopy { - i-- - if m.NoCopy { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *Mount_TmpfsOptions) 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 *Mount_TmpfsOptions) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *Mount_TmpfsOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Options) > 0 { - i -= len(m.Options) - copy(dAtA[i:], m.Options) - i = encodeVarintTypes(dAtA, i, uint64(len(m.Options))) - i-- - dAtA[i] = 0x1a - } - if m.Mode != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.Mode)) - i-- - dAtA[i] = 0x10 - } - if m.SizeBytes != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.SizeBytes)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *RestartPolicy) 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 *RestartPolicy) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *RestartPolicy) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Window != nil { - { - size, err := m.Window.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - } - if m.MaxAttempts != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.MaxAttempts)) - i-- - dAtA[i] = 0x18 - } - if m.Delay != nil { - { - size, err := m.Delay.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - if m.Condition != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.Condition)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *UpdateConfig) 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 *UpdateConfig) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *UpdateConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Order != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.Order)) - i-- - dAtA[i] = 0x30 - } - if m.MaxFailureRatio != 0 { - i -= 4 - encoding_binary.LittleEndian.PutUint32(dAtA[i:], uint32(math.Float32bits(float32(m.MaxFailureRatio)))) - i-- - dAtA[i] = 0x2d - } - if m.Monitor != nil { - { - size, err := m.Monitor.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - } - if m.FailureAction != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.FailureAction)) - i-- - dAtA[i] = 0x18 - } - n19, err19 := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.Delay, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdDuration(m.Delay):]) - if err19 != nil { - return 0, err19 - } - i -= n19 - i = encodeVarintTypes(dAtA, i, uint64(n19)) - i-- - dAtA[i] = 0x12 - if m.Parallelism != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.Parallelism)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *UpdateStatus) 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 *UpdateStatus) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *UpdateStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Message) > 0 { - i -= len(m.Message) - copy(dAtA[i:], m.Message) - i = encodeVarintTypes(dAtA, i, uint64(len(m.Message))) - i-- - dAtA[i] = 0x22 - } - if m.CompletedAt != nil { - { - size, err := m.CompletedAt.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - } - if m.StartedAt != nil { - { - size, err := m.StartedAt.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - if m.State != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.State)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *ContainerStatus) 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 *ContainerStatus) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ContainerStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.ExitCode != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.ExitCode)) - i-- - dAtA[i] = 0x18 - } - if m.PID != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.PID)) - i-- - dAtA[i] = 0x10 - } - if len(m.ContainerID) > 0 { - i -= len(m.ContainerID) - copy(dAtA[i:], m.ContainerID) - i = encodeVarintTypes(dAtA, i, uint64(len(m.ContainerID))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *PortStatus) 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 *PortStatus) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *PortStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Ports) > 0 { - for iNdEx := len(m.Ports) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Ports[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func (m *TaskStatus) 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 *TaskStatus) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *TaskStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.AppliedAt != nil { - { - size, err := m.AppliedAt.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x42 - } - if len(m.AppliedBy) > 0 { - i -= len(m.AppliedBy) - copy(dAtA[i:], m.AppliedBy) - i = encodeVarintTypes(dAtA, i, uint64(len(m.AppliedBy))) - i-- - dAtA[i] = 0x3a - } - if m.PortStatus != nil { - { - size, err := m.PortStatus.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x32 - } - if m.RuntimeStatus != nil { - { - size := m.RuntimeStatus.Size() - i -= size - if _, err := m.RuntimeStatus.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - } - } - if len(m.Err) > 0 { - i -= len(m.Err) - copy(dAtA[i:], m.Err) - i = encodeVarintTypes(dAtA, i, uint64(len(m.Err))) - i-- - dAtA[i] = 0x22 - } - if len(m.Message) > 0 { - i -= len(m.Message) - copy(dAtA[i:], m.Message) - i = encodeVarintTypes(dAtA, i, uint64(len(m.Message))) - i-- - dAtA[i] = 0x1a - } - if m.State != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.State)) - i-- - dAtA[i] = 0x10 - } - if m.Timestamp != nil { - { - size, err := m.Timestamp.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *TaskStatus_Container) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *TaskStatus_Container) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - if m.Container != nil { - { - size, err := m.Container.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x2a - } - return len(dAtA) - i, nil -} -func (m *NetworkAttachmentConfig) 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 *NetworkAttachmentConfig) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *NetworkAttachmentConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.DriverAttachmentOpts) > 0 { - for k := range m.DriverAttachmentOpts { - v := m.DriverAttachmentOpts[k] - baseI := i - i -= len(v) - copy(dAtA[i:], v) - i = encodeVarintTypes(dAtA, i, uint64(len(v))) - i-- - dAtA[i] = 0x12 - i -= len(k) - copy(dAtA[i:], k) - i = encodeVarintTypes(dAtA, i, uint64(len(k))) - i-- - dAtA[i] = 0xa - i = encodeVarintTypes(dAtA, i, uint64(baseI-i)) - i-- - dAtA[i] = 0x22 - } - } - if len(m.Addresses) > 0 { - for iNdEx := len(m.Addresses) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.Addresses[iNdEx]) - copy(dAtA[i:], m.Addresses[iNdEx]) - i = encodeVarintTypes(dAtA, i, uint64(len(m.Addresses[iNdEx]))) - i-- - dAtA[i] = 0x1a - } - } - if len(m.Aliases) > 0 { - for iNdEx := len(m.Aliases) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.Aliases[iNdEx]) - copy(dAtA[i:], m.Aliases[iNdEx]) - i = encodeVarintTypes(dAtA, i, uint64(len(m.Aliases[iNdEx]))) - i-- - dAtA[i] = 0x12 - } - } - if len(m.Target) > 0 { - i -= len(m.Target) - copy(dAtA[i:], m.Target) - i = encodeVarintTypes(dAtA, i, uint64(len(m.Target))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *IPAMConfig) 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 *IPAMConfig) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *IPAMConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Reserved) > 0 { - for k := range m.Reserved { - v := m.Reserved[k] - baseI := i - i -= len(v) - copy(dAtA[i:], v) - i = encodeVarintTypes(dAtA, i, uint64(len(v))) - i-- - dAtA[i] = 0x12 - i -= len(k) - copy(dAtA[i:], k) - i = encodeVarintTypes(dAtA, i, uint64(len(k))) - i-- - dAtA[i] = 0xa - i = encodeVarintTypes(dAtA, i, uint64(baseI-i)) - i-- - dAtA[i] = 0x2a - } - } - if len(m.Gateway) > 0 { - i -= len(m.Gateway) - copy(dAtA[i:], m.Gateway) - i = encodeVarintTypes(dAtA, i, uint64(len(m.Gateway))) - i-- - dAtA[i] = 0x22 - } - if len(m.Range) > 0 { - i -= len(m.Range) - copy(dAtA[i:], m.Range) - i = encodeVarintTypes(dAtA, i, uint64(len(m.Range))) - i-- - dAtA[i] = 0x1a - } - if len(m.Subnet) > 0 { - i -= len(m.Subnet) - copy(dAtA[i:], m.Subnet) - i = encodeVarintTypes(dAtA, i, uint64(len(m.Subnet))) - i-- - dAtA[i] = 0x12 - } - if m.Family != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.Family)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *PortConfig) 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 *PortConfig) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *PortConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.PublishMode != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.PublishMode)) - i-- - dAtA[i] = 0x28 - } - if m.PublishedPort != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.PublishedPort)) - i-- - dAtA[i] = 0x20 - } - if m.TargetPort != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.TargetPort)) - i-- - dAtA[i] = 0x18 - } - if m.Protocol != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.Protocol)) - i-- - dAtA[i] = 0x10 - } - if len(m.Name) > 0 { - i -= len(m.Name) - copy(dAtA[i:], m.Name) - i = encodeVarintTypes(dAtA, i, uint64(len(m.Name))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *Driver) 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 *Driver) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *Driver) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Options) > 0 { - for k := range m.Options { - v := m.Options[k] - baseI := i - i -= len(v) - copy(dAtA[i:], v) - i = encodeVarintTypes(dAtA, i, uint64(len(v))) - i-- - dAtA[i] = 0x12 - i -= len(k) - copy(dAtA[i:], k) - i = encodeVarintTypes(dAtA, i, uint64(len(k))) - i-- - dAtA[i] = 0xa - i = encodeVarintTypes(dAtA, i, uint64(baseI-i)) - i-- - dAtA[i] = 0x12 - } - } - if len(m.Name) > 0 { - i -= len(m.Name) - copy(dAtA[i:], m.Name) - i = encodeVarintTypes(dAtA, i, uint64(len(m.Name))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *IPAMOptions) 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 *IPAMOptions) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *IPAMOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Configs) > 0 { - for iNdEx := len(m.Configs) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Configs[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - } - } - if m.Driver != nil { - { - size, err := m.Driver.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *Peer) 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 *Peer) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *Peer) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Addr) > 0 { - i -= len(m.Addr) - copy(dAtA[i:], m.Addr) - i = encodeVarintTypes(dAtA, i, uint64(len(m.Addr))) - i-- - dAtA[i] = 0x12 - } - if len(m.NodeID) > 0 { - i -= len(m.NodeID) - copy(dAtA[i:], m.NodeID) - i = encodeVarintTypes(dAtA, i, uint64(len(m.NodeID))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *WeightedPeer) 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 *WeightedPeer) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *WeightedPeer) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Weight != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.Weight)) - i-- - dAtA[i] = 0x10 - } - if m.Peer != nil { - { - size, err := m.Peer.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *IssuanceStatus) 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 *IssuanceStatus) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *IssuanceStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Err) > 0 { - i -= len(m.Err) - copy(dAtA[i:], m.Err) - i = encodeVarintTypes(dAtA, i, uint64(len(m.Err))) - i-- - dAtA[i] = 0x12 - } - if m.State != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.State)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *AcceptancePolicy) 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 *AcceptancePolicy) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *AcceptancePolicy) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Policies) > 0 { - for iNdEx := len(m.Policies) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Policies[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func (m *AcceptancePolicy_RoleAdmissionPolicy) 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 *AcceptancePolicy_RoleAdmissionPolicy) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *AcceptancePolicy_RoleAdmissionPolicy) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Secret != nil { - { - size, err := m.Secret.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - } - if m.Autoaccept { - i-- - if m.Autoaccept { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x10 - } - if m.Role != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.Role)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *AcceptancePolicy_RoleAdmissionPolicy_Secret) 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 *AcceptancePolicy_RoleAdmissionPolicy_Secret) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *AcceptancePolicy_RoleAdmissionPolicy_Secret) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Alg) > 0 { - i -= len(m.Alg) - copy(dAtA[i:], m.Alg) - i = encodeVarintTypes(dAtA, i, uint64(len(m.Alg))) - i-- - dAtA[i] = 0x12 - } - if len(m.Data) > 0 { - i -= len(m.Data) - copy(dAtA[i:], m.Data) - i = encodeVarintTypes(dAtA, i, uint64(len(m.Data))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *ExternalCA) 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 *ExternalCA) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ExternalCA) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.CACert) > 0 { - i -= len(m.CACert) - copy(dAtA[i:], m.CACert) - i = encodeVarintTypes(dAtA, i, uint64(len(m.CACert))) - i-- - dAtA[i] = 0x22 - } - if len(m.Options) > 0 { - for k := range m.Options { - v := m.Options[k] - baseI := i - i -= len(v) - copy(dAtA[i:], v) - i = encodeVarintTypes(dAtA, i, uint64(len(v))) - i-- - dAtA[i] = 0x12 - i -= len(k) - copy(dAtA[i:], k) - i = encodeVarintTypes(dAtA, i, uint64(len(k))) - i-- - dAtA[i] = 0xa - i = encodeVarintTypes(dAtA, i, uint64(baseI-i)) - i-- - dAtA[i] = 0x1a - } - } - if len(m.URL) > 0 { - i -= len(m.URL) - copy(dAtA[i:], m.URL) - i = encodeVarintTypes(dAtA, i, uint64(len(m.URL))) - i-- - dAtA[i] = 0x12 - } - if m.Protocol != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.Protocol)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *CAConfig) 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 *CAConfig) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *CAConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.ForceRotate != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.ForceRotate)) - i-- - dAtA[i] = 0x28 - } - if len(m.SigningCAKey) > 0 { - i -= len(m.SigningCAKey) - copy(dAtA[i:], m.SigningCAKey) - i = encodeVarintTypes(dAtA, i, uint64(len(m.SigningCAKey))) - i-- - dAtA[i] = 0x22 - } - if len(m.SigningCACert) > 0 { - i -= len(m.SigningCACert) - copy(dAtA[i:], m.SigningCACert) - i = encodeVarintTypes(dAtA, i, uint64(len(m.SigningCACert))) - i-- - dAtA[i] = 0x1a - } - if len(m.ExternalCAs) > 0 { - for iNdEx := len(m.ExternalCAs) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.ExternalCAs[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - } - if m.NodeCertExpiry != nil { - { - size, err := m.NodeCertExpiry.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *OrchestrationConfig) 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 *OrchestrationConfig) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *OrchestrationConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.TaskHistoryRetentionLimit != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.TaskHistoryRetentionLimit)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *TaskDefaults) 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 *TaskDefaults) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *TaskDefaults) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.LogDriver != nil { - { - size, err := m.LogDriver.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *DispatcherConfig) 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 *DispatcherConfig) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *DispatcherConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.HeartbeatPeriod != nil { - { - size, err := m.HeartbeatPeriod.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *RaftConfig) 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 *RaftConfig) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *RaftConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.ElectionTick != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.ElectionTick)) - i-- - dAtA[i] = 0x28 - } - if m.HeartbeatTick != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.HeartbeatTick)) - i-- - dAtA[i] = 0x20 - } - if m.LogEntriesForSlowFollowers != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.LogEntriesForSlowFollowers)) - i-- - dAtA[i] = 0x18 - } - if m.KeepOldSnapshots != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.KeepOldSnapshots)) - i-- - dAtA[i] = 0x10 - } - if m.SnapshotInterval != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.SnapshotInterval)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *EncryptionConfig) 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 *EncryptionConfig) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *EncryptionConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.AutoLockManagers { - i-- - if m.AutoLockManagers { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *SpreadOver) 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 *SpreadOver) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *SpreadOver) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.SpreadDescriptor) > 0 { - i -= len(m.SpreadDescriptor) - copy(dAtA[i:], m.SpreadDescriptor) - i = encodeVarintTypes(dAtA, i, uint64(len(m.SpreadDescriptor))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *PlacementPreference) 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 *PlacementPreference) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *PlacementPreference) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Preference != nil { - { - size := m.Preference.Size() - i -= size - if _, err := m.Preference.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - } - } - return len(dAtA) - i, nil -} - -func (m *PlacementPreference_Spread) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *PlacementPreference_Spread) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - if m.Spread != nil { - { - size, err := m.Spread.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} -func (m *Placement) 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 *Placement) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *Placement) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.MaxReplicas != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.MaxReplicas)) - i-- - dAtA[i] = 0x20 - } - if len(m.Platforms) > 0 { - for iNdEx := len(m.Platforms) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Platforms[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - } - } - if len(m.Preferences) > 0 { - for iNdEx := len(m.Preferences) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Preferences[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - } - if len(m.Constraints) > 0 { - for iNdEx := len(m.Constraints) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.Constraints[iNdEx]) - copy(dAtA[i:], m.Constraints[iNdEx]) - i = encodeVarintTypes(dAtA, i, uint64(len(m.Constraints[iNdEx]))) - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func (m *JoinTokens) 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 *JoinTokens) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *JoinTokens) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Manager) > 0 { - i -= len(m.Manager) - copy(dAtA[i:], m.Manager) - i = encodeVarintTypes(dAtA, i, uint64(len(m.Manager))) - i-- - dAtA[i] = 0x12 - } - if len(m.Worker) > 0 { - i -= len(m.Worker) - copy(dAtA[i:], m.Worker) - i = encodeVarintTypes(dAtA, i, uint64(len(m.Worker))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *RootCA) 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 *RootCA) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *RootCA) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.LastForcedRotation != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.LastForcedRotation)) - i-- - dAtA[i] = 0x30 - } - if m.RootRotation != nil { - { - size, err := m.RootRotation.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x2a - } - { - size, err := m.JoinTokens.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - if len(m.CACertHash) > 0 { - i -= len(m.CACertHash) - copy(dAtA[i:], m.CACertHash) - i = encodeVarintTypes(dAtA, i, uint64(len(m.CACertHash))) - i-- - dAtA[i] = 0x1a - } - if len(m.CACert) > 0 { - i -= len(m.CACert) - copy(dAtA[i:], m.CACert) - i = encodeVarintTypes(dAtA, i, uint64(len(m.CACert))) - i-- - dAtA[i] = 0x12 - } - if len(m.CAKey) > 0 { - i -= len(m.CAKey) - copy(dAtA[i:], m.CAKey) - i = encodeVarintTypes(dAtA, i, uint64(len(m.CAKey))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *Certificate) 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 *Certificate) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *Certificate) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.CN) > 0 { - i -= len(m.CN) - copy(dAtA[i:], m.CN) - i = encodeVarintTypes(dAtA, i, uint64(len(m.CN))) - i-- - dAtA[i] = 0x2a - } - if len(m.Certificate) > 0 { - i -= len(m.Certificate) - copy(dAtA[i:], m.Certificate) - i = encodeVarintTypes(dAtA, i, uint64(len(m.Certificate))) - i-- - dAtA[i] = 0x22 - } - { - size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - if len(m.CSR) > 0 { - i -= len(m.CSR) - copy(dAtA[i:], m.CSR) - i = encodeVarintTypes(dAtA, i, uint64(len(m.CSR))) - i-- - dAtA[i] = 0x12 - } - if m.Role != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.Role)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *EncryptionKey) 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 *EncryptionKey) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *EncryptionKey) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.LamportTime != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.LamportTime)) - i-- - dAtA[i] = 0x20 - } - if len(m.Key) > 0 { - i -= len(m.Key) - copy(dAtA[i:], m.Key) - i = encodeVarintTypes(dAtA, i, uint64(len(m.Key))) - i-- - dAtA[i] = 0x1a - } - if m.Algorithm != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.Algorithm)) - i-- - dAtA[i] = 0x10 - } - if len(m.Subsystem) > 0 { - i -= len(m.Subsystem) - copy(dAtA[i:], m.Subsystem) - i = encodeVarintTypes(dAtA, i, uint64(len(m.Subsystem))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *ManagerStatus) 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 *ManagerStatus) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ManagerStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Reachability != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.Reachability)) - i-- - dAtA[i] = 0x20 - } - if m.Leader { - i-- - if m.Leader { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x18 - } - if len(m.Addr) > 0 { - i -= len(m.Addr) - copy(dAtA[i:], m.Addr) - i = encodeVarintTypes(dAtA, i, uint64(len(m.Addr))) - i-- - dAtA[i] = 0x12 - } - if m.RaftID != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.RaftID)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *FileTarget) 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 *FileTarget) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *FileTarget) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Mode != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.Mode)) - i-- - dAtA[i] = 0x20 - } - if len(m.GID) > 0 { - i -= len(m.GID) - copy(dAtA[i:], m.GID) - i = encodeVarintTypes(dAtA, i, uint64(len(m.GID))) - i-- - dAtA[i] = 0x1a - } - if len(m.UID) > 0 { - i -= len(m.UID) - copy(dAtA[i:], m.UID) - i = encodeVarintTypes(dAtA, i, uint64(len(m.UID))) - i-- - dAtA[i] = 0x12 - } - if len(m.Name) > 0 { - i -= len(m.Name) - copy(dAtA[i:], m.Name) - i = encodeVarintTypes(dAtA, i, uint64(len(m.Name))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *RuntimeTarget) 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 *RuntimeTarget) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *RuntimeTarget) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil -} - -func (m *SecretReference) 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 *SecretReference) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *SecretReference) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Target != nil { - { - size := m.Target.Size() - i -= size - if _, err := m.Target.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - } - } - if len(m.SecretName) > 0 { - i -= len(m.SecretName) - copy(dAtA[i:], m.SecretName) - i = encodeVarintTypes(dAtA, i, uint64(len(m.SecretName))) - i-- - dAtA[i] = 0x12 - } - if len(m.SecretID) > 0 { - i -= len(m.SecretID) - copy(dAtA[i:], m.SecretID) - i = encodeVarintTypes(dAtA, i, uint64(len(m.SecretID))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *SecretReference_File) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *SecretReference_File) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - if m.File != nil { - { - size, err := m.File.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - } - return len(dAtA) - i, nil -} -func (m *ConfigReference) 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 *ConfigReference) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ConfigReference) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Target != nil { - { - size := m.Target.Size() - i -= size - if _, err := m.Target.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - } - } - if len(m.ConfigName) > 0 { - i -= len(m.ConfigName) - copy(dAtA[i:], m.ConfigName) - i = encodeVarintTypes(dAtA, i, uint64(len(m.ConfigName))) - i-- - dAtA[i] = 0x12 - } - if len(m.ConfigID) > 0 { - i -= len(m.ConfigID) - copy(dAtA[i:], m.ConfigID) - i = encodeVarintTypes(dAtA, i, uint64(len(m.ConfigID))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *ConfigReference_File) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ConfigReference_File) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - if m.File != nil { - { - size, err := m.File.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - } - return len(dAtA) - i, nil -} -func (m *ConfigReference_Runtime) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ConfigReference_Runtime) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - if m.Runtime != nil { - { - size, err := m.Runtime.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - } - return len(dAtA) - i, nil -} -func (m *BlacklistedCertificate) 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 *BlacklistedCertificate) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *BlacklistedCertificate) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Expiry != nil { - { - size, err := m.Expiry.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *HealthConfig) 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 *HealthConfig) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *HealthConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.StartInterval != nil { - { - size, err := m.StartInterval.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x32 - } - if m.StartPeriod != nil { - { - size, err := m.StartPeriod.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x2a - } - if m.Retries != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.Retries)) - i-- - dAtA[i] = 0x20 - } - if m.Timeout != nil { - { - size, err := m.Timeout.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - } - if m.Interval != nil { - { - size, err := m.Interval.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - if len(m.Test) > 0 { - for iNdEx := len(m.Test) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.Test[iNdEx]) - copy(dAtA[i:], m.Test[iNdEx]) - i = encodeVarintTypes(dAtA, i, uint64(len(m.Test[iNdEx]))) - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func (m *MaybeEncryptedRecord) 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 *MaybeEncryptedRecord) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MaybeEncryptedRecord) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Nonce) > 0 { - i -= len(m.Nonce) - copy(dAtA[i:], m.Nonce) - i = encodeVarintTypes(dAtA, i, uint64(len(m.Nonce))) - i-- - dAtA[i] = 0x1a - } - if len(m.Data) > 0 { - i -= len(m.Data) - copy(dAtA[i:], m.Data) - i = encodeVarintTypes(dAtA, i, uint64(len(m.Data))) - i-- - dAtA[i] = 0x12 - } - if m.Algorithm != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.Algorithm)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *RootRotation) 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 *RootRotation) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *RootRotation) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.CrossSignedCACert) > 0 { - i -= len(m.CrossSignedCACert) - copy(dAtA[i:], m.CrossSignedCACert) - i = encodeVarintTypes(dAtA, i, uint64(len(m.CrossSignedCACert))) - i-- - dAtA[i] = 0x1a - } - if len(m.CAKey) > 0 { - i -= len(m.CAKey) - copy(dAtA[i:], m.CAKey) - i = encodeVarintTypes(dAtA, i, uint64(len(m.CAKey))) - i-- - dAtA[i] = 0x12 - } - if len(m.CACert) > 0 { - i -= len(m.CACert) - copy(dAtA[i:], m.CACert) - i = encodeVarintTypes(dAtA, i, uint64(len(m.CACert))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *Privileges) 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 *Privileges) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *Privileges) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.NoNewPrivileges { - i-- - if m.NoNewPrivileges { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x28 - } - if m.Apparmor != nil { - { - size, err := m.Apparmor.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - } - if m.Seccomp != nil { - { - size, err := m.Seccomp.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - } - if m.SELinuxContext != nil { - { - size, err := m.SELinuxContext.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - if m.CredentialSpec != nil { - { - size, err := m.CredentialSpec.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *Privileges_CredentialSpec) 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 *Privileges_CredentialSpec) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *Privileges_CredentialSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Source != nil { - { - size := m.Source.Size() - i -= size - if _, err := m.Source.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - } - } - return len(dAtA) - i, nil -} - -func (m *Privileges_CredentialSpec_File) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *Privileges_CredentialSpec_File) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - i -= len(m.File) - copy(dAtA[i:], m.File) - i = encodeVarintTypes(dAtA, i, uint64(len(m.File))) - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} -func (m *Privileges_CredentialSpec_Registry) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *Privileges_CredentialSpec_Registry) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - i -= len(m.Registry) - copy(dAtA[i:], m.Registry) - i = encodeVarintTypes(dAtA, i, uint64(len(m.Registry))) - i-- - dAtA[i] = 0x12 - return len(dAtA) - i, nil -} -func (m *Privileges_CredentialSpec_Config) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *Privileges_CredentialSpec_Config) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - i -= len(m.Config) - copy(dAtA[i:], m.Config) - i = encodeVarintTypes(dAtA, i, uint64(len(m.Config))) - i-- - dAtA[i] = 0x1a - return len(dAtA) - i, nil -} -func (m *Privileges_SELinuxContext) 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 *Privileges_SELinuxContext) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *Privileges_SELinuxContext) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Level) > 0 { - i -= len(m.Level) - copy(dAtA[i:], m.Level) - i = encodeVarintTypes(dAtA, i, uint64(len(m.Level))) - i-- - dAtA[i] = 0x2a - } - if len(m.Type) > 0 { - i -= len(m.Type) - copy(dAtA[i:], m.Type) - i = encodeVarintTypes(dAtA, i, uint64(len(m.Type))) - i-- - dAtA[i] = 0x22 - } - if len(m.Role) > 0 { - i -= len(m.Role) - copy(dAtA[i:], m.Role) - i = encodeVarintTypes(dAtA, i, uint64(len(m.Role))) - i-- - dAtA[i] = 0x1a - } - if len(m.User) > 0 { - i -= len(m.User) - copy(dAtA[i:], m.User) - i = encodeVarintTypes(dAtA, i, uint64(len(m.User))) - i-- - dAtA[i] = 0x12 - } - if m.Disable { - i-- - if m.Disable { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *Privileges_SeccompOpts) 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 *Privileges_SeccompOpts) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *Privileges_SeccompOpts) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Profile) > 0 { - i -= len(m.Profile) - copy(dAtA[i:], m.Profile) - i = encodeVarintTypes(dAtA, i, uint64(len(m.Profile))) - i-- - dAtA[i] = 0x12 - } - if m.Mode != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.Mode)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *Privileges_AppArmorOpts) 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 *Privileges_AppArmorOpts) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *Privileges_AppArmorOpts) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Mode != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.Mode)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *JobStatus) 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 *JobStatus) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *JobStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.LastExecution != nil { - { - size, err := m.LastExecution.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - { - size, err := m.JobIteration.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *VolumeAccessMode) 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 *VolumeAccessMode) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *VolumeAccessMode) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.AccessType != nil { - { - size := m.AccessType.Size() - i -= size - if _, err := m.AccessType.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - } - } - if m.Sharing != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.Sharing)) - i-- - dAtA[i] = 0x10 - } - if m.Scope != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.Scope)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *VolumeAccessMode_Block) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *VolumeAccessMode_Block) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - if m.Block != nil { - { - size, err := m.Block.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - } - return len(dAtA) - i, nil -} -func (m *VolumeAccessMode_Mount) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *VolumeAccessMode_Mount) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - if m.Mount != nil { - { - size, err := m.Mount.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - } - return len(dAtA) - i, nil -} -func (m *VolumeAccessMode_BlockVolume) 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 *VolumeAccessMode_BlockVolume) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *VolumeAccessMode_BlockVolume) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil -} - -func (m *VolumeAccessMode_MountVolume) 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 *VolumeAccessMode_MountVolume) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *VolumeAccessMode_MountVolume) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.MountFlags) > 0 { - for iNdEx := len(m.MountFlags) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.MountFlags[iNdEx]) - copy(dAtA[i:], m.MountFlags[iNdEx]) - i = encodeVarintTypes(dAtA, i, uint64(len(m.MountFlags[iNdEx]))) - i-- - dAtA[i] = 0x12 - } - } - if len(m.FsType) > 0 { - i -= len(m.FsType) - copy(dAtA[i:], m.FsType) - i = encodeVarintTypes(dAtA, i, uint64(len(m.FsType))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *VolumeSecret) 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 *VolumeSecret) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *VolumeSecret) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Secret) > 0 { - i -= len(m.Secret) - copy(dAtA[i:], m.Secret) - i = encodeVarintTypes(dAtA, i, uint64(len(m.Secret))) - i-- - dAtA[i] = 0x12 - } - if len(m.Key) > 0 { - i -= len(m.Key) - copy(dAtA[i:], m.Key) - i = encodeVarintTypes(dAtA, i, uint64(len(m.Key))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *VolumePublishStatus) 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 *VolumePublishStatus) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *VolumePublishStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Message) > 0 { - i -= len(m.Message) - copy(dAtA[i:], m.Message) - i = encodeVarintTypes(dAtA, i, uint64(len(m.Message))) - i-- - dAtA[i] = 0x2a - } - if len(m.PublishContext) > 0 { - for k := range m.PublishContext { - v := m.PublishContext[k] - baseI := i - i -= len(v) - copy(dAtA[i:], v) - i = encodeVarintTypes(dAtA, i, uint64(len(v))) - i-- - dAtA[i] = 0x12 - i -= len(k) - copy(dAtA[i:], k) - i = encodeVarintTypes(dAtA, i, uint64(len(k))) - i-- - dAtA[i] = 0xa - i = encodeVarintTypes(dAtA, i, uint64(baseI-i)) - i-- - dAtA[i] = 0x1a - } - } - if m.State != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.State)) - i-- - dAtA[i] = 0x10 - } - if len(m.NodeID) > 0 { - i -= len(m.NodeID) - copy(dAtA[i:], m.NodeID) - i = encodeVarintTypes(dAtA, i, uint64(len(m.NodeID))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *VolumeInfo) 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 *VolumeInfo) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *VolumeInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.AccessibleTopology) > 0 { - for iNdEx := len(m.AccessibleTopology) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.AccessibleTopology[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - } - } - if len(m.VolumeID) > 0 { - i -= len(m.VolumeID) - copy(dAtA[i:], m.VolumeID) - i = encodeVarintTypes(dAtA, i, uint64(len(m.VolumeID))) - i-- - dAtA[i] = 0x1a - } - if len(m.VolumeContext) > 0 { - for k := range m.VolumeContext { - v := m.VolumeContext[k] - baseI := i - i -= len(v) - copy(dAtA[i:], v) - i = encodeVarintTypes(dAtA, i, uint64(len(v))) - i-- - dAtA[i] = 0x12 - i -= len(k) - copy(dAtA[i:], k) - i = encodeVarintTypes(dAtA, i, uint64(len(k))) - i-- - dAtA[i] = 0xa - i = encodeVarintTypes(dAtA, i, uint64(baseI-i)) - i-- - dAtA[i] = 0x12 - } - } - if m.CapacityBytes != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.CapacityBytes)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *CapacityRange) 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 *CapacityRange) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *CapacityRange) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.LimitBytes != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.LimitBytes)) - i-- - dAtA[i] = 0x10 - } - if m.RequiredBytes != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.RequiredBytes)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *VolumeAssignment) 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 *VolumeAssignment) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *VolumeAssignment) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Secrets) > 0 { - for iNdEx := len(m.Secrets) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Secrets[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x3a - } - } - if m.AccessMode != nil { - { - size, err := m.AccessMode.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x32 - } - if len(m.PublishContext) > 0 { - for k := range m.PublishContext { - v := m.PublishContext[k] - baseI := i - i -= len(v) - copy(dAtA[i:], v) - i = encodeVarintTypes(dAtA, i, uint64(len(v))) - i-- - dAtA[i] = 0x12 - i -= len(k) - copy(dAtA[i:], k) - i = encodeVarintTypes(dAtA, i, uint64(len(k))) - i-- - dAtA[i] = 0xa - i = encodeVarintTypes(dAtA, i, uint64(baseI-i)) - i-- - dAtA[i] = 0x2a - } - } - if len(m.VolumeContext) > 0 { - for k := range m.VolumeContext { - v := m.VolumeContext[k] - baseI := i - i -= len(v) - copy(dAtA[i:], v) - i = encodeVarintTypes(dAtA, i, uint64(len(v))) - i-- - dAtA[i] = 0x12 - i -= len(k) - copy(dAtA[i:], k) - i = encodeVarintTypes(dAtA, i, uint64(len(k))) - i-- - dAtA[i] = 0xa - i = encodeVarintTypes(dAtA, i, uint64(baseI-i)) - i-- - dAtA[i] = 0x22 - } - } - if m.Driver != nil { - { - size, err := m.Driver.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - } - if len(m.VolumeID) > 0 { - i -= len(m.VolumeID) - copy(dAtA[i:], m.VolumeID) - i = encodeVarintTypes(dAtA, i, uint64(len(m.VolumeID))) - i-- - dAtA[i] = 0x12 - } - if len(m.ID) > 0 { - i -= len(m.ID) - copy(dAtA[i:], m.ID) - i = encodeVarintTypes(dAtA, i, uint64(len(m.ID))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *VolumeAttachment) 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 *VolumeAttachment) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *VolumeAttachment) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Target) > 0 { - i -= len(m.Target) - copy(dAtA[i:], m.Target) - i = encodeVarintTypes(dAtA, i, uint64(len(m.Target))) - i-- - dAtA[i] = 0x1a - } - if len(m.Source) > 0 { - i -= len(m.Source) - copy(dAtA[i:], m.Source) - i = encodeVarintTypes(dAtA, i, uint64(len(m.Source))) - i-- - dAtA[i] = 0x12 - } - if len(m.ID) > 0 { - i -= len(m.ID) - copy(dAtA[i:], m.ID) - i = encodeVarintTypes(dAtA, i, uint64(len(m.ID))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *TopologyRequirement) 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 *TopologyRequirement) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *TopologyRequirement) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Preferred) > 0 { - for iNdEx := len(m.Preferred) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Preferred[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - } - if len(m.Requisite) > 0 { - for iNdEx := len(m.Requisite) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Requisite[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func (m *Topology) 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 *Topology) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *Topology) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Segments) > 0 { - for k := range m.Segments { - v := m.Segments[k] - baseI := i - i -= len(v) - copy(dAtA[i:], v) - i = encodeVarintTypes(dAtA, i, uint64(len(v))) - i-- - dAtA[i] = 0x12 - i -= len(k) - copy(dAtA[i:], k) - i = encodeVarintTypes(dAtA, i, uint64(len(k))) - i-- - dAtA[i] = 0xa - i = encodeVarintTypes(dAtA, i, uint64(baseI-i)) - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func (m *VolumeCapability) 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 *VolumeCapability) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *VolumeCapability) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.AccessMode != nil { - { - size, err := m.AccessMode.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - } - if m.AccessType != nil { - { - size := m.AccessType.Size() - i -= size - if _, err := m.AccessType.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - } - } - return len(dAtA) - i, nil -} - -func (m *VolumeCapability_Block) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *VolumeCapability_Block) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - if m.Block != nil { - { - size, err := m.Block.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} -func (m *VolumeCapability_Mount) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *VolumeCapability_Mount) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - if m.Mount != nil { - { - size, err := m.Mount.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - return len(dAtA) - i, nil -} -func (m *VolumeCapability_BlockVolume) 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 *VolumeCapability_BlockVolume) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *VolumeCapability_BlockVolume) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil -} - -func (m *VolumeCapability_MountVolume) 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 *VolumeCapability_MountVolume) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *VolumeCapability_MountVolume) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.MountFlags) > 0 { - for iNdEx := len(m.MountFlags) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.MountFlags[iNdEx]) - copy(dAtA[i:], m.MountFlags[iNdEx]) - i = encodeVarintTypes(dAtA, i, uint64(len(m.MountFlags[iNdEx]))) - i-- - dAtA[i] = 0x12 - } - } - if len(m.FsType) > 0 { - i -= len(m.FsType) - copy(dAtA[i:], m.FsType) - i = encodeVarintTypes(dAtA, i, uint64(len(m.FsType))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *VolumeCapability_AccessMode) 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 *VolumeCapability_AccessMode) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *VolumeCapability_AccessMode) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Mode != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.Mode)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func encodeVarintTypes(dAtA []byte, offset int, v uint64) int { - offset -= sovTypes(v) - base := offset - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return base -} -func (m *Version) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Index != 0 { - n += 1 + sovTypes(uint64(m.Index)) - } - return n -} - -func (m *IndexEntry) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Key) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - l = len(m.Val) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - return n -} - -func (m *Annotations) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Name) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - if len(m.Labels) > 0 { - for k, v := range m.Labels { - _ = k - _ = v - mapEntrySize := 1 + len(k) + sovTypes(uint64(len(k))) + 1 + len(v) + sovTypes(uint64(len(v))) - n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) - } - } - if len(m.Indices) > 0 { - for _, e := range m.Indices { - l = e.Size() - n += 1 + l + sovTypes(uint64(l)) - } - } - return n -} - -func (m *NamedGenericResource) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Kind) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - l = len(m.Value) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - return n -} - -func (m *DiscreteGenericResource) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Kind) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - if m.Value != 0 { - n += 1 + sovTypes(uint64(m.Value)) - } - return n -} - -func (m *GenericResource) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Resource != nil { - n += m.Resource.Size() - } - return n -} - -func (m *GenericResource_NamedResourceSpec) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.NamedResourceSpec != nil { - l = m.NamedResourceSpec.Size() - n += 1 + l + sovTypes(uint64(l)) - } - return n -} -func (m *GenericResource_DiscreteResourceSpec) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.DiscreteResourceSpec != nil { - l = m.DiscreteResourceSpec.Size() - n += 1 + l + sovTypes(uint64(l)) - } - return n -} -func (m *Resources) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.NanoCPUs != 0 { - n += 1 + sovTypes(uint64(m.NanoCPUs)) - } - if m.MemoryBytes != 0 { - n += 1 + sovTypes(uint64(m.MemoryBytes)) - } - if len(m.Generic) > 0 { - for _, e := range m.Generic { - l = e.Size() - n += 1 + l + sovTypes(uint64(l)) - } - } - return n -} - -func (m *ResourceRequirements) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Limits != nil { - l = m.Limits.Size() - n += 1 + l + sovTypes(uint64(l)) - } - if m.Reservations != nil { - l = m.Reservations.Size() - n += 1 + l + sovTypes(uint64(l)) - } - if m.SwapBytes != nil { - l = m.SwapBytes.Size() - n += 1 + l + sovTypes(uint64(l)) - } - if m.MemorySwappiness != nil { - l = m.MemorySwappiness.Size() - n += 1 + l + sovTypes(uint64(l)) - } - return n -} - -func (m *Platform) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Architecture) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - l = len(m.OS) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - return n -} - -func (m *PluginDescription) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Type) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - l = len(m.Name) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - return n -} - -func (m *EngineDescription) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.EngineVersion) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - if len(m.Labels) > 0 { - for k, v := range m.Labels { - _ = k - _ = v - mapEntrySize := 1 + len(k) + sovTypes(uint64(len(k))) + 1 + len(v) + sovTypes(uint64(len(v))) - n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) - } - } - if len(m.Plugins) > 0 { - for _, e := range m.Plugins { - l = e.Size() - n += 1 + l + sovTypes(uint64(l)) - } - } - return n -} - -func (m *NodeDescription) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Hostname) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - if m.Platform != nil { - l = m.Platform.Size() - n += 1 + l + sovTypes(uint64(l)) - } - if m.Resources != nil { - l = m.Resources.Size() - n += 1 + l + sovTypes(uint64(l)) - } - if m.Engine != nil { - l = m.Engine.Size() - n += 1 + l + sovTypes(uint64(l)) - } - if m.TLSInfo != nil { - l = m.TLSInfo.Size() - n += 1 + l + sovTypes(uint64(l)) - } - if m.FIPS { - n += 2 - } - if len(m.CSIInfo) > 0 { - for _, e := range m.CSIInfo { - l = e.Size() - n += 1 + l + sovTypes(uint64(l)) - } - } - return n -} - -func (m *NodeTLSInfo) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.TrustRoot) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - l = len(m.CertIssuerSubject) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - l = len(m.CertIssuerPublicKey) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - return n -} - -func (m *NodeCSIInfo) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.PluginName) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - l = len(m.NodeID) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - if m.MaxVolumesPerNode != 0 { - n += 1 + sovTypes(uint64(m.MaxVolumesPerNode)) - } - if m.AccessibleTopology != nil { - l = m.AccessibleTopology.Size() - n += 1 + l + sovTypes(uint64(l)) - } - return n -} - -func (m *RaftMemberStatus) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Leader { - n += 2 - } - if m.Reachability != 0 { - n += 1 + sovTypes(uint64(m.Reachability)) - } - l = len(m.Message) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - return n -} - -func (m *NodeStatus) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.State != 0 { - n += 1 + sovTypes(uint64(m.State)) - } - l = len(m.Message) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - l = len(m.Addr) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - return n -} - -func (m *Image) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Reference) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - return n -} - -func (m *Mount) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Type != 0 { - n += 1 + sovTypes(uint64(m.Type)) - } - l = len(m.Source) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - l = len(m.Target) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - if m.ReadOnly { - n += 2 - } - if m.BindOptions != nil { - l = m.BindOptions.Size() - n += 1 + l + sovTypes(uint64(l)) - } - if m.VolumeOptions != nil { - l = m.VolumeOptions.Size() - n += 1 + l + sovTypes(uint64(l)) - } - if m.TmpfsOptions != nil { - l = m.TmpfsOptions.Size() - n += 1 + l + sovTypes(uint64(l)) - } - if m.Consistency != 0 { - n += 1 + sovTypes(uint64(m.Consistency)) - } - return n -} - -func (m *Mount_BindOptions) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Propagation != 0 { - n += 1 + sovTypes(uint64(m.Propagation)) - } - if m.NonRecursive { - n += 2 - } - if m.CreateMountpoint { - n += 2 - } - if m.ReadOnlyNonRecursive { - n += 2 - } - if m.ReadOnlyForceRecursive { - n += 2 - } - return n -} - -func (m *Mount_VolumeOptions) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.NoCopy { - n += 2 - } - if len(m.Labels) > 0 { - for k, v := range m.Labels { - _ = k - _ = v - mapEntrySize := 1 + len(k) + sovTypes(uint64(len(k))) + 1 + len(v) + sovTypes(uint64(len(v))) - n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) - } - } - if m.DriverConfig != nil { - l = m.DriverConfig.Size() - n += 1 + l + sovTypes(uint64(l)) - } - l = len(m.Subpath) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - return n -} - -func (m *Mount_TmpfsOptions) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.SizeBytes != 0 { - n += 1 + sovTypes(uint64(m.SizeBytes)) - } - if m.Mode != 0 { - n += 1 + sovTypes(uint64(m.Mode)) - } - l = len(m.Options) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - return n -} - -func (m *RestartPolicy) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Condition != 0 { - n += 1 + sovTypes(uint64(m.Condition)) - } - if m.Delay != nil { - l = m.Delay.Size() - n += 1 + l + sovTypes(uint64(l)) - } - if m.MaxAttempts != 0 { - n += 1 + sovTypes(uint64(m.MaxAttempts)) - } - if m.Window != nil { - l = m.Window.Size() - n += 1 + l + sovTypes(uint64(l)) - } - return n -} - -func (m *UpdateConfig) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Parallelism != 0 { - n += 1 + sovTypes(uint64(m.Parallelism)) - } - l = github_com_gogo_protobuf_types.SizeOfStdDuration(m.Delay) - n += 1 + l + sovTypes(uint64(l)) - if m.FailureAction != 0 { - n += 1 + sovTypes(uint64(m.FailureAction)) - } - if m.Monitor != nil { - l = m.Monitor.Size() - n += 1 + l + sovTypes(uint64(l)) - } - if m.MaxFailureRatio != 0 { - n += 5 - } - if m.Order != 0 { - n += 1 + sovTypes(uint64(m.Order)) - } - return n -} - -func (m *UpdateStatus) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.State != 0 { - n += 1 + sovTypes(uint64(m.State)) - } - if m.StartedAt != nil { - l = m.StartedAt.Size() - n += 1 + l + sovTypes(uint64(l)) - } - if m.CompletedAt != nil { - l = m.CompletedAt.Size() - n += 1 + l + sovTypes(uint64(l)) - } - l = len(m.Message) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - return n -} - -func (m *ContainerStatus) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.ContainerID) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - if m.PID != 0 { - n += 1 + sovTypes(uint64(m.PID)) - } - if m.ExitCode != 0 { - n += 1 + sovTypes(uint64(m.ExitCode)) - } - return n -} - -func (m *PortStatus) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Ports) > 0 { - for _, e := range m.Ports { - l = e.Size() - n += 1 + l + sovTypes(uint64(l)) - } - } - return n -} - -func (m *TaskStatus) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Timestamp != nil { - l = m.Timestamp.Size() - n += 1 + l + sovTypes(uint64(l)) - } - if m.State != 0 { - n += 1 + sovTypes(uint64(m.State)) - } - l = len(m.Message) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - l = len(m.Err) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - if m.RuntimeStatus != nil { - n += m.RuntimeStatus.Size() - } - if m.PortStatus != nil { - l = m.PortStatus.Size() - n += 1 + l + sovTypes(uint64(l)) - } - l = len(m.AppliedBy) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - if m.AppliedAt != nil { - l = m.AppliedAt.Size() - n += 1 + l + sovTypes(uint64(l)) - } - return n -} - -func (m *TaskStatus_Container) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Container != nil { - l = m.Container.Size() - n += 1 + l + sovTypes(uint64(l)) - } - return n -} -func (m *NetworkAttachmentConfig) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Target) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - if len(m.Aliases) > 0 { - for _, s := range m.Aliases { - l = len(s) - n += 1 + l + sovTypes(uint64(l)) - } - } - if len(m.Addresses) > 0 { - for _, s := range m.Addresses { - l = len(s) - n += 1 + l + sovTypes(uint64(l)) - } - } - if len(m.DriverAttachmentOpts) > 0 { - for k, v := range m.DriverAttachmentOpts { - _ = k - _ = v - mapEntrySize := 1 + len(k) + sovTypes(uint64(len(k))) + 1 + len(v) + sovTypes(uint64(len(v))) - n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) - } - } - return n -} - -func (m *IPAMConfig) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Family != 0 { - n += 1 + sovTypes(uint64(m.Family)) - } - l = len(m.Subnet) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - l = len(m.Range) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - l = len(m.Gateway) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - if len(m.Reserved) > 0 { - for k, v := range m.Reserved { - _ = k - _ = v - mapEntrySize := 1 + len(k) + sovTypes(uint64(len(k))) + 1 + len(v) + sovTypes(uint64(len(v))) - n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) - } - } - return n -} - -func (m *PortConfig) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Name) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - if m.Protocol != 0 { - n += 1 + sovTypes(uint64(m.Protocol)) - } - if m.TargetPort != 0 { - n += 1 + sovTypes(uint64(m.TargetPort)) - } - if m.PublishedPort != 0 { - n += 1 + sovTypes(uint64(m.PublishedPort)) - } - if m.PublishMode != 0 { - n += 1 + sovTypes(uint64(m.PublishMode)) - } - return n -} - -func (m *Driver) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Name) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - if len(m.Options) > 0 { - for k, v := range m.Options { - _ = k - _ = v - mapEntrySize := 1 + len(k) + sovTypes(uint64(len(k))) + 1 + len(v) + sovTypes(uint64(len(v))) - n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) - } - } - return n -} - -func (m *IPAMOptions) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Driver != nil { - l = m.Driver.Size() - n += 1 + l + sovTypes(uint64(l)) - } - if len(m.Configs) > 0 { - for _, e := range m.Configs { - l = e.Size() - n += 1 + l + sovTypes(uint64(l)) - } - } - return n -} - -func (m *Peer) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.NodeID) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - l = len(m.Addr) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - return n -} - -func (m *WeightedPeer) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Peer != nil { - l = m.Peer.Size() - n += 1 + l + sovTypes(uint64(l)) - } - if m.Weight != 0 { - n += 1 + sovTypes(uint64(m.Weight)) - } - return n -} - -func (m *IssuanceStatus) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.State != 0 { - n += 1 + sovTypes(uint64(m.State)) - } - l = len(m.Err) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - return n -} - -func (m *AcceptancePolicy) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Policies) > 0 { - for _, e := range m.Policies { - l = e.Size() - n += 1 + l + sovTypes(uint64(l)) - } - } - return n -} - -func (m *AcceptancePolicy_RoleAdmissionPolicy) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Role != 0 { - n += 1 + sovTypes(uint64(m.Role)) - } - if m.Autoaccept { - n += 2 - } - if m.Secret != nil { - l = m.Secret.Size() - n += 1 + l + sovTypes(uint64(l)) - } - return n -} - -func (m *AcceptancePolicy_RoleAdmissionPolicy_Secret) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Data) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - l = len(m.Alg) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - return n -} - -func (m *ExternalCA) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Protocol != 0 { - n += 1 + sovTypes(uint64(m.Protocol)) - } - l = len(m.URL) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - if len(m.Options) > 0 { - for k, v := range m.Options { - _ = k - _ = v - mapEntrySize := 1 + len(k) + sovTypes(uint64(len(k))) + 1 + len(v) + sovTypes(uint64(len(v))) - n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) - } - } - l = len(m.CACert) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - return n -} - -func (m *CAConfig) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.NodeCertExpiry != nil { - l = m.NodeCertExpiry.Size() - n += 1 + l + sovTypes(uint64(l)) - } - if len(m.ExternalCAs) > 0 { - for _, e := range m.ExternalCAs { - l = e.Size() - n += 1 + l + sovTypes(uint64(l)) - } - } - l = len(m.SigningCACert) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - l = len(m.SigningCAKey) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - if m.ForceRotate != 0 { - n += 1 + sovTypes(uint64(m.ForceRotate)) - } - return n -} - -func (m *OrchestrationConfig) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.TaskHistoryRetentionLimit != 0 { - n += 1 + sovTypes(uint64(m.TaskHistoryRetentionLimit)) - } - return n -} - -func (m *TaskDefaults) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.LogDriver != nil { - l = m.LogDriver.Size() - n += 1 + l + sovTypes(uint64(l)) - } - return n -} - -func (m *DispatcherConfig) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.HeartbeatPeriod != nil { - l = m.HeartbeatPeriod.Size() - n += 1 + l + sovTypes(uint64(l)) - } - return n -} - -func (m *RaftConfig) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.SnapshotInterval != 0 { - n += 1 + sovTypes(uint64(m.SnapshotInterval)) - } - if m.KeepOldSnapshots != 0 { - n += 1 + sovTypes(uint64(m.KeepOldSnapshots)) - } - if m.LogEntriesForSlowFollowers != 0 { - n += 1 + sovTypes(uint64(m.LogEntriesForSlowFollowers)) - } - if m.HeartbeatTick != 0 { - n += 1 + sovTypes(uint64(m.HeartbeatTick)) - } - if m.ElectionTick != 0 { - n += 1 + sovTypes(uint64(m.ElectionTick)) - } - return n -} - -func (m *EncryptionConfig) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.AutoLockManagers { - n += 2 - } - return n -} - -func (m *SpreadOver) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.SpreadDescriptor) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - return n -} - -func (m *PlacementPreference) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Preference != nil { - n += m.Preference.Size() - } - return n -} - -func (m *PlacementPreference_Spread) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Spread != nil { - l = m.Spread.Size() - n += 1 + l + sovTypes(uint64(l)) - } - return n -} -func (m *Placement) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Constraints) > 0 { - for _, s := range m.Constraints { - l = len(s) - n += 1 + l + sovTypes(uint64(l)) - } - } - if len(m.Preferences) > 0 { - for _, e := range m.Preferences { - l = e.Size() - n += 1 + l + sovTypes(uint64(l)) - } - } - if len(m.Platforms) > 0 { - for _, e := range m.Platforms { - l = e.Size() - n += 1 + l + sovTypes(uint64(l)) - } - } - if m.MaxReplicas != 0 { - n += 1 + sovTypes(uint64(m.MaxReplicas)) - } - return n -} - -func (m *JoinTokens) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Worker) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - l = len(m.Manager) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - return n -} - -func (m *RootCA) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.CAKey) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - l = len(m.CACert) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - l = len(m.CACertHash) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - l = m.JoinTokens.Size() - n += 1 + l + sovTypes(uint64(l)) - if m.RootRotation != nil { - l = m.RootRotation.Size() - n += 1 + l + sovTypes(uint64(l)) - } - if m.LastForcedRotation != 0 { - n += 1 + sovTypes(uint64(m.LastForcedRotation)) - } - return n -} - -func (m *Certificate) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Role != 0 { - n += 1 + sovTypes(uint64(m.Role)) - } - l = len(m.CSR) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - l = m.Status.Size() - n += 1 + l + sovTypes(uint64(l)) - l = len(m.Certificate) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - l = len(m.CN) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - return n -} - -func (m *EncryptionKey) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Subsystem) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - if m.Algorithm != 0 { - n += 1 + sovTypes(uint64(m.Algorithm)) - } - l = len(m.Key) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - if m.LamportTime != 0 { - n += 1 + sovTypes(uint64(m.LamportTime)) - } - return n -} - -func (m *ManagerStatus) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.RaftID != 0 { - n += 1 + sovTypes(uint64(m.RaftID)) - } - l = len(m.Addr) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - if m.Leader { - n += 2 - } - if m.Reachability != 0 { - n += 1 + sovTypes(uint64(m.Reachability)) - } - return n -} - -func (m *FileTarget) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Name) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - l = len(m.UID) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - l = len(m.GID) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - if m.Mode != 0 { - n += 1 + sovTypes(uint64(m.Mode)) - } - return n -} - -func (m *RuntimeTarget) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - return n -} - -func (m *SecretReference) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.SecretID) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - l = len(m.SecretName) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - if m.Target != nil { - n += m.Target.Size() - } - return n -} - -func (m *SecretReference_File) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.File != nil { - l = m.File.Size() - n += 1 + l + sovTypes(uint64(l)) - } - return n -} -func (m *ConfigReference) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.ConfigID) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - l = len(m.ConfigName) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - if m.Target != nil { - n += m.Target.Size() - } - return n -} - -func (m *ConfigReference_File) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.File != nil { - l = m.File.Size() - n += 1 + l + sovTypes(uint64(l)) - } - return n -} -func (m *ConfigReference_Runtime) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Runtime != nil { - l = m.Runtime.Size() - n += 1 + l + sovTypes(uint64(l)) - } - return n -} -func (m *BlacklistedCertificate) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Expiry != nil { - l = m.Expiry.Size() - n += 1 + l + sovTypes(uint64(l)) - } - return n -} - -func (m *HealthConfig) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Test) > 0 { - for _, s := range m.Test { - l = len(s) - n += 1 + l + sovTypes(uint64(l)) - } - } - if m.Interval != nil { - l = m.Interval.Size() - n += 1 + l + sovTypes(uint64(l)) - } - if m.Timeout != nil { - l = m.Timeout.Size() - n += 1 + l + sovTypes(uint64(l)) - } - if m.Retries != 0 { - n += 1 + sovTypes(uint64(m.Retries)) - } - if m.StartPeriod != nil { - l = m.StartPeriod.Size() - n += 1 + l + sovTypes(uint64(l)) - } - if m.StartInterval != nil { - l = m.StartInterval.Size() - n += 1 + l + sovTypes(uint64(l)) - } - return n -} - -func (m *MaybeEncryptedRecord) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Algorithm != 0 { - n += 1 + sovTypes(uint64(m.Algorithm)) - } - l = len(m.Data) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - l = len(m.Nonce) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - return n -} - -func (m *RootRotation) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.CACert) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - l = len(m.CAKey) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - l = len(m.CrossSignedCACert) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - return n -} - -func (m *Privileges) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.CredentialSpec != nil { - l = m.CredentialSpec.Size() - n += 1 + l + sovTypes(uint64(l)) - } - if m.SELinuxContext != nil { - l = m.SELinuxContext.Size() - n += 1 + l + sovTypes(uint64(l)) - } - if m.Seccomp != nil { - l = m.Seccomp.Size() - n += 1 + l + sovTypes(uint64(l)) - } - if m.Apparmor != nil { - l = m.Apparmor.Size() - n += 1 + l + sovTypes(uint64(l)) - } - if m.NoNewPrivileges { - n += 2 - } - return n -} - -func (m *Privileges_CredentialSpec) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Source != nil { - n += m.Source.Size() - } - return n -} - -func (m *Privileges_CredentialSpec_File) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.File) - n += 1 + l + sovTypes(uint64(l)) - return n -} -func (m *Privileges_CredentialSpec_Registry) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Registry) - n += 1 + l + sovTypes(uint64(l)) - return n -} -func (m *Privileges_CredentialSpec_Config) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Config) - n += 1 + l + sovTypes(uint64(l)) - return n -} -func (m *Privileges_SELinuxContext) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Disable { - n += 2 - } - l = len(m.User) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - l = len(m.Role) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - l = len(m.Type) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - l = len(m.Level) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - return n -} - -func (m *Privileges_SeccompOpts) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Mode != 0 { - n += 1 + sovTypes(uint64(m.Mode)) - } - l = len(m.Profile) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - return n -} - -func (m *Privileges_AppArmorOpts) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Mode != 0 { - n += 1 + sovTypes(uint64(m.Mode)) - } - return n -} - -func (m *JobStatus) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.JobIteration.Size() - n += 1 + l + sovTypes(uint64(l)) - if m.LastExecution != nil { - l = m.LastExecution.Size() - n += 1 + l + sovTypes(uint64(l)) - } - return n -} - -func (m *VolumeAccessMode) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Scope != 0 { - n += 1 + sovTypes(uint64(m.Scope)) - } - if m.Sharing != 0 { - n += 1 + sovTypes(uint64(m.Sharing)) - } - if m.AccessType != nil { - n += m.AccessType.Size() - } - return n -} - -func (m *VolumeAccessMode_Block) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Block != nil { - l = m.Block.Size() - n += 1 + l + sovTypes(uint64(l)) - } - return n -} -func (m *VolumeAccessMode_Mount) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Mount != nil { - l = m.Mount.Size() - n += 1 + l + sovTypes(uint64(l)) - } - return n -} -func (m *VolumeAccessMode_BlockVolume) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - return n -} - -func (m *VolumeAccessMode_MountVolume) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.FsType) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - if len(m.MountFlags) > 0 { - for _, s := range m.MountFlags { - l = len(s) - n += 1 + l + sovTypes(uint64(l)) - } - } - return n -} - -func (m *VolumeSecret) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Key) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - l = len(m.Secret) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - return n -} - -func (m *VolumePublishStatus) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.NodeID) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - if m.State != 0 { - n += 1 + sovTypes(uint64(m.State)) - } - if len(m.PublishContext) > 0 { - for k, v := range m.PublishContext { - _ = k - _ = v - mapEntrySize := 1 + len(k) + sovTypes(uint64(len(k))) + 1 + len(v) + sovTypes(uint64(len(v))) - n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) - } - } - l = len(m.Message) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - return n -} - -func (m *VolumeInfo) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.CapacityBytes != 0 { - n += 1 + sovTypes(uint64(m.CapacityBytes)) - } - if len(m.VolumeContext) > 0 { - for k, v := range m.VolumeContext { - _ = k - _ = v - mapEntrySize := 1 + len(k) + sovTypes(uint64(len(k))) + 1 + len(v) + sovTypes(uint64(len(v))) - n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) - } - } - l = len(m.VolumeID) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - if len(m.AccessibleTopology) > 0 { - for _, e := range m.AccessibleTopology { - l = e.Size() - n += 1 + l + sovTypes(uint64(l)) - } - } - return n -} - -func (m *CapacityRange) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.RequiredBytes != 0 { - n += 1 + sovTypes(uint64(m.RequiredBytes)) - } - if m.LimitBytes != 0 { - n += 1 + sovTypes(uint64(m.LimitBytes)) - } - return n -} - -func (m *VolumeAssignment) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.ID) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - l = len(m.VolumeID) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - if m.Driver != nil { - l = m.Driver.Size() - n += 1 + l + sovTypes(uint64(l)) - } - if len(m.VolumeContext) > 0 { - for k, v := range m.VolumeContext { - _ = k - _ = v - mapEntrySize := 1 + len(k) + sovTypes(uint64(len(k))) + 1 + len(v) + sovTypes(uint64(len(v))) - n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) - } - } - if len(m.PublishContext) > 0 { - for k, v := range m.PublishContext { - _ = k - _ = v - mapEntrySize := 1 + len(k) + sovTypes(uint64(len(k))) + 1 + len(v) + sovTypes(uint64(len(v))) - n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) - } - } - if m.AccessMode != nil { - l = m.AccessMode.Size() - n += 1 + l + sovTypes(uint64(l)) - } - if len(m.Secrets) > 0 { - for _, e := range m.Secrets { - l = e.Size() - n += 1 + l + sovTypes(uint64(l)) - } - } - return n -} - -func (m *VolumeAttachment) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.ID) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - l = len(m.Source) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - l = len(m.Target) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - return n -} - -func (m *TopologyRequirement) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Requisite) > 0 { - for _, e := range m.Requisite { - l = e.Size() - n += 1 + l + sovTypes(uint64(l)) - } - } - if len(m.Preferred) > 0 { - for _, e := range m.Preferred { - l = e.Size() - n += 1 + l + sovTypes(uint64(l)) - } - } - return n -} - -func (m *Topology) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Segments) > 0 { - for k, v := range m.Segments { - _ = k - _ = v - mapEntrySize := 1 + len(k) + sovTypes(uint64(len(k))) + 1 + len(v) + sovTypes(uint64(len(v))) - n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize)) - } - } - return n -} - -func (m *VolumeCapability) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.AccessType != nil { - n += m.AccessType.Size() - } - if m.AccessMode != nil { - l = m.AccessMode.Size() - n += 1 + l + sovTypes(uint64(l)) - } - return n -} - -func (m *VolumeCapability_Block) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Block != nil { - l = m.Block.Size() - n += 1 + l + sovTypes(uint64(l)) - } - return n -} -func (m *VolumeCapability_Mount) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Mount != nil { - l = m.Mount.Size() - n += 1 + l + sovTypes(uint64(l)) - } - return n -} -func (m *VolumeCapability_BlockVolume) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - return n -} - -func (m *VolumeCapability_MountVolume) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.FsType) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - if len(m.MountFlags) > 0 { - for _, s := range m.MountFlags { - l = len(s) - n += 1 + l + sovTypes(uint64(l)) - } - } - return n -} - -func (m *VolumeCapability_AccessMode) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Mode != 0 { - n += 1 + sovTypes(uint64(m.Mode)) - } - return n -} - -func sovTypes(x uint64) (n int) { - return (math_bits.Len64(x|1) + 6) / 7 -} -func sozTypes(x uint64) (n int) { - return sovTypes(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (this *Version) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&Version{`, - `Index:` + fmt.Sprintf("%v", this.Index) + `,`, - `}`, - }, "") - return s -} -func (this *IndexEntry) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&IndexEntry{`, - `Key:` + fmt.Sprintf("%v", this.Key) + `,`, - `Val:` + fmt.Sprintf("%v", this.Val) + `,`, - `}`, - }, "") - return s -} -func (this *Annotations) String() string { - if this == nil { - return "nil" - } - repeatedStringForIndices := "[]IndexEntry{" - for _, f := range this.Indices { - repeatedStringForIndices += strings.Replace(strings.Replace(f.String(), "IndexEntry", "IndexEntry", 1), `&`, ``, 1) + "," - } - repeatedStringForIndices += "}" - keysForLabels := make([]string, 0, len(this.Labels)) - for k, _ := range this.Labels { - keysForLabels = append(keysForLabels, k) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForLabels) - mapStringForLabels := "map[string]string{" - for _, k := range keysForLabels { - mapStringForLabels += fmt.Sprintf("%v: %v,", k, this.Labels[k]) - } - mapStringForLabels += "}" - s := strings.Join([]string{`&Annotations{`, - `Name:` + fmt.Sprintf("%v", this.Name) + `,`, - `Labels:` + mapStringForLabels + `,`, - `Indices:` + repeatedStringForIndices + `,`, - `}`, - }, "") - return s -} -func (this *NamedGenericResource) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&NamedGenericResource{`, - `Kind:` + fmt.Sprintf("%v", this.Kind) + `,`, - `Value:` + fmt.Sprintf("%v", this.Value) + `,`, - `}`, - }, "") - return s -} -func (this *DiscreteGenericResource) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&DiscreteGenericResource{`, - `Kind:` + fmt.Sprintf("%v", this.Kind) + `,`, - `Value:` + fmt.Sprintf("%v", this.Value) + `,`, - `}`, - }, "") - return s -} -func (this *GenericResource) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&GenericResource{`, - `Resource:` + fmt.Sprintf("%v", this.Resource) + `,`, - `}`, - }, "") - return s -} -func (this *GenericResource_NamedResourceSpec) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&GenericResource_NamedResourceSpec{`, - `NamedResourceSpec:` + strings.Replace(fmt.Sprintf("%v", this.NamedResourceSpec), "NamedGenericResource", "NamedGenericResource", 1) + `,`, - `}`, - }, "") - return s -} -func (this *GenericResource_DiscreteResourceSpec) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&GenericResource_DiscreteResourceSpec{`, - `DiscreteResourceSpec:` + strings.Replace(fmt.Sprintf("%v", this.DiscreteResourceSpec), "DiscreteGenericResource", "DiscreteGenericResource", 1) + `,`, - `}`, - }, "") - return s -} -func (this *Resources) String() string { - if this == nil { - return "nil" - } - repeatedStringForGeneric := "[]*GenericResource{" - for _, f := range this.Generic { - repeatedStringForGeneric += strings.Replace(f.String(), "GenericResource", "GenericResource", 1) + "," - } - repeatedStringForGeneric += "}" - s := strings.Join([]string{`&Resources{`, - `NanoCPUs:` + fmt.Sprintf("%v", this.NanoCPUs) + `,`, - `MemoryBytes:` + fmt.Sprintf("%v", this.MemoryBytes) + `,`, - `Generic:` + repeatedStringForGeneric + `,`, - `}`, - }, "") - return s -} -func (this *ResourceRequirements) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&ResourceRequirements{`, - `Limits:` + strings.Replace(this.Limits.String(), "Resources", "Resources", 1) + `,`, - `Reservations:` + strings.Replace(this.Reservations.String(), "Resources", "Resources", 1) + `,`, - `SwapBytes:` + strings.Replace(fmt.Sprintf("%v", this.SwapBytes), "Int64Value", "types.Int64Value", 1) + `,`, - `MemorySwappiness:` + strings.Replace(fmt.Sprintf("%v", this.MemorySwappiness), "Int64Value", "types.Int64Value", 1) + `,`, - `}`, - }, "") - return s -} -func (this *Platform) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&Platform{`, - `Architecture:` + fmt.Sprintf("%v", this.Architecture) + `,`, - `OS:` + fmt.Sprintf("%v", this.OS) + `,`, - `}`, - }, "") - return s -} -func (this *PluginDescription) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&PluginDescription{`, - `Type:` + fmt.Sprintf("%v", this.Type) + `,`, - `Name:` + fmt.Sprintf("%v", this.Name) + `,`, - `}`, - }, "") - return s -} -func (this *EngineDescription) String() string { - if this == nil { - return "nil" - } - repeatedStringForPlugins := "[]PluginDescription{" - for _, f := range this.Plugins { - repeatedStringForPlugins += strings.Replace(strings.Replace(f.String(), "PluginDescription", "PluginDescription", 1), `&`, ``, 1) + "," - } - repeatedStringForPlugins += "}" - keysForLabels := make([]string, 0, len(this.Labels)) - for k, _ := range this.Labels { - keysForLabels = append(keysForLabels, k) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForLabels) - mapStringForLabels := "map[string]string{" - for _, k := range keysForLabels { - mapStringForLabels += fmt.Sprintf("%v: %v,", k, this.Labels[k]) - } - mapStringForLabels += "}" - s := strings.Join([]string{`&EngineDescription{`, - `EngineVersion:` + fmt.Sprintf("%v", this.EngineVersion) + `,`, - `Labels:` + mapStringForLabels + `,`, - `Plugins:` + repeatedStringForPlugins + `,`, - `}`, - }, "") - return s -} -func (this *NodeDescription) String() string { - if this == nil { - return "nil" - } - repeatedStringForCSIInfo := "[]*NodeCSIInfo{" - for _, f := range this.CSIInfo { - repeatedStringForCSIInfo += strings.Replace(f.String(), "NodeCSIInfo", "NodeCSIInfo", 1) + "," - } - repeatedStringForCSIInfo += "}" - s := strings.Join([]string{`&NodeDescription{`, - `Hostname:` + fmt.Sprintf("%v", this.Hostname) + `,`, - `Platform:` + strings.Replace(this.Platform.String(), "Platform", "Platform", 1) + `,`, - `Resources:` + strings.Replace(this.Resources.String(), "Resources", "Resources", 1) + `,`, - `Engine:` + strings.Replace(this.Engine.String(), "EngineDescription", "EngineDescription", 1) + `,`, - `TLSInfo:` + strings.Replace(this.TLSInfo.String(), "NodeTLSInfo", "NodeTLSInfo", 1) + `,`, - `FIPS:` + fmt.Sprintf("%v", this.FIPS) + `,`, - `CSIInfo:` + repeatedStringForCSIInfo + `,`, - `}`, - }, "") - return s -} -func (this *NodeTLSInfo) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&NodeTLSInfo{`, - `TrustRoot:` + fmt.Sprintf("%v", this.TrustRoot) + `,`, - `CertIssuerSubject:` + fmt.Sprintf("%v", this.CertIssuerSubject) + `,`, - `CertIssuerPublicKey:` + fmt.Sprintf("%v", this.CertIssuerPublicKey) + `,`, - `}`, - }, "") - return s -} -func (this *NodeCSIInfo) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&NodeCSIInfo{`, - `PluginName:` + fmt.Sprintf("%v", this.PluginName) + `,`, - `NodeID:` + fmt.Sprintf("%v", this.NodeID) + `,`, - `MaxVolumesPerNode:` + fmt.Sprintf("%v", this.MaxVolumesPerNode) + `,`, - `AccessibleTopology:` + strings.Replace(this.AccessibleTopology.String(), "Topology", "Topology", 1) + `,`, - `}`, - }, "") - return s -} -func (this *RaftMemberStatus) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&RaftMemberStatus{`, - `Leader:` + fmt.Sprintf("%v", this.Leader) + `,`, - `Reachability:` + fmt.Sprintf("%v", this.Reachability) + `,`, - `Message:` + fmt.Sprintf("%v", this.Message) + `,`, - `}`, - }, "") - return s -} -func (this *NodeStatus) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&NodeStatus{`, - `State:` + fmt.Sprintf("%v", this.State) + `,`, - `Message:` + fmt.Sprintf("%v", this.Message) + `,`, - `Addr:` + fmt.Sprintf("%v", this.Addr) + `,`, - `}`, - }, "") - return s -} -func (this *Image) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&Image{`, - `Reference:` + fmt.Sprintf("%v", this.Reference) + `,`, - `}`, - }, "") - return s -} -func (this *Mount) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&Mount{`, - `Type:` + fmt.Sprintf("%v", this.Type) + `,`, - `Source:` + fmt.Sprintf("%v", this.Source) + `,`, - `Target:` + fmt.Sprintf("%v", this.Target) + `,`, - `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, - `BindOptions:` + strings.Replace(fmt.Sprintf("%v", this.BindOptions), "Mount_BindOptions", "Mount_BindOptions", 1) + `,`, - `VolumeOptions:` + strings.Replace(fmt.Sprintf("%v", this.VolumeOptions), "Mount_VolumeOptions", "Mount_VolumeOptions", 1) + `,`, - `TmpfsOptions:` + strings.Replace(fmt.Sprintf("%v", this.TmpfsOptions), "Mount_TmpfsOptions", "Mount_TmpfsOptions", 1) + `,`, - `Consistency:` + fmt.Sprintf("%v", this.Consistency) + `,`, - `}`, - }, "") - return s -} -func (this *Mount_BindOptions) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&Mount_BindOptions{`, - `Propagation:` + fmt.Sprintf("%v", this.Propagation) + `,`, - `NonRecursive:` + fmt.Sprintf("%v", this.NonRecursive) + `,`, - `CreateMountpoint:` + fmt.Sprintf("%v", this.CreateMountpoint) + `,`, - `ReadOnlyNonRecursive:` + fmt.Sprintf("%v", this.ReadOnlyNonRecursive) + `,`, - `ReadOnlyForceRecursive:` + fmt.Sprintf("%v", this.ReadOnlyForceRecursive) + `,`, - `}`, - }, "") - return s -} -func (this *Mount_VolumeOptions) String() string { - if this == nil { - return "nil" - } - keysForLabels := make([]string, 0, len(this.Labels)) - for k, _ := range this.Labels { - keysForLabels = append(keysForLabels, k) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForLabels) - mapStringForLabels := "map[string]string{" - for _, k := range keysForLabels { - mapStringForLabels += fmt.Sprintf("%v: %v,", k, this.Labels[k]) - } - mapStringForLabels += "}" - s := strings.Join([]string{`&Mount_VolumeOptions{`, - `NoCopy:` + fmt.Sprintf("%v", this.NoCopy) + `,`, - `Labels:` + mapStringForLabels + `,`, - `DriverConfig:` + strings.Replace(this.DriverConfig.String(), "Driver", "Driver", 1) + `,`, - `Subpath:` + fmt.Sprintf("%v", this.Subpath) + `,`, - `}`, - }, "") - return s -} -func (this *Mount_TmpfsOptions) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&Mount_TmpfsOptions{`, - `SizeBytes:` + fmt.Sprintf("%v", this.SizeBytes) + `,`, - `Mode:` + fmt.Sprintf("%v", this.Mode) + `,`, - `Options:` + fmt.Sprintf("%v", this.Options) + `,`, - `}`, - }, "") - return s -} -func (this *RestartPolicy) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&RestartPolicy{`, - `Condition:` + fmt.Sprintf("%v", this.Condition) + `,`, - `Delay:` + strings.Replace(fmt.Sprintf("%v", this.Delay), "Duration", "types.Duration", 1) + `,`, - `MaxAttempts:` + fmt.Sprintf("%v", this.MaxAttempts) + `,`, - `Window:` + strings.Replace(fmt.Sprintf("%v", this.Window), "Duration", "types.Duration", 1) + `,`, - `}`, - }, "") - return s -} -func (this *UpdateConfig) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&UpdateConfig{`, - `Parallelism:` + fmt.Sprintf("%v", this.Parallelism) + `,`, - `Delay:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Delay), "Duration", "types.Duration", 1), `&`, ``, 1) + `,`, - `FailureAction:` + fmt.Sprintf("%v", this.FailureAction) + `,`, - `Monitor:` + strings.Replace(fmt.Sprintf("%v", this.Monitor), "Duration", "types.Duration", 1) + `,`, - `MaxFailureRatio:` + fmt.Sprintf("%v", this.MaxFailureRatio) + `,`, - `Order:` + fmt.Sprintf("%v", this.Order) + `,`, - `}`, - }, "") - return s -} -func (this *UpdateStatus) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&UpdateStatus{`, - `State:` + fmt.Sprintf("%v", this.State) + `,`, - `StartedAt:` + strings.Replace(fmt.Sprintf("%v", this.StartedAt), "Timestamp", "types.Timestamp", 1) + `,`, - `CompletedAt:` + strings.Replace(fmt.Sprintf("%v", this.CompletedAt), "Timestamp", "types.Timestamp", 1) + `,`, - `Message:` + fmt.Sprintf("%v", this.Message) + `,`, - `}`, - }, "") - return s -} -func (this *ContainerStatus) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&ContainerStatus{`, - `ContainerID:` + fmt.Sprintf("%v", this.ContainerID) + `,`, - `PID:` + fmt.Sprintf("%v", this.PID) + `,`, - `ExitCode:` + fmt.Sprintf("%v", this.ExitCode) + `,`, - `}`, - }, "") - return s -} -func (this *PortStatus) String() string { - if this == nil { - return "nil" - } - repeatedStringForPorts := "[]*PortConfig{" - for _, f := range this.Ports { - repeatedStringForPorts += strings.Replace(f.String(), "PortConfig", "PortConfig", 1) + "," - } - repeatedStringForPorts += "}" - s := strings.Join([]string{`&PortStatus{`, - `Ports:` + repeatedStringForPorts + `,`, - `}`, - }, "") - return s -} -func (this *TaskStatus) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&TaskStatus{`, - `Timestamp:` + strings.Replace(fmt.Sprintf("%v", this.Timestamp), "Timestamp", "types.Timestamp", 1) + `,`, - `State:` + fmt.Sprintf("%v", this.State) + `,`, - `Message:` + fmt.Sprintf("%v", this.Message) + `,`, - `Err:` + fmt.Sprintf("%v", this.Err) + `,`, - `RuntimeStatus:` + fmt.Sprintf("%v", this.RuntimeStatus) + `,`, - `PortStatus:` + strings.Replace(this.PortStatus.String(), "PortStatus", "PortStatus", 1) + `,`, - `AppliedBy:` + fmt.Sprintf("%v", this.AppliedBy) + `,`, - `AppliedAt:` + strings.Replace(fmt.Sprintf("%v", this.AppliedAt), "Timestamp", "types.Timestamp", 1) + `,`, - `}`, - }, "") - return s -} -func (this *TaskStatus_Container) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&TaskStatus_Container{`, - `Container:` + strings.Replace(fmt.Sprintf("%v", this.Container), "ContainerStatus", "ContainerStatus", 1) + `,`, - `}`, - }, "") - return s -} -func (this *NetworkAttachmentConfig) String() string { - if this == nil { - return "nil" - } - keysForDriverAttachmentOpts := make([]string, 0, len(this.DriverAttachmentOpts)) - for k, _ := range this.DriverAttachmentOpts { - keysForDriverAttachmentOpts = append(keysForDriverAttachmentOpts, k) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForDriverAttachmentOpts) - mapStringForDriverAttachmentOpts := "map[string]string{" - for _, k := range keysForDriverAttachmentOpts { - mapStringForDriverAttachmentOpts += fmt.Sprintf("%v: %v,", k, this.DriverAttachmentOpts[k]) - } - mapStringForDriverAttachmentOpts += "}" - s := strings.Join([]string{`&NetworkAttachmentConfig{`, - `Target:` + fmt.Sprintf("%v", this.Target) + `,`, - `Aliases:` + fmt.Sprintf("%v", this.Aliases) + `,`, - `Addresses:` + fmt.Sprintf("%v", this.Addresses) + `,`, - `DriverAttachmentOpts:` + mapStringForDriverAttachmentOpts + `,`, - `}`, - }, "") - return s -} -func (this *IPAMConfig) String() string { - if this == nil { - return "nil" - } - keysForReserved := make([]string, 0, len(this.Reserved)) - for k, _ := range this.Reserved { - keysForReserved = append(keysForReserved, k) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForReserved) - mapStringForReserved := "map[string]string{" - for _, k := range keysForReserved { - mapStringForReserved += fmt.Sprintf("%v: %v,", k, this.Reserved[k]) - } - mapStringForReserved += "}" - s := strings.Join([]string{`&IPAMConfig{`, - `Family:` + fmt.Sprintf("%v", this.Family) + `,`, - `Subnet:` + fmt.Sprintf("%v", this.Subnet) + `,`, - `Range:` + fmt.Sprintf("%v", this.Range) + `,`, - `Gateway:` + fmt.Sprintf("%v", this.Gateway) + `,`, - `Reserved:` + mapStringForReserved + `,`, - `}`, - }, "") - return s -} -func (this *PortConfig) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&PortConfig{`, - `Name:` + fmt.Sprintf("%v", this.Name) + `,`, - `Protocol:` + fmt.Sprintf("%v", this.Protocol) + `,`, - `TargetPort:` + fmt.Sprintf("%v", this.TargetPort) + `,`, - `PublishedPort:` + fmt.Sprintf("%v", this.PublishedPort) + `,`, - `PublishMode:` + fmt.Sprintf("%v", this.PublishMode) + `,`, - `}`, - }, "") - return s -} -func (this *Driver) String() string { - if this == nil { - return "nil" - } - keysForOptions := make([]string, 0, len(this.Options)) - for k, _ := range this.Options { - keysForOptions = append(keysForOptions, k) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForOptions) - mapStringForOptions := "map[string]string{" - for _, k := range keysForOptions { - mapStringForOptions += fmt.Sprintf("%v: %v,", k, this.Options[k]) - } - mapStringForOptions += "}" - s := strings.Join([]string{`&Driver{`, - `Name:` + fmt.Sprintf("%v", this.Name) + `,`, - `Options:` + mapStringForOptions + `,`, - `}`, - }, "") - return s -} -func (this *IPAMOptions) String() string { - if this == nil { - return "nil" - } - repeatedStringForConfigs := "[]*IPAMConfig{" - for _, f := range this.Configs { - repeatedStringForConfigs += strings.Replace(f.String(), "IPAMConfig", "IPAMConfig", 1) + "," - } - repeatedStringForConfigs += "}" - s := strings.Join([]string{`&IPAMOptions{`, - `Driver:` + strings.Replace(this.Driver.String(), "Driver", "Driver", 1) + `,`, - `Configs:` + repeatedStringForConfigs + `,`, - `}`, - }, "") - return s -} -func (this *Peer) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&Peer{`, - `NodeID:` + fmt.Sprintf("%v", this.NodeID) + `,`, - `Addr:` + fmt.Sprintf("%v", this.Addr) + `,`, - `}`, - }, "") - return s -} -func (this *WeightedPeer) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&WeightedPeer{`, - `Peer:` + strings.Replace(this.Peer.String(), "Peer", "Peer", 1) + `,`, - `Weight:` + fmt.Sprintf("%v", this.Weight) + `,`, - `}`, - }, "") - return s -} -func (this *IssuanceStatus) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&IssuanceStatus{`, - `State:` + fmt.Sprintf("%v", this.State) + `,`, - `Err:` + fmt.Sprintf("%v", this.Err) + `,`, - `}`, - }, "") - return s -} -func (this *AcceptancePolicy) String() string { - if this == nil { - return "nil" - } - repeatedStringForPolicies := "[]*AcceptancePolicy_RoleAdmissionPolicy{" - for _, f := range this.Policies { - repeatedStringForPolicies += strings.Replace(fmt.Sprintf("%v", f), "AcceptancePolicy_RoleAdmissionPolicy", "AcceptancePolicy_RoleAdmissionPolicy", 1) + "," - } - repeatedStringForPolicies += "}" - s := strings.Join([]string{`&AcceptancePolicy{`, - `Policies:` + repeatedStringForPolicies + `,`, - `}`, - }, "") - return s -} -func (this *AcceptancePolicy_RoleAdmissionPolicy) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&AcceptancePolicy_RoleAdmissionPolicy{`, - `Role:` + fmt.Sprintf("%v", this.Role) + `,`, - `Autoaccept:` + fmt.Sprintf("%v", this.Autoaccept) + `,`, - `Secret:` + strings.Replace(fmt.Sprintf("%v", this.Secret), "AcceptancePolicy_RoleAdmissionPolicy_Secret", "AcceptancePolicy_RoleAdmissionPolicy_Secret", 1) + `,`, - `}`, - }, "") - return s -} -func (this *AcceptancePolicy_RoleAdmissionPolicy_Secret) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&AcceptancePolicy_RoleAdmissionPolicy_Secret{`, - `Data:` + fmt.Sprintf("%v", this.Data) + `,`, - `Alg:` + fmt.Sprintf("%v", this.Alg) + `,`, - `}`, - }, "") - return s -} -func (this *ExternalCA) String() string { - if this == nil { - return "nil" - } - keysForOptions := make([]string, 0, len(this.Options)) - for k, _ := range this.Options { - keysForOptions = append(keysForOptions, k) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForOptions) - mapStringForOptions := "map[string]string{" - for _, k := range keysForOptions { - mapStringForOptions += fmt.Sprintf("%v: %v,", k, this.Options[k]) - } - mapStringForOptions += "}" - s := strings.Join([]string{`&ExternalCA{`, - `Protocol:` + fmt.Sprintf("%v", this.Protocol) + `,`, - `URL:` + fmt.Sprintf("%v", this.URL) + `,`, - `Options:` + mapStringForOptions + `,`, - `CACert:` + fmt.Sprintf("%v", this.CACert) + `,`, - `}`, - }, "") - return s -} -func (this *CAConfig) String() string { - if this == nil { - return "nil" - } - repeatedStringForExternalCAs := "[]*ExternalCA{" - for _, f := range this.ExternalCAs { - repeatedStringForExternalCAs += strings.Replace(f.String(), "ExternalCA", "ExternalCA", 1) + "," - } - repeatedStringForExternalCAs += "}" - s := strings.Join([]string{`&CAConfig{`, - `NodeCertExpiry:` + strings.Replace(fmt.Sprintf("%v", this.NodeCertExpiry), "Duration", "types.Duration", 1) + `,`, - `ExternalCAs:` + repeatedStringForExternalCAs + `,`, - `SigningCACert:` + fmt.Sprintf("%v", this.SigningCACert) + `,`, - `SigningCAKey:` + fmt.Sprintf("%v", this.SigningCAKey) + `,`, - `ForceRotate:` + fmt.Sprintf("%v", this.ForceRotate) + `,`, - `}`, - }, "") - return s -} -func (this *OrchestrationConfig) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&OrchestrationConfig{`, - `TaskHistoryRetentionLimit:` + fmt.Sprintf("%v", this.TaskHistoryRetentionLimit) + `,`, - `}`, - }, "") - return s -} -func (this *TaskDefaults) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&TaskDefaults{`, - `LogDriver:` + strings.Replace(this.LogDriver.String(), "Driver", "Driver", 1) + `,`, - `}`, - }, "") - return s -} -func (this *DispatcherConfig) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&DispatcherConfig{`, - `HeartbeatPeriod:` + strings.Replace(fmt.Sprintf("%v", this.HeartbeatPeriod), "Duration", "types.Duration", 1) + `,`, - `}`, - }, "") - return s -} -func (this *RaftConfig) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&RaftConfig{`, - `SnapshotInterval:` + fmt.Sprintf("%v", this.SnapshotInterval) + `,`, - `KeepOldSnapshots:` + fmt.Sprintf("%v", this.KeepOldSnapshots) + `,`, - `LogEntriesForSlowFollowers:` + fmt.Sprintf("%v", this.LogEntriesForSlowFollowers) + `,`, - `HeartbeatTick:` + fmt.Sprintf("%v", this.HeartbeatTick) + `,`, - `ElectionTick:` + fmt.Sprintf("%v", this.ElectionTick) + `,`, - `}`, - }, "") - return s -} -func (this *EncryptionConfig) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&EncryptionConfig{`, - `AutoLockManagers:` + fmt.Sprintf("%v", this.AutoLockManagers) + `,`, - `}`, - }, "") - return s -} -func (this *SpreadOver) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&SpreadOver{`, - `SpreadDescriptor:` + fmt.Sprintf("%v", this.SpreadDescriptor) + `,`, - `}`, - }, "") - return s -} -func (this *PlacementPreference) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&PlacementPreference{`, - `Preference:` + fmt.Sprintf("%v", this.Preference) + `,`, - `}`, - }, "") - return s -} -func (this *PlacementPreference_Spread) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&PlacementPreference_Spread{`, - `Spread:` + strings.Replace(fmt.Sprintf("%v", this.Spread), "SpreadOver", "SpreadOver", 1) + `,`, - `}`, - }, "") - return s -} -func (this *Placement) String() string { - if this == nil { - return "nil" - } - repeatedStringForPreferences := "[]*PlacementPreference{" - for _, f := range this.Preferences { - repeatedStringForPreferences += strings.Replace(f.String(), "PlacementPreference", "PlacementPreference", 1) + "," - } - repeatedStringForPreferences += "}" - repeatedStringForPlatforms := "[]*Platform{" - for _, f := range this.Platforms { - repeatedStringForPlatforms += strings.Replace(f.String(), "Platform", "Platform", 1) + "," - } - repeatedStringForPlatforms += "}" - s := strings.Join([]string{`&Placement{`, - `Constraints:` + fmt.Sprintf("%v", this.Constraints) + `,`, - `Preferences:` + repeatedStringForPreferences + `,`, - `Platforms:` + repeatedStringForPlatforms + `,`, - `MaxReplicas:` + fmt.Sprintf("%v", this.MaxReplicas) + `,`, - `}`, - }, "") - return s -} -func (this *JoinTokens) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&JoinTokens{`, - `Worker:` + fmt.Sprintf("%v", this.Worker) + `,`, - `Manager:` + fmt.Sprintf("%v", this.Manager) + `,`, - `}`, - }, "") - return s -} -func (this *RootCA) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&RootCA{`, - `CAKey:` + fmt.Sprintf("%v", this.CAKey) + `,`, - `CACert:` + fmt.Sprintf("%v", this.CACert) + `,`, - `CACertHash:` + fmt.Sprintf("%v", this.CACertHash) + `,`, - `JoinTokens:` + strings.Replace(strings.Replace(this.JoinTokens.String(), "JoinTokens", "JoinTokens", 1), `&`, ``, 1) + `,`, - `RootRotation:` + strings.Replace(this.RootRotation.String(), "RootRotation", "RootRotation", 1) + `,`, - `LastForcedRotation:` + fmt.Sprintf("%v", this.LastForcedRotation) + `,`, - `}`, - }, "") - return s -} -func (this *Certificate) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&Certificate{`, - `Role:` + fmt.Sprintf("%v", this.Role) + `,`, - `CSR:` + fmt.Sprintf("%v", this.CSR) + `,`, - `Status:` + strings.Replace(strings.Replace(this.Status.String(), "IssuanceStatus", "IssuanceStatus", 1), `&`, ``, 1) + `,`, - `Certificate:` + fmt.Sprintf("%v", this.Certificate) + `,`, - `CN:` + fmt.Sprintf("%v", this.CN) + `,`, - `}`, - }, "") - return s -} -func (this *EncryptionKey) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&EncryptionKey{`, - `Subsystem:` + fmt.Sprintf("%v", this.Subsystem) + `,`, - `Algorithm:` + fmt.Sprintf("%v", this.Algorithm) + `,`, - `Key:` + fmt.Sprintf("%v", this.Key) + `,`, - `LamportTime:` + fmt.Sprintf("%v", this.LamportTime) + `,`, - `}`, - }, "") - return s -} -func (this *ManagerStatus) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&ManagerStatus{`, - `RaftID:` + fmt.Sprintf("%v", this.RaftID) + `,`, - `Addr:` + fmt.Sprintf("%v", this.Addr) + `,`, - `Leader:` + fmt.Sprintf("%v", this.Leader) + `,`, - `Reachability:` + fmt.Sprintf("%v", this.Reachability) + `,`, - `}`, - }, "") - return s -} -func (this *FileTarget) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&FileTarget{`, - `Name:` + fmt.Sprintf("%v", this.Name) + `,`, - `UID:` + fmt.Sprintf("%v", this.UID) + `,`, - `GID:` + fmt.Sprintf("%v", this.GID) + `,`, - `Mode:` + fmt.Sprintf("%v", this.Mode) + `,`, - `}`, - }, "") - return s -} -func (this *RuntimeTarget) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&RuntimeTarget{`, - `}`, - }, "") - return s -} -func (this *SecretReference) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&SecretReference{`, - `SecretID:` + fmt.Sprintf("%v", this.SecretID) + `,`, - `SecretName:` + fmt.Sprintf("%v", this.SecretName) + `,`, - `Target:` + fmt.Sprintf("%v", this.Target) + `,`, - `}`, - }, "") - return s -} -func (this *SecretReference_File) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&SecretReference_File{`, - `File:` + strings.Replace(fmt.Sprintf("%v", this.File), "FileTarget", "FileTarget", 1) + `,`, - `}`, - }, "") - return s -} -func (this *ConfigReference) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&ConfigReference{`, - `ConfigID:` + fmt.Sprintf("%v", this.ConfigID) + `,`, - `ConfigName:` + fmt.Sprintf("%v", this.ConfigName) + `,`, - `Target:` + fmt.Sprintf("%v", this.Target) + `,`, - `}`, - }, "") - return s -} -func (this *ConfigReference_File) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&ConfigReference_File{`, - `File:` + strings.Replace(fmt.Sprintf("%v", this.File), "FileTarget", "FileTarget", 1) + `,`, - `}`, - }, "") - return s -} -func (this *ConfigReference_Runtime) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&ConfigReference_Runtime{`, - `Runtime:` + strings.Replace(fmt.Sprintf("%v", this.Runtime), "RuntimeTarget", "RuntimeTarget", 1) + `,`, - `}`, - }, "") - return s -} -func (this *BlacklistedCertificate) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&BlacklistedCertificate{`, - `Expiry:` + strings.Replace(fmt.Sprintf("%v", this.Expiry), "Timestamp", "types.Timestamp", 1) + `,`, - `}`, - }, "") - return s -} -func (this *HealthConfig) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&HealthConfig{`, - `Test:` + fmt.Sprintf("%v", this.Test) + `,`, - `Interval:` + strings.Replace(fmt.Sprintf("%v", this.Interval), "Duration", "types.Duration", 1) + `,`, - `Timeout:` + strings.Replace(fmt.Sprintf("%v", this.Timeout), "Duration", "types.Duration", 1) + `,`, - `Retries:` + fmt.Sprintf("%v", this.Retries) + `,`, - `StartPeriod:` + strings.Replace(fmt.Sprintf("%v", this.StartPeriod), "Duration", "types.Duration", 1) + `,`, - `StartInterval:` + strings.Replace(fmt.Sprintf("%v", this.StartInterval), "Duration", "types.Duration", 1) + `,`, - `}`, - }, "") - return s -} -func (this *MaybeEncryptedRecord) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&MaybeEncryptedRecord{`, - `Algorithm:` + fmt.Sprintf("%v", this.Algorithm) + `,`, - `Data:` + fmt.Sprintf("%v", this.Data) + `,`, - `Nonce:` + fmt.Sprintf("%v", this.Nonce) + `,`, - `}`, - }, "") - return s -} -func (this *RootRotation) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&RootRotation{`, - `CACert:` + fmt.Sprintf("%v", this.CACert) + `,`, - `CAKey:` + fmt.Sprintf("%v", this.CAKey) + `,`, - `CrossSignedCACert:` + fmt.Sprintf("%v", this.CrossSignedCACert) + `,`, - `}`, - }, "") - return s -} -func (this *Privileges) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&Privileges{`, - `CredentialSpec:` + strings.Replace(fmt.Sprintf("%v", this.CredentialSpec), "Privileges_CredentialSpec", "Privileges_CredentialSpec", 1) + `,`, - `SELinuxContext:` + strings.Replace(fmt.Sprintf("%v", this.SELinuxContext), "Privileges_SELinuxContext", "Privileges_SELinuxContext", 1) + `,`, - `Seccomp:` + strings.Replace(fmt.Sprintf("%v", this.Seccomp), "Privileges_SeccompOpts", "Privileges_SeccompOpts", 1) + `,`, - `Apparmor:` + strings.Replace(fmt.Sprintf("%v", this.Apparmor), "Privileges_AppArmorOpts", "Privileges_AppArmorOpts", 1) + `,`, - `NoNewPrivileges:` + fmt.Sprintf("%v", this.NoNewPrivileges) + `,`, - `}`, - }, "") - return s -} -func (this *Privileges_CredentialSpec) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&Privileges_CredentialSpec{`, - `Source:` + fmt.Sprintf("%v", this.Source) + `,`, - `}`, - }, "") - return s -} -func (this *Privileges_CredentialSpec_File) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&Privileges_CredentialSpec_File{`, - `File:` + fmt.Sprintf("%v", this.File) + `,`, - `}`, - }, "") - return s -} -func (this *Privileges_CredentialSpec_Registry) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&Privileges_CredentialSpec_Registry{`, - `Registry:` + fmt.Sprintf("%v", this.Registry) + `,`, - `}`, - }, "") - return s -} -func (this *Privileges_CredentialSpec_Config) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&Privileges_CredentialSpec_Config{`, - `Config:` + fmt.Sprintf("%v", this.Config) + `,`, - `}`, - }, "") - return s -} -func (this *Privileges_SELinuxContext) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&Privileges_SELinuxContext{`, - `Disable:` + fmt.Sprintf("%v", this.Disable) + `,`, - `User:` + fmt.Sprintf("%v", this.User) + `,`, - `Role:` + fmt.Sprintf("%v", this.Role) + `,`, - `Type:` + fmt.Sprintf("%v", this.Type) + `,`, - `Level:` + fmt.Sprintf("%v", this.Level) + `,`, - `}`, - }, "") - return s -} -func (this *Privileges_SeccompOpts) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&Privileges_SeccompOpts{`, - `Mode:` + fmt.Sprintf("%v", this.Mode) + `,`, - `Profile:` + fmt.Sprintf("%v", this.Profile) + `,`, - `}`, - }, "") - return s -} -func (this *Privileges_AppArmorOpts) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&Privileges_AppArmorOpts{`, - `Mode:` + fmt.Sprintf("%v", this.Mode) + `,`, - `}`, - }, "") - return s -} -func (this *JobStatus) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&JobStatus{`, - `JobIteration:` + strings.Replace(strings.Replace(this.JobIteration.String(), "Version", "Version", 1), `&`, ``, 1) + `,`, - `LastExecution:` + strings.Replace(fmt.Sprintf("%v", this.LastExecution), "Timestamp", "types.Timestamp", 1) + `,`, - `}`, - }, "") - return s -} -func (this *VolumeAccessMode) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&VolumeAccessMode{`, - `Scope:` + fmt.Sprintf("%v", this.Scope) + `,`, - `Sharing:` + fmt.Sprintf("%v", this.Sharing) + `,`, - `AccessType:` + fmt.Sprintf("%v", this.AccessType) + `,`, - `}`, - }, "") - return s -} -func (this *VolumeAccessMode_Block) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&VolumeAccessMode_Block{`, - `Block:` + strings.Replace(fmt.Sprintf("%v", this.Block), "VolumeAccessMode_BlockVolume", "VolumeAccessMode_BlockVolume", 1) + `,`, - `}`, - }, "") - return s -} -func (this *VolumeAccessMode_Mount) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&VolumeAccessMode_Mount{`, - `Mount:` + strings.Replace(fmt.Sprintf("%v", this.Mount), "VolumeAccessMode_MountVolume", "VolumeAccessMode_MountVolume", 1) + `,`, - `}`, - }, "") - return s -} -func (this *VolumeAccessMode_BlockVolume) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&VolumeAccessMode_BlockVolume{`, - `}`, - }, "") - return s -} -func (this *VolumeAccessMode_MountVolume) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&VolumeAccessMode_MountVolume{`, - `FsType:` + fmt.Sprintf("%v", this.FsType) + `,`, - `MountFlags:` + fmt.Sprintf("%v", this.MountFlags) + `,`, - `}`, - }, "") - return s -} -func (this *VolumeSecret) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&VolumeSecret{`, - `Key:` + fmt.Sprintf("%v", this.Key) + `,`, - `Secret:` + fmt.Sprintf("%v", this.Secret) + `,`, - `}`, - }, "") - return s -} -func (this *VolumePublishStatus) String() string { - if this == nil { - return "nil" - } - keysForPublishContext := make([]string, 0, len(this.PublishContext)) - for k, _ := range this.PublishContext { - keysForPublishContext = append(keysForPublishContext, k) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForPublishContext) - mapStringForPublishContext := "map[string]string{" - for _, k := range keysForPublishContext { - mapStringForPublishContext += fmt.Sprintf("%v: %v,", k, this.PublishContext[k]) - } - mapStringForPublishContext += "}" - s := strings.Join([]string{`&VolumePublishStatus{`, - `NodeID:` + fmt.Sprintf("%v", this.NodeID) + `,`, - `State:` + fmt.Sprintf("%v", this.State) + `,`, - `PublishContext:` + mapStringForPublishContext + `,`, - `Message:` + fmt.Sprintf("%v", this.Message) + `,`, - `}`, - }, "") - return s -} -func (this *VolumeInfo) String() string { - if this == nil { - return "nil" - } - repeatedStringForAccessibleTopology := "[]*Topology{" - for _, f := range this.AccessibleTopology { - repeatedStringForAccessibleTopology += strings.Replace(f.String(), "Topology", "Topology", 1) + "," - } - repeatedStringForAccessibleTopology += "}" - keysForVolumeContext := make([]string, 0, len(this.VolumeContext)) - for k, _ := range this.VolumeContext { - keysForVolumeContext = append(keysForVolumeContext, k) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForVolumeContext) - mapStringForVolumeContext := "map[string]string{" - for _, k := range keysForVolumeContext { - mapStringForVolumeContext += fmt.Sprintf("%v: %v,", k, this.VolumeContext[k]) - } - mapStringForVolumeContext += "}" - s := strings.Join([]string{`&VolumeInfo{`, - `CapacityBytes:` + fmt.Sprintf("%v", this.CapacityBytes) + `,`, - `VolumeContext:` + mapStringForVolumeContext + `,`, - `VolumeID:` + fmt.Sprintf("%v", this.VolumeID) + `,`, - `AccessibleTopology:` + repeatedStringForAccessibleTopology + `,`, - `}`, - }, "") - return s -} -func (this *CapacityRange) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&CapacityRange{`, - `RequiredBytes:` + fmt.Sprintf("%v", this.RequiredBytes) + `,`, - `LimitBytes:` + fmt.Sprintf("%v", this.LimitBytes) + `,`, - `}`, - }, "") - return s -} -func (this *VolumeAssignment) String() string { - if this == nil { - return "nil" - } - repeatedStringForSecrets := "[]*VolumeSecret{" - for _, f := range this.Secrets { - repeatedStringForSecrets += strings.Replace(f.String(), "VolumeSecret", "VolumeSecret", 1) + "," - } - repeatedStringForSecrets += "}" - keysForVolumeContext := make([]string, 0, len(this.VolumeContext)) - for k, _ := range this.VolumeContext { - keysForVolumeContext = append(keysForVolumeContext, k) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForVolumeContext) - mapStringForVolumeContext := "map[string]string{" - for _, k := range keysForVolumeContext { - mapStringForVolumeContext += fmt.Sprintf("%v: %v,", k, this.VolumeContext[k]) - } - mapStringForVolumeContext += "}" - keysForPublishContext := make([]string, 0, len(this.PublishContext)) - for k, _ := range this.PublishContext { - keysForPublishContext = append(keysForPublishContext, k) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForPublishContext) - mapStringForPublishContext := "map[string]string{" - for _, k := range keysForPublishContext { - mapStringForPublishContext += fmt.Sprintf("%v: %v,", k, this.PublishContext[k]) - } - mapStringForPublishContext += "}" - s := strings.Join([]string{`&VolumeAssignment{`, - `ID:` + fmt.Sprintf("%v", this.ID) + `,`, - `VolumeID:` + fmt.Sprintf("%v", this.VolumeID) + `,`, - `Driver:` + strings.Replace(this.Driver.String(), "Driver", "Driver", 1) + `,`, - `VolumeContext:` + mapStringForVolumeContext + `,`, - `PublishContext:` + mapStringForPublishContext + `,`, - `AccessMode:` + strings.Replace(this.AccessMode.String(), "VolumeAccessMode", "VolumeAccessMode", 1) + `,`, - `Secrets:` + repeatedStringForSecrets + `,`, - `}`, - }, "") - return s -} -func (this *VolumeAttachment) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&VolumeAttachment{`, - `ID:` + fmt.Sprintf("%v", this.ID) + `,`, - `Source:` + fmt.Sprintf("%v", this.Source) + `,`, - `Target:` + fmt.Sprintf("%v", this.Target) + `,`, - `}`, - }, "") - return s -} -func (this *TopologyRequirement) String() string { - if this == nil { - return "nil" - } - repeatedStringForRequisite := "[]*Topology{" - for _, f := range this.Requisite { - repeatedStringForRequisite += strings.Replace(f.String(), "Topology", "Topology", 1) + "," - } - repeatedStringForRequisite += "}" - repeatedStringForPreferred := "[]*Topology{" - for _, f := range this.Preferred { - repeatedStringForPreferred += strings.Replace(f.String(), "Topology", "Topology", 1) + "," - } - repeatedStringForPreferred += "}" - s := strings.Join([]string{`&TopologyRequirement{`, - `Requisite:` + repeatedStringForRequisite + `,`, - `Preferred:` + repeatedStringForPreferred + `,`, - `}`, - }, "") - return s -} -func (this *Topology) String() string { - if this == nil { - return "nil" - } - keysForSegments := make([]string, 0, len(this.Segments)) - for k, _ := range this.Segments { - keysForSegments = append(keysForSegments, k) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForSegments) - mapStringForSegments := "map[string]string{" - for _, k := range keysForSegments { - mapStringForSegments += fmt.Sprintf("%v: %v,", k, this.Segments[k]) - } - mapStringForSegments += "}" - s := strings.Join([]string{`&Topology{`, - `Segments:` + mapStringForSegments + `,`, - `}`, - }, "") - return s -} -func (this *VolumeCapability) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&VolumeCapability{`, - `AccessType:` + fmt.Sprintf("%v", this.AccessType) + `,`, - `AccessMode:` + strings.Replace(fmt.Sprintf("%v", this.AccessMode), "VolumeCapability_AccessMode", "VolumeCapability_AccessMode", 1) + `,`, - `}`, - }, "") - return s -} -func (this *VolumeCapability_Block) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&VolumeCapability_Block{`, - `Block:` + strings.Replace(fmt.Sprintf("%v", this.Block), "VolumeCapability_BlockVolume", "VolumeCapability_BlockVolume", 1) + `,`, - `}`, - }, "") - return s -} -func (this *VolumeCapability_Mount) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&VolumeCapability_Mount{`, - `Mount:` + strings.Replace(fmt.Sprintf("%v", this.Mount), "VolumeCapability_MountVolume", "VolumeCapability_MountVolume", 1) + `,`, - `}`, - }, "") - return s -} -func (this *VolumeCapability_BlockVolume) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&VolumeCapability_BlockVolume{`, - `}`, - }, "") - return s -} -func (this *VolumeCapability_MountVolume) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&VolumeCapability_MountVolume{`, - `FsType:` + fmt.Sprintf("%v", this.FsType) + `,`, - `MountFlags:` + fmt.Sprintf("%v", this.MountFlags) + `,`, - `}`, - }, "") - return s -} -func (this *VolumeCapability_AccessMode) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&VolumeCapability_AccessMode{`, - `Mode:` + fmt.Sprintf("%v", this.Mode) + `,`, - `}`, - }, "") - return s -} -func valueToStringTypes(v interface{}) string { - rv := reflect.ValueOf(v) - if rv.IsNil() { - return "nil" - } - pv := reflect.Indirect(rv).Interface() - return fmt.Sprintf("*%v", pv) -} -func (m *Version) 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 ErrIntOverflowTypes - } - 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: Version: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Version: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Index", wireType) - } - m.Index = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Index |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *IndexEntry) 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 ErrIntOverflowTypes - } - 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: IndexEntry: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: IndexEntry: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Key = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Val", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Val = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Annotations) 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 ErrIntOverflowTypes - } - 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: Annotations: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Annotations: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Name = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Labels", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Labels == nil { - m.Labels = make(map[string]string) - } - var mapkey string - var mapvalue string - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { - return ErrInvalidLengthTypes - } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey < 0 { - return ErrInvalidLengthTypes - } - if postStringIndexmapkey > l { - return io.ErrUnexpectedEOF - } - mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - } else if fieldNum == 2 { - var stringLenmapvalue uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapvalue |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapvalue := int(stringLenmapvalue) - if intStringLenmapvalue < 0 { - return ErrInvalidLengthTypes - } - postStringIndexmapvalue := iNdEx + intStringLenmapvalue - if postStringIndexmapvalue < 0 { - return ErrInvalidLengthTypes - } - if postStringIndexmapvalue > l { - return io.ErrUnexpectedEOF - } - mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) - iNdEx = postStringIndexmapvalue - } else { - iNdEx = entryPreIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - m.Labels[mapkey] = mapvalue - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Indices", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Indices = append(m.Indices, IndexEntry{}) - if err := m.Indices[len(m.Indices)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *NamedGenericResource) 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 ErrIntOverflowTypes - } - 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: NamedGenericResource: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: NamedGenericResource: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Kind", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Kind = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Value = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *DiscreteGenericResource) 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 ErrIntOverflowTypes - } - 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: DiscreteGenericResource: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: DiscreteGenericResource: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Kind", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Kind = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) - } - m.Value = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Value |= int64(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *GenericResource) 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 ErrIntOverflowTypes - } - 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: GenericResource: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GenericResource: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NamedResourceSpec", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &NamedGenericResource{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.Resource = &GenericResource_NamedResourceSpec{v} - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DiscreteResourceSpec", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &DiscreteGenericResource{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.Resource = &GenericResource_DiscreteResourceSpec{v} - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Resources) 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 ErrIntOverflowTypes - } - 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: Resources: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Resources: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field NanoCPUs", wireType) - } - m.NanoCPUs = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.NanoCPUs |= int64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field MemoryBytes", wireType) - } - m.MemoryBytes = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.MemoryBytes |= int64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Generic", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Generic = append(m.Generic, &GenericResource{}) - if err := m.Generic[len(m.Generic)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ResourceRequirements) 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 ErrIntOverflowTypes - } - 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: ResourceRequirements: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ResourceRequirements: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Limits", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Limits == nil { - m.Limits = &Resources{} - } - if err := m.Limits.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Reservations", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Reservations == nil { - m.Reservations = &Resources{} - } - if err := m.Reservations.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SwapBytes", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.SwapBytes == nil { - m.SwapBytes = &types.Int64Value{} - } - if err := m.SwapBytes.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MemorySwappiness", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.MemorySwappiness == nil { - m.MemorySwappiness = &types.Int64Value{} - } - if err := m.MemorySwappiness.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Platform) 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 ErrIntOverflowTypes - } - 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: Platform: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Platform: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Architecture", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Architecture = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field OS", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.OS = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *PluginDescription) 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 ErrIntOverflowTypes - } - 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: PluginDescription: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: PluginDescription: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Type = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Name = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *EngineDescription) 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 ErrIntOverflowTypes - } - 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: EngineDescription: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: EngineDescription: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field EngineVersion", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.EngineVersion = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Labels", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Labels == nil { - m.Labels = make(map[string]string) - } - var mapkey string - var mapvalue string - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { - return ErrInvalidLengthTypes - } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey < 0 { - return ErrInvalidLengthTypes - } - if postStringIndexmapkey > l { - return io.ErrUnexpectedEOF - } - mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - } else if fieldNum == 2 { - var stringLenmapvalue uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapvalue |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapvalue := int(stringLenmapvalue) - if intStringLenmapvalue < 0 { - return ErrInvalidLengthTypes - } - postStringIndexmapvalue := iNdEx + intStringLenmapvalue - if postStringIndexmapvalue < 0 { - return ErrInvalidLengthTypes - } - if postStringIndexmapvalue > l { - return io.ErrUnexpectedEOF - } - mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) - iNdEx = postStringIndexmapvalue - } else { - iNdEx = entryPreIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - m.Labels[mapkey] = mapvalue - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Plugins", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Plugins = append(m.Plugins, PluginDescription{}) - if err := m.Plugins[len(m.Plugins)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *NodeDescription) 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 ErrIntOverflowTypes - } - 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: NodeDescription: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: NodeDescription: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Hostname", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Hostname = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Platform", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Platform == nil { - m.Platform = &Platform{} - } - if err := m.Platform.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Resources", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Resources == nil { - m.Resources = &Resources{} - } - if err := m.Resources.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Engine", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Engine == nil { - m.Engine = &EngineDescription{} - } - if err := m.Engine.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TLSInfo", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.TLSInfo == nil { - m.TLSInfo = &NodeTLSInfo{} - } - if err := m.TLSInfo.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 6: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field FIPS", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.FIPS = bool(v != 0) - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CSIInfo", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.CSIInfo = append(m.CSIInfo, &NodeCSIInfo{}) - if err := m.CSIInfo[len(m.CSIInfo)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *NodeTLSInfo) 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 ErrIntOverflowTypes - } - 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: NodeTLSInfo: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: NodeTLSInfo: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TrustRoot", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + byteLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.TrustRoot = append(m.TrustRoot[:0], dAtA[iNdEx:postIndex]...) - if m.TrustRoot == nil { - m.TrustRoot = []byte{} - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CertIssuerSubject", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + byteLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.CertIssuerSubject = append(m.CertIssuerSubject[:0], dAtA[iNdEx:postIndex]...) - if m.CertIssuerSubject == nil { - m.CertIssuerSubject = []byte{} - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CertIssuerPublicKey", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + byteLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.CertIssuerPublicKey = append(m.CertIssuerPublicKey[:0], dAtA[iNdEx:postIndex]...) - if m.CertIssuerPublicKey == nil { - m.CertIssuerPublicKey = []byte{} - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *NodeCSIInfo) 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 ErrIntOverflowTypes - } - 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: NodeCSIInfo: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: NodeCSIInfo: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PluginName", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.PluginName = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NodeID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.NodeID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field MaxVolumesPerNode", wireType) - } - m.MaxVolumesPerNode = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.MaxVolumesPerNode |= int64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AccessibleTopology", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.AccessibleTopology == nil { - m.AccessibleTopology = &Topology{} - } - if err := m.AccessibleTopology.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RaftMemberStatus) 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 ErrIntOverflowTypes - } - 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: RaftMemberStatus: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RaftMemberStatus: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Leader", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.Leader = bool(v != 0) - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Reachability", wireType) - } - m.Reachability = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Reachability |= RaftMemberStatus_Reachability(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Message = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *NodeStatus) 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 ErrIntOverflowTypes - } - 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: NodeStatus: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: NodeStatus: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field State", wireType) - } - m.State = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.State |= NodeStatus_State(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Message = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Addr", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Addr = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Image) 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 ErrIntOverflowTypes - } - 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: Image: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Image: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Reference", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Reference = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Mount) 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 ErrIntOverflowTypes - } - 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: Mount: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Mount: 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 ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Type |= Mount_MountType(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Source", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Source = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Target", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Target = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ReadOnly", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.ReadOnly = bool(v != 0) - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field BindOptions", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.BindOptions == nil { - m.BindOptions = &Mount_BindOptions{} - } - if err := m.BindOptions.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field VolumeOptions", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.VolumeOptions == nil { - m.VolumeOptions = &Mount_VolumeOptions{} - } - if err := m.VolumeOptions.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TmpfsOptions", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.TmpfsOptions == nil { - m.TmpfsOptions = &Mount_TmpfsOptions{} - } - if err := m.TmpfsOptions.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 8: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Consistency", wireType) - } - m.Consistency = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Consistency |= Mount_MountConsistency(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Mount_BindOptions) 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 ErrIntOverflowTypes - } - 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: BindOptions: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: BindOptions: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Propagation", wireType) - } - m.Propagation = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Propagation |= Mount_BindOptions_MountPropagation(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field NonRecursive", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.NonRecursive = bool(v != 0) - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field CreateMountpoint", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.CreateMountpoint = bool(v != 0) - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ReadOnlyNonRecursive", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.ReadOnlyNonRecursive = bool(v != 0) - case 5: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ReadOnlyForceRecursive", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.ReadOnlyForceRecursive = bool(v != 0) - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Mount_VolumeOptions) 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 ErrIntOverflowTypes - } - 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: VolumeOptions: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: VolumeOptions: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field NoCopy", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.NoCopy = bool(v != 0) - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Labels", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Labels == nil { - m.Labels = make(map[string]string) - } - var mapkey string - var mapvalue string - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { - return ErrInvalidLengthTypes - } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey < 0 { - return ErrInvalidLengthTypes - } - if postStringIndexmapkey > l { - return io.ErrUnexpectedEOF - } - mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - } else if fieldNum == 2 { - var stringLenmapvalue uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapvalue |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapvalue := int(stringLenmapvalue) - if intStringLenmapvalue < 0 { - return ErrInvalidLengthTypes - } - postStringIndexmapvalue := iNdEx + intStringLenmapvalue - if postStringIndexmapvalue < 0 { - return ErrInvalidLengthTypes - } - if postStringIndexmapvalue > l { - return io.ErrUnexpectedEOF - } - mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) - iNdEx = postStringIndexmapvalue - } else { - iNdEx = entryPreIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - m.Labels[mapkey] = mapvalue - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DriverConfig", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.DriverConfig == nil { - m.DriverConfig = &Driver{} - } - if err := m.DriverConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Subpath", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Subpath = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Mount_TmpfsOptions) 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 ErrIntOverflowTypes - } - 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: TmpfsOptions: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: TmpfsOptions: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field SizeBytes", wireType) - } - m.SizeBytes = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.SizeBytes |= int64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Mode", wireType) - } - m.Mode = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Mode |= os.FileMode(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Options", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Options = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RestartPolicy) 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 ErrIntOverflowTypes - } - 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: RestartPolicy: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RestartPolicy: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Condition", wireType) - } - m.Condition = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Condition |= RestartPolicy_RestartCondition(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Delay", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Delay == nil { - m.Delay = &types.Duration{} - } - if err := m.Delay.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field MaxAttempts", wireType) - } - m.MaxAttempts = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.MaxAttempts |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Window", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Window == nil { - m.Window = &types.Duration{} - } - if err := m.Window.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *UpdateConfig) 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 ErrIntOverflowTypes - } - 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: UpdateConfig: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: UpdateConfig: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Parallelism", wireType) - } - m.Parallelism = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Parallelism |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Delay", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(&m.Delay, dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field FailureAction", wireType) - } - m.FailureAction = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.FailureAction |= UpdateConfig_FailureAction(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Monitor", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Monitor == nil { - m.Monitor = &types.Duration{} - } - if err := m.Monitor.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: - if wireType != 5 { - return fmt.Errorf("proto: wrong wireType = %d for field MaxFailureRatio", wireType) - } - var v uint32 - if (iNdEx + 4) > l { - return io.ErrUnexpectedEOF - } - v = uint32(encoding_binary.LittleEndian.Uint32(dAtA[iNdEx:])) - iNdEx += 4 - m.MaxFailureRatio = float32(math.Float32frombits(v)) - case 6: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Order", wireType) - } - m.Order = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Order |= UpdateConfig_UpdateOrder(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *UpdateStatus) 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 ErrIntOverflowTypes - } - 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: UpdateStatus: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: UpdateStatus: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field State", wireType) - } - m.State = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.State |= UpdateStatus_UpdateState(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field StartedAt", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.StartedAt == nil { - m.StartedAt = &types.Timestamp{} - } - if err := m.StartedAt.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CompletedAt", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.CompletedAt == nil { - m.CompletedAt = &types.Timestamp{} - } - if err := m.CompletedAt.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Message = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ContainerStatus) 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 ErrIntOverflowTypes - } - 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: ContainerStatus: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ContainerStatus: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ContainerID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ContainerID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PID", wireType) - } - m.PID = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.PID |= int32(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ExitCode", wireType) - } - m.ExitCode = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ExitCode |= int32(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *PortStatus) 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 ErrIntOverflowTypes - } - 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: PortStatus: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: PortStatus: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Ports", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Ports = append(m.Ports, &PortConfig{}) - if err := m.Ports[len(m.Ports)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *TaskStatus) 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 ErrIntOverflowTypes - } - 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: TaskStatus: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: TaskStatus: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Timestamp", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Timestamp == nil { - m.Timestamp = &types.Timestamp{} - } - if err := m.Timestamp.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field State", wireType) - } - m.State = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.State |= TaskState(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Message = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Err", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Err = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Container", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &ContainerStatus{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.RuntimeStatus = &TaskStatus_Container{v} - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PortStatus", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.PortStatus == nil { - m.PortStatus = &PortStatus{} - } - if err := m.PortStatus.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AppliedBy", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.AppliedBy = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 8: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AppliedAt", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.AppliedAt == nil { - m.AppliedAt = &types.Timestamp{} - } - if err := m.AppliedAt.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *NetworkAttachmentConfig) 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 ErrIntOverflowTypes - } - 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: NetworkAttachmentConfig: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: NetworkAttachmentConfig: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Target", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Target = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Aliases", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Aliases = append(m.Aliases, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Addresses", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Addresses = append(m.Addresses, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DriverAttachmentOpts", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.DriverAttachmentOpts == nil { - m.DriverAttachmentOpts = make(map[string]string) - } - var mapkey string - var mapvalue string - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { - return ErrInvalidLengthTypes - } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey < 0 { - return ErrInvalidLengthTypes - } - if postStringIndexmapkey > l { - return io.ErrUnexpectedEOF - } - mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - } else if fieldNum == 2 { - var stringLenmapvalue uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapvalue |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapvalue := int(stringLenmapvalue) - if intStringLenmapvalue < 0 { - return ErrInvalidLengthTypes - } - postStringIndexmapvalue := iNdEx + intStringLenmapvalue - if postStringIndexmapvalue < 0 { - return ErrInvalidLengthTypes - } - if postStringIndexmapvalue > l { - return io.ErrUnexpectedEOF - } - mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) - iNdEx = postStringIndexmapvalue - } else { - iNdEx = entryPreIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - m.DriverAttachmentOpts[mapkey] = mapvalue - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *IPAMConfig) 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 ErrIntOverflowTypes - } - 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: IPAMConfig: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: IPAMConfig: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Family", wireType) - } - m.Family = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Family |= IPAMConfig_AddressFamily(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Subnet", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Subnet = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Range", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Range = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Gateway", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Gateway = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Reserved", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Reserved == nil { - m.Reserved = make(map[string]string) - } - var mapkey string - var mapvalue string - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { - return ErrInvalidLengthTypes - } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey < 0 { - return ErrInvalidLengthTypes - } - if postStringIndexmapkey > l { - return io.ErrUnexpectedEOF - } - mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - } else if fieldNum == 2 { - var stringLenmapvalue uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapvalue |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapvalue := int(stringLenmapvalue) - if intStringLenmapvalue < 0 { - return ErrInvalidLengthTypes - } - postStringIndexmapvalue := iNdEx + intStringLenmapvalue - if postStringIndexmapvalue < 0 { - return ErrInvalidLengthTypes - } - if postStringIndexmapvalue > l { - return io.ErrUnexpectedEOF - } - mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) - iNdEx = postStringIndexmapvalue - } else { - iNdEx = entryPreIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - m.Reserved[mapkey] = mapvalue - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *PortConfig) 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 ErrIntOverflowTypes - } - 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: PortConfig: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: PortConfig: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Name = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Protocol", wireType) - } - m.Protocol = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Protocol |= PortConfig_Protocol(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field TargetPort", wireType) - } - m.TargetPort = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.TargetPort |= uint32(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PublishedPort", wireType) - } - m.PublishedPort = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.PublishedPort |= uint32(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 5: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PublishMode", wireType) - } - m.PublishMode = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.PublishMode |= PortConfig_PublishMode(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Driver) 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 ErrIntOverflowTypes - } - 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: Driver: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Driver: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Name = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Options", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Options == nil { - m.Options = make(map[string]string) - } - var mapkey string - var mapvalue string - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { - return ErrInvalidLengthTypes - } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey < 0 { - return ErrInvalidLengthTypes - } - if postStringIndexmapkey > l { - return io.ErrUnexpectedEOF - } - mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - } else if fieldNum == 2 { - var stringLenmapvalue uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapvalue |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapvalue := int(stringLenmapvalue) - if intStringLenmapvalue < 0 { - return ErrInvalidLengthTypes - } - postStringIndexmapvalue := iNdEx + intStringLenmapvalue - if postStringIndexmapvalue < 0 { - return ErrInvalidLengthTypes - } - if postStringIndexmapvalue > l { - return io.ErrUnexpectedEOF - } - mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) - iNdEx = postStringIndexmapvalue - } else { - iNdEx = entryPreIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - m.Options[mapkey] = mapvalue - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *IPAMOptions) 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 ErrIntOverflowTypes - } - 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: IPAMOptions: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: IPAMOptions: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Driver", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Driver == nil { - m.Driver = &Driver{} - } - if err := m.Driver.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Configs", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Configs = append(m.Configs, &IPAMConfig{}) - if err := m.Configs[len(m.Configs)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Peer) 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 ErrIntOverflowTypes - } - 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: Peer: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Peer: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NodeID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.NodeID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Addr", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Addr = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *WeightedPeer) 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 ErrIntOverflowTypes - } - 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: WeightedPeer: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: WeightedPeer: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Peer", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Peer == nil { - m.Peer = &Peer{} - } - if err := m.Peer.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Weight", wireType) - } - m.Weight = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Weight |= int64(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *IssuanceStatus) 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 ErrIntOverflowTypes - } - 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: IssuanceStatus: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: IssuanceStatus: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field State", wireType) - } - m.State = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.State |= IssuanceStatus_State(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Err", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Err = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *AcceptancePolicy) 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 ErrIntOverflowTypes - } - 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: AcceptancePolicy: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: AcceptancePolicy: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Policies", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Policies = append(m.Policies, &AcceptancePolicy_RoleAdmissionPolicy{}) - if err := m.Policies[len(m.Policies)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *AcceptancePolicy_RoleAdmissionPolicy) 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 ErrIntOverflowTypes - } - 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: RoleAdmissionPolicy: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RoleAdmissionPolicy: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Role", wireType) - } - m.Role = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Role |= NodeRole(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Autoaccept", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.Autoaccept = bool(v != 0) - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Secret", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Secret == nil { - m.Secret = &AcceptancePolicy_RoleAdmissionPolicy_Secret{} - } - if err := m.Secret.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *AcceptancePolicy_RoleAdmissionPolicy_Secret) 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 ErrIntOverflowTypes - } - 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: Secret: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Secret: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Data", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + byteLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Data = append(m.Data[:0], dAtA[iNdEx:postIndex]...) - if m.Data == nil { - m.Data = []byte{} - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Alg", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Alg = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ExternalCA) 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 ErrIntOverflowTypes - } - 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: ExternalCA: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ExternalCA: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Protocol", wireType) - } - m.Protocol = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Protocol |= ExternalCA_CAProtocol(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field URL", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.URL = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Options", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Options == nil { - m.Options = make(map[string]string) - } - var mapkey string - var mapvalue string - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { - return ErrInvalidLengthTypes - } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey < 0 { - return ErrInvalidLengthTypes - } - if postStringIndexmapkey > l { - return io.ErrUnexpectedEOF - } - mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - } else if fieldNum == 2 { - var stringLenmapvalue uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapvalue |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapvalue := int(stringLenmapvalue) - if intStringLenmapvalue < 0 { - return ErrInvalidLengthTypes - } - postStringIndexmapvalue := iNdEx + intStringLenmapvalue - if postStringIndexmapvalue < 0 { - return ErrInvalidLengthTypes - } - if postStringIndexmapvalue > l { - return io.ErrUnexpectedEOF - } - mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) - iNdEx = postStringIndexmapvalue - } else { - iNdEx = entryPreIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - m.Options[mapkey] = mapvalue - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CACert", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + byteLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.CACert = append(m.CACert[:0], dAtA[iNdEx:postIndex]...) - if m.CACert == nil { - m.CACert = []byte{} - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *CAConfig) 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 ErrIntOverflowTypes - } - 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: CAConfig: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: CAConfig: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NodeCertExpiry", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.NodeCertExpiry == nil { - m.NodeCertExpiry = &types.Duration{} - } - if err := m.NodeCertExpiry.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ExternalCAs", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ExternalCAs = append(m.ExternalCAs, &ExternalCA{}) - if err := m.ExternalCAs[len(m.ExternalCAs)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SigningCACert", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + byteLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.SigningCACert = append(m.SigningCACert[:0], dAtA[iNdEx:postIndex]...) - if m.SigningCACert == nil { - m.SigningCACert = []byte{} - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SigningCAKey", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + byteLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.SigningCAKey = append(m.SigningCAKey[:0], dAtA[iNdEx:postIndex]...) - if m.SigningCAKey == nil { - m.SigningCAKey = []byte{} - } - iNdEx = postIndex - case 5: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ForceRotate", wireType) - } - m.ForceRotate = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ForceRotate |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *OrchestrationConfig) 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 ErrIntOverflowTypes - } - 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: OrchestrationConfig: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: OrchestrationConfig: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field TaskHistoryRetentionLimit", wireType) - } - m.TaskHistoryRetentionLimit = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.TaskHistoryRetentionLimit |= int64(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *TaskDefaults) 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 ErrIntOverflowTypes - } - 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: TaskDefaults: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: TaskDefaults: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LogDriver", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.LogDriver == nil { - m.LogDriver = &Driver{} - } - if err := m.LogDriver.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *DispatcherConfig) 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 ErrIntOverflowTypes - } - 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: DispatcherConfig: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: DispatcherConfig: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field HeartbeatPeriod", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.HeartbeatPeriod == nil { - m.HeartbeatPeriod = &types.Duration{} - } - if err := m.HeartbeatPeriod.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RaftConfig) 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 ErrIntOverflowTypes - } - 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: RaftConfig: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RaftConfig: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field SnapshotInterval", wireType) - } - m.SnapshotInterval = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.SnapshotInterval |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field KeepOldSnapshots", wireType) - } - m.KeepOldSnapshots = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.KeepOldSnapshots |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field LogEntriesForSlowFollowers", wireType) - } - m.LogEntriesForSlowFollowers = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.LogEntriesForSlowFollowers |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field HeartbeatTick", wireType) - } - m.HeartbeatTick = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.HeartbeatTick |= uint32(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 5: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ElectionTick", wireType) - } - m.ElectionTick = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ElectionTick |= uint32(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *EncryptionConfig) 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 ErrIntOverflowTypes - } - 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: EncryptionConfig: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: EncryptionConfig: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field AutoLockManagers", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.AutoLockManagers = bool(v != 0) - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *SpreadOver) 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 ErrIntOverflowTypes - } - 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: SpreadOver: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: SpreadOver: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SpreadDescriptor", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.SpreadDescriptor = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *PlacementPreference) 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 ErrIntOverflowTypes - } - 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: PlacementPreference: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: PlacementPreference: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Spread", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &SpreadOver{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.Preference = &PlacementPreference_Spread{v} - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Placement) 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 ErrIntOverflowTypes - } - 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: Placement: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Placement: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Constraints", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Constraints = append(m.Constraints, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Preferences", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Preferences = append(m.Preferences, &PlacementPreference{}) - if err := m.Preferences[len(m.Preferences)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Platforms", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Platforms = append(m.Platforms, &Platform{}) - if err := m.Platforms[len(m.Platforms)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field MaxReplicas", wireType) - } - m.MaxReplicas = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.MaxReplicas |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *JoinTokens) 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 ErrIntOverflowTypes - } - 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: JoinTokens: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: JoinTokens: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Worker", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Worker = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Manager", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Manager = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RootCA) 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 ErrIntOverflowTypes - } - 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: RootCA: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RootCA: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CAKey", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + byteLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.CAKey = append(m.CAKey[:0], dAtA[iNdEx:postIndex]...) - if m.CAKey == nil { - m.CAKey = []byte{} - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CACert", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + byteLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.CACert = append(m.CACert[:0], dAtA[iNdEx:postIndex]...) - if m.CACert == nil { - m.CACert = []byte{} - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CACertHash", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.CACertHash = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field JoinTokens", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.JoinTokens.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RootRotation", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.RootRotation == nil { - m.RootRotation = &RootRotation{} - } - if err := m.RootRotation.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 6: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field LastForcedRotation", wireType) - } - m.LastForcedRotation = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.LastForcedRotation |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Certificate) 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 ErrIntOverflowTypes - } - 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: Certificate: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Certificate: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Role", wireType) - } - m.Role = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Role |= NodeRole(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CSR", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + byteLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.CSR = append(m.CSR[:0], dAtA[iNdEx:postIndex]...) - if m.CSR == nil { - m.CSR = []byte{} - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Certificate", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + byteLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Certificate = append(m.Certificate[:0], dAtA[iNdEx:postIndex]...) - if m.Certificate == nil { - m.Certificate = []byte{} - } - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CN", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.CN = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *EncryptionKey) 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 ErrIntOverflowTypes - } - 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: EncryptionKey: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: EncryptionKey: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Subsystem", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Subsystem = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Algorithm", wireType) - } - m.Algorithm = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Algorithm |= EncryptionKey_Algorithm(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + byteLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Key = append(m.Key[:0], dAtA[iNdEx:postIndex]...) - if m.Key == nil { - m.Key = []byte{} - } - iNdEx = postIndex - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field LamportTime", wireType) - } - m.LamportTime = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.LamportTime |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ManagerStatus) 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 ErrIntOverflowTypes - } - 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: ManagerStatus: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ManagerStatus: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field RaftID", wireType) - } - m.RaftID = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.RaftID |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Addr", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Addr = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Leader", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.Leader = bool(v != 0) - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Reachability", wireType) - } - m.Reachability = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Reachability |= RaftMemberStatus_Reachability(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *FileTarget) 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 ErrIntOverflowTypes - } - 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: FileTarget: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: FileTarget: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Name = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field UID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.UID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field GID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.GID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Mode", wireType) - } - m.Mode = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Mode |= os.FileMode(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RuntimeTarget) 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 ErrIntOverflowTypes - } - 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: RuntimeTarget: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RuntimeTarget: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *SecretReference) 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 ErrIntOverflowTypes - } - 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: SecretReference: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: SecretReference: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SecretID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.SecretID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SecretName", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.SecretName = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field File", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &FileTarget{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.Target = &SecretReference_File{v} - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ConfigReference) 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 ErrIntOverflowTypes - } - 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: ConfigReference: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ConfigReference: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ConfigID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ConfigID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ConfigName", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ConfigName = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field File", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &FileTarget{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.Target = &ConfigReference_File{v} - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Runtime", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &RuntimeTarget{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.Target = &ConfigReference_Runtime{v} - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *BlacklistedCertificate) 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 ErrIntOverflowTypes - } - 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: BlacklistedCertificate: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: BlacklistedCertificate: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Expiry", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Expiry == nil { - m.Expiry = &types.Timestamp{} - } - if err := m.Expiry.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *HealthConfig) 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 ErrIntOverflowTypes - } - 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: HealthConfig: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: HealthConfig: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Test", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Test = append(m.Test, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Interval", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Interval == nil { - m.Interval = &types.Duration{} - } - if err := m.Interval.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Timeout", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Timeout == nil { - m.Timeout = &types.Duration{} - } - if err := m.Timeout.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Retries", wireType) - } - m.Retries = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Retries |= int32(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field StartPeriod", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.StartPeriod == nil { - m.StartPeriod = &types.Duration{} - } - if err := m.StartPeriod.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field StartInterval", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.StartInterval == nil { - m.StartInterval = &types.Duration{} - } - if err := m.StartInterval.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MaybeEncryptedRecord) 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 ErrIntOverflowTypes - } - 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: MaybeEncryptedRecord: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MaybeEncryptedRecord: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Algorithm", wireType) - } - m.Algorithm = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Algorithm |= MaybeEncryptedRecord_Algorithm(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Data", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + byteLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Data = append(m.Data[:0], dAtA[iNdEx:postIndex]...) - if m.Data == nil { - m.Data = []byte{} - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Nonce", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + byteLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Nonce = append(m.Nonce[:0], dAtA[iNdEx:postIndex]...) - if m.Nonce == nil { - m.Nonce = []byte{} - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RootRotation) 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 ErrIntOverflowTypes - } - 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: RootRotation: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RootRotation: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CACert", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + byteLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.CACert = append(m.CACert[:0], dAtA[iNdEx:postIndex]...) - if m.CACert == nil { - m.CACert = []byte{} - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CAKey", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + byteLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.CAKey = append(m.CAKey[:0], dAtA[iNdEx:postIndex]...) - if m.CAKey == nil { - m.CAKey = []byte{} - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CrossSignedCACert", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + byteLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.CrossSignedCACert = append(m.CrossSignedCACert[:0], dAtA[iNdEx:postIndex]...) - if m.CrossSignedCACert == nil { - m.CrossSignedCACert = []byte{} - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Privileges) 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 ErrIntOverflowTypes - } - 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: Privileges: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Privileges: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CredentialSpec", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.CredentialSpec == nil { - m.CredentialSpec = &Privileges_CredentialSpec{} - } - if err := m.CredentialSpec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SELinuxContext", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.SELinuxContext == nil { - m.SELinuxContext = &Privileges_SELinuxContext{} - } - if err := m.SELinuxContext.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Seccomp", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Seccomp == nil { - m.Seccomp = &Privileges_SeccompOpts{} - } - if err := m.Seccomp.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Apparmor", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Apparmor == nil { - m.Apparmor = &Privileges_AppArmorOpts{} - } - if err := m.Apparmor.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field NoNewPrivileges", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.NoNewPrivileges = bool(v != 0) - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Privileges_CredentialSpec) 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 ErrIntOverflowTypes - } - 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: CredentialSpec: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: CredentialSpec: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field File", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Source = &Privileges_CredentialSpec_File{string(dAtA[iNdEx:postIndex])} - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Registry", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Source = &Privileges_CredentialSpec_Registry{string(dAtA[iNdEx:postIndex])} - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Config", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Source = &Privileges_CredentialSpec_Config{string(dAtA[iNdEx:postIndex])} - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Privileges_SELinuxContext) 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 ErrIntOverflowTypes - } - 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: SELinuxContext: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: SELinuxContext: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Disable", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.Disable = bool(v != 0) - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field User", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.User = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Role", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Role = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Type = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Level", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Level = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Privileges_SeccompOpts) 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 ErrIntOverflowTypes - } - 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: SeccompOpts: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: SeccompOpts: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Mode", wireType) - } - m.Mode = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Mode |= Privileges_SeccompOpts_SeccompMode(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Profile", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + byteLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Profile = append(m.Profile[:0], dAtA[iNdEx:postIndex]...) - if m.Profile == nil { - m.Profile = []byte{} - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Privileges_AppArmorOpts) 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 ErrIntOverflowTypes - } - 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: AppArmorOpts: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: AppArmorOpts: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Mode", wireType) - } - m.Mode = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Mode |= Privileges_AppArmorOpts_AppArmorMode(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *JobStatus) 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 ErrIntOverflowTypes - } - 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: JobStatus: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: JobStatus: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field JobIteration", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.JobIteration.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LastExecution", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.LastExecution == nil { - m.LastExecution = &types.Timestamp{} - } - if err := m.LastExecution.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *VolumeAccessMode) 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 ErrIntOverflowTypes - } - 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: VolumeAccessMode: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: VolumeAccessMode: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Scope", wireType) - } - m.Scope = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Scope |= VolumeAccessMode_Scope(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Sharing", wireType) - } - m.Sharing = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Sharing |= VolumeAccessMode_Sharing(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Block", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &VolumeAccessMode_BlockVolume{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.AccessType = &VolumeAccessMode_Block{v} - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Mount", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &VolumeAccessMode_MountVolume{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.AccessType = &VolumeAccessMode_Mount{v} - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *VolumeAccessMode_BlockVolume) 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 ErrIntOverflowTypes - } - 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: BlockVolume: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: BlockVolume: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *VolumeAccessMode_MountVolume) 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 ErrIntOverflowTypes - } - 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: MountVolume: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MountVolume: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field FsType", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.FsType = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MountFlags", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.MountFlags = append(m.MountFlags, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *VolumeSecret) 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 ErrIntOverflowTypes - } - 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: VolumeSecret: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: VolumeSecret: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Key = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Secret", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Secret = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *VolumePublishStatus) 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 ErrIntOverflowTypes - } - 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: VolumePublishStatus: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: VolumePublishStatus: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NodeID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.NodeID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field State", wireType) - } - m.State = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.State |= VolumePublishStatus_State(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PublishContext", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.PublishContext == nil { - m.PublishContext = make(map[string]string) - } - var mapkey string - var mapvalue string - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { - return ErrInvalidLengthTypes - } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey < 0 { - return ErrInvalidLengthTypes - } - if postStringIndexmapkey > l { - return io.ErrUnexpectedEOF - } - mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - } else if fieldNum == 2 { - var stringLenmapvalue uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapvalue |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapvalue := int(stringLenmapvalue) - if intStringLenmapvalue < 0 { - return ErrInvalidLengthTypes - } - postStringIndexmapvalue := iNdEx + intStringLenmapvalue - if postStringIndexmapvalue < 0 { - return ErrInvalidLengthTypes - } - if postStringIndexmapvalue > l { - return io.ErrUnexpectedEOF - } - mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) - iNdEx = postStringIndexmapvalue - } else { - iNdEx = entryPreIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - m.PublishContext[mapkey] = mapvalue - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Message = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *VolumeInfo) 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 ErrIntOverflowTypes - } - 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: VolumeInfo: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: VolumeInfo: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field CapacityBytes", wireType) - } - m.CapacityBytes = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.CapacityBytes |= int64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field VolumeContext", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.VolumeContext == nil { - m.VolumeContext = make(map[string]string) - } - var mapkey string - var mapvalue string - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { - return ErrInvalidLengthTypes - } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey < 0 { - return ErrInvalidLengthTypes - } - if postStringIndexmapkey > l { - return io.ErrUnexpectedEOF - } - mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - } else if fieldNum == 2 { - var stringLenmapvalue uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapvalue |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapvalue := int(stringLenmapvalue) - if intStringLenmapvalue < 0 { - return ErrInvalidLengthTypes - } - postStringIndexmapvalue := iNdEx + intStringLenmapvalue - if postStringIndexmapvalue < 0 { - return ErrInvalidLengthTypes - } - if postStringIndexmapvalue > l { - return io.ErrUnexpectedEOF - } - mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) - iNdEx = postStringIndexmapvalue - } else { - iNdEx = entryPreIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - m.VolumeContext[mapkey] = mapvalue - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field VolumeID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.VolumeID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AccessibleTopology", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.AccessibleTopology = append(m.AccessibleTopology, &Topology{}) - if err := m.AccessibleTopology[len(m.AccessibleTopology)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *CapacityRange) 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 ErrIntOverflowTypes - } - 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: CapacityRange: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: CapacityRange: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field RequiredBytes", wireType) - } - m.RequiredBytes = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.RequiredBytes |= int64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field LimitBytes", wireType) - } - m.LimitBytes = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.LimitBytes |= int64(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *VolumeAssignment) 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 ErrIntOverflowTypes - } - 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: VolumeAssignment: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: VolumeAssignment: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field VolumeID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.VolumeID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Driver", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Driver == nil { - m.Driver = &Driver{} - } - if err := m.Driver.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field VolumeContext", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.VolumeContext == nil { - m.VolumeContext = make(map[string]string) - } - var mapkey string - var mapvalue string - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { - return ErrInvalidLengthTypes - } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey < 0 { - return ErrInvalidLengthTypes - } - if postStringIndexmapkey > l { - return io.ErrUnexpectedEOF - } - mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - } else if fieldNum == 2 { - var stringLenmapvalue uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapvalue |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapvalue := int(stringLenmapvalue) - if intStringLenmapvalue < 0 { - return ErrInvalidLengthTypes - } - postStringIndexmapvalue := iNdEx + intStringLenmapvalue - if postStringIndexmapvalue < 0 { - return ErrInvalidLengthTypes - } - if postStringIndexmapvalue > l { - return io.ErrUnexpectedEOF - } - mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) - iNdEx = postStringIndexmapvalue - } else { - iNdEx = entryPreIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - m.VolumeContext[mapkey] = mapvalue - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PublishContext", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.PublishContext == nil { - m.PublishContext = make(map[string]string) - } - var mapkey string - var mapvalue string - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { - return ErrInvalidLengthTypes - } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey < 0 { - return ErrInvalidLengthTypes - } - if postStringIndexmapkey > l { - return io.ErrUnexpectedEOF - } - mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - } else if fieldNum == 2 { - var stringLenmapvalue uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapvalue |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapvalue := int(stringLenmapvalue) - if intStringLenmapvalue < 0 { - return ErrInvalidLengthTypes - } - postStringIndexmapvalue := iNdEx + intStringLenmapvalue - if postStringIndexmapvalue < 0 { - return ErrInvalidLengthTypes - } - if postStringIndexmapvalue > l { - return io.ErrUnexpectedEOF - } - mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) - iNdEx = postStringIndexmapvalue - } else { - iNdEx = entryPreIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - m.PublishContext[mapkey] = mapvalue - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AccessMode", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.AccessMode == nil { - m.AccessMode = &VolumeAccessMode{} - } - if err := m.AccessMode.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Secrets", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Secrets = append(m.Secrets, &VolumeSecret{}) - if err := m.Secrets[len(m.Secrets)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *VolumeAttachment) 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 ErrIntOverflowTypes - } - 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: VolumeAttachment: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: VolumeAttachment: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Source", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Source = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Target", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Target = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *TopologyRequirement) 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 ErrIntOverflowTypes - } - 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: TopologyRequirement: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: TopologyRequirement: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Requisite", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Requisite = append(m.Requisite, &Topology{}) - if err := m.Requisite[len(m.Requisite)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Preferred", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Preferred = append(m.Preferred, &Topology{}) - if err := m.Preferred[len(m.Preferred)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Topology) 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 ErrIntOverflowTypes - } - 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: Topology: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Topology: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Segments", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Segments == nil { - m.Segments = make(map[string]string) - } - var mapkey string - var mapvalue string - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { - return ErrInvalidLengthTypes - } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey < 0 { - return ErrInvalidLengthTypes - } - if postStringIndexmapkey > l { - return io.ErrUnexpectedEOF - } - mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - } else if fieldNum == 2 { - var stringLenmapvalue uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapvalue |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapvalue := int(stringLenmapvalue) - if intStringLenmapvalue < 0 { - return ErrInvalidLengthTypes - } - postStringIndexmapvalue := iNdEx + intStringLenmapvalue - if postStringIndexmapvalue < 0 { - return ErrInvalidLengthTypes - } - if postStringIndexmapvalue > l { - return io.ErrUnexpectedEOF - } - mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) - iNdEx = postStringIndexmapvalue - } else { - iNdEx = entryPreIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - m.Segments[mapkey] = mapvalue - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } +// Deprecated: Use VolumeCapability_AccessMode.ProtoReflect.Descriptor instead. +func (*VolumeCapability_AccessMode) Descriptor() ([]byte, []int) { + return file_api_types_proto_rawDescGZIP(), []int{67, 2} +} + +func (x *VolumeCapability_AccessMode) GetMode() VolumeCapability_AccessMode_Mode { + if x != nil { + return x.Mode + } + return VolumeCapability_AccessMode_UNKNOWN +} + +var File_api_types_proto protoreflect.FileDescriptor + +const file_api_types_proto_rawDesc = "" + + "\n" + + "\x0fapi/types.proto\x12\x12docker.swarmkit.v1\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a\x1cprotobuf/plugin/plugin.proto\"\x1f\n" + + "\aVersion\x12\x14\n" + + "\x05index\x18\x01 \x01(\x04R\x05index\"0\n" + + "\n" + + "IndexEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x10\n" + + "\x03val\x18\x02 \x01(\tR\x03val\"\xdb\x01\n" + + "\vAnnotations\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12C\n" + + "\x06labels\x18\x02 \x03(\v2+.docker.swarmkit.v1.Annotations.LabelsEntryR\x06labels\x128\n" + + "\aindices\x18\x04 \x03(\v2\x1e.docker.swarmkit.v1.IndexEntryR\aindices\x1a9\n" + + "\vLabelsEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"@\n" + + "\x14NamedGenericResource\x12\x12\n" + + "\x04kind\x18\x01 \x01(\tR\x04kind\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value\"C\n" + + "\x17DiscreteGenericResource\x12\x12\n" + + "\x04kind\x18\x01 \x01(\tR\x04kind\x12\x14\n" + + "\x05value\x18\x02 \x01(\x03R\x05value\"\xde\x01\n" + + "\x0fGenericResource\x12Z\n" + + "\x13named_resource_spec\x18\x01 \x01(\v2(.docker.swarmkit.v1.NamedGenericResourceH\x00R\x11namedResourceSpec\x12c\n" + + "\x16discrete_resource_spec\x18\x02 \x01(\v2+.docker.swarmkit.v1.DiscreteGenericResourceH\x00R\x14discreteResourceSpecB\n" + + "\n" + + "\bresource\"\x98\x01\n" + + "\tResources\x12)\n" + + "\tnano_cpus\x18\x01 \x01(\x03B\f\x92\x97\"\bNanoCPUsR\bnanoCpus\x12!\n" + + "\fmemory_bytes\x18\x02 \x01(\x03R\vmemoryBytes\x12=\n" + + "\ageneric\x18\x03 \x03(\v2#.docker.swarmkit.v1.GenericResourceR\ageneric\"\x96\x02\n" + + "\x14ResourceRequirements\x125\n" + + "\x06limits\x18\x01 \x01(\v2\x1d.docker.swarmkit.v1.ResourcesR\x06limits\x12A\n" + + "\freservations\x18\x02 \x01(\v2\x1d.docker.swarmkit.v1.ResourcesR\freservations\x12:\n" + + "\n" + + "swap_bytes\x18\x03 \x01(\v2\x1b.google.protobuf.Int64ValueR\tswapBytes\x12H\n" + + "\x11memory_swappiness\x18\x04 \x01(\v2\x1b.google.protobuf.Int64ValueR\x10memorySwappiness\"F\n" + + "\bPlatform\x12\"\n" + + "\farchitecture\x18\x01 \x01(\tR\farchitecture\x12\x16\n" + + "\x02os\x18\x02 \x01(\tB\x06\x92\x97\"\x02OSR\x02os\";\n" + + "\x11PluginDescription\x12\x12\n" + + "\x04type\x18\x01 \x01(\tR\x04type\x12\x12\n" + + "\x04name\x18\x02 \x01(\tR\x04name\"\x81\x02\n" + + "\x11EngineDescription\x12%\n" + + "\x0eengine_version\x18\x01 \x01(\tR\rengineVersion\x12I\n" + + "\x06labels\x18\x02 \x03(\v21.docker.swarmkit.v1.EngineDescription.LabelsEntryR\x06labels\x12?\n" + + "\aplugins\x18\x03 \x03(\v2%.docker.swarmkit.v1.PluginDescriptionR\aplugins\x1a9\n" + + "\vLabelsEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\x93\x03\n" + + "\x0fNodeDescription\x12\x1a\n" + + "\bhostname\x18\x01 \x01(\tR\bhostname\x128\n" + + "\bplatform\x18\x02 \x01(\v2\x1c.docker.swarmkit.v1.PlatformR\bplatform\x12;\n" + + "\tresources\x18\x03 \x01(\v2\x1d.docker.swarmkit.v1.ResourcesR\tresources\x12=\n" + + "\x06engine\x18\x04 \x01(\v2%.docker.swarmkit.v1.EngineDescriptionR\x06engine\x12G\n" + + "\btls_info\x18\x05 \x01(\v2\x1f.docker.swarmkit.v1.NodeTLSInfoB\v\x92\x97\"\aTLSInfoR\atlsInfo\x12\x1c\n" + + "\x04fips\x18\x06 \x01(\bB\b\x92\x97\"\x04FIPSR\x04fips\x12G\n" + + "\bcsi_info\x18\a \x03(\v2\x1f.docker.swarmkit.v1.NodeCSIInfoB\v\x92\x97\"\aCSIInfoR\acsiInfo\"\x91\x01\n" + + "\vNodeTLSInfo\x12\x1d\n" + + "\n" + + "trust_root\x18\x01 \x01(\fR\ttrustRoot\x12.\n" + + "\x13cert_issuer_subject\x18\x02 \x01(\fR\x11certIssuerSubject\x123\n" + + "\x16cert_issuer_public_key\x18\x03 \x01(\fR\x13certIssuerPublicKey\"\xc7\x01\n" + + "\vNodeCSIInfo\x12\x1f\n" + + "\vplugin_name\x18\x01 \x01(\tR\n" + + "pluginName\x12\x17\n" + + "\anode_id\x18\x02 \x01(\tR\x06nodeId\x12/\n" + + "\x14max_volumes_per_node\x18\x03 \x01(\x03R\x11maxVolumesPerNode\x12M\n" + + "\x13accessible_topology\x18\x04 \x01(\v2\x1c.docker.swarmkit.v1.TopologyR\x12accessibleTopology\"\xd8\x01\n" + + "\x10RaftMemberStatus\x12\x16\n" + + "\x06leader\x18\x01 \x01(\bR\x06leader\x12U\n" + + "\freachability\x18\x02 \x01(\x0e21.docker.swarmkit.v1.RaftMemberStatus.ReachabilityR\freachability\x12\x18\n" + + "\amessage\x18\x03 \x01(\tR\amessage\";\n" + + "\fReachability\x12\v\n" + + "\aUNKNOWN\x10\x00\x12\x0f\n" + + "\vUNREACHABLE\x10\x01\x12\r\n" + + "\tREACHABLE\x10\x02\"\xb3\x01\n" + + "\n" + + "NodeStatus\x12:\n" + + "\x05state\x18\x01 \x01(\x0e2$.docker.swarmkit.v1.NodeStatus.StateR\x05state\x12\x18\n" + + "\amessage\x18\x02 \x01(\tR\amessage\x12\x12\n" + + "\x04addr\x18\x03 \x01(\tR\x04addr\";\n" + + "\x05State\x12\v\n" + + "\aUNKNOWN\x10\x00\x12\b\n" + + "\x04DOWN\x10\x01\x12\t\n" + + "\x05READY\x10\x02\x12\x10\n" + + "\fDISCONNECTED\x10\x03\"%\n" + + "\x05Image\x12\x1c\n" + + "\treference\x18\x01 \x01(\tR\treference\"\xee\x0e\n" + + "\x05Mount\x122\n" + + "\x04type\x18\x01 \x01(\x0e2\x1e.docker.swarmkit.v1.Mount.TypeR\x04type\x12\x16\n" + + "\x06source\x18\x02 \x01(\tR\x06source\x12\x16\n" + + "\x06target\x18\x03 \x01(\tR\x06target\x12(\n" + + "\breadonly\x18\x04 \x01(\bB\f\x92\x97\"\bReadOnlyR\breadonly\x12G\n" + + "\vconsistency\x18\b \x01(\x0e2%.docker.swarmkit.v1.Mount.ConsistencyR\vconsistency\x12H\n" + + "\fbind_options\x18\x05 \x01(\v2%.docker.swarmkit.v1.Mount.BindOptionsR\vbindOptions\x12N\n" + + "\x0evolume_options\x18\x06 \x01(\v2'.docker.swarmkit.v1.Mount.VolumeOptionsR\rvolumeOptions\x12K\n" + + "\rtmpfs_options\x18\a \x01(\v2&.docker.swarmkit.v1.Mount.TmpfsOptionsR\ftmpfsOptions\x1a\x98\x05\n" + + "\vBindOptions\x12S\n" + + "\vpropagation\x18\x01 \x01(\x0e21.docker.swarmkit.v1.Mount.BindOptions.PropagationR\vpropagation\x124\n" + + "\fnonrecursive\x18\x02 \x01(\bB\x10\x92\x97\"\fNonRecursiveR\fnonrecursive\x12@\n" + + "\x10createmountpoint\x18\x03 \x01(\bB\x14\x92\x97\"\x10CreateMountpointR\x10createmountpoint\x12L\n" + + "\x14readonlynonrecursive\x18\x04 \x01(\bB\x18\x92\x97\"\x14ReadOnlyNonRecursiveR\x14readonlynonrecursive\x12R\n" + + "\x16readonlyforcerecursive\x18\x05 \x01(\bB\x1a\x92\x97\"\x16ReadOnlyForceRecursiveR\x16readonlyforcerecursive\"\x99\x02\n" + + "\vPropagation\x12*\n" + + "\bRPRIVATE\x10\x00\x1a\x1c\xa2\x97\"\x18MountPropagationRPrivate\x12(\n" + + "\aPRIVATE\x10\x01\x1a\x1b\xa2\x97\"\x17MountPropagationPrivate\x12(\n" + + "\aRSHARED\x10\x02\x1a\x1b\xa2\x97\"\x17MountPropagationRShared\x12&\n" + + "\x06SHARED\x10\x03\x1a\x1a\xa2\x97\"\x16MountPropagationShared\x12&\n" + + "\x06RSLAVE\x10\x04\x1a\x1a\xa2\x97\"\x16MountPropagationRSlave\x12$\n" + + "\x05SLAVE\x10\x05\x1a\x19\xa2\x97\"\x15MountPropagationSlave\x1a\x14\x9a\x97\"\x10MountPropagation\x1a\xa3\x02\n" + + "\rVolumeOptions\x12\"\n" + + "\x06nocopy\x18\x01 \x01(\bB\n" + + "\x92\x97\"\x06NoCopyR\x06nocopy\x12K\n" + + "\x06labels\x18\x02 \x03(\v23.docker.swarmkit.v1.Mount.VolumeOptions.LabelsEntryR\x06labels\x12?\n" + + "\rdriver_config\x18\x03 \x01(\v2\x1a.docker.swarmkit.v1.DriverR\fdriverConfig\x12%\n" + + "\asubpath\x18\x04 \x01(\tB\v\x92\x97\"\aSubpathR\asubpath\x1a9\n" + + "\vLabelsEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\x1a[\n" + + "\fTmpfsOptions\x12\x1d\n" + + "\n" + + "size_bytes\x18\x01 \x01(\x03R\tsizeBytes\x12\x12\n" + + "\x04mode\x18\x02 \x01(\rR\x04mode\x12\x18\n" + + "\aoptions\x18\x03 \x01(\tR\aoptions\"\xb8\x01\n" + + "\x04Type\x12\x1b\n" + + "\x04BIND\x10\x00\x1a\x11\xa2\x97\"\rMountTypeBind\x12\x1f\n" + + "\x06VOLUME\x10\x01\x1a\x13\xa2\x97\"\x0fMountTypeVolume\x12\x1d\n" + + "\x05TMPFS\x10\x02\x1a\x12\xa2\x97\"\x0eMountTypeTmpfs\x12!\n" + + "\x05NPIPE\x10\x03\x1a\x16\xa2\x97\"\x12MountTypeNamedPipe\x12!\n" + + "\aCLUSTER\x10\x04\x1a\x14\xa2\x97\"\x10MountTypeCluster\x1a\r\x9a\x97\"\tMountType\"\xcd\x01\n" + + "\vConsistency\x12(\n" + + "\aDEFAULT\x10\x00\x1a\x1b\xa2\x97\"\x17MountConsistencyDefault\x12(\n" + + "\n" + + "CONSISTENT\x10\x01\x1a\x18\xa2\x97\"\x14MountConsistencyFull\x12&\n" + + "\x06CACHED\x10\x02\x1a\x1a\xa2\x97\"\x16MountConsistencyCached\x12,\n" + + "\tDELEGATED\x10\x03\x1a\x1d\xa2\x97\"\x19MountConsistencyDelegated\x1a\x14\x9a\x97\"\x10MountConsistency\"\xf1\x02\n" + + "\rRestartPolicy\x12P\n" + + "\tcondition\x18\x01 \x01(\x0e22.docker.swarmkit.v1.RestartPolicy.RestartConditionR\tcondition\x12/\n" + + "\x05delay\x18\x02 \x01(\v2\x19.google.protobuf.DurationR\x05delay\x12!\n" + + "\fmax_attempts\x18\x03 \x01(\x04R\vmaxAttempts\x121\n" + + "\x06window\x18\x04 \x01(\v2\x19.google.protobuf.DurationR\x06window\"\x86\x01\n" + + "\x10RestartCondition\x12\x1b\n" + + "\x04NONE\x10\x00\x1a\x11\xa2\x97\"\rRestartOnNone\x12$\n" + + "\n" + + "ON_FAILURE\x10\x01\x1a\x14\xa2\x97\"\x10RestartOnFailure\x12\x19\n" + + "\x03ANY\x10\x02\x1a\x10\xa2\x97\"\fRestartOnAny\x1a\x14\x9a\x97\"\x10RestartCondition\"\xc5\x03\n" + + "\fUpdateConfig\x12 \n" + + "\vparallelism\x18\x01 \x01(\x04R\vparallelism\x12/\n" + + "\x05delay\x18\x02 \x01(\v2\x19.google.protobuf.DurationR\x05delay\x12U\n" + + "\x0efailure_action\x18\x03 \x01(\x0e2..docker.swarmkit.v1.UpdateConfig.FailureActionR\rfailureAction\x123\n" + + "\amonitor\x18\x04 \x01(\v2\x19.google.protobuf.DurationR\amonitor\x12*\n" + + "\x11max_failure_ratio\x18\x05 \x01(\x02R\x0fmaxFailureRatio\x12B\n" + + "\x05order\x18\x06 \x01(\x0e2,.docker.swarmkit.v1.UpdateConfig.UpdateOrderR\x05order\"6\n" + + "\rFailureAction\x12\t\n" + + "\x05PAUSE\x10\x00\x12\f\n" + + "\bCONTINUE\x10\x01\x12\f\n" + + "\bROLLBACK\x10\x02\".\n" + + "\vUpdateOrder\x12\x0e\n" + + "\n" + + "STOP_FIRST\x10\x00\x12\x0f\n" + + "\vSTART_FIRST\x10\x01\"\xef\x02\n" + + "\fUpdateStatus\x12B\n" + + "\x05state\x18\x01 \x01(\x0e2,.docker.swarmkit.v1.UpdateStatus.UpdateStateR\x05state\x129\n" + + "\n" + + "started_at\x18\x02 \x01(\v2\x1a.google.protobuf.TimestampR\tstartedAt\x12=\n" + + "\fcompleted_at\x18\x03 \x01(\v2\x1a.google.protobuf.TimestampR\vcompletedAt\x12\x18\n" + + "\amessage\x18\x04 \x01(\tR\amessage\"\x86\x01\n" + + "\vUpdateState\x12\v\n" + + "\aUNKNOWN\x10\x00\x12\f\n" + + "\bUPDATING\x10\x01\x12\n" + + "\n" + + "\x06PAUSED\x10\x02\x12\r\n" + + "\tCOMPLETED\x10\x03\x12\x14\n" + + "\x10ROLLBACK_STARTED\x10\x04\x12\x13\n" + + "\x0fROLLBACK_PAUSED\x10\x05\x12\x16\n" + + "\x12ROLLBACK_COMPLETED\x10\x06\"l\n" + + "\x0fContainerStatus\x12!\n" + + "\fcontainer_id\x18\x01 \x01(\tR\vcontainerId\x12\x19\n" + + "\x03pid\x18\x02 \x01(\x05B\a\x92\x97\"\x03PIDR\x03pid\x12\x1b\n" + + "\texit_code\x18\x03 \x01(\x05R\bexitCode\"B\n" + + "\n" + + "PortStatus\x124\n" + + "\x05ports\x18\x01 \x03(\v2\x1e.docker.swarmkit.v1.PortConfigR\x05ports\"\x99\x03\n" + + "\n" + + "TaskStatus\x128\n" + + "\ttimestamp\x18\x01 \x01(\v2\x1a.google.protobuf.TimestampR\ttimestamp\x123\n" + + "\x05state\x18\x02 \x01(\x0e2\x1d.docker.swarmkit.v1.TaskStateR\x05state\x12\x18\n" + + "\amessage\x18\x03 \x01(\tR\amessage\x12\x10\n" + + "\x03err\x18\x04 \x01(\tR\x03err\x12C\n" + + "\tcontainer\x18\x05 \x01(\v2#.docker.swarmkit.v1.ContainerStatusH\x00R\tcontainer\x12?\n" + + "\vport_status\x18\x06 \x01(\v2\x1e.docker.swarmkit.v1.PortStatusR\n" + + "portStatus\x12\x1d\n" + + "\n" + + "applied_by\x18\a \x01(\tR\tappliedBy\x129\n" + + "\n" + + "applied_at\x18\b \x01(\v2\x1a.google.protobuf.TimestampR\tappliedAtB\x10\n" + + "\x0eruntime_status\"\xaf\x02\n" + + "\x17NetworkAttachmentConfig\x12\x16\n" + + "\x06target\x18\x01 \x01(\tR\x06target\x12\x18\n" + + "\aaliases\x18\x02 \x03(\tR\aaliases\x12\x1c\n" + + "\taddresses\x18\x03 \x03(\tR\taddresses\x12{\n" + + "\x16driver_attachment_opts\x18\x04 \x03(\v2E.docker.swarmkit.v1.NetworkAttachmentConfig.DriverAttachmentOptsEntryR\x14driverAttachmentOpts\x1aG\n" + + "\x19DriverAttachmentOptsEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xd3\x02\n" + + "\n" + + "IPAMConfig\x12D\n" + + "\x06family\x18\x01 \x01(\x0e2,.docker.swarmkit.v1.IPAMConfig.AddressFamilyR\x06family\x12\x16\n" + + "\x06subnet\x18\x02 \x01(\tR\x06subnet\x12\x14\n" + + "\x05range\x18\x03 \x01(\tR\x05range\x12\x18\n" + + "\agateway\x18\x04 \x01(\tR\agateway\x12H\n" + + "\breserved\x18\x05 \x03(\v2,.docker.swarmkit.v1.IPAMConfig.ReservedEntryR\breserved\x1a;\n" + + "\rReservedEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"0\n" + + "\rAddressFamily\x12\v\n" + + "\aUNKNOWN\x10\x00\x12\b\n" + + "\x04IPV4\x10\x04\x12\b\n" + + "\x04IPV6\x10\x06\"\xbc\x03\n" + + "\n" + + "PortConfig\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12C\n" + + "\bprotocol\x18\x02 \x01(\x0e2'.docker.swarmkit.v1.PortConfig.ProtocolR\bprotocol\x12\x1f\n" + + "\vtarget_port\x18\x03 \x01(\rR\n" + + "targetPort\x12%\n" + + "\x0epublished_port\x18\x04 \x01(\rR\rpublishedPort\x12M\n" + + "\fpublish_mode\x18\x05 \x01(\x0e2*.docker.swarmkit.v1.PortConfig.PublishModeR\vpublishMode\"Z\n" + + "\bProtocol\x12\x18\n" + + "\x03TCP\x10\x00\x1a\x0f\xa2\x97\"\vProtocolTCP\x12\x18\n" + + "\x03UDP\x10\x01\x1a\x0f\xa2\x97\"\vProtocolUDP\x12\x1a\n" + + "\x04SCTP\x10\x02\x1a\x10\xa2\x97\"\fProtocolSCTP\"b\n" + + "\vPublishMode\x12#\n" + + "\aINGRESS\x10\x00\x1a\x16\xa2\x97\"\x12PublishModeIngress\x12\x1d\n" + + "\x04HOST\x10\x01\x1a\x13\xa2\x97\"\x0fPublishModeHost\x1a\x0f\x9a\x97\"\vPublishMode\"\x9b\x01\n" + + "\x06Driver\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12A\n" + + "\aoptions\x18\x02 \x03(\v2'.docker.swarmkit.v1.Driver.OptionsEntryR\aoptions\x1a:\n" + + "\fOptionsEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"{\n" + + "\vIPAMOptions\x122\n" + + "\x06driver\x18\x01 \x01(\v2\x1a.docker.swarmkit.v1.DriverR\x06driver\x128\n" + + "\aconfigs\x18\x03 \x03(\v2\x1e.docker.swarmkit.v1.IPAMConfigR\aconfigs\"3\n" + + "\x04Peer\x12\x17\n" + + "\anode_id\x18\x01 \x01(\tR\x06nodeId\x12\x12\n" + + "\x04addr\x18\x02 \x01(\tR\x04addr\"T\n" + + "\fWeightedPeer\x12,\n" + + "\x04peer\x18\x01 \x01(\v2\x18.docker.swarmkit.v1.PeerR\x04peer\x12\x16\n" + + "\x06weight\x18\x02 \x01(\x03R\x06weight\"\xcc\x02\n" + + "\x0eIssuanceStatus\x12>\n" + + "\x05state\x18\x01 \x01(\x0e2(.docker.swarmkit.v1.IssuanceStatus.StateR\x05state\x12\x10\n" + + "\x03err\x18\x02 \x01(\tR\x03err\"\xe7\x01\n" + + "\x05State\x12%\n" + + "\aUNKNOWN\x10\x00\x1a\x18\xa2\x97\"\x14IssuanceStateUnknown\x12!\n" + + "\x05RENEW\x10\x01\x1a\x16\xa2\x97\"\x12IssuanceStateRenew\x12%\n" + + "\aPENDING\x10\x02\x1a\x18\xa2\x97\"\x14IssuanceStatePending\x12#\n" + + "\x06ISSUED\x10\x03\x1a\x17\xa2\x97\"\x13IssuanceStateIssued\x12#\n" + + "\x06FAILED\x10\x04\x1a\x17\xa2\x97\"\x13IssuanceStateFailed\x12#\n" + + "\x06ROTATE\x10\x05\x1a\x17\xa2\x97\"\x13IssuanceStateRotate\"\xdb\x02\n" + + "\x10AcceptancePolicy\x12T\n" + + "\bpolicies\x18\x01 \x03(\v28.docker.swarmkit.v1.AcceptancePolicy.RoleAdmissionPolicyR\bpolicies\x1a\xf0\x01\n" + + "\x13RoleAdmissionPolicy\x120\n" + + "\x04role\x18\x01 \x01(\x0e2\x1c.docker.swarmkit.v1.NodeRoleR\x04role\x12\x1e\n" + + "\n" + + "autoaccept\x18\x02 \x01(\bR\n" + + "autoaccept\x12W\n" + + "\x06secret\x18\x03 \x01(\v2?.docker.swarmkit.v1.AcceptancePolicy.RoleAdmissionPolicy.SecretR\x06secret\x1a.\n" + + "\x06Secret\x12\x12\n" + + "\x04data\x18\x01 \x01(\fR\x04data\x12\x10\n" + + "\x03alg\x18\x02 \x01(\tR\x03alg\"\xc4\x02\n" + + "\n" + + "ExternalCA\x12E\n" + + "\bprotocol\x18\x01 \x01(\x0e2).docker.swarmkit.v1.ExternalCA.CAProtocolR\bprotocol\x12\x19\n" + + "\x03url\x18\x02 \x01(\tB\a\x92\x97\"\x03URLR\x03url\x12E\n" + + "\aoptions\x18\x03 \x03(\v2+.docker.swarmkit.v1.ExternalCA.OptionsEntryR\aoptions\x12#\n" + + "\aca_cert\x18\x04 \x01(\fB\n" + + "\x92\x97\"\x06CACertR\x06caCert\x1a:\n" + + "\fOptionsEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\",\n" + + "\n" + + "CAProtocol\x12\x1e\n" + + "\x05CFSSL\x10\x00\x1a\x13\xa2\x97\"\x0fCAProtocolCFSSL\"\xb9\x02\n" + + "\bCAConfig\x12C\n" + + "\x10node_cert_expiry\x18\x01 \x01(\v2\x19.google.protobuf.DurationR\x0enodeCertExpiry\x12R\n" + + "\fexternal_cas\x18\x02 \x03(\v2\x1e.docker.swarmkit.v1.ExternalCAB\x0f\x92\x97\"\vExternalCAsR\vexternalCas\x129\n" + + "\x0fsigning_ca_cert\x18\x03 \x01(\fB\x11\x92\x97\"\rSigningCACertR\rsigningCaCert\x126\n" + + "\x0esigning_ca_key\x18\x04 \x01(\fB\x10\x92\x97\"\fSigningCAKeyR\fsigningCaKey\x12!\n" + + "\fforce_rotate\x18\x05 \x01(\x04R\vforceRotate\"V\n" + + "\x13OrchestrationConfig\x12?\n" + + "\x1ctask_history_retention_limit\x18\x01 \x01(\x03R\x19taskHistoryRetentionLimit\"I\n" + + "\fTaskDefaults\x129\n" + + "\n" + + "log_driver\x18\x01 \x01(\v2\x1a.docker.swarmkit.v1.DriverR\tlogDriver\"X\n" + + "\x10DispatcherConfig\x12D\n" + + "\x10heartbeat_period\x18\x01 \x01(\v2\x19.google.protobuf.DurationR\x0fheartbeatPeriod\"\xf7\x01\n" + + "\n" + + "RaftConfig\x12+\n" + + "\x11snapshot_interval\x18\x01 \x01(\x04R\x10snapshotInterval\x12,\n" + + "\x12keep_old_snapshots\x18\x02 \x01(\x04R\x10keepOldSnapshots\x12B\n" + + "\x1elog_entries_for_slow_followers\x18\x03 \x01(\x04R\x1alogEntriesForSlowFollowers\x12%\n" + + "\x0eheartbeat_tick\x18\x04 \x01(\rR\rheartbeatTick\x12#\n" + + "\relection_tick\x18\x05 \x01(\rR\felectionTick\"@\n" + + "\x10EncryptionConfig\x12,\n" + + "\x12auto_lock_managers\x18\x01 \x01(\bR\x10autoLockManagers\"9\n" + + "\n" + + "SpreadOver\x12+\n" + + "\x11spread_descriptor\x18\x01 \x01(\tR\x10spreadDescriptor\"]\n" + + "\x13PlacementPreference\x128\n" + + "\x06spread\x18\x01 \x01(\v2\x1e.docker.swarmkit.v1.SpreadOverH\x00R\x06spreadB\f\n" + + "\n" + + "Preference\"\xd7\x01\n" + + "\tPlacement\x12 \n" + + "\vconstraints\x18\x01 \x03(\tR\vconstraints\x12I\n" + + "\vpreferences\x18\x02 \x03(\v2'.docker.swarmkit.v1.PlacementPreferenceR\vpreferences\x12:\n" + + "\tplatforms\x18\x03 \x03(\v2\x1c.docker.swarmkit.v1.PlatformR\tplatforms\x12!\n" + + "\fmax_replicas\x18\x04 \x01(\x04R\vmaxReplicas\">\n" + + "\n" + + "JoinTokens\x12\x16\n" + + "\x06worker\x18\x01 \x01(\tR\x06worker\x12\x18\n" + + "\amanager\x18\x02 \x01(\tR\amanager\"\xbb\x02\n" + + "\x06RootCA\x12 \n" + + "\x06ca_key\x18\x01 \x01(\fB\t\x92\x97\"\x05CAKeyR\x05caKey\x12#\n" + + "\aca_cert\x18\x02 \x01(\fB\n" + + "\x92\x97\"\x06CACertR\x06caCert\x120\n" + + "\fca_cert_hash\x18\x03 \x01(\tB\x0e\x92\x97\"\n" + + "CACertHashR\n" + + "caCertHash\x12?\n" + + "\vjoin_tokens\x18\x04 \x01(\v2\x1e.docker.swarmkit.v1.JoinTokensR\n" + + "joinTokens\x12E\n" + + "\rroot_rotation\x18\x05 \x01(\v2 .docker.swarmkit.v1.RootRotationR\frootRotation\x120\n" + + "\x14last_forced_rotation\x18\x06 \x01(\x04R\x12lastForcedRotation\"\xd0\x01\n" + + "\vCertificate\x120\n" + + "\x04role\x18\x01 \x01(\x0e2\x1c.docker.swarmkit.v1.NodeRoleR\x04role\x12\x19\n" + + "\x03csr\x18\x02 \x01(\fB\a\x92\x97\"\x03CSRR\x03csr\x12:\n" + + "\x06status\x18\x03 \x01(\v2\".docker.swarmkit.v1.IssuanceStatusR\x06status\x12 \n" + + "\vcertificate\x18\x04 \x01(\fR\vcertificate\x12\x16\n" + + "\x02cn\x18\x05 \x01(\tB\x06\x92\x97\"\x02CNR\x02cn\"\xcb\x01\n" + + "\rEncryptionKey\x12\x1c\n" + + "\tsubsystem\x18\x01 \x01(\tR\tsubsystem\x12I\n" + + "\talgorithm\x18\x02 \x01(\x0e2+.docker.swarmkit.v1.EncryptionKey.AlgorithmR\talgorithm\x12\x10\n" + + "\x03key\x18\x03 \x01(\fR\x03key\x12!\n" + + "\flamport_time\x18\x04 \x01(\x04R\vlamportTime\"\x1c\n" + + "\tAlgorithm\x12\x0f\n" + + "\vAES_128_GCM\x10\x00\"\xab\x01\n" + + "\rManagerStatus\x12\x17\n" + + "\araft_id\x18\x01 \x01(\x04R\x06raftId\x12\x12\n" + + "\x04addr\x18\x02 \x01(\tR\x04addr\x12\x16\n" + + "\x06leader\x18\x03 \x01(\bR\x06leader\x12U\n" + + "\freachability\x18\x04 \x01(\x0e21.docker.swarmkit.v1.RaftMemberStatus.ReachabilityR\freachability\"j\n" + + "\n" + + "FileTarget\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12\x19\n" + + "\x03uid\x18\x02 \x01(\tB\a\x92\x97\"\x03UIDR\x03uid\x12\x19\n" + + "\x03gid\x18\x03 \x01(\tB\a\x92\x97\"\x03GIDR\x03gid\x12\x12\n" + + "\x04mode\x18\x04 \x01(\rR\x04mode\"\x0f\n" + + "\rRuntimeTarget\"\x8f\x01\n" + + "\x0fSecretReference\x12\x1b\n" + + "\tsecret_id\x18\x01 \x01(\tR\bsecretId\x12\x1f\n" + + "\vsecret_name\x18\x02 \x01(\tR\n" + + "secretName\x124\n" + + "\x04file\x18\x03 \x01(\v2\x1e.docker.swarmkit.v1.FileTargetH\x00R\x04fileB\b\n" + + "\x06target\"\xce\x01\n" + + "\x0fConfigReference\x12\x1b\n" + + "\tconfig_id\x18\x01 \x01(\tR\bconfigId\x12\x1f\n" + + "\vconfig_name\x18\x02 \x01(\tR\n" + + "configName\x124\n" + + "\x04file\x18\x03 \x01(\v2\x1e.docker.swarmkit.v1.FileTargetH\x00R\x04file\x12=\n" + + "\aruntime\x18\x04 \x01(\v2!.docker.swarmkit.v1.RuntimeTargetH\x00R\aruntimeB\b\n" + + "\x06target\"L\n" + + "\x16BlacklistedCertificate\x122\n" + + "\x06expiry\x18\x01 \x01(\v2\x1a.google.protobuf.TimestampR\x06expiry\"\xa8\x02\n" + + "\fHealthConfig\x12\x12\n" + + "\x04test\x18\x01 \x03(\tR\x04test\x125\n" + + "\binterval\x18\x02 \x01(\v2\x19.google.protobuf.DurationR\binterval\x123\n" + + "\atimeout\x18\x03 \x01(\v2\x19.google.protobuf.DurationR\atimeout\x12\x18\n" + + "\aretries\x18\x04 \x01(\x05R\aretries\x12<\n" + + "\fstart_period\x18\x05 \x01(\v2\x19.google.protobuf.DurationR\vstartPeriod\x12@\n" + + "\x0estart_interval\x18\x06 \x01(\v2\x19.google.protobuf.DurationR\rstartInterval\"\xab\x02\n" + + "\x14MaybeEncryptedRecord\x12P\n" + + "\talgorithm\x18\x01 \x01(\x0e22.docker.swarmkit.v1.MaybeEncryptedRecord.AlgorithmR\talgorithm\x12\x12\n" + + "\x04data\x18\x02 \x01(\fR\x04data\x12\x14\n" + + "\x05nonce\x18\x03 \x01(\fR\x05nonce\"\x96\x01\n" + + "\tAlgorithm\x12\x1a\n" + + "\x04NONE\x10\x00\x1a\x10\xa2\x97\"\fNotEncrypted\x12@\n" + + "\x1aSECRETBOX_SALSA20_POLY1305\x10\x01\x1a \xa2\x97\"\x1cNACLSecretboxSalsa20Poly1305\x12+\n" + + "\x12FERNET_AES_128_CBC\x10\x02\x1a\x13\xa2\x97\"\x0fFernetAES128CBC\"\x9d\x01\n" + + "\fRootRotation\x12#\n" + + "\aca_cert\x18\x01 \x01(\fB\n" + + "\x92\x97\"\x06CACertR\x06caCert\x12 \n" + + "\x06ca_key\x18\x02 \x01(\fB\t\x92\x97\"\x05CAKeyR\x05caKey\x12F\n" + + "\x14cross_signed_ca_cert\x18\x03 \x01(\fB\x15\x92\x97\"\x11CrossSignedCACertR\x11crossSignedCaCert\"\xab\a\n" + + "\n" + + "Privileges\x12V\n" + + "\x0fcredential_spec\x18\x01 \x01(\v2-.docker.swarmkit.v1.Privileges.CredentialSpecR\x0ecredentialSpec\x12j\n" + + "\x0fselinux_context\x18\x02 \x01(\v2-.docker.swarmkit.v1.Privileges.SELinuxContextB\x12\x92\x97\"\x0eSELinuxContextR\x0eselinuxContext\x12D\n" + + "\aseccomp\x18\x03 \x01(\v2*.docker.swarmkit.v1.Privileges.SeccompOptsR\aseccomp\x12G\n" + + "\bapparmor\x18\x04 \x01(\v2+.docker.swarmkit.v1.Privileges.AppArmorOptsR\bapparmor\x12*\n" + + "\x11no_new_privileges\x18\x05 \x01(\bR\x0fnoNewPrivileges\x1ah\n" + + "\x0eCredentialSpec\x12\x14\n" + + "\x04file\x18\x01 \x01(\tH\x00R\x04file\x12\x1c\n" + + "\bregistry\x18\x02 \x01(\tH\x00R\bregistry\x12\x18\n" + + "\x06config\x18\x03 \x01(\tH\x00R\x06configB\b\n" + + "\x06source\x1a|\n" + + "\x0eSELinuxContext\x12\x18\n" + + "\adisable\x18\x01 \x01(\bR\adisable\x12\x12\n" + + "\x04user\x18\x02 \x01(\tR\x04user\x12\x12\n" + + "\x04role\x18\x03 \x01(\tR\x04role\x12\x12\n" + + "\x04type\x18\x04 \x01(\tR\x04type\x12\x14\n" + + "\x05level\x18\x05 \x01(\tR\x05level\x1a\xab\x01\n" + + "\vSeccompOpts\x12J\n" + + "\x04mode\x18\x01 \x01(\x0e26.docker.swarmkit.v1.Privileges.SeccompOpts.SeccompModeR\x04mode\x12\x18\n" + + "\aprofile\x18\x02 \x01(\fR\aprofile\"6\n" + + "\vSeccompMode\x12\v\n" + + "\aDEFAULT\x10\x00\x12\x0e\n" + + "\n" + + "UNCONFINED\x10\x01\x12\n" + + "\n" + + "\x06CUSTOM\x10\x02\x1a\x87\x01\n" + + "\fAppArmorOpts\x12L\n" + + "\x04mode\x18\x01 \x01(\x0e28.docker.swarmkit.v1.Privileges.AppArmorOpts.AppArmorModeR\x04mode\")\n" + + "\fAppArmorMode\x12\v\n" + + "\aDEFAULT\x10\x00\x12\f\n" + + "\bDISABLED\x10\x01\"\x90\x01\n" + + "\tJobStatus\x12@\n" + + "\rjob_iteration\x18\x01 \x01(\v2\x1b.docker.swarmkit.v1.VersionR\fjobIteration\x12A\n" + + "\x0elast_execution\x18\x02 \x01(\v2\x1a.google.protobuf.TimestampR\rlastExecution\"\x98\x05\n" + + "\x10VolumeAccessMode\x12@\n" + + "\x05scope\x18\x01 \x01(\x0e2*.docker.swarmkit.v1.VolumeAccessMode.ScopeR\x05scope\x12F\n" + + "\asharing\x18\x02 \x01(\x0e2,.docker.swarmkit.v1.VolumeAccessMode.SharingR\asharing\x12H\n" + + "\x05block\x18\x03 \x01(\v20.docker.swarmkit.v1.VolumeAccessMode.BlockVolumeH\x00R\x05block\x12H\n" + + "\x05mount\x18\x04 \x01(\v20.docker.swarmkit.v1.VolumeAccessMode.MountVolumeH\x00R\x05mount\x1a\r\n" + + "\vBlockVolume\x1aG\n" + + "\vMountVolume\x12\x17\n" + + "\afs_type\x18\x01 \x01(\tR\x06fsType\x12\x1f\n" + + "\vmount_flags\x18\x02 \x03(\tR\n" + + "mountFlags\"]\n" + + "\x05Scope\x12*\n" + + "\vSINGLE_NODE\x10\x00\x1a\x19\xa2\x97\"\x15VolumeScopeSingleNode\x12(\n" + + "\n" + + "MULTI_NODE\x10\x01\x1a\x18\xa2\x97\"\x14VolumeScopeMultiNode\"\x9f\x01\n" + + "\aSharing\x12\x1f\n" + + "\x04NONE\x10\x00\x1a\x15\xa2\x97\"\x11VolumeSharingNone\x12(\n" + + "\tREAD_ONLY\x10\x01\x1a\x19\xa2\x97\"\x15VolumeSharingReadOnly\x12*\n" + + "\n" + + "ONE_WRITER\x10\x02\x1a\x1a\xa2\x97\"\x16VolumeSharingOneWriter\x12\x1d\n" + + "\x03ALL\x10\x03\x1a\x14\xa2\x97\"\x10VolumeSharingAllB\r\n" + + "\vaccess_type\"8\n" + + "\fVolumeSecret\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x16\n" + + "\x06secret\x18\x02 \x01(\tR\x06secret\"\x96\x03\n" + + "\x13VolumePublishStatus\x12\x17\n" + + "\anode_id\x18\x01 \x01(\tR\x06nodeId\x12C\n" + + "\x05state\x18\x02 \x01(\x0e2-.docker.swarmkit.v1.VolumePublishStatus.StateR\x05state\x12d\n" + + "\x0fpublish_context\x18\x03 \x03(\v2;.docker.swarmkit.v1.VolumePublishStatus.PublishContextEntryR\x0epublishContext\x12\x18\n" + + "\amessage\x18\x05 \x01(\tR\amessage\x1aA\n" + + "\x13PublishContextEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"^\n" + + "\x05State\x12\x13\n" + + "\x0fPENDING_PUBLISH\x10\x00\x12\r\n" + + "\tPUBLISHED\x10\x01\x12\x1a\n" + + "\x16PENDING_NODE_UNPUBLISH\x10\x02\x12\x15\n" + + "\x11PENDING_UNPUBLISH\x10\x03\"\xbb\x02\n" + + "\n" + + "VolumeInfo\x12%\n" + + "\x0ecapacity_bytes\x18\x01 \x01(\x03R\rcapacityBytes\x12X\n" + + "\x0evolume_context\x18\x02 \x03(\v21.docker.swarmkit.v1.VolumeInfo.VolumeContextEntryR\rvolumeContext\x12\x1b\n" + + "\tvolume_id\x18\x03 \x01(\tR\bvolumeId\x12M\n" + + "\x13accessible_topology\x18\x04 \x03(\v2\x1c.docker.swarmkit.v1.TopologyR\x12accessibleTopology\x1a@\n" + + "\x12VolumeContextEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"W\n" + + "\rCapacityRange\x12%\n" + + "\x0erequired_bytes\x18\x01 \x01(\x03R\rrequiredBytes\x12\x1f\n" + + "\vlimit_bytes\x18\x02 \x01(\x03R\n" + + "limitBytes\"\xbe\x04\n" + + "\x10VolumeAssignment\x12\x0e\n" + + "\x02id\x18\x01 \x01(\tR\x02id\x12\x1b\n" + + "\tvolume_id\x18\x02 \x01(\tR\bvolumeId\x122\n" + + "\x06driver\x18\x03 \x01(\v2\x1a.docker.swarmkit.v1.DriverR\x06driver\x12^\n" + + "\x0evolume_context\x18\x04 \x03(\v27.docker.swarmkit.v1.VolumeAssignment.VolumeContextEntryR\rvolumeContext\x12a\n" + + "\x0fpublish_context\x18\x05 \x03(\v28.docker.swarmkit.v1.VolumeAssignment.PublishContextEntryR\x0epublishContext\x12E\n" + + "\vaccess_mode\x18\x06 \x01(\v2$.docker.swarmkit.v1.VolumeAccessModeR\n" + + "accessMode\x12:\n" + + "\asecrets\x18\a \x03(\v2 .docker.swarmkit.v1.VolumeSecretR\asecrets\x1a@\n" + + "\x12VolumeContextEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\x1aA\n" + + "\x13PublishContextEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"R\n" + + "\x10VolumeAttachment\x12\x0e\n" + + "\x02id\x18\x01 \x01(\tR\x02id\x12\x16\n" + + "\x06source\x18\x02 \x01(\tR\x06source\x12\x16\n" + + "\x06target\x18\x03 \x01(\tR\x06target\"\x8d\x01\n" + + "\x13TopologyRequirement\x12:\n" + + "\trequisite\x18\x01 \x03(\v2\x1c.docker.swarmkit.v1.TopologyR\trequisite\x12:\n" + + "\tpreferred\x18\x02 \x03(\v2\x1c.docker.swarmkit.v1.TopologyR\tpreferred\"\x8f\x01\n" + + "\bTopology\x12F\n" + + "\bsegments\x18\x01 \x03(\v2*.docker.swarmkit.v1.Topology.SegmentsEntryR\bsegments\x1a;\n" + + "\rSegmentsEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xda\x04\n" + + "\x10VolumeCapability\x12H\n" + + "\x05block\x18\x01 \x01(\v20.docker.swarmkit.v1.VolumeCapability.BlockVolumeH\x00R\x05block\x12H\n" + + "\x05mount\x18\x02 \x01(\v20.docker.swarmkit.v1.VolumeCapability.MountVolumeH\x00R\x05mount\x12P\n" + + "\vaccess_mode\x18\x03 \x01(\v2/.docker.swarmkit.v1.VolumeCapability.AccessModeR\n" + + "accessMode\x1a\r\n" + + "\vBlockVolume\x1aG\n" + + "\vMountVolume\x12\x17\n" + + "\afs_type\x18\x01 \x01(\tR\x06fsType\x12\x1f\n" + + "\vmount_flags\x18\x02 \x03(\tR\n" + + "mountFlags\x1a\xf8\x01\n" + + "\n" + + "AccessMode\x12H\n" + + "\x04mode\x18\x01 \x01(\x0e24.docker.swarmkit.v1.VolumeCapability.AccessMode.ModeR\x04mode\"\x9f\x01\n" + + "\x04Mode\x12\v\n" + + "\aUNKNOWN\x10\x00\x12\x16\n" + + "\x12SINGLE_NODE_WRITER\x10\x01\x12\x1b\n" + + "\x17SINGLE_NODE_READER_ONLY\x10\x02\x12\x1a\n" + + "\x16MULTI_NODE_READER_ONLY\x10\x03\x12\x1c\n" + + "\x18MULTI_NODE_SINGLE_WRITER\x10\x04\x12\x1b\n" + + "\x17MULTI_NODE_MULTI_WRITER\x10\x05B\r\n" + + "\vaccess_type*<\n" + + "\fResourceType\x12\b\n" + + "\x04TASK\x10\x00\x12\n" + + "\n" + + "\x06SECRET\x10\x01\x12\n" + + "\n" + + "\x06CONFIG\x10\x02\x12\n" + + "\n" + + "\x06VOLUME\x10\x03*\x93\x04\n" + + "\tTaskState\x12\x19\n" + + "\x03NEW\x10\x00\x1a\x10\xa2\x97\"\fTaskStateNew\x12!\n" + + "\aPENDING\x10@\x1a\x14\xa2\x97\"\x10TaskStatePending\x12$\n" + + "\bASSIGNED\x10\xc0\x01\x1a\x15\xa2\x97\"\x11TaskStateAssigned\x12$\n" + + "\bACCEPTED\x10\x80\x02\x1a\x15\xa2\x97\"\x11TaskStateAccepted\x12&\n" + + "\tPREPARING\x10\xc0\x02\x1a\x16\xa2\x97\"\x12TaskStatePreparing\x12\x1e\n" + + "\x05READY\x10\x80\x03\x1a\x12\xa2\x97\"\x0eTaskStateReady\x12$\n" + + "\bSTARTING\x10\xc0\x03\x1a\x15\xa2\x97\"\x11TaskStateStarting\x12\"\n" + + "\aRUNNING\x10\x80\x04\x1a\x14\xa2\x97\"\x10TaskStateRunning\x12%\n" + + "\bCOMPLETE\x10\xc0\x04\x1a\x16\xa2\x97\"\x12TaskStateCompleted\x12$\n" + + "\bSHUTDOWN\x10\x80\x05\x1a\x15\xa2\x97\"\x11TaskStateShutdown\x12 \n" + + "\x06FAILED\x10\xc0\x05\x1a\x13\xa2\x97\"\x0fTaskStateFailed\x12$\n" + + "\bREJECTED\x10\x80\x06\x1a\x15\xa2\x97\"\x11TaskStateRejected\x12 \n" + + "\x06REMOVE\x10\xa0\x06\x1a\x13\xa2\x97\"\x0fTaskStateRemove\x12$\n" + + "\bORPHANED\x10\xc0\x06\x1a\x15\xa2\x97\"\x11TaskStateOrphaned\x1a\r\x9a\x97\"\tTaskState*Z\n" + + "\bNodeRole\x12\x1e\n" + + "\x06WORKER\x10\x00\x1a\x12\xa2\x97\"\x0eNodeRoleWorker\x12 \n" + + "\aMANAGER\x10\x01\x1a\x13\xa2\x97\"\x0fNodeRoleManager\x1a\f\x9a\x97\"\bNodeRoleB!Z\x1fgithub.com/moby/swarmkit/v2/apib\x06proto3" - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *VolumeCapability) 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 ErrIntOverflowTypes - } - 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: VolumeCapability: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: VolumeCapability: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Block", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &VolumeCapability_BlockVolume{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.AccessType = &VolumeCapability_Block{v} - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Mount", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &VolumeCapability_MountVolume{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.AccessType = &VolumeCapability_Mount{v} - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AccessMode", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.AccessMode == nil { - m.AccessMode = &VolumeCapability_AccessMode{} - } - if err := m.AccessMode.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } +var ( + file_api_types_proto_rawDescOnce sync.Once + file_api_types_proto_rawDescData []byte +) - if iNdEx > l { - return io.ErrUnexpectedEOF +func file_api_types_proto_rawDescGZIP() []byte { + file_api_types_proto_rawDescOnce.Do(func() { + file_api_types_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_api_types_proto_rawDesc), len(file_api_types_proto_rawDesc))) + }) + return file_api_types_proto_rawDescData +} + +var file_api_types_proto_enumTypes = make([]protoimpl.EnumInfo, 25) +var file_api_types_proto_msgTypes = make([]protoimpl.MessageInfo, 94) +var file_api_types_proto_goTypes = []any{ + (ResourceType)(0), // 0: docker.swarmkit.v1.ResourceType + (TaskState)(0), // 1: docker.swarmkit.v1.TaskState + (NodeRole)(0), // 2: docker.swarmkit.v1.NodeRole + (RaftMemberStatus_Reachability)(0), // 3: docker.swarmkit.v1.RaftMemberStatus.Reachability + (NodeStatus_State)(0), // 4: docker.swarmkit.v1.NodeStatus.State + (MountType)(0), // 5: docker.swarmkit.v1.Mount.Type + (MountConsistency)(0), // 6: docker.swarmkit.v1.Mount.Consistency + (MountPropagation)(0), // 7: docker.swarmkit.v1.Mount.BindOptions.Propagation + (RestartCondition)(0), // 8: docker.swarmkit.v1.RestartPolicy.RestartCondition + (UpdateConfig_FailureAction)(0), // 9: docker.swarmkit.v1.UpdateConfig.FailureAction + (UpdateConfig_UpdateOrder)(0), // 10: docker.swarmkit.v1.UpdateConfig.UpdateOrder + (UpdateStatus_UpdateState)(0), // 11: docker.swarmkit.v1.UpdateStatus.UpdateState + (IPAMConfig_AddressFamily)(0), // 12: docker.swarmkit.v1.IPAMConfig.AddressFamily + (PortConfig_Protocol)(0), // 13: docker.swarmkit.v1.PortConfig.Protocol + (PublishMode)(0), // 14: docker.swarmkit.v1.PortConfig.PublishMode + (IssuanceStatus_State)(0), // 15: docker.swarmkit.v1.IssuanceStatus.State + (ExternalCA_CAProtocol)(0), // 16: docker.swarmkit.v1.ExternalCA.CAProtocol + (EncryptionKey_Algorithm)(0), // 17: docker.swarmkit.v1.EncryptionKey.Algorithm + (MaybeEncryptedRecord_Algorithm)(0), // 18: docker.swarmkit.v1.MaybeEncryptedRecord.Algorithm + (Privileges_SeccompOpts_SeccompMode)(0), // 19: docker.swarmkit.v1.Privileges.SeccompOpts.SeccompMode + (Privileges_AppArmorOpts_AppArmorMode)(0), // 20: docker.swarmkit.v1.Privileges.AppArmorOpts.AppArmorMode + (VolumeAccessMode_Scope)(0), // 21: docker.swarmkit.v1.VolumeAccessMode.Scope + (VolumeAccessMode_Sharing)(0), // 22: docker.swarmkit.v1.VolumeAccessMode.Sharing + (VolumePublishStatus_State)(0), // 23: docker.swarmkit.v1.VolumePublishStatus.State + (VolumeCapability_AccessMode_Mode)(0), // 24: docker.swarmkit.v1.VolumeCapability.AccessMode.Mode + (*Version)(nil), // 25: docker.swarmkit.v1.Version + (*IndexEntry)(nil), // 26: docker.swarmkit.v1.IndexEntry + (*Annotations)(nil), // 27: docker.swarmkit.v1.Annotations + (*NamedGenericResource)(nil), // 28: docker.swarmkit.v1.NamedGenericResource + (*DiscreteGenericResource)(nil), // 29: docker.swarmkit.v1.DiscreteGenericResource + (*GenericResource)(nil), // 30: docker.swarmkit.v1.GenericResource + (*Resources)(nil), // 31: docker.swarmkit.v1.Resources + (*ResourceRequirements)(nil), // 32: docker.swarmkit.v1.ResourceRequirements + (*Platform)(nil), // 33: docker.swarmkit.v1.Platform + (*PluginDescription)(nil), // 34: docker.swarmkit.v1.PluginDescription + (*EngineDescription)(nil), // 35: docker.swarmkit.v1.EngineDescription + (*NodeDescription)(nil), // 36: docker.swarmkit.v1.NodeDescription + (*NodeTLSInfo)(nil), // 37: docker.swarmkit.v1.NodeTLSInfo + (*NodeCSIInfo)(nil), // 38: docker.swarmkit.v1.NodeCSIInfo + (*RaftMemberStatus)(nil), // 39: docker.swarmkit.v1.RaftMemberStatus + (*NodeStatus)(nil), // 40: docker.swarmkit.v1.NodeStatus + (*Image)(nil), // 41: docker.swarmkit.v1.Image + (*Mount)(nil), // 42: docker.swarmkit.v1.Mount + (*RestartPolicy)(nil), // 43: docker.swarmkit.v1.RestartPolicy + (*UpdateConfig)(nil), // 44: docker.swarmkit.v1.UpdateConfig + (*UpdateStatus)(nil), // 45: docker.swarmkit.v1.UpdateStatus + (*ContainerStatus)(nil), // 46: docker.swarmkit.v1.ContainerStatus + (*PortStatus)(nil), // 47: docker.swarmkit.v1.PortStatus + (*TaskStatus)(nil), // 48: docker.swarmkit.v1.TaskStatus + (*NetworkAttachmentConfig)(nil), // 49: docker.swarmkit.v1.NetworkAttachmentConfig + (*IPAMConfig)(nil), // 50: docker.swarmkit.v1.IPAMConfig + (*PortConfig)(nil), // 51: docker.swarmkit.v1.PortConfig + (*Driver)(nil), // 52: docker.swarmkit.v1.Driver + (*IPAMOptions)(nil), // 53: docker.swarmkit.v1.IPAMOptions + (*Peer)(nil), // 54: docker.swarmkit.v1.Peer + (*WeightedPeer)(nil), // 55: docker.swarmkit.v1.WeightedPeer + (*IssuanceStatus)(nil), // 56: docker.swarmkit.v1.IssuanceStatus + (*AcceptancePolicy)(nil), // 57: docker.swarmkit.v1.AcceptancePolicy + (*ExternalCA)(nil), // 58: docker.swarmkit.v1.ExternalCA + (*CAConfig)(nil), // 59: docker.swarmkit.v1.CAConfig + (*OrchestrationConfig)(nil), // 60: docker.swarmkit.v1.OrchestrationConfig + (*TaskDefaults)(nil), // 61: docker.swarmkit.v1.TaskDefaults + (*DispatcherConfig)(nil), // 62: docker.swarmkit.v1.DispatcherConfig + (*RaftConfig)(nil), // 63: docker.swarmkit.v1.RaftConfig + (*EncryptionConfig)(nil), // 64: docker.swarmkit.v1.EncryptionConfig + (*SpreadOver)(nil), // 65: docker.swarmkit.v1.SpreadOver + (*PlacementPreference)(nil), // 66: docker.swarmkit.v1.PlacementPreference + (*Placement)(nil), // 67: docker.swarmkit.v1.Placement + (*JoinTokens)(nil), // 68: docker.swarmkit.v1.JoinTokens + (*RootCA)(nil), // 69: docker.swarmkit.v1.RootCA + (*Certificate)(nil), // 70: docker.swarmkit.v1.Certificate + (*EncryptionKey)(nil), // 71: docker.swarmkit.v1.EncryptionKey + (*ManagerStatus)(nil), // 72: docker.swarmkit.v1.ManagerStatus + (*FileTarget)(nil), // 73: docker.swarmkit.v1.FileTarget + (*RuntimeTarget)(nil), // 74: docker.swarmkit.v1.RuntimeTarget + (*SecretReference)(nil), // 75: docker.swarmkit.v1.SecretReference + (*ConfigReference)(nil), // 76: docker.swarmkit.v1.ConfigReference + (*BlacklistedCertificate)(nil), // 77: docker.swarmkit.v1.BlacklistedCertificate + (*HealthConfig)(nil), // 78: docker.swarmkit.v1.HealthConfig + (*MaybeEncryptedRecord)(nil), // 79: docker.swarmkit.v1.MaybeEncryptedRecord + (*RootRotation)(nil), // 80: docker.swarmkit.v1.RootRotation + (*Privileges)(nil), // 81: docker.swarmkit.v1.Privileges + (*JobStatus)(nil), // 82: docker.swarmkit.v1.JobStatus + (*VolumeAccessMode)(nil), // 83: docker.swarmkit.v1.VolumeAccessMode + (*VolumeSecret)(nil), // 84: docker.swarmkit.v1.VolumeSecret + (*VolumePublishStatus)(nil), // 85: docker.swarmkit.v1.VolumePublishStatus + (*VolumeInfo)(nil), // 86: docker.swarmkit.v1.VolumeInfo + (*CapacityRange)(nil), // 87: docker.swarmkit.v1.CapacityRange + (*VolumeAssignment)(nil), // 88: docker.swarmkit.v1.VolumeAssignment + (*VolumeAttachment)(nil), // 89: docker.swarmkit.v1.VolumeAttachment + (*TopologyRequirement)(nil), // 90: docker.swarmkit.v1.TopologyRequirement + (*Topology)(nil), // 91: docker.swarmkit.v1.Topology + (*VolumeCapability)(nil), // 92: docker.swarmkit.v1.VolumeCapability + nil, // 93: docker.swarmkit.v1.Annotations.LabelsEntry + nil, // 94: docker.swarmkit.v1.EngineDescription.LabelsEntry + (*Mount_BindOptions)(nil), // 95: docker.swarmkit.v1.Mount.BindOptions + (*Mount_VolumeOptions)(nil), // 96: docker.swarmkit.v1.Mount.VolumeOptions + (*Mount_TmpfsOptions)(nil), // 97: docker.swarmkit.v1.Mount.TmpfsOptions + nil, // 98: docker.swarmkit.v1.Mount.VolumeOptions.LabelsEntry + nil, // 99: docker.swarmkit.v1.NetworkAttachmentConfig.DriverAttachmentOptsEntry + nil, // 100: docker.swarmkit.v1.IPAMConfig.ReservedEntry + nil, // 101: docker.swarmkit.v1.Driver.OptionsEntry + (*AcceptancePolicy_RoleAdmissionPolicy)(nil), // 102: docker.swarmkit.v1.AcceptancePolicy.RoleAdmissionPolicy + (*AcceptancePolicy_RoleAdmissionPolicy_Secret)(nil), // 103: docker.swarmkit.v1.AcceptancePolicy.RoleAdmissionPolicy.Secret + nil, // 104: docker.swarmkit.v1.ExternalCA.OptionsEntry + (*Privileges_CredentialSpec)(nil), // 105: docker.swarmkit.v1.Privileges.CredentialSpec + (*Privileges_SELinuxContext)(nil), // 106: docker.swarmkit.v1.Privileges.SELinuxContext + (*Privileges_SeccompOpts)(nil), // 107: docker.swarmkit.v1.Privileges.SeccompOpts + (*Privileges_AppArmorOpts)(nil), // 108: docker.swarmkit.v1.Privileges.AppArmorOpts + (*VolumeAccessMode_BlockVolume)(nil), // 109: docker.swarmkit.v1.VolumeAccessMode.BlockVolume + (*VolumeAccessMode_MountVolume)(nil), // 110: docker.swarmkit.v1.VolumeAccessMode.MountVolume + nil, // 111: docker.swarmkit.v1.VolumePublishStatus.PublishContextEntry + nil, // 112: docker.swarmkit.v1.VolumeInfo.VolumeContextEntry + nil, // 113: docker.swarmkit.v1.VolumeAssignment.VolumeContextEntry + nil, // 114: docker.swarmkit.v1.VolumeAssignment.PublishContextEntry + nil, // 115: docker.swarmkit.v1.Topology.SegmentsEntry + (*VolumeCapability_BlockVolume)(nil), // 116: docker.swarmkit.v1.VolumeCapability.BlockVolume + (*VolumeCapability_MountVolume)(nil), // 117: docker.swarmkit.v1.VolumeCapability.MountVolume + (*VolumeCapability_AccessMode)(nil), // 118: docker.swarmkit.v1.VolumeCapability.AccessMode + (*wrapperspb.Int64Value)(nil), // 119: google.protobuf.Int64Value + (*durationpb.Duration)(nil), // 120: google.protobuf.Duration + (*timestamppb.Timestamp)(nil), // 121: google.protobuf.Timestamp +} +var file_api_types_proto_depIdxs = []int32{ + 93, // 0: docker.swarmkit.v1.Annotations.labels:type_name -> docker.swarmkit.v1.Annotations.LabelsEntry + 26, // 1: docker.swarmkit.v1.Annotations.indices:type_name -> docker.swarmkit.v1.IndexEntry + 28, // 2: docker.swarmkit.v1.GenericResource.named_resource_spec:type_name -> docker.swarmkit.v1.NamedGenericResource + 29, // 3: docker.swarmkit.v1.GenericResource.discrete_resource_spec:type_name -> docker.swarmkit.v1.DiscreteGenericResource + 30, // 4: docker.swarmkit.v1.Resources.generic:type_name -> docker.swarmkit.v1.GenericResource + 31, // 5: docker.swarmkit.v1.ResourceRequirements.limits:type_name -> docker.swarmkit.v1.Resources + 31, // 6: docker.swarmkit.v1.ResourceRequirements.reservations:type_name -> docker.swarmkit.v1.Resources + 119, // 7: docker.swarmkit.v1.ResourceRequirements.swap_bytes:type_name -> google.protobuf.Int64Value + 119, // 8: docker.swarmkit.v1.ResourceRequirements.memory_swappiness:type_name -> google.protobuf.Int64Value + 94, // 9: docker.swarmkit.v1.EngineDescription.labels:type_name -> docker.swarmkit.v1.EngineDescription.LabelsEntry + 34, // 10: docker.swarmkit.v1.EngineDescription.plugins:type_name -> docker.swarmkit.v1.PluginDescription + 33, // 11: docker.swarmkit.v1.NodeDescription.platform:type_name -> docker.swarmkit.v1.Platform + 31, // 12: docker.swarmkit.v1.NodeDescription.resources:type_name -> docker.swarmkit.v1.Resources + 35, // 13: docker.swarmkit.v1.NodeDescription.engine:type_name -> docker.swarmkit.v1.EngineDescription + 37, // 14: docker.swarmkit.v1.NodeDescription.tls_info:type_name -> docker.swarmkit.v1.NodeTLSInfo + 38, // 15: docker.swarmkit.v1.NodeDescription.csi_info:type_name -> docker.swarmkit.v1.NodeCSIInfo + 91, // 16: docker.swarmkit.v1.NodeCSIInfo.accessible_topology:type_name -> docker.swarmkit.v1.Topology + 3, // 17: docker.swarmkit.v1.RaftMemberStatus.reachability:type_name -> docker.swarmkit.v1.RaftMemberStatus.Reachability + 4, // 18: docker.swarmkit.v1.NodeStatus.state:type_name -> docker.swarmkit.v1.NodeStatus.State + 5, // 19: docker.swarmkit.v1.Mount.type:type_name -> docker.swarmkit.v1.Mount.Type + 6, // 20: docker.swarmkit.v1.Mount.consistency:type_name -> docker.swarmkit.v1.Mount.Consistency + 95, // 21: docker.swarmkit.v1.Mount.bind_options:type_name -> docker.swarmkit.v1.Mount.BindOptions + 96, // 22: docker.swarmkit.v1.Mount.volume_options:type_name -> docker.swarmkit.v1.Mount.VolumeOptions + 97, // 23: docker.swarmkit.v1.Mount.tmpfs_options:type_name -> docker.swarmkit.v1.Mount.TmpfsOptions + 8, // 24: docker.swarmkit.v1.RestartPolicy.condition:type_name -> docker.swarmkit.v1.RestartPolicy.RestartCondition + 120, // 25: docker.swarmkit.v1.RestartPolicy.delay:type_name -> google.protobuf.Duration + 120, // 26: docker.swarmkit.v1.RestartPolicy.window:type_name -> google.protobuf.Duration + 120, // 27: docker.swarmkit.v1.UpdateConfig.delay:type_name -> google.protobuf.Duration + 9, // 28: docker.swarmkit.v1.UpdateConfig.failure_action:type_name -> docker.swarmkit.v1.UpdateConfig.FailureAction + 120, // 29: docker.swarmkit.v1.UpdateConfig.monitor:type_name -> google.protobuf.Duration + 10, // 30: docker.swarmkit.v1.UpdateConfig.order:type_name -> docker.swarmkit.v1.UpdateConfig.UpdateOrder + 11, // 31: docker.swarmkit.v1.UpdateStatus.state:type_name -> docker.swarmkit.v1.UpdateStatus.UpdateState + 121, // 32: docker.swarmkit.v1.UpdateStatus.started_at:type_name -> google.protobuf.Timestamp + 121, // 33: docker.swarmkit.v1.UpdateStatus.completed_at:type_name -> google.protobuf.Timestamp + 51, // 34: docker.swarmkit.v1.PortStatus.ports:type_name -> docker.swarmkit.v1.PortConfig + 121, // 35: docker.swarmkit.v1.TaskStatus.timestamp:type_name -> google.protobuf.Timestamp + 1, // 36: docker.swarmkit.v1.TaskStatus.state:type_name -> docker.swarmkit.v1.TaskState + 46, // 37: docker.swarmkit.v1.TaskStatus.container:type_name -> docker.swarmkit.v1.ContainerStatus + 47, // 38: docker.swarmkit.v1.TaskStatus.port_status:type_name -> docker.swarmkit.v1.PortStatus + 121, // 39: docker.swarmkit.v1.TaskStatus.applied_at:type_name -> google.protobuf.Timestamp + 99, // 40: docker.swarmkit.v1.NetworkAttachmentConfig.driver_attachment_opts:type_name -> docker.swarmkit.v1.NetworkAttachmentConfig.DriverAttachmentOptsEntry + 12, // 41: docker.swarmkit.v1.IPAMConfig.family:type_name -> docker.swarmkit.v1.IPAMConfig.AddressFamily + 100, // 42: docker.swarmkit.v1.IPAMConfig.reserved:type_name -> docker.swarmkit.v1.IPAMConfig.ReservedEntry + 13, // 43: docker.swarmkit.v1.PortConfig.protocol:type_name -> docker.swarmkit.v1.PortConfig.Protocol + 14, // 44: docker.swarmkit.v1.PortConfig.publish_mode:type_name -> docker.swarmkit.v1.PortConfig.PublishMode + 101, // 45: docker.swarmkit.v1.Driver.options:type_name -> docker.swarmkit.v1.Driver.OptionsEntry + 52, // 46: docker.swarmkit.v1.IPAMOptions.driver:type_name -> docker.swarmkit.v1.Driver + 50, // 47: docker.swarmkit.v1.IPAMOptions.configs:type_name -> docker.swarmkit.v1.IPAMConfig + 54, // 48: docker.swarmkit.v1.WeightedPeer.peer:type_name -> docker.swarmkit.v1.Peer + 15, // 49: docker.swarmkit.v1.IssuanceStatus.state:type_name -> docker.swarmkit.v1.IssuanceStatus.State + 102, // 50: docker.swarmkit.v1.AcceptancePolicy.policies:type_name -> docker.swarmkit.v1.AcceptancePolicy.RoleAdmissionPolicy + 16, // 51: docker.swarmkit.v1.ExternalCA.protocol:type_name -> docker.swarmkit.v1.ExternalCA.CAProtocol + 104, // 52: docker.swarmkit.v1.ExternalCA.options:type_name -> docker.swarmkit.v1.ExternalCA.OptionsEntry + 120, // 53: docker.swarmkit.v1.CAConfig.node_cert_expiry:type_name -> google.protobuf.Duration + 58, // 54: docker.swarmkit.v1.CAConfig.external_cas:type_name -> docker.swarmkit.v1.ExternalCA + 52, // 55: docker.swarmkit.v1.TaskDefaults.log_driver:type_name -> docker.swarmkit.v1.Driver + 120, // 56: docker.swarmkit.v1.DispatcherConfig.heartbeat_period:type_name -> google.protobuf.Duration + 65, // 57: docker.swarmkit.v1.PlacementPreference.spread:type_name -> docker.swarmkit.v1.SpreadOver + 66, // 58: docker.swarmkit.v1.Placement.preferences:type_name -> docker.swarmkit.v1.PlacementPreference + 33, // 59: docker.swarmkit.v1.Placement.platforms:type_name -> docker.swarmkit.v1.Platform + 68, // 60: docker.swarmkit.v1.RootCA.join_tokens:type_name -> docker.swarmkit.v1.JoinTokens + 80, // 61: docker.swarmkit.v1.RootCA.root_rotation:type_name -> docker.swarmkit.v1.RootRotation + 2, // 62: docker.swarmkit.v1.Certificate.role:type_name -> docker.swarmkit.v1.NodeRole + 56, // 63: docker.swarmkit.v1.Certificate.status:type_name -> docker.swarmkit.v1.IssuanceStatus + 17, // 64: docker.swarmkit.v1.EncryptionKey.algorithm:type_name -> docker.swarmkit.v1.EncryptionKey.Algorithm + 3, // 65: docker.swarmkit.v1.ManagerStatus.reachability:type_name -> docker.swarmkit.v1.RaftMemberStatus.Reachability + 73, // 66: docker.swarmkit.v1.SecretReference.file:type_name -> docker.swarmkit.v1.FileTarget + 73, // 67: docker.swarmkit.v1.ConfigReference.file:type_name -> docker.swarmkit.v1.FileTarget + 74, // 68: docker.swarmkit.v1.ConfigReference.runtime:type_name -> docker.swarmkit.v1.RuntimeTarget + 121, // 69: docker.swarmkit.v1.BlacklistedCertificate.expiry:type_name -> google.protobuf.Timestamp + 120, // 70: docker.swarmkit.v1.HealthConfig.interval:type_name -> google.protobuf.Duration + 120, // 71: docker.swarmkit.v1.HealthConfig.timeout:type_name -> google.protobuf.Duration + 120, // 72: docker.swarmkit.v1.HealthConfig.start_period:type_name -> google.protobuf.Duration + 120, // 73: docker.swarmkit.v1.HealthConfig.start_interval:type_name -> google.protobuf.Duration + 18, // 74: docker.swarmkit.v1.MaybeEncryptedRecord.algorithm:type_name -> docker.swarmkit.v1.MaybeEncryptedRecord.Algorithm + 105, // 75: docker.swarmkit.v1.Privileges.credential_spec:type_name -> docker.swarmkit.v1.Privileges.CredentialSpec + 106, // 76: docker.swarmkit.v1.Privileges.selinux_context:type_name -> docker.swarmkit.v1.Privileges.SELinuxContext + 107, // 77: docker.swarmkit.v1.Privileges.seccomp:type_name -> docker.swarmkit.v1.Privileges.SeccompOpts + 108, // 78: docker.swarmkit.v1.Privileges.apparmor:type_name -> docker.swarmkit.v1.Privileges.AppArmorOpts + 25, // 79: docker.swarmkit.v1.JobStatus.job_iteration:type_name -> docker.swarmkit.v1.Version + 121, // 80: docker.swarmkit.v1.JobStatus.last_execution:type_name -> google.protobuf.Timestamp + 21, // 81: docker.swarmkit.v1.VolumeAccessMode.scope:type_name -> docker.swarmkit.v1.VolumeAccessMode.Scope + 22, // 82: docker.swarmkit.v1.VolumeAccessMode.sharing:type_name -> docker.swarmkit.v1.VolumeAccessMode.Sharing + 109, // 83: docker.swarmkit.v1.VolumeAccessMode.block:type_name -> docker.swarmkit.v1.VolumeAccessMode.BlockVolume + 110, // 84: docker.swarmkit.v1.VolumeAccessMode.mount:type_name -> docker.swarmkit.v1.VolumeAccessMode.MountVolume + 23, // 85: docker.swarmkit.v1.VolumePublishStatus.state:type_name -> docker.swarmkit.v1.VolumePublishStatus.State + 111, // 86: docker.swarmkit.v1.VolumePublishStatus.publish_context:type_name -> docker.swarmkit.v1.VolumePublishStatus.PublishContextEntry + 112, // 87: docker.swarmkit.v1.VolumeInfo.volume_context:type_name -> docker.swarmkit.v1.VolumeInfo.VolumeContextEntry + 91, // 88: docker.swarmkit.v1.VolumeInfo.accessible_topology:type_name -> docker.swarmkit.v1.Topology + 52, // 89: docker.swarmkit.v1.VolumeAssignment.driver:type_name -> docker.swarmkit.v1.Driver + 113, // 90: docker.swarmkit.v1.VolumeAssignment.volume_context:type_name -> docker.swarmkit.v1.VolumeAssignment.VolumeContextEntry + 114, // 91: docker.swarmkit.v1.VolumeAssignment.publish_context:type_name -> docker.swarmkit.v1.VolumeAssignment.PublishContextEntry + 83, // 92: docker.swarmkit.v1.VolumeAssignment.access_mode:type_name -> docker.swarmkit.v1.VolumeAccessMode + 84, // 93: docker.swarmkit.v1.VolumeAssignment.secrets:type_name -> docker.swarmkit.v1.VolumeSecret + 91, // 94: docker.swarmkit.v1.TopologyRequirement.requisite:type_name -> docker.swarmkit.v1.Topology + 91, // 95: docker.swarmkit.v1.TopologyRequirement.preferred:type_name -> docker.swarmkit.v1.Topology + 115, // 96: docker.swarmkit.v1.Topology.segments:type_name -> docker.swarmkit.v1.Topology.SegmentsEntry + 116, // 97: docker.swarmkit.v1.VolumeCapability.block:type_name -> docker.swarmkit.v1.VolumeCapability.BlockVolume + 117, // 98: docker.swarmkit.v1.VolumeCapability.mount:type_name -> docker.swarmkit.v1.VolumeCapability.MountVolume + 118, // 99: docker.swarmkit.v1.VolumeCapability.access_mode:type_name -> docker.swarmkit.v1.VolumeCapability.AccessMode + 7, // 100: docker.swarmkit.v1.Mount.BindOptions.propagation:type_name -> docker.swarmkit.v1.Mount.BindOptions.Propagation + 98, // 101: docker.swarmkit.v1.Mount.VolumeOptions.labels:type_name -> docker.swarmkit.v1.Mount.VolumeOptions.LabelsEntry + 52, // 102: docker.swarmkit.v1.Mount.VolumeOptions.driver_config:type_name -> docker.swarmkit.v1.Driver + 2, // 103: docker.swarmkit.v1.AcceptancePolicy.RoleAdmissionPolicy.role:type_name -> docker.swarmkit.v1.NodeRole + 103, // 104: docker.swarmkit.v1.AcceptancePolicy.RoleAdmissionPolicy.secret:type_name -> docker.swarmkit.v1.AcceptancePolicy.RoleAdmissionPolicy.Secret + 19, // 105: docker.swarmkit.v1.Privileges.SeccompOpts.mode:type_name -> docker.swarmkit.v1.Privileges.SeccompOpts.SeccompMode + 20, // 106: docker.swarmkit.v1.Privileges.AppArmorOpts.mode:type_name -> docker.swarmkit.v1.Privileges.AppArmorOpts.AppArmorMode + 24, // 107: docker.swarmkit.v1.VolumeCapability.AccessMode.mode:type_name -> docker.swarmkit.v1.VolumeCapability.AccessMode.Mode + 108, // [108:108] is the sub-list for method output_type + 108, // [108:108] is the sub-list for method input_type + 108, // [108:108] is the sub-list for extension type_name + 108, // [108:108] is the sub-list for extension extendee + 0, // [0:108] is the sub-list for field type_name +} + +func init() { file_api_types_proto_init() } +func file_api_types_proto_init() { + if File_api_types_proto != nil { + return + } + file_api_types_proto_msgTypes[5].OneofWrappers = []any{ + (*GenericResource_NamedResourceSpec)(nil), + (*GenericResource_DiscreteResourceSpec)(nil), } - return nil -} -func (m *VolumeCapability_BlockVolume) 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 ErrIntOverflowTypes - } - 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: BlockVolume: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: BlockVolume: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } + file_api_types_proto_msgTypes[23].OneofWrappers = []any{ + (*TaskStatus_Container)(nil), } - - if iNdEx > l { - return io.ErrUnexpectedEOF + file_api_types_proto_msgTypes[41].OneofWrappers = []any{ + (*PlacementPreference_Spread)(nil), } - return nil -} -func (m *VolumeCapability_MountVolume) 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 ErrIntOverflowTypes - } - 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: MountVolume: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MountVolume: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field FsType", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.FsType = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MountFlags", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - 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 ErrInvalidLengthTypes - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.MountFlags = append(m.MountFlags, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } + file_api_types_proto_msgTypes[50].OneofWrappers = []any{ + (*SecretReference_File)(nil), } - - if iNdEx > l { - return io.ErrUnexpectedEOF + file_api_types_proto_msgTypes[51].OneofWrappers = []any{ + (*ConfigReference_File)(nil), + (*ConfigReference_Runtime)(nil), } - return nil -} -func (m *VolumeCapability_AccessMode) 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 ErrIntOverflowTypes - } - 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: AccessMode: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: AccessMode: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Mode", wireType) - } - m.Mode = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Mode |= VolumeCapability_AccessMode_Mode(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } + file_api_types_proto_msgTypes[58].OneofWrappers = []any{ + (*VolumeAccessMode_Block)(nil), + (*VolumeAccessMode_Mount)(nil), } - - if iNdEx > l { - return io.ErrUnexpectedEOF + file_api_types_proto_msgTypes[67].OneofWrappers = []any{ + (*VolumeCapability_Block)(nil), + (*VolumeCapability_Mount)(nil), } - return nil -} -func skipTypes(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - depth := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowTypes - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowTypes - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - case 1: - iNdEx += 8 - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowTypes - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLengthTypes - } - iNdEx += length - case 3: - depth++ - case 4: - if depth == 0 { - return 0, ErrUnexpectedEndOfGroupTypes - } - depth-- - case 5: - iNdEx += 4 - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - if iNdEx < 0 { - return 0, ErrInvalidLengthTypes - } - if depth == 0 { - return iNdEx, nil - } + file_api_types_proto_msgTypes[80].OneofWrappers = []any{ + (*Privileges_CredentialSpec_File)(nil), + (*Privileges_CredentialSpec_Registry)(nil), + (*Privileges_CredentialSpec_Config)(nil), } - return 0, io.ErrUnexpectedEOF + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_api_types_proto_rawDesc), len(file_api_types_proto_rawDesc)), + NumEnums: 25, + NumMessages: 94, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_api_types_proto_goTypes, + DependencyIndexes: file_api_types_proto_depIdxs, + EnumInfos: file_api_types_proto_enumTypes, + MessageInfos: file_api_types_proto_msgTypes, + }.Build() + File_api_types_proto = out.File + file_api_types_proto_goTypes = nil + file_api_types_proto_depIdxs = nil } - -var ( - ErrInvalidLengthTypes = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowTypes = fmt.Errorf("proto: integer overflow") - ErrUnexpectedEndOfGroupTypes = fmt.Errorf("proto: unexpected end of group") -) diff --git a/api/types.proto b/api/types.proto index 74f5c7135f..bfa686c3b7 100644 --- a/api/types.proto +++ b/api/types.proto @@ -2,10 +2,12 @@ syntax = "proto3"; package docker.swarmkit.v1; +option go_package = "github.com/moby/swarmkit/v2/api"; + import "google/protobuf/timestamp.proto"; import "google/protobuf/duration.proto"; import "google/protobuf/wrappers.proto"; -import "gogoproto/gogo.proto"; +import "protobuf/plugin/plugin.proto"; // This file contains types that are common to objects and spec or that are not // considered first-class within the cluster object-model. @@ -28,7 +30,7 @@ message Annotations { // Indices provides keys and values for indexing this object. // A single key may have multiple values. - repeated IndexEntry indices = 4 [(gogoproto.nullable) = false]; + repeated IndexEntry indices = 4; } // NamedGenericResource represents a "user defined" resource which is defined @@ -67,7 +69,7 @@ enum ResourceType { message Resources { // Amount of CPUs (e.g. 2000000000 = 2 CPU cores) - int64 nano_cpus = 1 [(gogoproto.customname) = "NanoCPUs"]; + int64 nano_cpus = 1 [(docker.protobuf.plugin.go_name) = "NanoCPUs"]; // Amount of memory in bytes. int64 memory_bytes = 2; @@ -99,7 +101,7 @@ message Platform { string architecture = 1; // Operating System (e.g. linux) - string os = 2 [(gogoproto.customname) = "OS"]; + string os = 2 [(docker.protobuf.plugin.go_name) = "OS"]; } // PluginDescription describes an engine plugin. @@ -121,7 +123,7 @@ message EngineDescription { map labels = 2; // Volume, Network, and Auth plugins - repeated PluginDescription plugins = 3 [(gogoproto.nullable) = false]; + repeated PluginDescription plugins = 3; } message NodeDescription { @@ -139,12 +141,12 @@ message NodeDescription { EngineDescription engine = 4; // Information on the node's TLS setup - NodeTLSInfo tls_info = 5 [(gogoproto.customname) = "TLSInfo"]; + NodeTLSInfo tls_info = 5 [(docker.protobuf.plugin.go_name) = "TLSInfo"]; // FIPS indicates whether the node has FIPS-enabled - bool fips = 6 [(gogoproto.customname) = "FIPS"]; + bool fips = 6 [(docker.protobuf.plugin.go_name) = "FIPS"]; - repeated NodeCSIInfo csi_info = 7 [(gogoproto.customname) = "CSIInfo"]; + repeated NodeCSIInfo csi_info = 7 [(docker.protobuf.plugin.go_name) = "CSIInfo"]; } message NodeTLSInfo { @@ -234,14 +236,13 @@ message Image { // mount. This corresponds to flags and data, respectively, in the syscall. message Mount { enum Type { - option (gogoproto.goproto_enum_prefix) = false; - option (gogoproto.enum_customname) = "MountType"; - - BIND = 0 [(gogoproto.enumvalue_customname) = "MountTypeBind"]; // Bind mount host dir - VOLUME = 1 [(gogoproto.enumvalue_customname) = "MountTypeVolume"]; // Remote storage volumes - TMPFS = 2 [(gogoproto.enumvalue_customname) = "MountTypeTmpfs"]; // Mount a tmpfs - NPIPE = 3 [(gogoproto.enumvalue_customname) = "MountTypeNamedPipe"]; // Windows named pipes - CLUSTER = 4 [(gogoproto.enumvalue_customname) = "MountTypeCluster"]; // CSI volume + option (docker.protobuf.plugin.go_enum_name) = "MountType"; + + BIND = 0 [(docker.protobuf.plugin.go_enum_value_name) = "MountTypeBind"]; // Bind mount host dir + VOLUME = 1 [(docker.protobuf.plugin.go_enum_value_name) = "MountTypeVolume"]; // Remote storage volumes + TMPFS = 2 [(docker.protobuf.plugin.go_enum_value_name) = "MountTypeTmpfs"]; // Mount a tmpfs + NPIPE = 3 [(docker.protobuf.plugin.go_enum_value_name) = "MountTypeNamedPipe"]; // Windows named pipes + CLUSTER = 4 [(docker.protobuf.plugin.go_enum_value_name) = "MountTypeCluster"]; // CSI volume } // Type defines the nature of the mount. @@ -259,51 +260,49 @@ message Mount { string target = 3; // ReadOnly should be set to true if the mount should not be writable. - bool readonly = 4 [(gogoproto.customname) = "ReadOnly"]; + bool readonly = 4 [(docker.protobuf.plugin.go_name) = "ReadOnly"]; // Consistency indicates the tolerable level of file system consistency enum Consistency { - option (gogoproto.goproto_enum_prefix) = false; - option (gogoproto.enum_customname) = "MountConsistency"; + option (docker.protobuf.plugin.go_enum_name) = "MountConsistency"; - DEFAULT = 0 [(gogoproto.enumvalue_customname) = "MountConsistencyDefault"]; - CONSISTENT = 1 [(gogoproto.enumvalue_customname) = "MountConsistencyFull"]; - CACHED = 2 [(gogoproto.enumvalue_customname) = "MountConsistencyCached"]; - DELEGATED = 3 [(gogoproto.enumvalue_customname) = "MountConsistencyDelegated"]; + DEFAULT = 0 [(docker.protobuf.plugin.go_enum_value_name) = "MountConsistencyDefault"]; + CONSISTENT = 1 [(docker.protobuf.plugin.go_enum_value_name) = "MountConsistencyFull"]; + CACHED = 2 [(docker.protobuf.plugin.go_enum_value_name) = "MountConsistencyCached"]; + DELEGATED = 3 [(docker.protobuf.plugin.go_enum_value_name) = "MountConsistencyDelegated"]; } Consistency consistency = 8; // BindOptions specifies options that are specific to a bind mount. message BindOptions { enum Propagation { - option (gogoproto.goproto_enum_prefix) = false; - option (gogoproto.enum_customname) = "MountPropagation"; - - RPRIVATE = 0 [(gogoproto.enumvalue_customname) = "MountPropagationRPrivate"]; - PRIVATE = 1 [(gogoproto.enumvalue_customname) = "MountPropagationPrivate"]; - RSHARED = 2 [(gogoproto.enumvalue_customname) = "MountPropagationRShared"]; - SHARED = 3 [(gogoproto.enumvalue_customname) = "MountPropagationShared"]; - RSLAVE = 4 [(gogoproto.enumvalue_customname) = "MountPropagationRSlave"]; - SLAVE = 5 [(gogoproto.enumvalue_customname) = "MountPropagationSlave"]; + option (docker.protobuf.plugin.go_enum_name) = "MountPropagation"; + + RPRIVATE = 0 [(docker.protobuf.plugin.go_enum_value_name) = "MountPropagationRPrivate"]; + PRIVATE = 1 [(docker.protobuf.plugin.go_enum_value_name) = "MountPropagationPrivate"]; + RSHARED = 2 [(docker.protobuf.plugin.go_enum_value_name) = "MountPropagationRShared"]; + SHARED = 3 [(docker.protobuf.plugin.go_enum_value_name) = "MountPropagationShared"]; + RSLAVE = 4 [(docker.protobuf.plugin.go_enum_value_name) = "MountPropagationRSlave"]; + SLAVE = 5 [(docker.protobuf.plugin.go_enum_value_name) = "MountPropagationSlave"]; } // Propagation mode of mount. Propagation propagation = 1; // allows non-recursive bind-mount, i.e. mount(2) with "bind" rather than "rbind". - bool nonrecursive = 2 [(gogoproto.customname) = "NonRecursive"]; + bool nonrecursive = 2 [(docker.protobuf.plugin.go_name) = "NonRecursive"]; // Create the mount point - bool createmountpoint = 3 [(gogoproto.customname) = "CreateMountpoint"]; + bool createmountpoint = 3 [(docker.protobuf.plugin.go_name) = "CreateMountpoint"]; // ReadOnlyNonRecursive makes the mount non-recursively read-only, but still leaves the mount recursive // (unless NonRecursive is set to true in conjunction). - bool readonlynonrecursive = 4 [(gogoproto.customname) = "ReadOnlyNonRecursive"]; + bool readonlynonrecursive = 4 [(docker.protobuf.plugin.go_name) = "ReadOnlyNonRecursive"]; // ReadOnlyForceRecursive raises an error if the mount cannot be made recursively read-only. - bool readonlyforcerecursive = 5 [(gogoproto.customname) = "ReadOnlyForceRecursive"]; + bool readonlyforcerecursive = 5 [(docker.protobuf.plugin.go_name) = "ReadOnlyForceRecursive"]; } // VolumeOptions contains parameters for mounting the volume. message VolumeOptions { // nocopy prevents automatic copying of data to the volume with data from target - bool nocopy = 1 [(gogoproto.customname) = "NoCopy"]; + bool nocopy = 1 [(docker.protobuf.plugin.go_name) = "NoCopy"]; // labels to apply to the volume if creating map labels = 2; @@ -315,7 +314,7 @@ message Mount { Driver driver_config = 3; // subpath inside the volume to mount. - string subpath = 4 [(gogoproto.customname) = "Subpath"]; + string subpath = 4 [(docker.protobuf.plugin.go_name) = "Subpath"]; } message TmpfsOptions { @@ -330,7 +329,7 @@ message Mount { int64 size_bytes = 1; // Mode of the tmpfs upon creation - uint32 mode = 2 [(gogoproto.customtype) = "os.FileMode", (gogoproto.nullable) = false]; + uint32 mode = 2 ; // Options passed to tmpfs mount string options = 3; @@ -379,11 +378,10 @@ message Mount { message RestartPolicy { enum RestartCondition { - option (gogoproto.goproto_enum_prefix) = false; - option (gogoproto.enum_customname) = "RestartCondition"; - NONE = 0 [(gogoproto.enumvalue_customname) = "RestartOnNone"]; - ON_FAILURE = 1 [(gogoproto.enumvalue_customname) = "RestartOnFailure"]; - ANY = 2 [(gogoproto.enumvalue_customname) = "RestartOnAny"]; + option (docker.protobuf.plugin.go_enum_name) = "RestartCondition"; + NONE = 0 [(docker.protobuf.plugin.go_enum_value_name) = "RestartOnNone"]; + ON_FAILURE = 1 [(docker.protobuf.plugin.go_enum_value_name) = "RestartOnFailure"]; + ANY = 2 [(docker.protobuf.plugin.go_enum_value_name) = "RestartOnAny"]; } RestartCondition condition = 1; @@ -410,7 +408,7 @@ message UpdateConfig { uint64 parallelism = 1; // Amount of time between updates. - google.protobuf.Duration delay = 2 [(gogoproto.stdduration) = true, (gogoproto.nullable) = false]; + google.protobuf.Duration delay = 2 ; enum FailureAction { PAUSE = 0; @@ -510,33 +508,31 @@ message UpdateStatus { enum TaskState { // TODO(aluzzardi): Move it back into `TaskStatus` because of the naming // collisions of enums. - - option (gogoproto.goproto_enum_prefix) = false; - option (gogoproto.enum_customname) = "TaskState"; - NEW = 0 [(gogoproto.enumvalue_customname)="TaskStateNew"]; - PENDING = 64 [(gogoproto.enumvalue_customname)="TaskStatePending"]; // waiting for scheduling decision - ASSIGNED = 192 [(gogoproto.enumvalue_customname)="TaskStateAssigned"]; - ACCEPTED = 256 [(gogoproto.enumvalue_customname)="TaskStateAccepted"]; // task has been accepted by an agent. - PREPARING = 320 [(gogoproto.enumvalue_customname)="TaskStatePreparing"]; - READY = 384 [(gogoproto.enumvalue_customname)="TaskStateReady"]; - STARTING = 448 [(gogoproto.enumvalue_customname)="TaskStateStarting"]; - RUNNING = 512 [(gogoproto.enumvalue_customname)="TaskStateRunning"]; - COMPLETE = 576 [(gogoproto.enumvalue_customname)="TaskStateCompleted"]; // successful completion of task (not error code, just ran) - SHUTDOWN = 640 [(gogoproto.enumvalue_customname)="TaskStateShutdown"]; // orchestrator requested shutdown - FAILED = 704 [(gogoproto.enumvalue_customname)="TaskStateFailed"]; // task execution failed with error + option (docker.protobuf.plugin.go_enum_name) = "TaskState"; + NEW = 0 [(docker.protobuf.plugin.go_enum_value_name)="TaskStateNew"]; + PENDING = 64 [(docker.protobuf.plugin.go_enum_value_name)="TaskStatePending"]; // waiting for scheduling decision + ASSIGNED = 192 [(docker.protobuf.plugin.go_enum_value_name)="TaskStateAssigned"]; + ACCEPTED = 256 [(docker.protobuf.plugin.go_enum_value_name)="TaskStateAccepted"]; // task has been accepted by an agent. + PREPARING = 320 [(docker.protobuf.plugin.go_enum_value_name)="TaskStatePreparing"]; + READY = 384 [(docker.protobuf.plugin.go_enum_value_name)="TaskStateReady"]; + STARTING = 448 [(docker.protobuf.plugin.go_enum_value_name)="TaskStateStarting"]; + RUNNING = 512 [(docker.protobuf.plugin.go_enum_value_name)="TaskStateRunning"]; + COMPLETE = 576 [(docker.protobuf.plugin.go_enum_value_name)="TaskStateCompleted"]; // successful completion of task (not error code, just ran) + SHUTDOWN = 640 [(docker.protobuf.plugin.go_enum_value_name)="TaskStateShutdown"]; // orchestrator requested shutdown + FAILED = 704 [(docker.protobuf.plugin.go_enum_value_name)="TaskStateFailed"]; // task execution failed with error // TaskStateRejected means a task never ran, for instance if something about // the environment failed (e.g. setting up a port on that node failed). - REJECTED = 768 [(gogoproto.enumvalue_customname)="TaskStateRejected"]; // task could not be executed here. + REJECTED = 768 [(docker.protobuf.plugin.go_enum_value_name)="TaskStateRejected"]; // task could not be executed here. // TaskStateRemove is used to correctly handle service deletions and scale // downs. This allows us to keep track of tasks that have been marked for // deletion, but can't yet be removed because the agent is in the process of // shutting them down. Once the agent has shut down tasks with desired state // REMOVE, the task reaper is responsible for removing them. - REMOVE = 800 [(gogoproto.enumvalue_customname)="TaskStateRemove"]; + REMOVE = 800 [(docker.protobuf.plugin.go_enum_value_name)="TaskStateRemove"]; // TaskStateOrphaned is used to free up resources associated with service // tasks on unresponsive nodes without having to delete those tasks. This // state is directly assigned to the task by the orchestrator. - ORPHANED = 832 [(gogoproto.enumvalue_customname)="TaskStateOrphaned"]; + ORPHANED = 832 [(docker.protobuf.plugin.go_enum_value_name)="TaskStateOrphaned"]; // NOTE(stevvooe): The state of a task is actually a lamport clock, in that // given two observations, the greater of the two can be considered @@ -559,7 +555,7 @@ enum TaskState { message ContainerStatus { string container_id = 1; - int32 pid = 2 [(gogoproto.customname) = "PID"]; + int32 pid = 2 [(docker.protobuf.plugin.go_name) = "PID"]; int32 exit_code = 3; } @@ -681,26 +677,24 @@ message IPAMConfig { // request to this port to any node on the cluster. message PortConfig { enum Protocol { - option (gogoproto.goproto_enum_prefix) = false; - TCP = 0 [(gogoproto.enumvalue_customname) = "ProtocolTCP"]; - UDP = 1 [(gogoproto.enumvalue_customname) = "ProtocolUDP"]; - SCTP = 2 [(gogoproto.enumvalue_customname) = "ProtocolSCTP"]; + TCP = 0 [(docker.protobuf.plugin.go_enum_value_name) = "ProtocolTCP"]; + UDP = 1 [(docker.protobuf.plugin.go_enum_value_name) = "ProtocolUDP"]; + SCTP = 2 [(docker.protobuf.plugin.go_enum_value_name) = "ProtocolSCTP"]; } // PublishMode controls how ports are published on the swarm. enum PublishMode { - option (gogoproto.enum_customname) = "PublishMode"; - option (gogoproto.goproto_enum_prefix) = false; + option (docker.protobuf.plugin.go_enum_name) = "PublishMode"; // PublishModeIngress exposes the port across the cluster on all nodes. - INGRESS = 0 [(gogoproto.enumvalue_customname) = "PublishModeIngress"]; + INGRESS = 0 [(docker.protobuf.plugin.go_enum_value_name) = "PublishModeIngress"]; // PublishModeHost exposes the port on just the target host. If the // published port is undefined, an ephemeral port will be allocated. If // the published port is defined, the node will attempt to allocate it, // erroring the task if it fails. - HOST = 1 [(gogoproto.enumvalue_customname) = "PublishModeHost"]; + HOST = 1 [(docker.protobuf.plugin.go_enum_value_name) = "PublishModeHost"]; } // Name for the port. If provided the port information can @@ -752,20 +746,19 @@ message WeightedPeer { message IssuanceStatus { enum State { - option (gogoproto.goproto_enum_prefix) = false; - UNKNOWN = 0 [(gogoproto.enumvalue_customname) = "IssuanceStateUnknown"]; + UNKNOWN = 0 [(docker.protobuf.plugin.go_enum_value_name) = "IssuanceStateUnknown"]; // A new certificate should be issued - RENEW = 1 [(gogoproto.enumvalue_customname)="IssuanceStateRenew"]; + RENEW = 1 [(docker.protobuf.plugin.go_enum_value_name)="IssuanceStateRenew"]; // Certificate is pending acceptance - PENDING = 2 [(gogoproto.enumvalue_customname)="IssuanceStatePending"]; + PENDING = 2 [(docker.protobuf.plugin.go_enum_value_name)="IssuanceStatePending"]; // successful completion certificate issuance - ISSUED = 3 [(gogoproto.enumvalue_customname)="IssuanceStateIssued"]; + ISSUED = 3 [(docker.protobuf.plugin.go_enum_value_name)="IssuanceStateIssued"]; // Certificate issuance failed - FAILED = 4 [(gogoproto.enumvalue_customname)="IssuanceStateFailed"]; + FAILED = 4 [(docker.protobuf.plugin.go_enum_value_name)="IssuanceStateFailed"]; // Signals workers to renew their certificate. From the CA's perspective // this is equivalent to IssuanceStateIssued: a noop. - ROTATE = 5 [(gogoproto.enumvalue_customname)="IssuanceStateRotate"]; + ROTATE = 5 [(docker.protobuf.plugin.go_enum_value_name)="IssuanceStateRotate"]; } State state = 1; @@ -798,21 +791,21 @@ message AcceptancePolicy { message ExternalCA { enum CAProtocol { - CFSSL = 0 [(gogoproto.enumvalue_customname) = "CAProtocolCFSSL"]; + CFSSL = 0 [(docker.protobuf.plugin.go_enum_value_name) = "CAProtocolCFSSL"]; } // Protocol is the protocol used by this external CA. CAProtocol protocol = 1; // URL is the URL where the external CA can be reached. - string url = 2 [(gogoproto.customname) = "URL"]; + string url = 2 [(docker.protobuf.plugin.go_name) = "URL"]; // Options is a set of additional key/value pairs whose interpretation // depends on the specified CA type. map options = 3; // CACert specifies which root CA is used by this external CA - bytes ca_cert = 4 [(gogoproto.customname) = "CACert"]; + bytes ca_cert = 4 [(docker.protobuf.plugin.go_name) = "CACert"]; } message CAConfig { @@ -822,17 +815,17 @@ message CAConfig { // ExternalCAs is a list of CAs to which a manager node will make // certificate signing requests for node certificates. - repeated ExternalCA external_cas = 2 [(gogoproto.customname) = "ExternalCAs"]; + repeated ExternalCA external_cas = 2 [(docker.protobuf.plugin.go_name) = "ExternalCAs"]; // SigningCACert is the desired CA certificate to be used as the root and // signing CA for the swarm. If not provided, indicates that we are either happy // with the current configuration, or (together with a bump in the ForceRotate value) // that we want a certificate and key generated for us. - bytes signing_ca_cert = 3 [(gogoproto.customname) = "SigningCACert"]; + bytes signing_ca_cert = 3 [(docker.protobuf.plugin.go_name) = "SigningCACert"]; // SigningCAKey is the desired private key, matching the signing CA cert, to be used // to sign certificates for the swarm - bytes signing_ca_key = 4 [(gogoproto.customname) = "SigningCAKey"]; + bytes signing_ca_key = 4 [(docker.protobuf.plugin.go_name) = "SigningCAKey"]; // ForceRotate is a counter that triggers a root CA rotation even if no relevant // parameters have been in the spec. This will force the manager to generate a new @@ -935,16 +928,16 @@ message JoinTokens { message RootCA { // CAKey is the root CA private key. - bytes ca_key = 1 [(gogoproto.customname) = "CAKey"]; + bytes ca_key = 1 [(docker.protobuf.plugin.go_name) = "CAKey"]; // CACert is the root CA certificate. - bytes ca_cert = 2 [(gogoproto.customname) = "CACert"]; + bytes ca_cert = 2 [(docker.protobuf.plugin.go_name) = "CACert"]; // CACertHash is the digest of the CA Certificate. - string ca_cert_hash = 3 [(gogoproto.customname) = "CACertHash"]; + string ca_cert_hash = 3 [(docker.protobuf.plugin.go_name) = "CACertHash"]; // JoinTokens contains the join tokens for workers and managers. - JoinTokens join_tokens = 4 [(gogoproto.nullable) = false]; + JoinTokens join_tokens = 4; // RootRotation contains the new root cert and key we want to rotate to - if this is nil, we are not in the // middle of a root rotation @@ -957,24 +950,23 @@ message RootCA { enum NodeRole { - option (gogoproto.enum_customname) = "NodeRole"; - option (gogoproto.goproto_enum_prefix) = false; + option (docker.protobuf.plugin.go_enum_name) = "NodeRole"; - WORKER = 0 [(gogoproto.enumvalue_customname) = "NodeRoleWorker"]; - MANAGER = 1 [(gogoproto.enumvalue_customname) = "NodeRoleManager"]; + WORKER = 0 [(docker.protobuf.plugin.go_enum_value_name) = "NodeRoleWorker"]; + MANAGER = 1 [(docker.protobuf.plugin.go_enum_value_name) = "NodeRoleManager"]; } message Certificate { NodeRole role = 1; - bytes csr = 2 [(gogoproto.customname) = "CSR"]; + bytes csr = 2 [(docker.protobuf.plugin.go_name) = "CSR"]; - IssuanceStatus status = 3 [(gogoproto.nullable) = false]; + IssuanceStatus status = 3; bytes certificate = 4; // CN represents the node ID. - string cn = 5 [(gogoproto.customname) = "CN"]; + string cn = 5 [(docker.protobuf.plugin.go_name) = "CN"]; } @@ -986,7 +978,6 @@ message EncryptionKey { // Encryption algorithm that can implemented using this key enum Algorithm { - option (gogoproto.goproto_enum_prefix) = false; AES_128_GCM = 0; } @@ -1022,13 +1013,13 @@ message FileTarget { string name = 1; // UID represents the file UID - string uid = 2 [(gogoproto.customname) = "UID"]; + string uid = 2 [(docker.protobuf.plugin.go_name) = "UID"]; // GID represents the file GID - string gid = 3 [(gogoproto.customname) = "GID"]; + string gid = 3 [(docker.protobuf.plugin.go_name) = "GID"]; // Mode represents the FileMode of the file - uint32 mode = 4 [(gogoproto.customtype) = "os.FileMode", (gogoproto.nullable) = false]; + uint32 mode = 4 ; } // RuntimeTarget represents that this secret is _not_ mounted into the @@ -1118,9 +1109,9 @@ message HealthConfig { message MaybeEncryptedRecord { enum Algorithm { - NONE = 0 [(gogoproto.enumvalue_customname) = "NotEncrypted"]; - SECRETBOX_SALSA20_POLY1305 = 1 [(gogoproto.enumvalue_customname) = "NACLSecretboxSalsa20Poly1305"]; - FERNET_AES_128_CBC = 2 [(gogoproto.enumvalue_customname) = "FernetAES128CBC"]; + NONE = 0 [(docker.protobuf.plugin.go_enum_value_name) = "NotEncrypted"]; + SECRETBOX_SALSA20_POLY1305 = 1 [(docker.protobuf.plugin.go_enum_value_name) = "NACLSecretboxSalsa20Poly1305"]; + FERNET_AES_128_CBC = 2 [(docker.protobuf.plugin.go_enum_value_name) = "FernetAES128CBC"]; } Algorithm algorithm = 1; @@ -1130,10 +1121,10 @@ message MaybeEncryptedRecord { message RootRotation { - bytes ca_cert = 1 [(gogoproto.customname) = "CACert"]; - bytes ca_key = 2 [(gogoproto.customname) = "CAKey"]; + bytes ca_cert = 1 [(docker.protobuf.plugin.go_name) = "CACert"]; + bytes ca_key = 2 [(docker.protobuf.plugin.go_name) = "CAKey"]; // cross-signed CA cert is the CACert that has been cross-signed by the previous root - bytes cross_signed_ca_cert = 3 [(gogoproto.customname) = "CrossSignedCACert"]; + bytes cross_signed_ca_cert = 3 [(docker.protobuf.plugin.go_name) = "CrossSignedCACert"]; } // Privileges specifies security configuration/permissions. @@ -1160,7 +1151,7 @@ message Privileges { string type = 4; string level = 5; } - SELinuxContext selinux_context = 2 [(gogoproto.customname) = "SELinuxContext"]; + SELinuxContext selinux_context = 2 [(docker.protobuf.plugin.go_name) = "SELinuxContext"]; // SeccompOpts contains options for configuring seccomp profiles on the // container. See https://docs.docker.com/engine/security/seccomp/ for more @@ -1202,7 +1193,7 @@ message JobStatus { // successfully or otherwise. "Executed" refers to the job as a whole being // started, not to the individual Tasks being launched. This is used to // disambiguate which Tasks belong to which iteration of a Job. - Version job_iteration = 1 [(gogoproto.nullable) = false]; + Version job_iteration = 1; // LastExecution is the time that the job was last executed. This is set by // the orchestrator in the same transaction that JobIteration is incremented. @@ -1226,31 +1217,29 @@ message JobStatus { message VolumeAccessMode { // Scope enumerates the possible volume access scopes. enum Scope { - option (gogoproto.goproto_enum_prefix) = false; // VolumeScopeSingleNode indicates that only one node at a time may have // access to the volume. - SINGLE_NODE = 0 [(gogoproto.enumvalue_customname) = "VolumeScopeSingleNode"]; + SINGLE_NODE = 0 [(docker.protobuf.plugin.go_enum_value_name) = "VolumeScopeSingleNode"]; // VolumeScopeMultiNode indicates that multiple nodes may access the volume // at the same time. - MULTI_NODE = 1 [(gogoproto.enumvalue_customname) = "VolumeScopeMultiNode"]; + MULTI_NODE = 1 [(docker.protobuf.plugin.go_enum_value_name) = "VolumeScopeMultiNode"]; } // Sharing enumerates the possible volume sharing modes. enum Sharing { - option (gogoproto.goproto_enum_prefix) = false; // VolumeSharingNone indicates that the volume may only be used by a single // Task at any given time. - NONE = 0 [(gogoproto.enumvalue_customname) = "VolumeSharingNone"]; + NONE = 0 [(docker.protobuf.plugin.go_enum_value_name) = "VolumeSharingNone"]; // VolumeSharingReadOnly indicates that the volume may be accessed by // multiple Tasks, but all Tasks only have have read access. - READ_ONLY = 1 [(gogoproto.enumvalue_customname) = "VolumeSharingReadOnly"]; + READ_ONLY = 1 [(docker.protobuf.plugin.go_enum_value_name) = "VolumeSharingReadOnly"]; // VolumeSharingOneWriter indicates that the Volume may be accessed by // multiple Tasks, but only the one Task may have write permission for the // Volume. - ONE_WRITER = 2 [(gogoproto.enumvalue_customname) = "VolumeSharingOneWriter"]; + ONE_WRITER = 2 [(docker.protobuf.plugin.go_enum_value_name) = "VolumeSharingOneWriter"]; // VolumeSharingAll indicates that any number of Tasks may have read and // write access to the volume. - ALL = 3 [(gogoproto.enumvalue_customname) = "VolumeSharingAll"]; + ALL = 3 [(docker.protobuf.plugin.go_enum_value_name) = "VolumeSharingAll"]; } // BlockVolume indicates the volume will be accessed with the block device diff --git a/api/watch.pb.authwrapper.go b/api/watch.pb.authwrapper.go new file mode 100644 index 0000000000..ce59a31fc8 --- /dev/null +++ b/api/watch.pb.authwrapper.go @@ -0,0 +1,27 @@ +// Code generated by protoc-gen-goswarm. DO NOT EDIT. + +package api + +import ( + context "context" +) + +type authenticatedWrapperWatchServer struct { + local WatchServer + authorize func(context.Context, []string) error +} + +func NewAuthenticatedWrapperWatchServer(local WatchServer, authorize func(context.Context, []string) error) WatchServer { + return &authenticatedWrapperWatchServer{ + local: local, + authorize: authorize, + } +} + +func (p *authenticatedWrapperWatchServer) Watch(r *WatchRequest, stream Watch_WatchServer) error { + + if err := p.authorize(stream.Context(), []string{"swarm-manager"}); err != nil { + return err + } + return p.local.Watch(r, stream) +} diff --git a/api/watch.pb.deepcopy.go b/api/watch.pb.deepcopy.go new file mode 100644 index 0000000000..cb3e833917 --- /dev/null +++ b/api/watch.pb.deepcopy.go @@ -0,0 +1,299 @@ +// Code generated by protoc-gen-goswarm. DO NOT EDIT. + +package api + +import ( + deepcopy "github.com/moby/swarmkit/v2/api/deepcopy" +) + +func (m *Object) Copy() *Object { + if m == nil { + return nil + } + o := &Object{} + o.CopyFrom(m) + return o +} + +func (m *Object) CopyFrom(src interface{}) { + + o := src.(*Object) + if o.Object != nil { + switch o.Object.(type) { + case *Object_Node: + v := Object_Node{ + Node: &Node{}, + } + deepcopy.Copy(v.Node, o.GetNode()) + m.Object = &v + case *Object_Service: + v := Object_Service{ + Service: &Service{}, + } + deepcopy.Copy(v.Service, o.GetService()) + m.Object = &v + case *Object_Network: + v := Object_Network{ + Network: &Network{}, + } + deepcopy.Copy(v.Network, o.GetNetwork()) + m.Object = &v + case *Object_Task: + v := Object_Task{ + Task: &Task{}, + } + deepcopy.Copy(v.Task, o.GetTask()) + m.Object = &v + case *Object_Cluster: + v := Object_Cluster{ + Cluster: &Cluster{}, + } + deepcopy.Copy(v.Cluster, o.GetCluster()) + m.Object = &v + case *Object_Secret: + v := Object_Secret{ + Secret: &Secret{}, + } + deepcopy.Copy(v.Secret, o.GetSecret()) + m.Object = &v + case *Object_Resource: + v := Object_Resource{ + Resource: &Resource{}, + } + deepcopy.Copy(v.Resource, o.GetResource()) + m.Object = &v + case *Object_Extension: + v := Object_Extension{ + Extension: &Extension{}, + } + deepcopy.Copy(v.Extension, o.GetExtension()) + m.Object = &v + case *Object_Config: + v := Object_Config{ + Config: &Config{}, + } + deepcopy.Copy(v.Config, o.GetConfig()) + m.Object = &v + case *Object_Volume: + v := Object_Volume{ + Volume: &Volume{}, + } + deepcopy.Copy(v.Volume, o.GetVolume()) + m.Object = &v + } + } + +} + +func (m *SelectBySlot) Copy() *SelectBySlot { + if m == nil { + return nil + } + o := &SelectBySlot{} + o.CopyFrom(m) + return o +} + +func (m *SelectBySlot) CopyFrom(src interface{}) { + + o := src.(*SelectBySlot) + m.ServiceID = o.ServiceID + m.Slot = o.Slot +} + +func (m *SelectByCustom) Copy() *SelectByCustom { + if m == nil { + return nil + } + o := &SelectByCustom{} + o.CopyFrom(m) + return o +} + +func (m *SelectByCustom) CopyFrom(src interface{}) { + + o := src.(*SelectByCustom) + m.Kind = o.Kind + m.Index = o.Index + m.Value = o.Value +} + +func (m *SelectBy) Copy() *SelectBy { + if m == nil { + return nil + } + o := &SelectBy{} + o.CopyFrom(m) + return o +} + +func (m *SelectBy) CopyFrom(src interface{}) { + + o := src.(*SelectBy) + if o.By != nil { + switch o.By.(type) { + case *SelectBy_ID: + v := SelectBy_ID{ID: o.GetID()} + m.By = &v + case *SelectBy_IDPrefix: + v := SelectBy_IDPrefix{IDPrefix: o.GetIDPrefix()} + m.By = &v + case *SelectBy_Name: + v := SelectBy_Name{Name: o.GetName()} + m.By = &v + case *SelectBy_NamePrefix: + v := SelectBy_NamePrefix{NamePrefix: o.GetNamePrefix()} + m.By = &v + case *SelectBy_Custom: + v := SelectBy_Custom{ + Custom: &SelectByCustom{}, + } + deepcopy.Copy(v.Custom, o.GetCustom()) + m.By = &v + case *SelectBy_CustomPrefix: + v := SelectBy_CustomPrefix{ + CustomPrefix: &SelectByCustom{}, + } + deepcopy.Copy(v.CustomPrefix, o.GetCustomPrefix()) + m.By = &v + case *SelectBy_ServiceID: + v := SelectBy_ServiceID{ServiceID: o.GetServiceID()} + m.By = &v + case *SelectBy_NodeID: + v := SelectBy_NodeID{NodeID: o.GetNodeID()} + m.By = &v + case *SelectBy_Slot: + v := SelectBy_Slot{ + Slot: &SelectBySlot{}, + } + deepcopy.Copy(v.Slot, o.GetSlot()) + m.By = &v + case *SelectBy_DesiredState: + v := SelectBy_DesiredState{DesiredState: o.GetDesiredState()} + m.By = &v + case *SelectBy_Role: + v := SelectBy_Role{Role: o.GetRole()} + m.By = &v + case *SelectBy_Membership: + v := SelectBy_Membership{Membership: o.GetMembership()} + m.By = &v + case *SelectBy_ReferencedNetworkID: + v := SelectBy_ReferencedNetworkID{ReferencedNetworkID: o.GetReferencedNetworkID()} + m.By = &v + case *SelectBy_ReferencedSecretID: + v := SelectBy_ReferencedSecretID{ReferencedSecretID: o.GetReferencedSecretID()} + m.By = &v + case *SelectBy_ReferencedConfigID: + v := SelectBy_ReferencedConfigID{ReferencedConfigID: o.GetReferencedConfigID()} + m.By = &v + case *SelectBy_Kind: + v := SelectBy_Kind{Kind: o.GetKind()} + m.By = &v + } + } + +} + +func (m *WatchRequest) Copy() *WatchRequest { + if m == nil { + return nil + } + o := &WatchRequest{} + o.CopyFrom(m) + return o +} + +func (m *WatchRequest) CopyFrom(src interface{}) { + + o := src.(*WatchRequest) + if o.Entries != nil { + m.Entries = make([]*WatchRequest_WatchEntry, len(o.Entries)) + for i := range m.Entries { + m.Entries[i] = &WatchRequest_WatchEntry{} + deepcopy.Copy(m.Entries[i], o.Entries[i]) + } + } + + if o.ResumeFrom != nil { + m.ResumeFrom = &Version{} + deepcopy.Copy(m.ResumeFrom, o.ResumeFrom) + } + + m.IncludeOldObject = o.IncludeOldObject +} + +func (m *WatchRequest_WatchEntry) Copy() *WatchRequest_WatchEntry { + if m == nil { + return nil + } + o := &WatchRequest_WatchEntry{} + o.CopyFrom(m) + return o +} + +func (m *WatchRequest_WatchEntry) CopyFrom(src interface{}) { + + o := src.(*WatchRequest_WatchEntry) + m.Kind = o.Kind + m.Action = o.Action + if o.Filters != nil { + m.Filters = make([]*SelectBy, len(o.Filters)) + for i := range m.Filters { + m.Filters[i] = &SelectBy{} + deepcopy.Copy(m.Filters[i], o.Filters[i]) + } + } + +} + +func (m *WatchMessage) Copy() *WatchMessage { + if m == nil { + return nil + } + o := &WatchMessage{} + o.CopyFrom(m) + return o +} + +func (m *WatchMessage) CopyFrom(src interface{}) { + + o := src.(*WatchMessage) + if o.Events != nil { + m.Events = make([]*WatchMessage_Event, len(o.Events)) + for i := range m.Events { + m.Events[i] = &WatchMessage_Event{} + deepcopy.Copy(m.Events[i], o.Events[i]) + } + } + + if o.Version != nil { + m.Version = &Version{} + deepcopy.Copy(m.Version, o.Version) + } + +} + +func (m *WatchMessage_Event) Copy() *WatchMessage_Event { + if m == nil { + return nil + } + o := &WatchMessage_Event{} + o.CopyFrom(m) + return o +} + +func (m *WatchMessage_Event) CopyFrom(src interface{}) { + + o := src.(*WatchMessage_Event) + m.Action = o.Action + if o.Object != nil { + m.Object = &Object{} + deepcopy.Copy(m.Object, o.Object) + } + + if o.OldObject != nil { + m.OldObject = &Object{} + deepcopy.Copy(m.OldObject, o.OldObject) + } + +} diff --git a/api/watch.pb.go b/api/watch.pb.go index 9203d58db1..88cdab6159 100644 --- a/api/watch.pb.go +++ b/api/watch.pb.go @@ -1,39 +1,26 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: github.com/docker/swarmkit/api/watch.proto +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.11 +// protoc v3.21.12 +// source: api/watch.proto package api import ( - context "context" - fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" - github_com_moby_swarmkit_v2_api_deepcopy "github.com/moby/swarmkit/v2/api/deepcopy" - raftselector "github.com/moby/swarmkit/v2/manager/raftselector" _ "github.com/moby/swarmkit/v2/protobuf/plugin" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - metadata "google.golang.org/grpc/metadata" - peer "google.golang.org/grpc/peer" - status "google.golang.org/grpc/status" - io "io" - math "math" - math_bits "math/bits" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" - strings "strings" - rafttime "time" + sync "sync" + unsafe "unsafe" ) -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package +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) +) // WatchActionKind distinguishes between creations, updates, and removals. It // is structured as a bitmap so multiple kinds of events can be requested with @@ -41,36 +28,59 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package type WatchActionKind int32 const ( - WatchActionKindUnknown WatchActionKind = 0 + WatchActionKindUnknown WatchActionKind = 0 // default value, invalid WatchActionKindCreate WatchActionKind = 1 WatchActionKindUpdate WatchActionKind = 2 WatchActionKindRemove WatchActionKind = 4 ) -var WatchActionKind_name = map[int32]string{ - 0: "WATCH_ACTION_UNKNOWN", - 1: "WATCH_ACTION_CREATE", - 2: "WATCH_ACTION_UPDATE", - 4: "WATCH_ACTION_REMOVE", -} +// Enum value maps for WatchActionKind. +var ( + WatchActionKind_name = map[int32]string{ + 0: "WATCH_ACTION_UNKNOWN", + 1: "WATCH_ACTION_CREATE", + 2: "WATCH_ACTION_UPDATE", + 4: "WATCH_ACTION_REMOVE", + } + WatchActionKind_value = map[string]int32{ + "WATCH_ACTION_UNKNOWN": 0, + "WATCH_ACTION_CREATE": 1, + "WATCH_ACTION_UPDATE": 2, + "WATCH_ACTION_REMOVE": 4, + } +) -var WatchActionKind_value = map[string]int32{ - "WATCH_ACTION_UNKNOWN": 0, - "WATCH_ACTION_CREATE": 1, - "WATCH_ACTION_UPDATE": 2, - "WATCH_ACTION_REMOVE": 4, +func (x WatchActionKind) Enum() *WatchActionKind { + p := new(WatchActionKind) + *p = x + return p } func (x WatchActionKind) String() string { - return proto.EnumName(WatchActionKind_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (WatchActionKind) Descriptor() protoreflect.EnumDescriptor { + return file_api_watch_proto_enumTypes[0].Descriptor() +} + +func (WatchActionKind) Type() protoreflect.EnumType { + return &file_api_watch_proto_enumTypes[0] +} + +func (x WatchActionKind) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } +// Deprecated: Use WatchActionKind.Descriptor instead. func (WatchActionKind) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_da25266013800cd9, []int{0} + return file_api_watch_proto_rawDescGZIP(), []int{0} } type Object struct { + state protoimpl.MessageState `protogen:"open.v1"` // Types that are valid to be assigned to Object: + // // *Object_Node // *Object_Service // *Object_Network @@ -81,4799 +91,1098 @@ type Object struct { // *Object_Extension // *Object_Config // *Object_Volume - Object isObject_Object `protobuf_oneof:"Object"` + Object isObject_Object `protobuf_oneof:"Object"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *Object) Reset() { *m = Object{} } -func (*Object) ProtoMessage() {} -func (*Object) Descriptor() ([]byte, []int) { - return fileDescriptor_da25266013800cd9, []int{0} +func (x *Object) Reset() { + *x = Object{} + mi := &file_api_watch_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *Object) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Object) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_Object.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 *Object) XXX_Merge(src proto.Message) { - xxx_messageInfo_Object.Merge(m, src) -} -func (m *Object) XXX_Size() int { - return m.Size() -} -func (m *Object) XXX_DiscardUnknown() { - xxx_messageInfo_Object.DiscardUnknown(m) + +func (x *Object) String() string { + return protoimpl.X.MessageStringOf(x) } -var xxx_messageInfo_Object proto.InternalMessageInfo +func (*Object) ProtoMessage() {} -type isObject_Object interface { - isObject_Object() - MarshalTo([]byte) (int, error) - Size() int +func (x *Object) ProtoReflect() protoreflect.Message { + mi := &file_api_watch_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -type Object_Node struct { - Node *Node `protobuf:"bytes,1,opt,name=node,proto3,oneof" json:"node,omitempty"` -} -type Object_Service struct { - Service *Service `protobuf:"bytes,2,opt,name=service,proto3,oneof" json:"service,omitempty"` -} -type Object_Network struct { - Network *Network `protobuf:"bytes,3,opt,name=network,proto3,oneof" json:"network,omitempty"` -} -type Object_Task struct { - Task *Task `protobuf:"bytes,4,opt,name=task,proto3,oneof" json:"task,omitempty"` -} -type Object_Cluster struct { - Cluster *Cluster `protobuf:"bytes,5,opt,name=cluster,proto3,oneof" json:"cluster,omitempty"` -} -type Object_Secret struct { - Secret *Secret `protobuf:"bytes,6,opt,name=secret,proto3,oneof" json:"secret,omitempty"` -} -type Object_Resource struct { - Resource *Resource `protobuf:"bytes,7,opt,name=resource,proto3,oneof" json:"resource,omitempty"` -} -type Object_Extension struct { - Extension *Extension `protobuf:"bytes,8,opt,name=extension,proto3,oneof" json:"extension,omitempty"` -} -type Object_Config struct { - Config *Config `protobuf:"bytes,9,opt,name=config,proto3,oneof" json:"config,omitempty"` -} -type Object_Volume struct { - Volume *Volume `protobuf:"bytes,10,opt,name=volume,proto3,oneof" json:"volume,omitempty"` +// Deprecated: Use Object.ProtoReflect.Descriptor instead. +func (*Object) Descriptor() ([]byte, []int) { + return file_api_watch_proto_rawDescGZIP(), []int{0} } -func (*Object_Node) isObject_Object() {} -func (*Object_Service) isObject_Object() {} -func (*Object_Network) isObject_Object() {} -func (*Object_Task) isObject_Object() {} -func (*Object_Cluster) isObject_Object() {} -func (*Object_Secret) isObject_Object() {} -func (*Object_Resource) isObject_Object() {} -func (*Object_Extension) isObject_Object() {} -func (*Object_Config) isObject_Object() {} -func (*Object_Volume) isObject_Object() {} - -func (m *Object) GetObject() isObject_Object { - if m != nil { - return m.Object +func (x *Object) GetObject() isObject_Object { + if x != nil { + return x.Object } return nil } -func (m *Object) GetNode() *Node { - if x, ok := m.GetObject().(*Object_Node); ok { - return x.Node +func (x *Object) GetNode() *Node { + if x != nil { + if x, ok := x.Object.(*Object_Node); ok { + return x.Node + } } return nil } -func (m *Object) GetService() *Service { - if x, ok := m.GetObject().(*Object_Service); ok { - return x.Service +func (x *Object) GetService() *Service { + if x != nil { + if x, ok := x.Object.(*Object_Service); ok { + return x.Service + } } return nil } -func (m *Object) GetNetwork() *Network { - if x, ok := m.GetObject().(*Object_Network); ok { - return x.Network +func (x *Object) GetNetwork() *Network { + if x != nil { + if x, ok := x.Object.(*Object_Network); ok { + return x.Network + } } return nil } -func (m *Object) GetTask() *Task { - if x, ok := m.GetObject().(*Object_Task); ok { - return x.Task +func (x *Object) GetTask() *Task { + if x != nil { + if x, ok := x.Object.(*Object_Task); ok { + return x.Task + } } return nil } -func (m *Object) GetCluster() *Cluster { - if x, ok := m.GetObject().(*Object_Cluster); ok { - return x.Cluster +func (x *Object) GetCluster() *Cluster { + if x != nil { + if x, ok := x.Object.(*Object_Cluster); ok { + return x.Cluster + } } return nil } -func (m *Object) GetSecret() *Secret { - if x, ok := m.GetObject().(*Object_Secret); ok { - return x.Secret +func (x *Object) GetSecret() *Secret { + if x != nil { + if x, ok := x.Object.(*Object_Secret); ok { + return x.Secret + } } return nil } -func (m *Object) GetResource() *Resource { - if x, ok := m.GetObject().(*Object_Resource); ok { - return x.Resource +func (x *Object) GetResource() *Resource { + if x != nil { + if x, ok := x.Object.(*Object_Resource); ok { + return x.Resource + } } return nil } -func (m *Object) GetExtension() *Extension { - if x, ok := m.GetObject().(*Object_Extension); ok { - return x.Extension +func (x *Object) GetExtension() *Extension { + if x != nil { + if x, ok := x.Object.(*Object_Extension); ok { + return x.Extension + } } return nil } -func (m *Object) GetConfig() *Config { - if x, ok := m.GetObject().(*Object_Config); ok { - return x.Config +func (x *Object) GetConfig() *Config { + if x != nil { + if x, ok := x.Object.(*Object_Config); ok { + return x.Config + } } return nil } -func (m *Object) GetVolume() *Volume { - if x, ok := m.GetObject().(*Object_Volume); ok { - return x.Volume +func (x *Object) GetVolume() *Volume { + if x != nil { + if x, ok := x.Object.(*Object_Volume); ok { + return x.Volume + } } return nil } -// XXX_OneofWrappers is for the internal use of the proto package. -func (*Object) XXX_OneofWrappers() []interface{} { - return []interface{}{ - (*Object_Node)(nil), - (*Object_Service)(nil), - (*Object_Network)(nil), - (*Object_Task)(nil), - (*Object_Cluster)(nil), - (*Object_Secret)(nil), - (*Object_Resource)(nil), - (*Object_Extension)(nil), - (*Object_Config)(nil), - (*Object_Volume)(nil), - } +type isObject_Object interface { + isObject_Object() +} + +type Object_Node struct { + Node *Node `protobuf:"bytes,1,opt,name=node,proto3,oneof"` +} + +type Object_Service struct { + Service *Service `protobuf:"bytes,2,opt,name=service,proto3,oneof"` +} + +type Object_Network struct { + Network *Network `protobuf:"bytes,3,opt,name=network,proto3,oneof"` +} + +type Object_Task struct { + Task *Task `protobuf:"bytes,4,opt,name=task,proto3,oneof"` +} + +type Object_Cluster struct { + Cluster *Cluster `protobuf:"bytes,5,opt,name=cluster,proto3,oneof"` +} + +type Object_Secret struct { + Secret *Secret `protobuf:"bytes,6,opt,name=secret,proto3,oneof"` +} + +type Object_Resource struct { + Resource *Resource `protobuf:"bytes,7,opt,name=resource,proto3,oneof"` +} + +type Object_Extension struct { + Extension *Extension `protobuf:"bytes,8,opt,name=extension,proto3,oneof"` +} + +type Object_Config struct { + Config *Config `protobuf:"bytes,9,opt,name=config,proto3,oneof"` } +type Object_Volume struct { + Volume *Volume `protobuf:"bytes,10,opt,name=volume,proto3,oneof"` +} + +func (*Object_Node) isObject_Object() {} + +func (*Object_Service) isObject_Object() {} + +func (*Object_Network) isObject_Object() {} + +func (*Object_Task) isObject_Object() {} + +func (*Object_Cluster) isObject_Object() {} + +func (*Object_Secret) isObject_Object() {} + +func (*Object_Resource) isObject_Object() {} + +func (*Object_Extension) isObject_Object() {} + +func (*Object_Config) isObject_Object() {} + +func (*Object_Volume) isObject_Object() {} + // FIXME(aaronl): These messages should ideally be embedded in SelectBy, but // protoc generates bad code for that. type SelectBySlot struct { - ServiceID string `protobuf:"bytes,1,opt,name=service_id,json=serviceId,proto3" json:"service_id,omitempty"` - Slot uint64 `protobuf:"varint,2,opt,name=slot,proto3" json:"slot,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + ServiceID string `protobuf:"bytes,1,opt,name=service_id,json=serviceId,proto3" json:"service_id,omitempty"` + Slot uint64 `protobuf:"varint,2,opt,name=slot,proto3" json:"slot,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *SelectBySlot) Reset() { *m = SelectBySlot{} } -func (*SelectBySlot) ProtoMessage() {} -func (*SelectBySlot) Descriptor() ([]byte, []int) { - return fileDescriptor_da25266013800cd9, []int{1} +func (x *SelectBySlot) Reset() { + *x = SelectBySlot{} + mi := &file_api_watch_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *SelectBySlot) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + +func (x *SelectBySlot) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *SelectBySlot) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_SelectBySlot.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (*SelectBySlot) ProtoMessage() {} + +func (x *SelectBySlot) ProtoReflect() protoreflect.Message { + mi := &file_api_watch_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *SelectBySlot) XXX_Merge(src proto.Message) { - xxx_messageInfo_SelectBySlot.Merge(m, src) -} -func (m *SelectBySlot) XXX_Size() int { - return m.Size() + +// Deprecated: Use SelectBySlot.ProtoReflect.Descriptor instead. +func (*SelectBySlot) Descriptor() ([]byte, []int) { + return file_api_watch_proto_rawDescGZIP(), []int{1} } -func (m *SelectBySlot) XXX_DiscardUnknown() { - xxx_messageInfo_SelectBySlot.DiscardUnknown(m) + +func (x *SelectBySlot) GetServiceID() string { + if x != nil { + return x.ServiceID + } + return "" } -var xxx_messageInfo_SelectBySlot proto.InternalMessageInfo +func (x *SelectBySlot) GetSlot() uint64 { + if x != nil { + return x.Slot + } + return 0 +} type SelectByCustom struct { - Kind string `protobuf:"bytes,1,opt,name=kind,proto3" json:"kind,omitempty"` - Index string `protobuf:"bytes,2,opt,name=index,proto3" json:"index,omitempty"` - Value string `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Kind string `protobuf:"bytes,1,opt,name=kind,proto3" json:"kind,omitempty"` + Index string `protobuf:"bytes,2,opt,name=index,proto3" json:"index,omitempty"` + Value string `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *SelectByCustom) Reset() { *m = SelectByCustom{} } -func (*SelectByCustom) ProtoMessage() {} -func (*SelectByCustom) Descriptor() ([]byte, []int) { - return fileDescriptor_da25266013800cd9, []int{2} +func (x *SelectByCustom) Reset() { + *x = SelectByCustom{} + mi := &file_api_watch_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *SelectByCustom) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + +func (x *SelectByCustom) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *SelectByCustom) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_SelectByCustom.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err + +func (*SelectByCustom) ProtoMessage() {} + +func (x *SelectByCustom) ProtoReflect() protoreflect.Message { + mi := &file_api_watch_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - return b[:n], nil + return ms } + return mi.MessageOf(x) } -func (m *SelectByCustom) XXX_Merge(src proto.Message) { - xxx_messageInfo_SelectByCustom.Merge(m, src) + +// Deprecated: Use SelectByCustom.ProtoReflect.Descriptor instead. +func (*SelectByCustom) Descriptor() ([]byte, []int) { + return file_api_watch_proto_rawDescGZIP(), []int{2} } -func (m *SelectByCustom) XXX_Size() int { - return m.Size() + +func (x *SelectByCustom) GetKind() string { + if x != nil { + return x.Kind + } + return "" } -func (m *SelectByCustom) XXX_DiscardUnknown() { - xxx_messageInfo_SelectByCustom.DiscardUnknown(m) + +func (x *SelectByCustom) GetIndex() string { + if x != nil { + return x.Index + } + return "" } -var xxx_messageInfo_SelectByCustom proto.InternalMessageInfo +func (x *SelectByCustom) GetValue() string { + if x != nil { + return x.Value + } + return "" +} type SelectBy struct { + state protoimpl.MessageState `protogen:"open.v1"` // TODO(aaronl): Are all of these things we want to expose in // the API? Exposing them may commit us to maintaining those // internal indices going forward. // // Types that are valid to be assigned to By: - // *SelectBy_ID - // *SelectBy_IDPrefix + // + // *SelectBy_Id + // *SelectBy_IdPrefix // *SelectBy_Name // *SelectBy_NamePrefix // *SelectBy_Custom // *SelectBy_CustomPrefix - // *SelectBy_ServiceID - // *SelectBy_NodeID + // *SelectBy_ServiceId + // *SelectBy_NodeId // *SelectBy_Slot // *SelectBy_DesiredState // *SelectBy_Role // *SelectBy_Membership - // *SelectBy_ReferencedNetworkID - // *SelectBy_ReferencedSecretID - // *SelectBy_ReferencedConfigID + // *SelectBy_ReferencedNetworkId + // *SelectBy_ReferencedSecretId + // *SelectBy_ReferencedConfigId // *SelectBy_Kind - By isSelectBy_By `protobuf_oneof:"By"` + By isSelectBy_By `protobuf_oneof:"By"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *SelectBy) Reset() { *m = SelectBy{} } -func (*SelectBy) ProtoMessage() {} -func (*SelectBy) Descriptor() ([]byte, []int) { - return fileDescriptor_da25266013800cd9, []int{3} -} -func (m *SelectBy) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) +func (x *SelectBy) Reset() { + *x = SelectBy{} + mi := &file_api_watch_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *SelectBy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_SelectBy.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 *SelectBy) XXX_Merge(src proto.Message) { - xxx_messageInfo_SelectBy.Merge(m, src) -} -func (m *SelectBy) XXX_Size() int { - return m.Size() -} -func (m *SelectBy) XXX_DiscardUnknown() { - xxx_messageInfo_SelectBy.DiscardUnknown(m) + +func (x *SelectBy) String() string { + return protoimpl.X.MessageStringOf(x) } -var xxx_messageInfo_SelectBy proto.InternalMessageInfo +func (*SelectBy) ProtoMessage() {} -type isSelectBy_By interface { - isSelectBy_By() - MarshalTo([]byte) (int, error) - Size() int +func (x *SelectBy) ProtoReflect() protoreflect.Message { + mi := &file_api_watch_proto_msgTypes[3] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -type SelectBy_ID struct { - ID string `protobuf:"bytes,1,opt,name=id,proto3,oneof" json:"id,omitempty"` -} -type SelectBy_IDPrefix struct { - IDPrefix string `protobuf:"bytes,2,opt,name=id_prefix,json=idPrefix,proto3,oneof" json:"id_prefix,omitempty"` -} -type SelectBy_Name struct { - Name string `protobuf:"bytes,3,opt,name=name,proto3,oneof" json:"name,omitempty"` -} -type SelectBy_NamePrefix struct { - NamePrefix string `protobuf:"bytes,4,opt,name=name_prefix,json=namePrefix,proto3,oneof" json:"name_prefix,omitempty"` -} -type SelectBy_Custom struct { - Custom *SelectByCustom `protobuf:"bytes,5,opt,name=custom,proto3,oneof" json:"custom,omitempty"` -} -type SelectBy_CustomPrefix struct { - CustomPrefix *SelectByCustom `protobuf:"bytes,6,opt,name=custom_prefix,json=customPrefix,proto3,oneof" json:"custom_prefix,omitempty"` -} -type SelectBy_ServiceID struct { - ServiceID string `protobuf:"bytes,7,opt,name=service_id,json=serviceId,proto3,oneof" json:"service_id,omitempty"` -} -type SelectBy_NodeID struct { - NodeID string `protobuf:"bytes,8,opt,name=node_id,json=nodeId,proto3,oneof" json:"node_id,omitempty"` -} -type SelectBy_Slot struct { - Slot *SelectBySlot `protobuf:"bytes,9,opt,name=slot,proto3,oneof" json:"slot,omitempty"` -} -type SelectBy_DesiredState struct { - DesiredState TaskState `protobuf:"varint,10,opt,name=desired_state,json=desiredState,proto3,enum=docker.swarmkit.v1.TaskState,oneof" json:"desired_state,omitempty"` -} -type SelectBy_Role struct { - Role NodeRole `protobuf:"varint,11,opt,name=role,proto3,enum=docker.swarmkit.v1.NodeRole,oneof" json:"role,omitempty"` -} -type SelectBy_Membership struct { - Membership NodeSpec_Membership `protobuf:"varint,12,opt,name=membership,proto3,enum=docker.swarmkit.v1.NodeSpec_Membership,oneof" json:"membership,omitempty"` -} -type SelectBy_ReferencedNetworkID struct { - ReferencedNetworkID string `protobuf:"bytes,13,opt,name=referenced_network_id,json=referencedNetworkId,proto3,oneof" json:"referenced_network_id,omitempty"` -} -type SelectBy_ReferencedSecretID struct { - ReferencedSecretID string `protobuf:"bytes,14,opt,name=referenced_secret_id,json=referencedSecretId,proto3,oneof" json:"referenced_secret_id,omitempty"` -} -type SelectBy_ReferencedConfigID struct { - ReferencedConfigID string `protobuf:"bytes,16,opt,name=referenced_config_id,json=referencedConfigId,proto3,oneof" json:"referenced_config_id,omitempty"` -} -type SelectBy_Kind struct { - Kind string `protobuf:"bytes,15,opt,name=kind,proto3,oneof" json:"kind,omitempty"` +// Deprecated: Use SelectBy.ProtoReflect.Descriptor instead. +func (*SelectBy) Descriptor() ([]byte, []int) { + return file_api_watch_proto_rawDescGZIP(), []int{3} } -func (*SelectBy_ID) isSelectBy_By() {} -func (*SelectBy_IDPrefix) isSelectBy_By() {} -func (*SelectBy_Name) isSelectBy_By() {} -func (*SelectBy_NamePrefix) isSelectBy_By() {} -func (*SelectBy_Custom) isSelectBy_By() {} -func (*SelectBy_CustomPrefix) isSelectBy_By() {} -func (*SelectBy_ServiceID) isSelectBy_By() {} -func (*SelectBy_NodeID) isSelectBy_By() {} -func (*SelectBy_Slot) isSelectBy_By() {} -func (*SelectBy_DesiredState) isSelectBy_By() {} -func (*SelectBy_Role) isSelectBy_By() {} -func (*SelectBy_Membership) isSelectBy_By() {} -func (*SelectBy_ReferencedNetworkID) isSelectBy_By() {} -func (*SelectBy_ReferencedSecretID) isSelectBy_By() {} -func (*SelectBy_ReferencedConfigID) isSelectBy_By() {} -func (*SelectBy_Kind) isSelectBy_By() {} - -func (m *SelectBy) GetBy() isSelectBy_By { - if m != nil { - return m.By +func (x *SelectBy) GetBy() isSelectBy_By { + if x != nil { + return x.By } return nil } -func (m *SelectBy) GetID() string { - if x, ok := m.GetBy().(*SelectBy_ID); ok { - return x.ID +func (x *SelectBy) GetID() string { + if x != nil { + if x, ok := x.By.(*SelectBy_ID); ok { + return x.ID + } } return "" } -func (m *SelectBy) GetIDPrefix() string { - if x, ok := m.GetBy().(*SelectBy_IDPrefix); ok { - return x.IDPrefix +func (x *SelectBy) GetIDPrefix() string { + if x != nil { + if x, ok := x.By.(*SelectBy_IDPrefix); ok { + return x.IDPrefix + } } return "" } -func (m *SelectBy) GetName() string { - if x, ok := m.GetBy().(*SelectBy_Name); ok { - return x.Name +func (x *SelectBy) GetName() string { + if x != nil { + if x, ok := x.By.(*SelectBy_Name); ok { + return x.Name + } } return "" } -func (m *SelectBy) GetNamePrefix() string { - if x, ok := m.GetBy().(*SelectBy_NamePrefix); ok { - return x.NamePrefix +func (x *SelectBy) GetNamePrefix() string { + if x != nil { + if x, ok := x.By.(*SelectBy_NamePrefix); ok { + return x.NamePrefix + } } return "" } -func (m *SelectBy) GetCustom() *SelectByCustom { - if x, ok := m.GetBy().(*SelectBy_Custom); ok { - return x.Custom +func (x *SelectBy) GetCustom() *SelectByCustom { + if x != nil { + if x, ok := x.By.(*SelectBy_Custom); ok { + return x.Custom + } } return nil } -func (m *SelectBy) GetCustomPrefix() *SelectByCustom { - if x, ok := m.GetBy().(*SelectBy_CustomPrefix); ok { - return x.CustomPrefix +func (x *SelectBy) GetCustomPrefix() *SelectByCustom { + if x != nil { + if x, ok := x.By.(*SelectBy_CustomPrefix); ok { + return x.CustomPrefix + } } return nil } -func (m *SelectBy) GetServiceID() string { - if x, ok := m.GetBy().(*SelectBy_ServiceID); ok { - return x.ServiceID +func (x *SelectBy) GetServiceID() string { + if x != nil { + if x, ok := x.By.(*SelectBy_ServiceID); ok { + return x.ServiceID + } } return "" } -func (m *SelectBy) GetNodeID() string { - if x, ok := m.GetBy().(*SelectBy_NodeID); ok { - return x.NodeID +func (x *SelectBy) GetNodeID() string { + if x != nil { + if x, ok := x.By.(*SelectBy_NodeID); ok { + return x.NodeID + } } return "" } -func (m *SelectBy) GetSlot() *SelectBySlot { - if x, ok := m.GetBy().(*SelectBy_Slot); ok { - return x.Slot +func (x *SelectBy) GetSlot() *SelectBySlot { + if x != nil { + if x, ok := x.By.(*SelectBy_Slot); ok { + return x.Slot + } } return nil } -func (m *SelectBy) GetDesiredState() TaskState { - if x, ok := m.GetBy().(*SelectBy_DesiredState); ok { - return x.DesiredState +func (x *SelectBy) GetDesiredState() TaskState { + if x != nil { + if x, ok := x.By.(*SelectBy_DesiredState); ok { + return x.DesiredState + } } return TaskStateNew } -func (m *SelectBy) GetRole() NodeRole { - if x, ok := m.GetBy().(*SelectBy_Role); ok { - return x.Role +func (x *SelectBy) GetRole() NodeRole { + if x != nil { + if x, ok := x.By.(*SelectBy_Role); ok { + return x.Role + } } return NodeRoleWorker } -func (m *SelectBy) GetMembership() NodeSpec_Membership { - if x, ok := m.GetBy().(*SelectBy_Membership); ok { - return x.Membership +func (x *SelectBy) GetMembership() NodeSpec_Membership { + if x != nil { + if x, ok := x.By.(*SelectBy_Membership); ok { + return x.Membership + } } return NodeMembershipPending } -func (m *SelectBy) GetReferencedNetworkID() string { - if x, ok := m.GetBy().(*SelectBy_ReferencedNetworkID); ok { - return x.ReferencedNetworkID +func (x *SelectBy) GetReferencedNetworkID() string { + if x != nil { + if x, ok := x.By.(*SelectBy_ReferencedNetworkID); ok { + return x.ReferencedNetworkID + } } return "" } -func (m *SelectBy) GetReferencedSecretID() string { - if x, ok := m.GetBy().(*SelectBy_ReferencedSecretID); ok { - return x.ReferencedSecretID +func (x *SelectBy) GetReferencedSecretID() string { + if x != nil { + if x, ok := x.By.(*SelectBy_ReferencedSecretID); ok { + return x.ReferencedSecretID + } } return "" } -func (m *SelectBy) GetReferencedConfigID() string { - if x, ok := m.GetBy().(*SelectBy_ReferencedConfigID); ok { - return x.ReferencedConfigID +func (x *SelectBy) GetReferencedConfigID() string { + if x != nil { + if x, ok := x.By.(*SelectBy_ReferencedConfigID); ok { + return x.ReferencedConfigID + } } return "" } -func (m *SelectBy) GetKind() string { - if x, ok := m.GetBy().(*SelectBy_Kind); ok { - return x.Kind +func (x *SelectBy) GetKind() string { + if x != nil { + if x, ok := x.By.(*SelectBy_Kind); ok { + return x.Kind + } } return "" } -// XXX_OneofWrappers is for the internal use of the proto package. -func (*SelectBy) XXX_OneofWrappers() []interface{} { - return []interface{}{ - (*SelectBy_ID)(nil), - (*SelectBy_IDPrefix)(nil), - (*SelectBy_Name)(nil), - (*SelectBy_NamePrefix)(nil), - (*SelectBy_Custom)(nil), - (*SelectBy_CustomPrefix)(nil), - (*SelectBy_ServiceID)(nil), - (*SelectBy_NodeID)(nil), - (*SelectBy_Slot)(nil), - (*SelectBy_DesiredState)(nil), - (*SelectBy_Role)(nil), - (*SelectBy_Membership)(nil), - (*SelectBy_ReferencedNetworkID)(nil), - (*SelectBy_ReferencedSecretID)(nil), - (*SelectBy_ReferencedConfigID)(nil), - (*SelectBy_Kind)(nil), - } +type isSelectBy_By interface { + isSelectBy_By() } -type WatchRequest struct { - // Multiple entries are combined using OR logic - i.e. if an event - // matches all of the selectors specified in any single watch entry, - // the event will be sent to the client. - Entries []*WatchRequest_WatchEntry `protobuf:"bytes,1,rep,name=entries,proto3" json:"entries,omitempty"` - // ResumeFrom provides an version to resume the watch from, if non-nil. - // The watch will return changes since this version, and continue to - // return new changes afterwards. Watch will return an error if the - // server has compacted its log and no longer has complete history to - // this point. - ResumeFrom *Version `protobuf:"bytes,2,opt,name=resume_from,json=resumeFrom,proto3" json:"resume_from,omitempty"` - // IncludeOldObject causes WatchMessages to include a copy of the - // previous version of the object on updates. Note that only live - // changes will include the old object (not historical changes - // retrieved using ResumeFrom). - IncludeOldObject bool `protobuf:"varint,3,opt,name=include_old_object,json=includeOldObject,proto3" json:"include_old_object,omitempty"` +type SelectBy_ID struct { + // supported by all object types + ID string `protobuf:"bytes,1,opt,name=id,proto3,oneof"` // not applicable for FindObjects - use GetObject instead } -func (m *WatchRequest) Reset() { *m = WatchRequest{} } -func (*WatchRequest) ProtoMessage() {} -func (*WatchRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_da25266013800cd9, []int{4} -} -func (m *WatchRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *WatchRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_WatchRequest.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 *WatchRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_WatchRequest.Merge(m, src) -} -func (m *WatchRequest) XXX_Size() int { - return m.Size() -} -func (m *WatchRequest) XXX_DiscardUnknown() { - xxx_messageInfo_WatchRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_WatchRequest proto.InternalMessageInfo - -type WatchRequest_WatchEntry struct { - // Kind can contain a builtin type such as "node", "secret", etc. or - // the kind specified by a custom-defined object. - Kind string `protobuf:"bytes,1,opt,name=kind,proto3" json:"kind,omitempty"` - // Action (create/update/delete) - // This is a bitmask, so multiple actions may be OR'd together - Action WatchActionKind `protobuf:"varint,2,opt,name=action,proto3,enum=docker.swarmkit.v1.WatchActionKind" json:"action,omitempty"` - // Filters are combined using AND logic - an event must match - // all of them to pass the filter. - Filters []*SelectBy `protobuf:"bytes,3,rep,name=filters,proto3" json:"filters,omitempty"` +type SelectBy_IDPrefix struct { + IDPrefix string `protobuf:"bytes,2,opt,name=id_prefix,json=idPrefix,proto3,oneof"` } -func (m *WatchRequest_WatchEntry) Reset() { *m = WatchRequest_WatchEntry{} } -func (*WatchRequest_WatchEntry) ProtoMessage() {} -func (*WatchRequest_WatchEntry) Descriptor() ([]byte, []int) { - return fileDescriptor_da25266013800cd9, []int{4, 0} -} -func (m *WatchRequest_WatchEntry) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *WatchRequest_WatchEntry) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_WatchRequest_WatchEntry.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 *WatchRequest_WatchEntry) XXX_Merge(src proto.Message) { - xxx_messageInfo_WatchRequest_WatchEntry.Merge(m, src) -} -func (m *WatchRequest_WatchEntry) XXX_Size() int { - return m.Size() -} -func (m *WatchRequest_WatchEntry) XXX_DiscardUnknown() { - xxx_messageInfo_WatchRequest_WatchEntry.DiscardUnknown(m) +type SelectBy_Name struct { + Name string `protobuf:"bytes,3,opt,name=name,proto3,oneof"` } -var xxx_messageInfo_WatchRequest_WatchEntry proto.InternalMessageInfo - -// WatchMessage is the type of the stream that's returned to the client by -// Watch. Note that the first item of this stream will always be a WatchMessage -// with a nil Object, to signal that the stream has started. -type WatchMessage struct { - Events []*WatchMessage_Event `protobuf:"bytes,1,rep,name=events,proto3" json:"events,omitempty"` - // Index versions this change to the data store. It can be used to - // resume the watch from this point. - Version *Version `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` +type SelectBy_NamePrefix struct { + NamePrefix string `protobuf:"bytes,4,opt,name=name_prefix,json=namePrefix,proto3,oneof"` } -func (m *WatchMessage) Reset() { *m = WatchMessage{} } -func (*WatchMessage) ProtoMessage() {} -func (*WatchMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_da25266013800cd9, []int{5} -} -func (m *WatchMessage) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *WatchMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_WatchMessage.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 *WatchMessage) XXX_Merge(src proto.Message) { - xxx_messageInfo_WatchMessage.Merge(m, src) -} -func (m *WatchMessage) XXX_Size() int { - return m.Size() -} -func (m *WatchMessage) XXX_DiscardUnknown() { - xxx_messageInfo_WatchMessage.DiscardUnknown(m) +type SelectBy_Custom struct { + Custom *SelectByCustom `protobuf:"bytes,5,opt,name=custom,proto3,oneof"` } -var xxx_messageInfo_WatchMessage proto.InternalMessageInfo - -type WatchMessage_Event struct { - // Action (create/update/delete) - // Note that WatchMessage does not expose "commit" events that - // mark transaction boundaries. - Action WatchActionKind `protobuf:"varint,1,opt,name=action,proto3,enum=docker.swarmkit.v1.WatchActionKind" json:"action,omitempty"` - // Matched object - Object *Object `protobuf:"bytes,2,opt,name=object,proto3" json:"object,omitempty"` - // For updates, OldObject will optionally be included in the - // watch message, containing the previous version of the - // object, if IncludeOldObject was set in WatchRequest. - OldObject *Object `protobuf:"bytes,3,opt,name=old_object,json=oldObject,proto3" json:"old_object,omitempty"` +type SelectBy_CustomPrefix struct { + CustomPrefix *SelectByCustom `protobuf:"bytes,6,opt,name=custom_prefix,json=customPrefix,proto3,oneof"` } -func (m *WatchMessage_Event) Reset() { *m = WatchMessage_Event{} } -func (*WatchMessage_Event) ProtoMessage() {} -func (*WatchMessage_Event) Descriptor() ([]byte, []int) { - return fileDescriptor_da25266013800cd9, []int{5, 0} -} -func (m *WatchMessage_Event) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *WatchMessage_Event) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_WatchMessage_Event.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 *WatchMessage_Event) XXX_Merge(src proto.Message) { - xxx_messageInfo_WatchMessage_Event.Merge(m, src) -} -func (m *WatchMessage_Event) XXX_Size() int { - return m.Size() -} -func (m *WatchMessage_Event) XXX_DiscardUnknown() { - xxx_messageInfo_WatchMessage_Event.DiscardUnknown(m) +type SelectBy_ServiceID struct { + // supported by tasks only + ServiceID string `protobuf:"bytes,7,opt,name=service_id,json=serviceId,proto3,oneof"` } -var xxx_messageInfo_WatchMessage_Event proto.InternalMessageInfo - -func init() { - proto.RegisterEnum("docker.swarmkit.v1.WatchActionKind", WatchActionKind_name, WatchActionKind_value) - proto.RegisterType((*Object)(nil), "docker.swarmkit.v1.Object") - proto.RegisterType((*SelectBySlot)(nil), "docker.swarmkit.v1.SelectBySlot") - proto.RegisterType((*SelectByCustom)(nil), "docker.swarmkit.v1.SelectByCustom") - proto.RegisterType((*SelectBy)(nil), "docker.swarmkit.v1.SelectBy") - proto.RegisterType((*WatchRequest)(nil), "docker.swarmkit.v1.WatchRequest") - proto.RegisterType((*WatchRequest_WatchEntry)(nil), "docker.swarmkit.v1.WatchRequest.WatchEntry") - proto.RegisterType((*WatchMessage)(nil), "docker.swarmkit.v1.WatchMessage") - proto.RegisterType((*WatchMessage_Event)(nil), "docker.swarmkit.v1.WatchMessage.Event") +type SelectBy_NodeID struct { + NodeID string `protobuf:"bytes,8,opt,name=node_id,json=nodeId,proto3,oneof"` } -func init() { - proto.RegisterFile("github.com/docker/swarmkit/api/watch.proto", fileDescriptor_da25266013800cd9) +type SelectBy_Slot struct { + Slot *SelectBySlot `protobuf:"bytes,9,opt,name=slot,proto3,oneof"` } -var fileDescriptor_da25266013800cd9 = []byte{ - // 1210 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x96, 0xcd, 0x73, 0xdb, 0xc4, - 0x1b, 0xc7, 0x25, 0xd7, 0x51, 0xec, 0x27, 0x49, 0x9b, 0xd9, 0xa6, 0xad, 0x7e, 0xfe, 0x15, 0xc7, - 0x98, 0xb7, 0x4e, 0x5b, 0x1c, 0x08, 0xa5, 0x1d, 0xa0, 0x30, 0x13, 0x3b, 0x66, 0x6c, 0x3a, 0x79, - 0x99, 0x4d, 0xd2, 0x1e, 0x3d, 0x8a, 0xf4, 0xc4, 0x15, 0x91, 0xb4, 0x66, 0x25, 0x3b, 0xcd, 0x8d, - 0x23, 0xd3, 0x13, 0x17, 0x66, 0xb8, 0xf4, 0x04, 0x67, 0x2e, 0xdc, 0xca, 0x3f, 0xd0, 0xe1, 0xd4, - 0x63, 0xb9, 0x64, 0xa8, 0x7b, 0xe3, 0xc0, 0x5f, 0xc0, 0x81, 0xd9, 0x17, 0x25, 0xa9, 0x2b, 0x27, - 0xf4, 0xe4, 0xd5, 0xea, 0xf3, 0x7d, 0xf6, 0xd9, 0xe7, 0x4d, 0x86, 0xab, 0x5d, 0x3f, 0xb9, 0xdf, - 0xdf, 0xae, 0xb9, 0x2c, 0x5c, 0xf0, 0x98, 0xbb, 0x8b, 0x7c, 0x21, 0xde, 0x73, 0x78, 0xb8, 0xeb, - 0x27, 0x0b, 0x4e, 0xcf, 0x5f, 0xd8, 0x73, 0x12, 0xf7, 0x7e, 0xad, 0xc7, 0x59, 0xc2, 0x08, 0x51, - 0x40, 0x2d, 0x05, 0x6a, 0x83, 0x0f, 0x4b, 0xa7, 0xe9, 0xe3, 0x1e, 0xba, 0xb1, 0xd2, 0x97, 0xae, - 0x9f, 0xc2, 0xb2, 0xed, 0xaf, 0xd1, 0x4d, 0x52, 0xfa, 0x34, 0xcb, 0xc9, 0x7e, 0x0f, 0x53, 0x76, - 0xae, 0xcb, 0xba, 0x4c, 0x2e, 0x17, 0xc4, 0x4a, 0xef, 0xde, 0x3a, 0xc1, 0x82, 0x24, 0xb6, 0xfb, - 0x3b, 0x0b, 0xbd, 0xa0, 0xdf, 0xf5, 0x23, 0xfd, 0xa3, 0x84, 0xd5, 0xc7, 0x79, 0xb0, 0xd6, 0xa4, - 0x33, 0xa4, 0x06, 0xf9, 0x88, 0x79, 0x68, 0x9b, 0x15, 0xf3, 0xca, 0xd4, 0xa2, 0x5d, 0x7b, 0x35, - 0x04, 0xb5, 0x55, 0xe6, 0x61, 0xcb, 0xa0, 0x92, 0x23, 0xb7, 0x60, 0x32, 0x46, 0x3e, 0xf0, 0x5d, - 0xb4, 0x73, 0x52, 0xf2, 0xff, 0x2c, 0xc9, 0x86, 0x42, 0x5a, 0x06, 0x4d, 0x69, 0x21, 0x8c, 0x30, - 0xd9, 0x63, 0x7c, 0xd7, 0x3e, 0x33, 0x5e, 0xb8, 0xaa, 0x10, 0x21, 0xd4, 0xb4, 0xf0, 0x30, 0x71, - 0xe2, 0x5d, 0x3b, 0x3f, 0xde, 0xc3, 0x4d, 0x27, 0x16, 0x12, 0xc9, 0x89, 0x83, 0xdc, 0xa0, 0x1f, - 0x27, 0xc8, 0xed, 0x89, 0xf1, 0x07, 0x35, 0x14, 0x22, 0x0e, 0xd2, 0x34, 0xb9, 0x01, 0x56, 0x8c, - 0x2e, 0xc7, 0xc4, 0xb6, 0xa4, 0xae, 0x94, 0x7d, 0x33, 0x41, 0xb4, 0x0c, 0xaa, 0x59, 0xf2, 0x29, - 0x14, 0x38, 0xc6, 0xac, 0xcf, 0x5d, 0xb4, 0x27, 0xa5, 0xee, 0x72, 0x96, 0x8e, 0x6a, 0xa6, 0x65, - 0xd0, 0x43, 0x9e, 0x7c, 0x0e, 0x45, 0x7c, 0x90, 0x60, 0x14, 0xfb, 0x2c, 0xb2, 0x0b, 0x52, 0xfc, - 0x46, 0x96, 0xb8, 0x99, 0x42, 0x2d, 0x83, 0x1e, 0x29, 0x84, 0xc3, 0x2e, 0x8b, 0x76, 0xfc, 0xae, - 0x5d, 0x1c, 0xef, 0x70, 0x43, 0x12, 0xc2, 0x61, 0xc5, 0x0a, 0xd5, 0x80, 0x05, 0xfd, 0x10, 0x6d, - 0x18, 0xaf, 0xba, 0x2b, 0x09, 0xa1, 0x52, 0x6c, 0xbd, 0x90, 0x56, 0x4c, 0x75, 0x1d, 0xa6, 0x37, - 0x30, 0x40, 0x37, 0xa9, 0xef, 0x6f, 0x04, 0x2c, 0x21, 0xd7, 0x01, 0x74, 0x8e, 0x3b, 0xbe, 0x27, - 0xeb, 0xa8, 0x58, 0x9f, 0x19, 0x1e, 0xcc, 0x17, 0x75, 0x11, 0xb4, 0x97, 0x69, 0x51, 0x03, 0x6d, - 0x8f, 0x10, 0xc8, 0xc7, 0x01, 0x4b, 0x64, 0xf1, 0xe4, 0xa9, 0x5c, 0x57, 0xd7, 0xe1, 0x6c, 0x6a, - 0xb1, 0xd1, 0x8f, 0x13, 0x16, 0x0a, 0x6a, 0xd7, 0x8f, 0xb4, 0x35, 0x2a, 0xd7, 0x64, 0x0e, 0x26, - 0xfc, 0xc8, 0xc3, 0x07, 0x52, 0x5a, 0xa4, 0xea, 0x41, 0xec, 0x0e, 0x9c, 0xa0, 0x8f, 0xb2, 0xa8, - 0x8a, 0x54, 0x3d, 0x54, 0xff, 0xb2, 0xa0, 0x90, 0x9a, 0x24, 0x36, 0xe4, 0x0e, 0x1d, 0xb3, 0x86, - 0x07, 0xf3, 0xb9, 0xf6, 0x72, 0xcb, 0xa0, 0x39, 0xdf, 0x23, 0xd7, 0xa0, 0xe8, 0x7b, 0x9d, 0x1e, - 0xc7, 0x1d, 0x5f, 0x9b, 0xad, 0x4f, 0x0f, 0x0f, 0xe6, 0x0b, 0xed, 0xe5, 0x75, 0xb9, 0x27, 0x92, - 0xe5, 0x7b, 0x6a, 0x4d, 0xe6, 0x20, 0x1f, 0x39, 0xa1, 0x3e, 0x48, 0xf6, 0x83, 0x13, 0x22, 0x79, - 0x13, 0xa6, 0xc4, 0x6f, 0x6a, 0x24, 0xaf, 0x5f, 0x82, 0xd8, 0xd4, 0xc2, 0xdb, 0x60, 0xb9, 0xf2, - 0x5a, 0xba, 0x1e, 0xab, 0xd9, 0x75, 0x75, 0x3c, 0x00, 0x32, 0x5d, 0x2a, 0x14, 0x6d, 0x98, 0x51, - 0xab, 0xf4, 0x08, 0xeb, 0x35, 0x8c, 0x4c, 0x2b, 0xa9, 0x76, 0xa4, 0xf6, 0x52, 0xa6, 0x26, 0x33, - 0x32, 0x25, 0xea, 0xeb, 0x28, 0x57, 0xef, 0xc0, 0xa4, 0xe8, 0x79, 0x01, 0x17, 0x24, 0x0c, 0xc3, - 0x83, 0x79, 0x4b, 0x8c, 0x03, 0x49, 0x5a, 0xe2, 0x65, 0xdb, 0x23, 0x37, 0x75, 0x4a, 0x55, 0x11, - 0x56, 0x4e, 0x72, 0x4c, 0x14, 0x8c, 0x08, 0x9d, 0xe0, 0xc9, 0x32, 0xcc, 0x78, 0x18, 0xfb, 0x1c, - 0xbd, 0x4e, 0x9c, 0x38, 0x89, 0xaa, 0xc7, 0xb3, 0xd9, 0x1d, 0x20, 0x3a, 0x7c, 0x43, 0x40, 0xe2, - 0x52, 0x5a, 0x25, 0x9f, 0xc9, 0x22, 0xe4, 0x39, 0x0b, 0xd0, 0x9e, 0x92, 0xe2, 0xcb, 0xe3, 0x06, - 0x18, 0x65, 0x81, 0x1c, 0x62, 0x82, 0x25, 0x6d, 0x80, 0x10, 0xc3, 0x6d, 0xe4, 0xf1, 0x7d, 0xbf, - 0x67, 0x4f, 0x4b, 0xe5, 0x7b, 0xe3, 0x94, 0x1b, 0x3d, 0x74, 0x6b, 0x2b, 0x87, 0xb8, 0x48, 0xee, - 0x91, 0x98, 0xac, 0xc0, 0x05, 0x8e, 0x3b, 0xc8, 0x31, 0x72, 0xd1, 0xeb, 0xe8, 0x99, 0x25, 0x22, - 0x36, 0x23, 0x23, 0x76, 0x69, 0x78, 0x30, 0x7f, 0x9e, 0x1e, 0x02, 0x7a, 0xbc, 0xc9, 0xf0, 0x9d, - 0xe7, 0xaf, 0x6c, 0x7b, 0xe4, 0x2b, 0x98, 0x3b, 0x66, 0x4e, 0x8d, 0x18, 0x61, 0xed, 0xac, 0xb4, - 0x76, 0x71, 0x78, 0x30, 0x4f, 0x8e, 0xac, 0xa9, 0x59, 0x24, 0x8d, 0x11, 0x3e, 0xba, 0x3b, 0x6a, - 0x4b, 0x75, 0xbf, 0xb0, 0x35, 0x9b, 0x65, 0x4b, 0x8d, 0x89, 0x51, 0x5b, 0x7a, 0x57, 0x34, 0x9f, - 0x6a, 0xc8, 0x73, 0x69, 0xf1, 0x8b, 0xa7, 0x7a, 0x1e, 0x72, 0xf5, 0xfd, 0xea, 0x1f, 0x39, 0x98, - 0xbe, 0x27, 0x3e, 0xa3, 0x14, 0xbf, 0xe9, 0x63, 0x9c, 0x90, 0x26, 0x4c, 0x62, 0x94, 0x70, 0x1f, - 0x63, 0xdb, 0xac, 0x9c, 0xb9, 0x32, 0xb5, 0x78, 0x2d, 0x2b, 0xb6, 0xc7, 0x25, 0xea, 0xa1, 0x19, - 0x25, 0x7c, 0x9f, 0xa6, 0x5a, 0x72, 0x1b, 0xa6, 0x38, 0xc6, 0xfd, 0x10, 0x3b, 0x3b, 0x9c, 0x85, - 0x27, 0x7d, 0x6e, 0xee, 0x22, 0x17, 0x03, 0x91, 0x82, 0xe2, 0xbf, 0xe4, 0x2c, 0x24, 0xd7, 0x81, - 0xf8, 0x91, 0x1b, 0xf4, 0x3d, 0xec, 0xb0, 0xc0, 0xeb, 0xa8, 0x6f, 0xaf, 0x6c, 0xde, 0x02, 0x9d, - 0xd5, 0x6f, 0xd6, 0x02, 0x4f, 0x0d, 0xb5, 0xd2, 0x0f, 0x26, 0xc0, 0x91, 0x0f, 0x99, 0xf3, 0xe7, - 0x33, 0xb0, 0x1c, 0x37, 0x11, 0x93, 0x3a, 0x27, 0x0b, 0xe6, 0xad, 0xb1, 0x97, 0x5a, 0x92, 0xd8, - 0x1d, 0x3f, 0xf2, 0xa8, 0x96, 0x90, 0x9b, 0x30, 0xb9, 0xe3, 0x07, 0x09, 0xf2, 0xd8, 0x3e, 0x23, - 0x43, 0x72, 0xf9, 0xa4, 0x36, 0xa1, 0x29, 0x5c, 0xfd, 0x2d, 0x8d, 0xed, 0x0a, 0xc6, 0xb1, 0xd3, - 0x45, 0xf2, 0x05, 0x58, 0x38, 0xc0, 0x28, 0x49, 0x43, 0xfb, 0xee, 0x58, 0x2f, 0xb4, 0xa2, 0xd6, - 0x14, 0x38, 0xd5, 0x2a, 0xf2, 0x31, 0x4c, 0x0e, 0x54, 0xb4, 0xfe, 0x4b, 0x40, 0x53, 0xb6, 0xf4, - 0xab, 0x09, 0x13, 0xd2, 0xd0, 0xb1, 0x30, 0x98, 0xaf, 0x1f, 0x86, 0x45, 0xb0, 0x74, 0x22, 0x72, - 0xe3, 0xbf, 0x3d, 0x2a, 0x25, 0x54, 0x93, 0xe4, 0x13, 0x80, 0x91, 0x04, 0x9e, 0xac, 0x2b, 0xb2, - 0x34, 0xab, 0x57, 0xff, 0x31, 0xe1, 0xdc, 0x88, 0x2b, 0xe4, 0x06, 0xcc, 0xdd, 0x5b, 0xda, 0x6c, - 0xb4, 0x3a, 0x4b, 0x8d, 0xcd, 0xf6, 0xda, 0x6a, 0x67, 0x6b, 0xf5, 0xce, 0xea, 0xda, 0xbd, 0xd5, - 0x59, 0xa3, 0x54, 0x7a, 0xf8, 0xa8, 0x72, 0x71, 0x04, 0xdf, 0x8a, 0x76, 0x23, 0xb6, 0x27, 0x1c, - 0x3f, 0xff, 0x92, 0xaa, 0x41, 0x9b, 0x4b, 0x9b, 0xcd, 0x59, 0xb3, 0xf4, 0xbf, 0x87, 0x8f, 0x2a, - 0x17, 0x46, 0x44, 0x0d, 0x8e, 0x6a, 0x32, 0xbd, 0xac, 0xd9, 0x5a, 0x5f, 0x16, 0x9a, 0x5c, 0xa6, - 0x66, 0xab, 0xe7, 0x65, 0x69, 0x68, 0x73, 0x65, 0xed, 0x6e, 0x73, 0x36, 0x9f, 0xa9, 0xa1, 0x18, - 0xb2, 0x01, 0x96, 0x2e, 0x7d, 0xf7, 0x53, 0xd9, 0x78, 0xfc, 0x73, 0x79, 0xf4, 0xaa, 0x8b, 0x21, - 0x4c, 0xc8, 0x2d, 0xe2, 0xa5, 0x8b, 0xca, 0x69, 0x8d, 0x58, 0xaa, 0x9c, 0x56, 0x4f, 0xd5, 0x0b, - 0xbf, 0xff, 0xf2, 0xf7, 0x8f, 0xb9, 0x73, 0x30, 0x23, 0x89, 0xf7, 0x43, 0x27, 0x72, 0xba, 0xc8, - 0x3f, 0x30, 0xeb, 0x6f, 0x3f, 0x79, 0x5e, 0x36, 0x9e, 0x3d, 0x2f, 0x1b, 0xdf, 0x0e, 0xcb, 0xe6, - 0x93, 0x61, 0xd9, 0x7c, 0x3a, 0x2c, 0x9b, 0x7f, 0x0e, 0xcb, 0xe6, 0xf7, 0x2f, 0xca, 0xc6, 0xd3, - 0x17, 0x65, 0xe3, 0xd9, 0x8b, 0xb2, 0xb1, 0x6d, 0xc9, 0xbf, 0xa0, 0x1f, 0xfd, 0x1b, 0x00, 0x00, - 0xff, 0xff, 0x36, 0x4b, 0xa7, 0x78, 0x99, 0x0b, 0x00, 0x00, +type SelectBy_DesiredState struct { + DesiredState TaskState `protobuf:"varint,10,opt,name=desired_state,json=desiredState,proto3,enum=docker.swarmkit.v1.TaskState,oneof"` } -type authenticatedWrapperWatchServer struct { - local WatchServer - authorize func(context.Context, []string) error +type SelectBy_Role struct { + // supported by nodes only + Role NodeRole `protobuf:"varint,11,opt,name=role,proto3,enum=docker.swarmkit.v1.NodeRole,oneof"` } -func NewAuthenticatedWrapperWatchServer(local WatchServer, authorize func(context.Context, []string) error) WatchServer { - return &authenticatedWrapperWatchServer{ - local: local, - authorize: authorize, - } +type SelectBy_Membership struct { + Membership NodeSpec_Membership `protobuf:"varint,12,opt,name=membership,proto3,enum=docker.swarmkit.v1.NodeSpec_Membership,oneof"` } -func (p *authenticatedWrapperWatchServer) Watch(r *WatchRequest, stream Watch_WatchServer) error { - - if err := p.authorize(stream.Context(), []string{"swarm-manager"}); err != nil { - return err - } - return p.local.Watch(r, stream) +type SelectBy_ReferencedNetworkID struct { + // supported by: service, task + ReferencedNetworkID string `protobuf:"bytes,13,opt,name=referenced_network_id,json=referencedNetworkId,proto3,oneof"` } -func (m *Object) Copy() *Object { - if m == nil { - return nil - } - o := &Object{} - o.CopyFrom(m) - return o +type SelectBy_ReferencedSecretID struct { + ReferencedSecretID string `protobuf:"bytes,14,opt,name=referenced_secret_id,json=referencedSecretId,proto3,oneof"` } -func (m *Object) CopyFrom(src interface{}) { - - o := src.(*Object) - *m = *o - if o.Object != nil { - switch o.Object.(type) { - case *Object_Node: - v := Object_Node{ - Node: &Node{}, - } - github_com_moby_swarmkit_v2_api_deepcopy.Copy(v.Node, o.GetNode()) - m.Object = &v - case *Object_Service: - v := Object_Service{ - Service: &Service{}, - } - github_com_moby_swarmkit_v2_api_deepcopy.Copy(v.Service, o.GetService()) - m.Object = &v - case *Object_Network: - v := Object_Network{ - Network: &Network{}, - } - github_com_moby_swarmkit_v2_api_deepcopy.Copy(v.Network, o.GetNetwork()) - m.Object = &v - case *Object_Task: - v := Object_Task{ - Task: &Task{}, - } - github_com_moby_swarmkit_v2_api_deepcopy.Copy(v.Task, o.GetTask()) - m.Object = &v - case *Object_Cluster: - v := Object_Cluster{ - Cluster: &Cluster{}, - } - github_com_moby_swarmkit_v2_api_deepcopy.Copy(v.Cluster, o.GetCluster()) - m.Object = &v - case *Object_Secret: - v := Object_Secret{ - Secret: &Secret{}, - } - github_com_moby_swarmkit_v2_api_deepcopy.Copy(v.Secret, o.GetSecret()) - m.Object = &v - case *Object_Resource: - v := Object_Resource{ - Resource: &Resource{}, - } - github_com_moby_swarmkit_v2_api_deepcopy.Copy(v.Resource, o.GetResource()) - m.Object = &v - case *Object_Extension: - v := Object_Extension{ - Extension: &Extension{}, - } - github_com_moby_swarmkit_v2_api_deepcopy.Copy(v.Extension, o.GetExtension()) - m.Object = &v - case *Object_Config: - v := Object_Config{ - Config: &Config{}, - } - github_com_moby_swarmkit_v2_api_deepcopy.Copy(v.Config, o.GetConfig()) - m.Object = &v - case *Object_Volume: - v := Object_Volume{ - Volume: &Volume{}, - } - github_com_moby_swarmkit_v2_api_deepcopy.Copy(v.Volume, o.GetVolume()) - m.Object = &v - } - } - +type SelectBy_ReferencedConfigID struct { + ReferencedConfigID string `protobuf:"bytes,16,opt,name=referenced_config_id,json=referencedConfigId,proto3,oneof"` } -func (m *SelectBySlot) Copy() *SelectBySlot { - if m == nil { - return nil - } - o := &SelectBySlot{} - o.CopyFrom(m) - return o +type SelectBy_Kind struct { + // supported by: resource + Kind string `protobuf:"bytes,15,opt,name=kind,proto3,oneof"` } -func (m *SelectBySlot) CopyFrom(src interface{}) { +func (*SelectBy_ID) isSelectBy_By() {} - o := src.(*SelectBySlot) - *m = *o -} +func (*SelectBy_IDPrefix) isSelectBy_By() {} -func (m *SelectByCustom) Copy() *SelectByCustom { - if m == nil { - return nil - } - o := &SelectByCustom{} - o.CopyFrom(m) - return o -} +func (*SelectBy_Name) isSelectBy_By() {} -func (m *SelectByCustom) CopyFrom(src interface{}) { +func (*SelectBy_NamePrefix) isSelectBy_By() {} - o := src.(*SelectByCustom) - *m = *o -} +func (*SelectBy_Custom) isSelectBy_By() {} -func (m *SelectBy) Copy() *SelectBy { - if m == nil { - return nil - } - o := &SelectBy{} - o.CopyFrom(m) - return o -} +func (*SelectBy_CustomPrefix) isSelectBy_By() {} -func (m *SelectBy) CopyFrom(src interface{}) { - - o := src.(*SelectBy) - *m = *o - if o.By != nil { - switch o.By.(type) { - case *SelectBy_ID: - v := SelectBy_ID{ - ID: o.GetID(), - } - m.By = &v - case *SelectBy_IDPrefix: - v := SelectBy_IDPrefix{ - IDPrefix: o.GetIDPrefix(), - } - m.By = &v - case *SelectBy_Name: - v := SelectBy_Name{ - Name: o.GetName(), - } - m.By = &v - case *SelectBy_NamePrefix: - v := SelectBy_NamePrefix{ - NamePrefix: o.GetNamePrefix(), - } - m.By = &v - case *SelectBy_Custom: - v := SelectBy_Custom{ - Custom: &SelectByCustom{}, - } - github_com_moby_swarmkit_v2_api_deepcopy.Copy(v.Custom, o.GetCustom()) - m.By = &v - case *SelectBy_CustomPrefix: - v := SelectBy_CustomPrefix{ - CustomPrefix: &SelectByCustom{}, - } - github_com_moby_swarmkit_v2_api_deepcopy.Copy(v.CustomPrefix, o.GetCustomPrefix()) - m.By = &v - case *SelectBy_ServiceID: - v := SelectBy_ServiceID{ - ServiceID: o.GetServiceID(), - } - m.By = &v - case *SelectBy_NodeID: - v := SelectBy_NodeID{ - NodeID: o.GetNodeID(), - } - m.By = &v - case *SelectBy_Slot: - v := SelectBy_Slot{ - Slot: &SelectBySlot{}, - } - github_com_moby_swarmkit_v2_api_deepcopy.Copy(v.Slot, o.GetSlot()) - m.By = &v - case *SelectBy_DesiredState: - v := SelectBy_DesiredState{ - DesiredState: o.GetDesiredState(), - } - m.By = &v - case *SelectBy_Role: - v := SelectBy_Role{ - Role: o.GetRole(), - } - m.By = &v - case *SelectBy_Membership: - v := SelectBy_Membership{ - Membership: o.GetMembership(), - } - m.By = &v - case *SelectBy_ReferencedNetworkID: - v := SelectBy_ReferencedNetworkID{ - ReferencedNetworkID: o.GetReferencedNetworkID(), - } - m.By = &v - case *SelectBy_ReferencedSecretID: - v := SelectBy_ReferencedSecretID{ - ReferencedSecretID: o.GetReferencedSecretID(), - } - m.By = &v - case *SelectBy_ReferencedConfigID: - v := SelectBy_ReferencedConfigID{ - ReferencedConfigID: o.GetReferencedConfigID(), - } - m.By = &v - case *SelectBy_Kind: - v := SelectBy_Kind{ - Kind: o.GetKind(), - } - m.By = &v - } - } +func (*SelectBy_ServiceID) isSelectBy_By() {} -} +func (*SelectBy_NodeID) isSelectBy_By() {} -func (m *WatchRequest) Copy() *WatchRequest { - if m == nil { - return nil - } - o := &WatchRequest{} - o.CopyFrom(m) - return o -} +func (*SelectBy_Slot) isSelectBy_By() {} -func (m *WatchRequest) CopyFrom(src interface{}) { +func (*SelectBy_DesiredState) isSelectBy_By() {} - o := src.(*WatchRequest) - *m = *o - if o.Entries != nil { - m.Entries = make([]*WatchRequest_WatchEntry, len(o.Entries)) - for i := range m.Entries { - m.Entries[i] = &WatchRequest_WatchEntry{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Entries[i], o.Entries[i]) - } - } +func (*SelectBy_Role) isSelectBy_By() {} - if o.ResumeFrom != nil { - m.ResumeFrom = &Version{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.ResumeFrom, o.ResumeFrom) - } -} +func (*SelectBy_Membership) isSelectBy_By() {} -func (m *WatchRequest_WatchEntry) Copy() *WatchRequest_WatchEntry { - if m == nil { - return nil - } - o := &WatchRequest_WatchEntry{} - o.CopyFrom(m) - return o -} +func (*SelectBy_ReferencedNetworkID) isSelectBy_By() {} -func (m *WatchRequest_WatchEntry) CopyFrom(src interface{}) { +func (*SelectBy_ReferencedSecretID) isSelectBy_By() {} - o := src.(*WatchRequest_WatchEntry) - *m = *o - if o.Filters != nil { - m.Filters = make([]*SelectBy, len(o.Filters)) - for i := range m.Filters { - m.Filters[i] = &SelectBy{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Filters[i], o.Filters[i]) - } - } +func (*SelectBy_ReferencedConfigID) isSelectBy_By() {} -} +func (*SelectBy_Kind) isSelectBy_By() {} -func (m *WatchMessage) Copy() *WatchMessage { - if m == nil { - return nil - } - o := &WatchMessage{} - o.CopyFrom(m) - return o +type WatchRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Multiple entries are combined using OR logic - i.e. if an event + // matches all of the selectors specified in any single watch entry, + // the event will be sent to the client. + Entries []*WatchRequest_WatchEntry `protobuf:"bytes,1,rep,name=entries,proto3" json:"entries,omitempty"` + // ResumeFrom provides an version to resume the watch from, if non-nil. + // The watch will return changes since this version, and continue to + // return new changes afterwards. Watch will return an error if the + // server has compacted its log and no longer has complete history to + // this point. + ResumeFrom *Version `protobuf:"bytes,2,opt,name=resume_from,json=resumeFrom,proto3" json:"resume_from,omitempty"` + // IncludeOldObject causes WatchMessages to include a copy of the + // previous version of the object on updates. Note that only live + // changes will include the old object (not historical changes + // retrieved using ResumeFrom). + IncludeOldObject bool `protobuf:"varint,3,opt,name=include_old_object,json=includeOldObject,proto3" json:"include_old_object,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *WatchMessage) CopyFrom(src interface{}) { - - o := src.(*WatchMessage) - *m = *o - if o.Events != nil { - m.Events = make([]*WatchMessage_Event, len(o.Events)) - for i := range m.Events { - m.Events[i] = &WatchMessage_Event{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Events[i], o.Events[i]) - } - } - - if o.Version != nil { - m.Version = &Version{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Version, o.Version) - } +func (x *WatchRequest) Reset() { + *x = WatchRequest{} + mi := &file_api_watch_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *WatchMessage_Event) Copy() *WatchMessage_Event { - if m == nil { - return nil - } - o := &WatchMessage_Event{} - o.CopyFrom(m) - return o +func (x *WatchRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *WatchMessage_Event) CopyFrom(src interface{}) { +func (*WatchRequest) ProtoMessage() {} - o := src.(*WatchMessage_Event) - *m = *o - if o.Object != nil { - m.Object = &Object{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Object, o.Object) - } - if o.OldObject != nil { - m.OldObject = &Object{} - github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.OldObject, o.OldObject) +func (x *WatchRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_watch_proto_msgTypes[4] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } + return mi.MessageOf(x) } -// Reference imports to suppress errors if they are not otherwise used. -var _ context.Context -var _ grpc.ClientConn - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 - -// WatchClient is the client API for Watch service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. -type WatchClient interface { - // Watch starts a stream that returns any changes to objects that match - // the specified selectors. When the stream begins, it immediately sends - // an empty message back to the client. It is important to wait for - // this message before taking any actions that depend on an established - // stream of changes for consistency. - Watch(ctx context.Context, in *WatchRequest, opts ...grpc.CallOption) (Watch_WatchClient, error) -} - -type watchClient struct { - cc *grpc.ClientConn -} - -func NewWatchClient(cc *grpc.ClientConn) WatchClient { - return &watchClient{cc} +// Deprecated: Use WatchRequest.ProtoReflect.Descriptor instead. +func (*WatchRequest) Descriptor() ([]byte, []int) { + return file_api_watch_proto_rawDescGZIP(), []int{4} } -func (c *watchClient) Watch(ctx context.Context, in *WatchRequest, opts ...grpc.CallOption) (Watch_WatchClient, error) { - stream, err := c.cc.NewStream(ctx, &_Watch_serviceDesc.Streams[0], "/docker.swarmkit.v1.Watch/Watch", opts...) - if err != nil { - return nil, err - } - x := &watchWatchClient{stream} - if err := x.ClientStream.SendMsg(in); err != nil { - return nil, err +func (x *WatchRequest) GetEntries() []*WatchRequest_WatchEntry { + if x != nil { + return x.Entries } - if err := x.ClientStream.CloseSend(); err != nil { - return nil, err - } - return x, nil -} - -type Watch_WatchClient interface { - Recv() (*WatchMessage, error) - grpc.ClientStream -} - -type watchWatchClient struct { - grpc.ClientStream + return nil } -func (x *watchWatchClient) Recv() (*WatchMessage, error) { - m := new(WatchMessage) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err +func (x *WatchRequest) GetResumeFrom() *Version { + if x != nil { + return x.ResumeFrom } - return m, nil -} - -// WatchServer is the server API for Watch service. -type WatchServer interface { - // Watch starts a stream that returns any changes to objects that match - // the specified selectors. When the stream begins, it immediately sends - // an empty message back to the client. It is important to wait for - // this message before taking any actions that depend on an established - // stream of changes for consistency. - Watch(*WatchRequest, Watch_WatchServer) error -} - -// UnimplementedWatchServer can be embedded to have forward compatible implementations. -type UnimplementedWatchServer struct { -} - -func (*UnimplementedWatchServer) Watch(req *WatchRequest, srv Watch_WatchServer) error { - return status.Errorf(codes.Unimplemented, "method Watch not implemented") -} - -func RegisterWatchServer(s *grpc.Server, srv WatchServer) { - s.RegisterService(&_Watch_serviceDesc, srv) + return nil } -func _Watch_Watch_Handler(srv interface{}, stream grpc.ServerStream) error { - m := new(WatchRequest) - if err := stream.RecvMsg(m); err != nil { - return err +func (x *WatchRequest) GetIncludeOldObject() bool { + if x != nil { + return x.IncludeOldObject } - return srv.(WatchServer).Watch(m, &watchWatchServer{stream}) -} - -type Watch_WatchServer interface { - Send(*WatchMessage) error - grpc.ServerStream -} - -type watchWatchServer struct { - grpc.ServerStream + return false } -func (x *watchWatchServer) Send(m *WatchMessage) error { - return x.ServerStream.SendMsg(m) +// WatchMessage is the type of the stream that's returned to the client by +// Watch. Note that the first item of this stream will always be a WatchMessage +// with a nil Object, to signal that the stream has started. +type WatchMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + Events []*WatchMessage_Event `protobuf:"bytes,1,rep,name=events,proto3" json:"events,omitempty"` + // Index versions this change to the data store. It can be used to + // resume the watch from this point. + Version *Version `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -var _Watch_serviceDesc = grpc.ServiceDesc{ - ServiceName: "docker.swarmkit.v1.Watch", - HandlerType: (*WatchServer)(nil), - Methods: []grpc.MethodDesc{}, - Streams: []grpc.StreamDesc{ - { - StreamName: "Watch", - Handler: _Watch_Watch_Handler, - ServerStreams: true, - }, - }, - Metadata: "github.com/docker/swarmkit/api/watch.proto", +func (x *WatchMessage) Reset() { + *x = WatchMessage{} + mi := &file_api_watch_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *Object) 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 (x *WatchMessage) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Object) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} +func (*WatchMessage) ProtoMessage() {} -func (m *Object) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Object != nil { - { - size := m.Object.Size() - i -= size - if _, err := m.Object.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } +func (x *WatchMessage) ProtoReflect() protoreflect.Message { + mi := &file_api_watch_proto_msgTypes[5] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } + return ms } - return len(dAtA) - i, nil -} - -func (m *Object_Node) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) + return mi.MessageOf(x) } -func (m *Object_Node) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - if m.Node != nil { - { - size, err := m.Node.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintWatch(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} -func (m *Object_Service) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) +// Deprecated: Use WatchMessage.ProtoReflect.Descriptor instead. +func (*WatchMessage) Descriptor() ([]byte, []int) { + return file_api_watch_proto_rawDescGZIP(), []int{5} } -func (m *Object_Service) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - if m.Service != nil { - { - size, err := m.Service.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintWatch(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 +func (x *WatchMessage) GetEvents() []*WatchMessage_Event { + if x != nil { + return x.Events } - return len(dAtA) - i, nil -} -func (m *Object_Network) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) + return nil } -func (m *Object_Network) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - if m.Network != nil { - { - size, err := m.Network.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintWatch(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a +func (x *WatchMessage) GetVersion() *Version { + if x != nil { + return x.Version } - return len(dAtA) - i, nil -} -func (m *Object_Task) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) + return nil } -func (m *Object_Task) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - if m.Task != nil { - { - size, err := m.Task.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintWatch(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - } - return len(dAtA) - i, nil -} -func (m *Object_Cluster) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) +type WatchRequest_WatchEntry struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Kind can contain a builtin type such as "node", "secret", etc. or + // the kind specified by a custom-defined object. + Kind string `protobuf:"bytes,1,opt,name=kind,proto3" json:"kind,omitempty"` + // Action (create/update/delete) + // This is a bitmask, so multiple actions may be OR'd together + Action WatchActionKind `protobuf:"varint,2,opt,name=action,proto3,enum=docker.swarmkit.v1.WatchActionKind" json:"action,omitempty"` + // Filters are combined using AND logic - an event must match + // all of them to pass the filter. + Filters []*SelectBy `protobuf:"bytes,3,rep,name=filters,proto3" json:"filters,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *Object_Cluster) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - if m.Cluster != nil { - { - size, err := m.Cluster.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintWatch(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x2a - } - return len(dAtA) - i, nil -} -func (m *Object_Secret) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) +func (x *WatchRequest_WatchEntry) Reset() { + *x = WatchRequest_WatchEntry{} + mi := &file_api_watch_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *Object_Secret) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - if m.Secret != nil { - { - size, err := m.Secret.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintWatch(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x32 - } - return len(dAtA) - i, nil -} -func (m *Object_Resource) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) +func (x *WatchRequest_WatchEntry) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Object_Resource) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - if m.Resource != nil { - { - size, err := m.Resource.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintWatch(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x3a - } - return len(dAtA) - i, nil -} -func (m *Object_Extension) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} +func (*WatchRequest_WatchEntry) ProtoMessage() {} -func (m *Object_Extension) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - if m.Extension != nil { - { - size, err := m.Extension.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintWatch(dAtA, i, uint64(size)) +func (x *WatchRequest_WatchEntry) ProtoReflect() protoreflect.Message { + mi := &file_api_watch_proto_msgTypes[6] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - i-- - dAtA[i] = 0x42 + return ms } - return len(dAtA) - i, nil -} -func (m *Object_Config) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) + return mi.MessageOf(x) } -func (m *Object_Config) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - if m.Config != nil { - { - size, err := m.Config.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintWatch(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x4a - } - return len(dAtA) - i, nil -} -func (m *Object_Volume) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) +// Deprecated: Use WatchRequest_WatchEntry.ProtoReflect.Descriptor instead. +func (*WatchRequest_WatchEntry) Descriptor() ([]byte, []int) { + return file_api_watch_proto_rawDescGZIP(), []int{4, 0} } -func (m *Object_Volume) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - if m.Volume != nil { - { - size, err := m.Volume.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintWatch(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x52 - } - return len(dAtA) - i, nil -} -func (m *SelectBySlot) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err +func (x *WatchRequest_WatchEntry) GetKind() string { + if x != nil { + return x.Kind } - return dAtA[:n], nil -} - -func (m *SelectBySlot) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) + return "" } -func (m *SelectBySlot) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Slot != 0 { - i = encodeVarintWatch(dAtA, i, uint64(m.Slot)) - i-- - dAtA[i] = 0x10 +func (x *WatchRequest_WatchEntry) GetAction() WatchActionKind { + if x != nil { + return x.Action } - if len(m.ServiceID) > 0 { - i -= len(m.ServiceID) - copy(dAtA[i:], m.ServiceID) - i = encodeVarintWatch(dAtA, i, uint64(len(m.ServiceID))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil + return WatchActionKindUnknown } -func (m *SelectByCustom) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err +func (x *WatchRequest_WatchEntry) GetFilters() []*SelectBy { + if x != nil { + return x.Filters } - return dAtA[:n], nil + return nil } -func (m *SelectByCustom) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) +type WatchMessage_Event struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Action (create/update/delete) + // Note that WatchMessage does not expose "commit" events that + // mark transaction boundaries. + Action WatchActionKind `protobuf:"varint,1,opt,name=action,proto3,enum=docker.swarmkit.v1.WatchActionKind" json:"action,omitempty"` + // Matched object + Object *Object `protobuf:"bytes,2,opt,name=object,proto3" json:"object,omitempty"` + // For updates, OldObject will optionally be included in the + // watch message, containing the previous version of the + // object, if IncludeOldObject was set in WatchRequest. + OldObject *Object `protobuf:"bytes,3,opt,name=old_object,json=oldObject,proto3" json:"old_object,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (m *SelectByCustom) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Value) > 0 { - i -= len(m.Value) - copy(dAtA[i:], m.Value) - i = encodeVarintWatch(dAtA, i, uint64(len(m.Value))) - i-- - dAtA[i] = 0x1a - } - if len(m.Index) > 0 { - i -= len(m.Index) - copy(dAtA[i:], m.Index) - i = encodeVarintWatch(dAtA, i, uint64(len(m.Index))) - i-- - dAtA[i] = 0x12 - } - if len(m.Kind) > 0 { - i -= len(m.Kind) - copy(dAtA[i:], m.Kind) - i = encodeVarintWatch(dAtA, i, uint64(len(m.Kind))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil +func (x *WatchMessage_Event) Reset() { + *x = WatchMessage_Event{} + mi := &file_api_watch_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (m *SelectBy) 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 (x *WatchMessage_Event) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *SelectBy) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} +func (*WatchMessage_Event) ProtoMessage() {} -func (m *SelectBy) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.By != nil { - { - size := m.By.Size() - i -= size - if _, err := m.By.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } +func (x *WatchMessage_Event) ProtoReflect() protoreflect.Message { + mi := &file_api_watch_proto_msgTypes[7] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } + return ms } - return len(dAtA) - i, nil -} - -func (m *SelectBy_ID) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *SelectBy_ID) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - i -= len(m.ID) - copy(dAtA[i:], m.ID) - i = encodeVarintWatch(dAtA, i, uint64(len(m.ID))) - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} -func (m *SelectBy_IDPrefix) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *SelectBy_IDPrefix) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - i -= len(m.IDPrefix) - copy(dAtA[i:], m.IDPrefix) - i = encodeVarintWatch(dAtA, i, uint64(len(m.IDPrefix))) - i-- - dAtA[i] = 0x12 - return len(dAtA) - i, nil -} -func (m *SelectBy_Name) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) + return mi.MessageOf(x) } -func (m *SelectBy_Name) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - i -= len(m.Name) - copy(dAtA[i:], m.Name) - i = encodeVarintWatch(dAtA, i, uint64(len(m.Name))) - i-- - dAtA[i] = 0x1a - return len(dAtA) - i, nil -} -func (m *SelectBy_NamePrefix) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) +// Deprecated: Use WatchMessage_Event.ProtoReflect.Descriptor instead. +func (*WatchMessage_Event) Descriptor() ([]byte, []int) { + return file_api_watch_proto_rawDescGZIP(), []int{5, 0} } -func (m *SelectBy_NamePrefix) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - i -= len(m.NamePrefix) - copy(dAtA[i:], m.NamePrefix) - i = encodeVarintWatch(dAtA, i, uint64(len(m.NamePrefix))) - i-- - dAtA[i] = 0x22 - return len(dAtA) - i, nil -} -func (m *SelectBy_Custom) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) +func (x *WatchMessage_Event) GetAction() WatchActionKind { + if x != nil { + return x.Action + } + return WatchActionKindUnknown } -func (m *SelectBy_Custom) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - if m.Custom != nil { - { - size, err := m.Custom.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintWatch(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x2a +func (x *WatchMessage_Event) GetObject() *Object { + if x != nil { + return x.Object } - return len(dAtA) - i, nil -} -func (m *SelectBy_CustomPrefix) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) + return nil } -func (m *SelectBy_CustomPrefix) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - if m.CustomPrefix != nil { - { - size, err := m.CustomPrefix.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintWatch(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x32 +func (x *WatchMessage_Event) GetOldObject() *Object { + if x != nil { + return x.OldObject } - return len(dAtA) - i, nil -} -func (m *SelectBy_ServiceID) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) + return nil } -func (m *SelectBy_ServiceID) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - i -= len(m.ServiceID) - copy(dAtA[i:], m.ServiceID) - i = encodeVarintWatch(dAtA, i, uint64(len(m.ServiceID))) - i-- - dAtA[i] = 0x3a - return len(dAtA) - i, nil -} -func (m *SelectBy_NodeID) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} +var File_api_watch_proto protoreflect.FileDescriptor + +const file_api_watch_proto_rawDesc = "" + + "\n" + + "\x0fapi/watch.proto\x12\x12docker.swarmkit.v1\x1a\x0fapi/specs.proto\x1a\x11api/objects.proto\x1a\x0fapi/types.proto\x1a\x1cprotobuf/plugin/plugin.proto\"\xba\x04\n" + + "\x06Object\x12.\n" + + "\x04node\x18\x01 \x01(\v2\x18.docker.swarmkit.v1.NodeH\x00R\x04node\x127\n" + + "\aservice\x18\x02 \x01(\v2\x1b.docker.swarmkit.v1.ServiceH\x00R\aservice\x127\n" + + "\anetwork\x18\x03 \x01(\v2\x1b.docker.swarmkit.v1.NetworkH\x00R\anetwork\x12.\n" + + "\x04task\x18\x04 \x01(\v2\x18.docker.swarmkit.v1.TaskH\x00R\x04task\x127\n" + + "\acluster\x18\x05 \x01(\v2\x1b.docker.swarmkit.v1.ClusterH\x00R\acluster\x124\n" + + "\x06secret\x18\x06 \x01(\v2\x1a.docker.swarmkit.v1.SecretH\x00R\x06secret\x12:\n" + + "\bresource\x18\a \x01(\v2\x1c.docker.swarmkit.v1.ResourceH\x00R\bresource\x12=\n" + + "\textension\x18\b \x01(\v2\x1d.docker.swarmkit.v1.ExtensionH\x00R\textension\x124\n" + + "\x06config\x18\t \x01(\v2\x1a.docker.swarmkit.v1.ConfigH\x00R\x06config\x124\n" + + "\x06volume\x18\n" + + " \x01(\v2\x1a.docker.swarmkit.v1.VolumeH\x00R\x06volumeB\b\n" + + "\x06Object\"P\n" + + "\fSelectBySlot\x12,\n" + + "\n" + + "service_id\x18\x01 \x01(\tB\r\x92\x97\"\tServiceIDR\tserviceId\x12\x12\n" + + "\x04slot\x18\x02 \x01(\x04R\x04slot\"P\n" + + "\x0eSelectByCustom\x12\x12\n" + + "\x04kind\x18\x01 \x01(\tR\x04kind\x12\x14\n" + + "\x05index\x18\x02 \x01(\tR\x05index\x12\x14\n" + + "\x05value\x18\x03 \x01(\tR\x05value\"\xea\x06\n" + + "\bSelectBy\x12\x18\n" + + "\x02id\x18\x01 \x01(\tB\x06\x92\x97\"\x02IDH\x00R\x02id\x12+\n" + + "\tid_prefix\x18\x02 \x01(\tB\f\x92\x97\"\bIDPrefixH\x00R\bidPrefix\x12\x14\n" + + "\x04name\x18\x03 \x01(\tH\x00R\x04name\x12!\n" + + "\vname_prefix\x18\x04 \x01(\tH\x00R\n" + + "namePrefix\x12<\n" + + "\x06custom\x18\x05 \x01(\v2\".docker.swarmkit.v1.SelectByCustomH\x00R\x06custom\x12I\n" + + "\rcustom_prefix\x18\x06 \x01(\v2\".docker.swarmkit.v1.SelectByCustomH\x00R\fcustomPrefix\x12.\n" + + "\n" + + "service_id\x18\a \x01(\tB\r\x92\x97\"\tServiceIDH\x00R\tserviceId\x12%\n" + + "\anode_id\x18\b \x01(\tB\n" + + "\x92\x97\"\x06NodeIDH\x00R\x06nodeId\x126\n" + + "\x04slot\x18\t \x01(\v2 .docker.swarmkit.v1.SelectBySlotH\x00R\x04slot\x12D\n" + + "\rdesired_state\x18\n" + + " \x01(\x0e2\x1d.docker.swarmkit.v1.TaskStateH\x00R\fdesiredState\x122\n" + + "\x04role\x18\v \x01(\x0e2\x1c.docker.swarmkit.v1.NodeRoleH\x00R\x04role\x12I\n" + + "\n" + + "membership\x18\f \x01(\x0e2'.docker.swarmkit.v1.NodeSpec.MembershipH\x00R\n" + + "membership\x12M\n" + + "\x15referenced_network_id\x18\r \x01(\tB\x17\x92\x97\"\x13ReferencedNetworkIDH\x00R\x13referencedNetworkId\x12J\n" + + "\x14referenced_secret_id\x18\x0e \x01(\tB\x16\x92\x97\"\x12ReferencedSecretIDH\x00R\x12referencedSecretId\x12J\n" + + "\x14referenced_config_id\x18\x10 \x01(\tB\x16\x92\x97\"\x12ReferencedConfigIDH\x00R\x12referencedConfigId\x12\x14\n" + + "\x04kind\x18\x0f \x01(\tH\x00R\x04kindB\x04\n" + + "\x02By\"\xd9\x02\n" + + "\fWatchRequest\x12E\n" + + "\aentries\x18\x01 \x03(\v2+.docker.swarmkit.v1.WatchRequest.WatchEntryR\aentries\x12<\n" + + "\vresume_from\x18\x02 \x01(\v2\x1b.docker.swarmkit.v1.VersionR\n" + + "resumeFrom\x12,\n" + + "\x12include_old_object\x18\x03 \x01(\bR\x10includeOldObject\x1a\x95\x01\n" + + "\n" + + "WatchEntry\x12\x12\n" + + "\x04kind\x18\x01 \x01(\tR\x04kind\x12;\n" + + "\x06action\x18\x02 \x01(\x0e2#.docker.swarmkit.v1.WatchActionKindR\x06action\x126\n" + + "\afilters\x18\x03 \x03(\v2\x1c.docker.swarmkit.v1.SelectByR\afilters\"\xbb\x02\n" + + "\fWatchMessage\x12>\n" + + "\x06events\x18\x01 \x03(\v2&.docker.swarmkit.v1.WatchMessage.EventR\x06events\x125\n" + + "\aversion\x18\x02 \x01(\v2\x1b.docker.swarmkit.v1.VersionR\aversion\x1a\xb3\x01\n" + + "\x05Event\x12;\n" + + "\x06action\x18\x01 \x01(\x0e2#.docker.swarmkit.v1.WatchActionKindR\x06action\x122\n" + + "\x06object\x18\x02 \x01(\v2\x1a.docker.swarmkit.v1.ObjectR\x06object\x129\n" + + "\n" + + "old_object\x18\x03 \x01(\v2\x1a.docker.swarmkit.v1.ObjectR\toldObject*\xf8\x01\n" + + "\x0fWatchActionKind\x124\n" + + "\x14WATCH_ACTION_UNKNOWN\x10\x00\x1a\x1a\xa2\x97\"\x16WatchActionKindUnknown\x122\n" + + "\x13WATCH_ACTION_CREATE\x10\x01\x1a\x19\xa2\x97\"\x15WatchActionKindCreate\x122\n" + + "\x13WATCH_ACTION_UPDATE\x10\x02\x1a\x19\xa2\x97\"\x15WatchActionKindUpdate\x122\n" + + "\x13WATCH_ACTION_REMOVE\x10\x04\x1a\x19\xa2\x97\"\x15WatchActionKindRemove\x1a\x13\x9a\x97\"\x0fWatchActionKind2m\n" + + "\x05Watch\x12d\n" + + "\x05Watch\x12 .docker.swarmkit.v1.WatchRequest\x1a .docker.swarmkit.v1.WatchMessage\"\x15ʮ\xee\x98\x02\x0f\n" + + "\rswarm-manager0\x01B!Z\x1fgithub.com/moby/swarmkit/v2/apib\x06proto3" -func (m *SelectBy_NodeID) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - i -= len(m.NodeID) - copy(dAtA[i:], m.NodeID) - i = encodeVarintWatch(dAtA, i, uint64(len(m.NodeID))) - i-- - dAtA[i] = 0x42 - return len(dAtA) - i, nil -} -func (m *SelectBy_Slot) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} +var ( + file_api_watch_proto_rawDescOnce sync.Once + file_api_watch_proto_rawDescData []byte +) -func (m *SelectBy_Slot) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - if m.Slot != nil { - { - size, err := m.Slot.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintWatch(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x4a - } - return len(dAtA) - i, nil -} -func (m *SelectBy_DesiredState) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *SelectBy_DesiredState) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - i = encodeVarintWatch(dAtA, i, uint64(m.DesiredState)) - i-- - dAtA[i] = 0x50 - return len(dAtA) - i, nil -} -func (m *SelectBy_Role) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *SelectBy_Role) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - i = encodeVarintWatch(dAtA, i, uint64(m.Role)) - i-- - dAtA[i] = 0x58 - return len(dAtA) - i, nil -} -func (m *SelectBy_Membership) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *SelectBy_Membership) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - i = encodeVarintWatch(dAtA, i, uint64(m.Membership)) - i-- - dAtA[i] = 0x60 - return len(dAtA) - i, nil -} -func (m *SelectBy_ReferencedNetworkID) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *SelectBy_ReferencedNetworkID) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - i -= len(m.ReferencedNetworkID) - copy(dAtA[i:], m.ReferencedNetworkID) - i = encodeVarintWatch(dAtA, i, uint64(len(m.ReferencedNetworkID))) - i-- - dAtA[i] = 0x6a - return len(dAtA) - i, nil -} -func (m *SelectBy_ReferencedSecretID) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *SelectBy_ReferencedSecretID) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - i -= len(m.ReferencedSecretID) - copy(dAtA[i:], m.ReferencedSecretID) - i = encodeVarintWatch(dAtA, i, uint64(len(m.ReferencedSecretID))) - i-- - dAtA[i] = 0x72 - return len(dAtA) - i, nil -} -func (m *SelectBy_Kind) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *SelectBy_Kind) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - i -= len(m.Kind) - copy(dAtA[i:], m.Kind) - i = encodeVarintWatch(dAtA, i, uint64(len(m.Kind))) - i-- - dAtA[i] = 0x7a - return len(dAtA) - i, nil -} -func (m *SelectBy_ReferencedConfigID) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *SelectBy_ReferencedConfigID) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - i -= len(m.ReferencedConfigID) - copy(dAtA[i:], m.ReferencedConfigID) - i = encodeVarintWatch(dAtA, i, uint64(len(m.ReferencedConfigID))) - i-- - dAtA[i] = 0x1 - i-- - dAtA[i] = 0x82 - return len(dAtA) - i, nil -} -func (m *WatchRequest) 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 *WatchRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *WatchRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.IncludeOldObject { - i-- - if m.IncludeOldObject { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x18 - } - if m.ResumeFrom != nil { - { - size, err := m.ResumeFrom.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintWatch(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - if len(m.Entries) > 0 { - for iNdEx := len(m.Entries) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Entries[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintWatch(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func (m *WatchRequest_WatchEntry) 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 *WatchRequest_WatchEntry) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *WatchRequest_WatchEntry) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Filters) > 0 { - for iNdEx := len(m.Filters) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Filters[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintWatch(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - } - } - if m.Action != 0 { - i = encodeVarintWatch(dAtA, i, uint64(m.Action)) - i-- - dAtA[i] = 0x10 - } - if len(m.Kind) > 0 { - i -= len(m.Kind) - copy(dAtA[i:], m.Kind) - i = encodeVarintWatch(dAtA, i, uint64(len(m.Kind))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *WatchMessage) 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 *WatchMessage) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *WatchMessage) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Version != nil { - { - size, err := m.Version.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintWatch(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - if len(m.Events) > 0 { - for iNdEx := len(m.Events) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Events[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintWatch(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func (m *WatchMessage_Event) 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 *WatchMessage_Event) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *WatchMessage_Event) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.OldObject != nil { - { - size, err := m.OldObject.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintWatch(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - } - if m.Object != nil { - { - size, err := m.Object.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintWatch(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - if m.Action != 0 { - i = encodeVarintWatch(dAtA, i, uint64(m.Action)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func encodeVarintWatch(dAtA []byte, offset int, v uint64) int { - offset -= sovWatch(v) - base := offset - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return base -} - -type raftProxyWatchServer struct { - local WatchServer - connSelector raftselector.ConnProvider - localCtxMods, remoteCtxMods []func(context.Context) (context.Context, error) -} - -func NewRaftProxyWatchServer(local WatchServer, connSelector raftselector.ConnProvider, localCtxMod, remoteCtxMod func(context.Context) (context.Context, error)) WatchServer { - redirectChecker := func(ctx context.Context) (context.Context, error) { - p, ok := peer.FromContext(ctx) - if !ok { - return ctx, status.Errorf(codes.InvalidArgument, "remote addr is not found in context") - } - addr := p.Addr.String() - md, ok := metadata.FromIncomingContext(ctx) - if ok && len(md["redirect"]) != 0 { - return ctx, status.Errorf(codes.ResourceExhausted, "more than one redirect to leader from: %s", md["redirect"]) - } - if !ok { - md = metadata.New(map[string]string{}) - } - md["redirect"] = append(md["redirect"], addr) - return metadata.NewOutgoingContext(ctx, md), nil - } - remoteMods := []func(context.Context) (context.Context, error){redirectChecker} - remoteMods = append(remoteMods, remoteCtxMod) - - var localMods []func(context.Context) (context.Context, error) - if localCtxMod != nil { - localMods = []func(context.Context) (context.Context, error){localCtxMod} - } - - return &raftProxyWatchServer{ - local: local, - connSelector: connSelector, - localCtxMods: localMods, - remoteCtxMods: remoteMods, - } -} -func (p *raftProxyWatchServer) runCtxMods(ctx context.Context, ctxMods []func(context.Context) (context.Context, error)) (context.Context, error) { - var err error - for _, mod := range ctxMods { - ctx, err = mod(ctx) - if err != nil { - return ctx, err - } - } - return ctx, nil -} -func (p *raftProxyWatchServer) pollNewLeaderConn(ctx context.Context) (*grpc.ClientConn, error) { - ticker := rafttime.NewTicker(500 * rafttime.Millisecond) - defer ticker.Stop() - for { - select { - case <-ticker.C: - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - return nil, err - } - - client := NewHealthClient(conn) - - resp, err := client.Check(ctx, &HealthCheckRequest{Service: "Raft"}) - if err != nil || resp.Status != HealthCheckResponse_SERVING { - continue - } - return conn, nil - case <-ctx.Done(): - return nil, ctx.Err() - } - } -} - -type Watch_WatchServerWrapper struct { - Watch_WatchServer - ctx context.Context -} - -func (s Watch_WatchServerWrapper) Context() context.Context { - return s.ctx -} - -func (p *raftProxyWatchServer) Watch(r *WatchRequest, stream Watch_WatchServer) error { - ctx := stream.Context() - conn, err := p.connSelector.LeaderConn(ctx) - if err != nil { - if err == raftselector.ErrIsLeader { - ctx, err = p.runCtxMods(ctx, p.localCtxMods) - if err != nil { - return err - } - streamWrapper := Watch_WatchServerWrapper{ - Watch_WatchServer: stream, - ctx: ctx, - } - return p.local.Watch(r, streamWrapper) - } - return err - } - ctx, err = p.runCtxMods(ctx, p.remoteCtxMods) - if err != nil { - return err - } - clientStream, err := NewWatchClient(conn).Watch(ctx, r) - - if err != nil { - return err - } - - for { - msg, err := clientStream.Recv() - if err == io.EOF { - break - } - if err != nil { - return err - } - if err := stream.Send(msg); err != nil { - return err - } - } - return nil -} - -func (m *Object) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Object != nil { - n += m.Object.Size() - } - return n -} - -func (m *Object_Node) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Node != nil { - l = m.Node.Size() - n += 1 + l + sovWatch(uint64(l)) - } - return n -} -func (m *Object_Service) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Service != nil { - l = m.Service.Size() - n += 1 + l + sovWatch(uint64(l)) - } - return n -} -func (m *Object_Network) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Network != nil { - l = m.Network.Size() - n += 1 + l + sovWatch(uint64(l)) - } - return n -} -func (m *Object_Task) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Task != nil { - l = m.Task.Size() - n += 1 + l + sovWatch(uint64(l)) - } - return n -} -func (m *Object_Cluster) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Cluster != nil { - l = m.Cluster.Size() - n += 1 + l + sovWatch(uint64(l)) - } - return n -} -func (m *Object_Secret) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Secret != nil { - l = m.Secret.Size() - n += 1 + l + sovWatch(uint64(l)) - } - return n -} -func (m *Object_Resource) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Resource != nil { - l = m.Resource.Size() - n += 1 + l + sovWatch(uint64(l)) - } - return n -} -func (m *Object_Extension) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Extension != nil { - l = m.Extension.Size() - n += 1 + l + sovWatch(uint64(l)) - } - return n -} -func (m *Object_Config) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Config != nil { - l = m.Config.Size() - n += 1 + l + sovWatch(uint64(l)) - } - return n -} -func (m *Object_Volume) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Volume != nil { - l = m.Volume.Size() - n += 1 + l + sovWatch(uint64(l)) - } - return n -} -func (m *SelectBySlot) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.ServiceID) - if l > 0 { - n += 1 + l + sovWatch(uint64(l)) - } - if m.Slot != 0 { - n += 1 + sovWatch(uint64(m.Slot)) - } - return n -} - -func (m *SelectByCustom) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Kind) - if l > 0 { - n += 1 + l + sovWatch(uint64(l)) - } - l = len(m.Index) - if l > 0 { - n += 1 + l + sovWatch(uint64(l)) - } - l = len(m.Value) - if l > 0 { - n += 1 + l + sovWatch(uint64(l)) - } - return n -} - -func (m *SelectBy) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.By != nil { - n += m.By.Size() - } - return n -} - -func (m *SelectBy_ID) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.ID) - n += 1 + l + sovWatch(uint64(l)) - return n -} -func (m *SelectBy_IDPrefix) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.IDPrefix) - n += 1 + l + sovWatch(uint64(l)) - return n -} -func (m *SelectBy_Name) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Name) - n += 1 + l + sovWatch(uint64(l)) - return n -} -func (m *SelectBy_NamePrefix) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.NamePrefix) - n += 1 + l + sovWatch(uint64(l)) - return n -} -func (m *SelectBy_Custom) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Custom != nil { - l = m.Custom.Size() - n += 1 + l + sovWatch(uint64(l)) - } - return n -} -func (m *SelectBy_CustomPrefix) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.CustomPrefix != nil { - l = m.CustomPrefix.Size() - n += 1 + l + sovWatch(uint64(l)) - } - return n -} -func (m *SelectBy_ServiceID) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.ServiceID) - n += 1 + l + sovWatch(uint64(l)) - return n -} -func (m *SelectBy_NodeID) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.NodeID) - n += 1 + l + sovWatch(uint64(l)) - return n -} -func (m *SelectBy_Slot) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Slot != nil { - l = m.Slot.Size() - n += 1 + l + sovWatch(uint64(l)) - } - return n -} -func (m *SelectBy_DesiredState) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - n += 1 + sovWatch(uint64(m.DesiredState)) - return n -} -func (m *SelectBy_Role) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - n += 1 + sovWatch(uint64(m.Role)) - return n -} -func (m *SelectBy_Membership) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - n += 1 + sovWatch(uint64(m.Membership)) - return n -} -func (m *SelectBy_ReferencedNetworkID) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.ReferencedNetworkID) - n += 1 + l + sovWatch(uint64(l)) - return n -} -func (m *SelectBy_ReferencedSecretID) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.ReferencedSecretID) - n += 1 + l + sovWatch(uint64(l)) - return n -} -func (m *SelectBy_Kind) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Kind) - n += 1 + l + sovWatch(uint64(l)) - return n -} -func (m *SelectBy_ReferencedConfigID) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.ReferencedConfigID) - n += 2 + l + sovWatch(uint64(l)) - return n -} -func (m *WatchRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Entries) > 0 { - for _, e := range m.Entries { - l = e.Size() - n += 1 + l + sovWatch(uint64(l)) - } - } - if m.ResumeFrom != nil { - l = m.ResumeFrom.Size() - n += 1 + l + sovWatch(uint64(l)) - } - if m.IncludeOldObject { - n += 2 - } - return n -} - -func (m *WatchRequest_WatchEntry) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Kind) - if l > 0 { - n += 1 + l + sovWatch(uint64(l)) - } - if m.Action != 0 { - n += 1 + sovWatch(uint64(m.Action)) - } - if len(m.Filters) > 0 { - for _, e := range m.Filters { - l = e.Size() - n += 1 + l + sovWatch(uint64(l)) - } - } - return n -} - -func (m *WatchMessage) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Events) > 0 { - for _, e := range m.Events { - l = e.Size() - n += 1 + l + sovWatch(uint64(l)) - } - } - if m.Version != nil { - l = m.Version.Size() - n += 1 + l + sovWatch(uint64(l)) - } - return n -} - -func (m *WatchMessage_Event) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Action != 0 { - n += 1 + sovWatch(uint64(m.Action)) - } - if m.Object != nil { - l = m.Object.Size() - n += 1 + l + sovWatch(uint64(l)) - } - if m.OldObject != nil { - l = m.OldObject.Size() - n += 1 + l + sovWatch(uint64(l)) - } - return n -} - -func sovWatch(x uint64) (n int) { - return (math_bits.Len64(x|1) + 6) / 7 -} -func sozWatch(x uint64) (n int) { - return sovWatch(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (this *Object) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&Object{`, - `Object:` + fmt.Sprintf("%v", this.Object) + `,`, - `}`, - }, "") - return s -} -func (this *Object_Node) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&Object_Node{`, - `Node:` + strings.Replace(fmt.Sprintf("%v", this.Node), "Node", "Node", 1) + `,`, - `}`, - }, "") - return s -} -func (this *Object_Service) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&Object_Service{`, - `Service:` + strings.Replace(fmt.Sprintf("%v", this.Service), "Service", "Service", 1) + `,`, - `}`, - }, "") - return s -} -func (this *Object_Network) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&Object_Network{`, - `Network:` + strings.Replace(fmt.Sprintf("%v", this.Network), "Network", "Network", 1) + `,`, - `}`, - }, "") - return s -} -func (this *Object_Task) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&Object_Task{`, - `Task:` + strings.Replace(fmt.Sprintf("%v", this.Task), "Task", "Task", 1) + `,`, - `}`, - }, "") - return s -} -func (this *Object_Cluster) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&Object_Cluster{`, - `Cluster:` + strings.Replace(fmt.Sprintf("%v", this.Cluster), "Cluster", "Cluster", 1) + `,`, - `}`, - }, "") - return s -} -func (this *Object_Secret) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&Object_Secret{`, - `Secret:` + strings.Replace(fmt.Sprintf("%v", this.Secret), "Secret", "Secret", 1) + `,`, - `}`, - }, "") - return s -} -func (this *Object_Resource) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&Object_Resource{`, - `Resource:` + strings.Replace(fmt.Sprintf("%v", this.Resource), "Resource", "Resource", 1) + `,`, - `}`, - }, "") - return s -} -func (this *Object_Extension) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&Object_Extension{`, - `Extension:` + strings.Replace(fmt.Sprintf("%v", this.Extension), "Extension", "Extension", 1) + `,`, - `}`, - }, "") - return s -} -func (this *Object_Config) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&Object_Config{`, - `Config:` + strings.Replace(fmt.Sprintf("%v", this.Config), "Config", "Config", 1) + `,`, - `}`, - }, "") - return s -} -func (this *Object_Volume) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&Object_Volume{`, - `Volume:` + strings.Replace(fmt.Sprintf("%v", this.Volume), "Volume", "Volume", 1) + `,`, - `}`, - }, "") - return s -} -func (this *SelectBySlot) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&SelectBySlot{`, - `ServiceID:` + fmt.Sprintf("%v", this.ServiceID) + `,`, - `Slot:` + fmt.Sprintf("%v", this.Slot) + `,`, - `}`, - }, "") - return s -} -func (this *SelectByCustom) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&SelectByCustom{`, - `Kind:` + fmt.Sprintf("%v", this.Kind) + `,`, - `Index:` + fmt.Sprintf("%v", this.Index) + `,`, - `Value:` + fmt.Sprintf("%v", this.Value) + `,`, - `}`, - }, "") - return s -} -func (this *SelectBy) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&SelectBy{`, - `By:` + fmt.Sprintf("%v", this.By) + `,`, - `}`, - }, "") - return s -} -func (this *SelectBy_ID) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&SelectBy_ID{`, - `ID:` + fmt.Sprintf("%v", this.ID) + `,`, - `}`, - }, "") - return s -} -func (this *SelectBy_IDPrefix) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&SelectBy_IDPrefix{`, - `IDPrefix:` + fmt.Sprintf("%v", this.IDPrefix) + `,`, - `}`, - }, "") - return s -} -func (this *SelectBy_Name) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&SelectBy_Name{`, - `Name:` + fmt.Sprintf("%v", this.Name) + `,`, - `}`, - }, "") - return s -} -func (this *SelectBy_NamePrefix) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&SelectBy_NamePrefix{`, - `NamePrefix:` + fmt.Sprintf("%v", this.NamePrefix) + `,`, - `}`, - }, "") - return s -} -func (this *SelectBy_Custom) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&SelectBy_Custom{`, - `Custom:` + strings.Replace(fmt.Sprintf("%v", this.Custom), "SelectByCustom", "SelectByCustom", 1) + `,`, - `}`, - }, "") - return s -} -func (this *SelectBy_CustomPrefix) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&SelectBy_CustomPrefix{`, - `CustomPrefix:` + strings.Replace(fmt.Sprintf("%v", this.CustomPrefix), "SelectByCustom", "SelectByCustom", 1) + `,`, - `}`, - }, "") - return s -} -func (this *SelectBy_ServiceID) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&SelectBy_ServiceID{`, - `ServiceID:` + fmt.Sprintf("%v", this.ServiceID) + `,`, - `}`, - }, "") - return s -} -func (this *SelectBy_NodeID) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&SelectBy_NodeID{`, - `NodeID:` + fmt.Sprintf("%v", this.NodeID) + `,`, - `}`, - }, "") - return s -} -func (this *SelectBy_Slot) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&SelectBy_Slot{`, - `Slot:` + strings.Replace(fmt.Sprintf("%v", this.Slot), "SelectBySlot", "SelectBySlot", 1) + `,`, - `}`, - }, "") - return s -} -func (this *SelectBy_DesiredState) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&SelectBy_DesiredState{`, - `DesiredState:` + fmt.Sprintf("%v", this.DesiredState) + `,`, - `}`, - }, "") - return s -} -func (this *SelectBy_Role) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&SelectBy_Role{`, - `Role:` + fmt.Sprintf("%v", this.Role) + `,`, - `}`, - }, "") - return s -} -func (this *SelectBy_Membership) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&SelectBy_Membership{`, - `Membership:` + fmt.Sprintf("%v", this.Membership) + `,`, - `}`, - }, "") - return s -} -func (this *SelectBy_ReferencedNetworkID) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&SelectBy_ReferencedNetworkID{`, - `ReferencedNetworkID:` + fmt.Sprintf("%v", this.ReferencedNetworkID) + `,`, - `}`, - }, "") - return s -} -func (this *SelectBy_ReferencedSecretID) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&SelectBy_ReferencedSecretID{`, - `ReferencedSecretID:` + fmt.Sprintf("%v", this.ReferencedSecretID) + `,`, - `}`, - }, "") - return s -} -func (this *SelectBy_Kind) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&SelectBy_Kind{`, - `Kind:` + fmt.Sprintf("%v", this.Kind) + `,`, - `}`, - }, "") - return s -} -func (this *SelectBy_ReferencedConfigID) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&SelectBy_ReferencedConfigID{`, - `ReferencedConfigID:` + fmt.Sprintf("%v", this.ReferencedConfigID) + `,`, - `}`, - }, "") - return s -} -func (this *WatchRequest) String() string { - if this == nil { - return "nil" - } - repeatedStringForEntries := "[]*WatchRequest_WatchEntry{" - for _, f := range this.Entries { - repeatedStringForEntries += strings.Replace(fmt.Sprintf("%v", f), "WatchRequest_WatchEntry", "WatchRequest_WatchEntry", 1) + "," - } - repeatedStringForEntries += "}" - s := strings.Join([]string{`&WatchRequest{`, - `Entries:` + repeatedStringForEntries + `,`, - `ResumeFrom:` + strings.Replace(fmt.Sprintf("%v", this.ResumeFrom), "Version", "Version", 1) + `,`, - `IncludeOldObject:` + fmt.Sprintf("%v", this.IncludeOldObject) + `,`, - `}`, - }, "") - return s -} -func (this *WatchRequest_WatchEntry) String() string { - if this == nil { - return "nil" - } - repeatedStringForFilters := "[]*SelectBy{" - for _, f := range this.Filters { - repeatedStringForFilters += strings.Replace(f.String(), "SelectBy", "SelectBy", 1) + "," - } - repeatedStringForFilters += "}" - s := strings.Join([]string{`&WatchRequest_WatchEntry{`, - `Kind:` + fmt.Sprintf("%v", this.Kind) + `,`, - `Action:` + fmt.Sprintf("%v", this.Action) + `,`, - `Filters:` + repeatedStringForFilters + `,`, - `}`, - }, "") - return s -} -func (this *WatchMessage) String() string { - if this == nil { - return "nil" - } - repeatedStringForEvents := "[]*WatchMessage_Event{" - for _, f := range this.Events { - repeatedStringForEvents += strings.Replace(fmt.Sprintf("%v", f), "WatchMessage_Event", "WatchMessage_Event", 1) + "," - } - repeatedStringForEvents += "}" - s := strings.Join([]string{`&WatchMessage{`, - `Events:` + repeatedStringForEvents + `,`, - `Version:` + strings.Replace(fmt.Sprintf("%v", this.Version), "Version", "Version", 1) + `,`, - `}`, - }, "") - return s -} -func (this *WatchMessage_Event) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&WatchMessage_Event{`, - `Action:` + fmt.Sprintf("%v", this.Action) + `,`, - `Object:` + strings.Replace(this.Object.String(), "Object", "Object", 1) + `,`, - `OldObject:` + strings.Replace(this.OldObject.String(), "Object", "Object", 1) + `,`, - `}`, - }, "") - return s -} -func valueToStringWatch(v interface{}) string { - rv := reflect.ValueOf(v) - if rv.IsNil() { - return "nil" - } - pv := reflect.Indirect(rv).Interface() - return fmt.Sprintf("*%v", pv) -} -func (m *Object) 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 ErrIntOverflowWatch - } - 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: Object: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Object: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Node", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowWatch - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthWatch - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthWatch - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &Node{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.Object = &Object_Node{v} - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Service", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowWatch - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthWatch - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthWatch - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &Service{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.Object = &Object_Service{v} - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Network", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowWatch - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthWatch - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthWatch - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &Network{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.Object = &Object_Network{v} - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Task", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowWatch - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthWatch - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthWatch - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &Task{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.Object = &Object_Task{v} - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Cluster", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowWatch - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthWatch - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthWatch - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &Cluster{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.Object = &Object_Cluster{v} - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Secret", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowWatch - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthWatch - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthWatch - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &Secret{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.Object = &Object_Secret{v} - iNdEx = postIndex - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Resource", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowWatch - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthWatch - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthWatch - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &Resource{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.Object = &Object_Resource{v} - iNdEx = postIndex - case 8: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Extension", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowWatch - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthWatch - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthWatch - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &Extension{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.Object = &Object_Extension{v} - iNdEx = postIndex - case 9: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Config", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowWatch - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthWatch - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthWatch - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &Config{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.Object = &Object_Config{v} - iNdEx = postIndex - case 10: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Volume", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowWatch - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthWatch - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthWatch - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &Volume{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.Object = &Object_Volume{v} - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipWatch(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthWatch - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *SelectBySlot) 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 ErrIntOverflowWatch - } - 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: SelectBySlot: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: SelectBySlot: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ServiceID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowWatch - } - 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 ErrInvalidLengthWatch - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthWatch - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ServiceID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Slot", wireType) - } - m.Slot = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowWatch - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Slot |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipWatch(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthWatch - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *SelectByCustom) 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 ErrIntOverflowWatch - } - 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: SelectByCustom: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: SelectByCustom: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Kind", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowWatch - } - 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 ErrInvalidLengthWatch - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthWatch - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Kind = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Index", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowWatch - } - 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 ErrInvalidLengthWatch - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthWatch - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Index = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowWatch - } - 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 ErrInvalidLengthWatch - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthWatch - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Value = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipWatch(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthWatch - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *SelectBy) 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 ErrIntOverflowWatch - } - 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: SelectBy: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: SelectBy: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowWatch - } - 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 ErrInvalidLengthWatch - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthWatch - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.By = &SelectBy_ID{string(dAtA[iNdEx:postIndex])} - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field IDPrefix", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowWatch - } - 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 ErrInvalidLengthWatch - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthWatch - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.By = &SelectBy_IDPrefix{string(dAtA[iNdEx:postIndex])} - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowWatch - } - 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 ErrInvalidLengthWatch - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthWatch - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.By = &SelectBy_Name{string(dAtA[iNdEx:postIndex])} - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NamePrefix", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowWatch - } - 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 ErrInvalidLengthWatch - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthWatch - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.By = &SelectBy_NamePrefix{string(dAtA[iNdEx:postIndex])} - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Custom", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowWatch - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthWatch - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthWatch - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &SelectByCustom{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.By = &SelectBy_Custom{v} - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CustomPrefix", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowWatch - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthWatch - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthWatch - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &SelectByCustom{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.By = &SelectBy_CustomPrefix{v} - iNdEx = postIndex - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ServiceID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowWatch - } - 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 ErrInvalidLengthWatch - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthWatch - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.By = &SelectBy_ServiceID{string(dAtA[iNdEx:postIndex])} - iNdEx = postIndex - case 8: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NodeID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowWatch - } - 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 ErrInvalidLengthWatch - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthWatch - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.By = &SelectBy_NodeID{string(dAtA[iNdEx:postIndex])} - iNdEx = postIndex - case 9: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Slot", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowWatch - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthWatch - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthWatch - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &SelectBySlot{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.By = &SelectBy_Slot{v} - iNdEx = postIndex - case 10: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field DesiredState", wireType) - } - var v TaskState - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowWatch - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= TaskState(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.By = &SelectBy_DesiredState{v} - case 11: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Role", wireType) - } - var v NodeRole - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowWatch - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= NodeRole(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.By = &SelectBy_Role{v} - case 12: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Membership", wireType) - } - var v NodeSpec_Membership - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowWatch - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= NodeSpec_Membership(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.By = &SelectBy_Membership{v} - case 13: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ReferencedNetworkID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowWatch - } - 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 ErrInvalidLengthWatch - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthWatch - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.By = &SelectBy_ReferencedNetworkID{string(dAtA[iNdEx:postIndex])} - iNdEx = postIndex - case 14: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ReferencedSecretID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowWatch - } - 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 ErrInvalidLengthWatch - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthWatch - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.By = &SelectBy_ReferencedSecretID{string(dAtA[iNdEx:postIndex])} - iNdEx = postIndex - case 15: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Kind", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowWatch - } - 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 ErrInvalidLengthWatch - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthWatch - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.By = &SelectBy_Kind{string(dAtA[iNdEx:postIndex])} - iNdEx = postIndex - case 16: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ReferencedConfigID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowWatch - } - 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 ErrInvalidLengthWatch - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthWatch - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.By = &SelectBy_ReferencedConfigID{string(dAtA[iNdEx:postIndex])} - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipWatch(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthWatch - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *WatchRequest) 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 ErrIntOverflowWatch - } - 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: WatchRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: WatchRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Entries", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowWatch - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthWatch - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthWatch - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Entries = append(m.Entries, &WatchRequest_WatchEntry{}) - if err := m.Entries[len(m.Entries)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ResumeFrom", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowWatch - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthWatch - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthWatch - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.ResumeFrom == nil { - m.ResumeFrom = &Version{} - } - if err := m.ResumeFrom.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field IncludeOldObject", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowWatch - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.IncludeOldObject = bool(v != 0) - default: - iNdEx = preIndex - skippy, err := skipWatch(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthWatch - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *WatchRequest_WatchEntry) 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 ErrIntOverflowWatch - } - 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: WatchEntry: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: WatchEntry: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Kind", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowWatch - } - 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 ErrInvalidLengthWatch - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthWatch - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Kind = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Action", wireType) - } - m.Action = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowWatch - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Action |= WatchActionKind(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Filters", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowWatch - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthWatch - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthWatch - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Filters = append(m.Filters, &SelectBy{}) - if err := m.Filters[len(m.Filters)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipWatch(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthWatch - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *WatchMessage) 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 ErrIntOverflowWatch - } - 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: WatchMessage: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: WatchMessage: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Events", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowWatch - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthWatch - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthWatch - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Events = append(m.Events, &WatchMessage_Event{}) - if err := m.Events[len(m.Events)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowWatch - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthWatch - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthWatch - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Version == nil { - m.Version = &Version{} - } - if err := m.Version.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipWatch(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthWatch - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *WatchMessage_Event) 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 ErrIntOverflowWatch - } - 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: Event: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Event: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Action", wireType) - } - m.Action = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowWatch - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Action |= WatchActionKind(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Object", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowWatch - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthWatch - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthWatch - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Object == nil { - m.Object = &Object{} - } - if err := m.Object.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field OldObject", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowWatch - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthWatch - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthWatch - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.OldObject == nil { - m.OldObject = &Object{} - } - if err := m.OldObject.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipWatch(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthWatch - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF +func file_api_watch_proto_rawDescGZIP() []byte { + file_api_watch_proto_rawDescOnce.Do(func() { + file_api_watch_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_api_watch_proto_rawDesc), len(file_api_watch_proto_rawDesc))) + }) + return file_api_watch_proto_rawDescData +} + +var file_api_watch_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_api_watch_proto_msgTypes = make([]protoimpl.MessageInfo, 8) +var file_api_watch_proto_goTypes = []any{ + (WatchActionKind)(0), // 0: docker.swarmkit.v1.WatchActionKind + (*Object)(nil), // 1: docker.swarmkit.v1.Object + (*SelectBySlot)(nil), // 2: docker.swarmkit.v1.SelectBySlot + (*SelectByCustom)(nil), // 3: docker.swarmkit.v1.SelectByCustom + (*SelectBy)(nil), // 4: docker.swarmkit.v1.SelectBy + (*WatchRequest)(nil), // 5: docker.swarmkit.v1.WatchRequest + (*WatchMessage)(nil), // 6: docker.swarmkit.v1.WatchMessage + (*WatchRequest_WatchEntry)(nil), // 7: docker.swarmkit.v1.WatchRequest.WatchEntry + (*WatchMessage_Event)(nil), // 8: docker.swarmkit.v1.WatchMessage.Event + (*Node)(nil), // 9: docker.swarmkit.v1.Node + (*Service)(nil), // 10: docker.swarmkit.v1.Service + (*Network)(nil), // 11: docker.swarmkit.v1.Network + (*Task)(nil), // 12: docker.swarmkit.v1.Task + (*Cluster)(nil), // 13: docker.swarmkit.v1.Cluster + (*Secret)(nil), // 14: docker.swarmkit.v1.Secret + (*Resource)(nil), // 15: docker.swarmkit.v1.Resource + (*Extension)(nil), // 16: docker.swarmkit.v1.Extension + (*Config)(nil), // 17: docker.swarmkit.v1.Config + (*Volume)(nil), // 18: docker.swarmkit.v1.Volume + (TaskState)(0), // 19: docker.swarmkit.v1.TaskState + (NodeRole)(0), // 20: docker.swarmkit.v1.NodeRole + (NodeSpec_Membership)(0), // 21: docker.swarmkit.v1.NodeSpec.Membership + (*Version)(nil), // 22: docker.swarmkit.v1.Version +} +var file_api_watch_proto_depIdxs = []int32{ + 9, // 0: docker.swarmkit.v1.Object.node:type_name -> docker.swarmkit.v1.Node + 10, // 1: docker.swarmkit.v1.Object.service:type_name -> docker.swarmkit.v1.Service + 11, // 2: docker.swarmkit.v1.Object.network:type_name -> docker.swarmkit.v1.Network + 12, // 3: docker.swarmkit.v1.Object.task:type_name -> docker.swarmkit.v1.Task + 13, // 4: docker.swarmkit.v1.Object.cluster:type_name -> docker.swarmkit.v1.Cluster + 14, // 5: docker.swarmkit.v1.Object.secret:type_name -> docker.swarmkit.v1.Secret + 15, // 6: docker.swarmkit.v1.Object.resource:type_name -> docker.swarmkit.v1.Resource + 16, // 7: docker.swarmkit.v1.Object.extension:type_name -> docker.swarmkit.v1.Extension + 17, // 8: docker.swarmkit.v1.Object.config:type_name -> docker.swarmkit.v1.Config + 18, // 9: docker.swarmkit.v1.Object.volume:type_name -> docker.swarmkit.v1.Volume + 3, // 10: docker.swarmkit.v1.SelectBy.custom:type_name -> docker.swarmkit.v1.SelectByCustom + 3, // 11: docker.swarmkit.v1.SelectBy.custom_prefix:type_name -> docker.swarmkit.v1.SelectByCustom + 2, // 12: docker.swarmkit.v1.SelectBy.slot:type_name -> docker.swarmkit.v1.SelectBySlot + 19, // 13: docker.swarmkit.v1.SelectBy.desired_state:type_name -> docker.swarmkit.v1.TaskState + 20, // 14: docker.swarmkit.v1.SelectBy.role:type_name -> docker.swarmkit.v1.NodeRole + 21, // 15: docker.swarmkit.v1.SelectBy.membership:type_name -> docker.swarmkit.v1.NodeSpec.Membership + 7, // 16: docker.swarmkit.v1.WatchRequest.entries:type_name -> docker.swarmkit.v1.WatchRequest.WatchEntry + 22, // 17: docker.swarmkit.v1.WatchRequest.resume_from:type_name -> docker.swarmkit.v1.Version + 8, // 18: docker.swarmkit.v1.WatchMessage.events:type_name -> docker.swarmkit.v1.WatchMessage.Event + 22, // 19: docker.swarmkit.v1.WatchMessage.version:type_name -> docker.swarmkit.v1.Version + 0, // 20: docker.swarmkit.v1.WatchRequest.WatchEntry.action:type_name -> docker.swarmkit.v1.WatchActionKind + 4, // 21: docker.swarmkit.v1.WatchRequest.WatchEntry.filters:type_name -> docker.swarmkit.v1.SelectBy + 0, // 22: docker.swarmkit.v1.WatchMessage.Event.action:type_name -> docker.swarmkit.v1.WatchActionKind + 1, // 23: docker.swarmkit.v1.WatchMessage.Event.object:type_name -> docker.swarmkit.v1.Object + 1, // 24: docker.swarmkit.v1.WatchMessage.Event.old_object:type_name -> docker.swarmkit.v1.Object + 5, // 25: docker.swarmkit.v1.Watch.Watch:input_type -> docker.swarmkit.v1.WatchRequest + 6, // 26: docker.swarmkit.v1.Watch.Watch:output_type -> docker.swarmkit.v1.WatchMessage + 26, // [26:27] is the sub-list for method output_type + 25, // [25:26] is the sub-list for method input_type + 25, // [25:25] is the sub-list for extension type_name + 25, // [25:25] is the sub-list for extension extendee + 0, // [0:25] is the sub-list for field type_name +} + +func init() { file_api_watch_proto_init() } +func file_api_watch_proto_init() { + if File_api_watch_proto != nil { + return + } + file_api_specs_proto_init() + file_api_objects_proto_init() + file_api_types_proto_init() + file_api_watch_proto_msgTypes[0].OneofWrappers = []any{ + (*Object_Node)(nil), + (*Object_Service)(nil), + (*Object_Network)(nil), + (*Object_Task)(nil), + (*Object_Cluster)(nil), + (*Object_Secret)(nil), + (*Object_Resource)(nil), + (*Object_Extension)(nil), + (*Object_Config)(nil), + (*Object_Volume)(nil), } - return nil -} -func skipWatch(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - depth := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowWatch - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowWatch - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - case 1: - iNdEx += 8 - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowWatch - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLengthWatch - } - iNdEx += length - case 3: - depth++ - case 4: - if depth == 0 { - return 0, ErrUnexpectedEndOfGroupWatch - } - depth-- - case 5: - iNdEx += 4 - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - if iNdEx < 0 { - return 0, ErrInvalidLengthWatch - } - if depth == 0 { - return iNdEx, nil - } + file_api_watch_proto_msgTypes[3].OneofWrappers = []any{ + (*SelectBy_ID)(nil), + (*SelectBy_IDPrefix)(nil), + (*SelectBy_Name)(nil), + (*SelectBy_NamePrefix)(nil), + (*SelectBy_Custom)(nil), + (*SelectBy_CustomPrefix)(nil), + (*SelectBy_ServiceID)(nil), + (*SelectBy_NodeID)(nil), + (*SelectBy_Slot)(nil), + (*SelectBy_DesiredState)(nil), + (*SelectBy_Role)(nil), + (*SelectBy_Membership)(nil), + (*SelectBy_ReferencedNetworkID)(nil), + (*SelectBy_ReferencedSecretID)(nil), + (*SelectBy_ReferencedConfigID)(nil), + (*SelectBy_Kind)(nil), } - return 0, io.ErrUnexpectedEOF + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_api_watch_proto_rawDesc), len(file_api_watch_proto_rawDesc)), + NumEnums: 1, + NumMessages: 8, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_api_watch_proto_goTypes, + DependencyIndexes: file_api_watch_proto_depIdxs, + EnumInfos: file_api_watch_proto_enumTypes, + MessageInfos: file_api_watch_proto_msgTypes, + }.Build() + File_api_watch_proto = out.File + file_api_watch_proto_goTypes = nil + file_api_watch_proto_depIdxs = nil } - -var ( - ErrInvalidLengthWatch = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowWatch = fmt.Errorf("proto: integer overflow") - ErrUnexpectedEndOfGroupWatch = fmt.Errorf("proto: unexpected end of group") -) diff --git a/api/watch.pb.raftproxy.go b/api/watch.pb.raftproxy.go new file mode 100644 index 0000000000..a6cece61b3 --- /dev/null +++ b/api/watch.pb.raftproxy.go @@ -0,0 +1,138 @@ +// Code generated by protoc-gen-goswarm. DO NOT EDIT. + +package api + +import ( + context "context" + raftselector "github.com/moby/swarmkit/v2/manager/raftselector" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + metadata "google.golang.org/grpc/metadata" + peer "google.golang.org/grpc/peer" + status "google.golang.org/grpc/status" + io "io" + time "time" +) + +type raftProxyWatchServer struct { + local WatchServer + connSelector raftselector.ConnProvider + localCtxMods, remoteCtxMods []func(context.Context) (context.Context, error) +} + +func NewRaftProxyWatchServer(local WatchServer, connSelector raftselector.ConnProvider, localCtxMod, remoteCtxMod func(context.Context) (context.Context, error)) WatchServer { + redirectChecker := func(ctx context.Context) (context.Context, error) { + p, ok := peer.FromContext(ctx) + if !ok { + return ctx, status.Errorf(codes.InvalidArgument, "remote addr is not found in context") + } + addr := p.Addr.String() + md, ok := metadata.FromIncomingContext(ctx) + if ok && len(md["redirect"]) != 0 { + return ctx, status.Errorf(codes.ResourceExhausted, "more than one redirect to leader from: %s", md["redirect"]) + } + if !ok { + md = metadata.New(map[string]string{}) + } + md["redirect"] = append(md["redirect"], addr) + return metadata.NewOutgoingContext(ctx, md), nil + } + remoteMods := []func(context.Context) (context.Context, error){redirectChecker} + remoteMods = append(remoteMods, remoteCtxMod) + + var localMods []func(context.Context) (context.Context, error) + if localCtxMod != nil { + localMods = []func(context.Context) (context.Context, error){localCtxMod} + } + + return &raftProxyWatchServer{ + local: local, + connSelector: connSelector, + localCtxMods: localMods, + remoteCtxMods: remoteMods, + } +} +func (p *raftProxyWatchServer) runCtxMods(ctx context.Context, ctxMods []func(context.Context) (context.Context, error)) (context.Context, error) { + var err error + for _, mod := range ctxMods { + ctx, err = mod(ctx) + if err != nil { + return ctx, err + } + } + return ctx, nil +} +func (p *raftProxyWatchServer) pollNewLeaderConn(ctx context.Context) (*grpc.ClientConn, error) { + ticker := time.NewTicker(500 * time.Millisecond) + defer ticker.Stop() + for { + select { + case <-ticker.C: + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + return nil, err + } + + client := NewHealthClient(conn) + + resp, err := client.Check(ctx, &HealthCheckRequest{Service: "Raft"}) + if err != nil || resp.Status != HealthCheckResponse_SERVING { + continue + } + return conn, nil + case <-ctx.Done(): + return nil, ctx.Err() + } + } +} + +type Watch_WatchServerWrapper struct { + Watch_WatchServer + ctx context.Context +} + +func (s Watch_WatchServerWrapper) Context() context.Context { + return s.ctx +} + +func (p *raftProxyWatchServer) Watch(r *WatchRequest, stream Watch_WatchServer) error { + ctx := stream.Context() + conn, err := p.connSelector.LeaderConn(ctx) + if err != nil { + if err == raftselector.ErrIsLeader { + ctx, err = p.runCtxMods(ctx, p.localCtxMods) + if err != nil { + return err + } + streamWrapper := Watch_WatchServerWrapper{ + Watch_WatchServer: stream, + ctx: ctx, + } + return p.local.Watch(r, streamWrapper) + } + return err + } + ctx, err = p.runCtxMods(ctx, p.remoteCtxMods) + if err != nil { + return err + } + clientStream, err := NewWatchClient(conn).Watch(ctx, r) + + if err != nil { + return err + } + + for { + msg, err := clientStream.Recv() + if err == io.EOF { + break + } + if err != nil { + return err + } + if err := stream.Send(msg); err != nil { + return err + } + } + return nil +} diff --git a/api/watch.proto b/api/watch.proto index d7e9e51046..47e90c9a89 100644 --- a/api/watch.proto +++ b/api/watch.proto @@ -2,11 +2,12 @@ syntax = "proto3"; package docker.swarmkit.v1; -import "github.com/docker/swarmkit/api/specs.proto"; -import "github.com/docker/swarmkit/api/objects.proto"; -import "github.com/docker/swarmkit/api/types.proto"; -import "gogoproto/gogo.proto"; -import "github.com/docker/swarmkit/protobuf/plugin/plugin.proto"; +option go_package = "github.com/moby/swarmkit/v2/api"; + +import "api/specs.proto"; +import "api/objects.proto"; +import "api/types.proto"; +import "protobuf/plugin/plugin.proto"; message Object { oneof Object { @@ -26,7 +27,7 @@ message Object { // FIXME(aaronl): These messages should ideally be embedded in SelectBy, but // protoc generates bad code for that. message SelectBySlot { - string service_id = 1 [(gogoproto.customname) = "ServiceID"]; + string service_id = 1 [(docker.protobuf.plugin.go_name) = "ServiceID"]; uint64 slot = 2; } @@ -42,16 +43,16 @@ message SelectBy { // internal indices going forward. oneof By { // supported by all object types - string id = 1 [(gogoproto.customname) = "ID"]; // not applicable for FindObjects - use GetObject instead - string id_prefix = 2 [(gogoproto.customname) = "IDPrefix"]; + string id = 1 [(docker.protobuf.plugin.go_name) = "ID"]; // not applicable for FindObjects - use GetObject instead + string id_prefix = 2 [(docker.protobuf.plugin.go_name) = "IDPrefix"]; string name = 3; string name_prefix = 4; SelectByCustom custom = 5; SelectByCustom custom_prefix = 6; // supported by tasks only - string service_id = 7 [(gogoproto.customname) = "ServiceID"]; - string node_id = 8 [(gogoproto.customname) = "NodeID"]; + string service_id = 7 [(docker.protobuf.plugin.go_name) = "ServiceID"]; + string node_id = 8 [(docker.protobuf.plugin.go_name) = "NodeID"]; SelectBySlot slot = 9; TaskState desired_state = 10; @@ -60,9 +61,9 @@ message SelectBy { NodeSpec.Membership membership = 12; // supported by: service, task - string referenced_network_id = 13 [(gogoproto.customname) = "ReferencedNetworkID"]; - string referenced_secret_id = 14 [(gogoproto.customname) = "ReferencedSecretID"]; - string referenced_config_id = 16 [(gogoproto.customname) = "ReferencedConfigID"]; + string referenced_network_id = 13 [(docker.protobuf.plugin.go_name) = "ReferencedNetworkID"]; + string referenced_secret_id = 14 [(docker.protobuf.plugin.go_name) = "ReferencedSecretID"]; + string referenced_config_id = 16 [(docker.protobuf.plugin.go_name) = "ReferencedConfigID"]; // supported by: resource string kind = 15; @@ -146,10 +147,9 @@ message WatchMessage { // is structured as a bitmap so multiple kinds of events can be requested with // a mask. enum WatchActionKind { - option (gogoproto.goproto_enum_prefix) = false; - option (gogoproto.enum_customname) = "WatchActionKind"; - WATCH_ACTION_UNKNOWN = 0 [(gogoproto.enumvalue_customname) = "WatchActionKindUnknown"]; // default value, invalid - WATCH_ACTION_CREATE = 1 [(gogoproto.enumvalue_customname) = "WatchActionKindCreate"]; - WATCH_ACTION_UPDATE = 2 [(gogoproto.enumvalue_customname) = "WatchActionKindUpdate"]; - WATCH_ACTION_REMOVE = 4 [(gogoproto.enumvalue_customname) = "WatchActionKindRemove"]; + option (docker.protobuf.plugin.go_enum_name) = "WatchActionKind"; + WATCH_ACTION_UNKNOWN = 0 [(docker.protobuf.plugin.go_enum_value_name) = "WatchActionKindUnknown"]; // default value, invalid + WATCH_ACTION_CREATE = 1 [(docker.protobuf.plugin.go_enum_value_name) = "WatchActionKindCreate"]; + WATCH_ACTION_UPDATE = 2 [(docker.protobuf.plugin.go_enum_value_name) = "WatchActionKindUpdate"]; + WATCH_ACTION_REMOVE = 4 [(docker.protobuf.plugin.go_enum_value_name) = "WatchActionKindRemove"]; } diff --git a/api/watch_grpc.pb.go b/api/watch_grpc.pb.go new file mode 100644 index 0000000000..6b8c99f00d --- /dev/null +++ b/api/watch_grpc.pb.go @@ -0,0 +1,136 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.6.2 +// - protoc v3.21.12 +// source: api/watch.proto + +package api + +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.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 + +const ( + Watch_Watch_FullMethodName = "/docker.swarmkit.v1.Watch/Watch" +) + +// WatchClient is the client API for Watch 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. +// +// Watch defines the RPC methods for monitoring data store change. +type WatchClient interface { + // Watch starts a stream that returns any changes to objects that match + // the specified selectors. When the stream begins, it immediately sends + // an empty message back to the client. It is important to wait for + // this message before taking any actions that depend on an established + // stream of changes for consistency. + Watch(ctx context.Context, in *WatchRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[WatchMessage], error) +} + +type watchClient struct { + cc grpc.ClientConnInterface +} + +func NewWatchClient(cc grpc.ClientConnInterface) WatchClient { + return &watchClient{cc} +} + +func (c *watchClient) Watch(ctx context.Context, in *WatchRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[WatchMessage], error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + stream, err := c.cc.NewStream(ctx, &Watch_ServiceDesc.Streams[0], Watch_Watch_FullMethodName, cOpts...) + if err != nil { + return nil, err + } + x := &grpc.GenericClientStream[WatchRequest, WatchMessage]{ClientStream: stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type Watch_WatchClient = grpc.ServerStreamingClient[WatchMessage] + +// WatchServer is the server API for Watch service. +// All implementations should embed UnimplementedWatchServer +// for forward compatibility. +// +// Watch defines the RPC methods for monitoring data store change. +type WatchServer interface { + // Watch starts a stream that returns any changes to objects that match + // the specified selectors. When the stream begins, it immediately sends + // an empty message back to the client. It is important to wait for + // this message before taking any actions that depend on an established + // stream of changes for consistency. + Watch(*WatchRequest, grpc.ServerStreamingServer[WatchMessage]) error +} + +// UnimplementedWatchServer should be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedWatchServer struct{} + +func (UnimplementedWatchServer) Watch(*WatchRequest, grpc.ServerStreamingServer[WatchMessage]) error { + return status.Error(codes.Unimplemented, "method Watch not implemented") +} +func (UnimplementedWatchServer) testEmbeddedByValue() {} + +// UnsafeWatchServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to WatchServer will +// result in compilation errors. +type UnsafeWatchServer interface { + mustEmbedUnimplementedWatchServer() +} + +func RegisterWatchServer(s grpc.ServiceRegistrar, srv WatchServer) { + // If the following call panics, it indicates UnimplementedWatchServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } + s.RegisterService(&Watch_ServiceDesc, srv) +} + +func _Watch_Watch_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(WatchRequest) + if err := stream.RecvMsg(m); err != nil { + return err + } + return srv.(WatchServer).Watch(m, &grpc.GenericServerStream[WatchRequest, WatchMessage]{ServerStream: stream}) +} + +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type Watch_WatchServer = grpc.ServerStreamingServer[WatchMessage] + +// Watch_ServiceDesc is the grpc.ServiceDesc for Watch service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Watch_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "docker.swarmkit.v1.Watch", + HandlerType: (*WatchServer)(nil), + Methods: []grpc.MethodDesc{}, + Streams: []grpc.StreamDesc{ + { + StreamName: "Watch", + Handler: _Watch_Watch_Handler, + ServerStreams: true, + }, + }, + Metadata: "api/watch.proto", +} diff --git a/ca/certificates_test.go b/ca/certificates_test.go index 9543578920..980fc3bd39 100644 --- a/ca/certificates_test.go +++ b/ca/certificates_test.go @@ -350,7 +350,7 @@ func TestRequestAndSaveNewCertificatesWithIntermediates(t *testing.T) { t.Parallel() // use a RootCA with an intermediate - apiRootCA := api.RootCA{ + apiRootCA := &api.RootCA{ CACert: cautils.ECDSACertChain[2], CAKey: cautils.ECDSACertChainKeys[2], RootRotation: &api.RootRotation{ @@ -360,7 +360,7 @@ func TestRequestAndSaveNewCertificatesWithIntermediates(t *testing.T) { }, } tempdir := t.TempDir() - tc := cautils.NewTestCAFromAPIRootCA(t, tempdir, apiRootCA, nil) + tc := cautils.NewTestCAFromAPIRootCA(t, tempdir, *apiRootCA, nil) defer tc.Stop() issuerInfo, parsedCerts := testRequestAndSaveNewCertificates(t, tc) require.Len(t, parsedCerts, 2) @@ -401,6 +401,9 @@ func TestRequestAndSaveNewCertificatesWithKEKUpdate(t *testing.T) { // be encrypted with that kek require.NoError(t, tc.MemoryStore.Update(func(tx store.Tx) error { cluster := store.GetCluster(tx, tc.Organization) + if cluster.Spec.EncryptionConfig == nil { + cluster.Spec.EncryptionConfig = &api.EncryptionConfig{} + } cluster.Spec.EncryptionConfig.AutoLockManagers = true cluster.UnlockKeys = []*api.EncryptionKey{{ Subsystem: ca.ManagerRole, @@ -599,10 +602,10 @@ func (n *nonSigningCAServer) NodeCertificateStatus(ctx context.Context, request n.tc.MemoryStore.View(func(tx store.ReadTx) { node = store.GetNode(tx, request.NodeID) }) - if node != nil && node.Certificate.Status.State == api.IssuanceStateIssued { + if node != nil && node.Certificate.GetStatus().GetState() == api.IssuanceStateIssued { return &api.NodeCertificateStatusResponse{ - Status: &node.Certificate.Status, - Certificate: &node.Certificate, + Status: node.Certificate.Status, + Certificate: node.Certificate, }, nil } select { @@ -625,15 +628,15 @@ func (n *nonSigningCAServer) IssueNodeCertificate(ctx context.Context, request * node := &api.Node{ Role: role, ID: nodeID, - Certificate: api.Certificate{ + Certificate: &api.Certificate{ CSR: request.CSR, CN: nodeID, Role: role, - Status: api.IssuanceStatus{ + Status: &api.IssuanceStatus{ State: api.IssuanceStatePending, }, }, - Spec: api.NodeSpec{ + Spec: &api.NodeSpec{ DesiredRole: role, Membership: api.NodeMembershipAccepted, Availability: request.Availability, @@ -754,7 +757,7 @@ type fakeRemotes struct { peers []api.Peer } -func (f *fakeRemotes) Weights() map[api.Peer]int { +func (f *fakeRemotes) Weights() map[remotes.PeerKey]int { panic("this is not called") } @@ -778,7 +781,7 @@ func (f *fakeRemotes) ObserveIfExists(peer api.Peer, weight int) { if weight < 0 { var newPeers []api.Peer for _, p := range f.peers { - if p != peer { + if p.NodeID != peer.NodeID || p.Addr != peer.Addr { newPeers = append(newPeers, p) } } @@ -1206,7 +1209,7 @@ func TestRootCAWithCrossSignedIntermediates(t *testing.T) { newRoot, err := ca.NewRootCA(fauxRootCert, fauxRootCert, cautils.ECDSACertChainKeys[1], ca.DefaultNodeCertExpiration, nil) require.NoError(t, err) - apiNewRoot := api.RootCA{ + apiNewRoot := &api.RootCA{ CACert: fauxRootCert, CAKey: cautils.ECDSACertChainKeys[1], } @@ -1237,7 +1240,7 @@ func TestRootCAWithCrossSignedIntermediates(t *testing.T) { } // create an external signing server that generates leaf certs with the new root (but does not append the intermediate) - tc := cautils.NewTestCAFromAPIRootCA(t, tempdir, apiNewRoot, nil) + tc := cautils.NewTestCAFromAPIRootCA(t, tempdir, *apiNewRoot, nil) defer tc.Stop() // we need creds that trust both the old and new root in order to connect to the test CA, and we want this root CA to diff --git a/ca/config_test.go b/ca/config_test.go index 77f9ce2b4d..46e1de6070 100644 --- a/ca/config_test.go +++ b/ca/config_test.go @@ -721,7 +721,7 @@ func TestRenewTLSConfigUpdatesRootOnUnknownAuthError(t *testing.T) { return store.CreateNode(tx, &api.Node{ Role: testCase.role, ID: nodeID, - Spec: api.NodeSpec{ + Spec: &api.NodeSpec{ DesiredRole: testCase.role, Membership: api.NodeMembershipAccepted, Availability: api.NodeAvailabilityActive, @@ -787,7 +787,7 @@ func TestRenewTLSConfigUpdatesRootNonUnknownAuthError(t *testing.T) { return err } node.Certificate.Certificate = cautils.ReDateCert(t, certChain, cert, key, time.Now().Add(-5*time.Hour), time.Now().Add(-4*time.Hour)) - node.Certificate.Status = api.IssuanceStatus{ + node.Certificate.Status = &api.IssuanceStatus{ State: api.IssuanceStateIssued, } return store.UpdateNode(tx, node) diff --git a/ca/reconciler.go b/ca/reconciler.go index 01a9558ece..037e27ac07 100644 --- a/ca/reconciler.go +++ b/ca/reconciler.go @@ -209,7 +209,7 @@ func (r *rootRotationReconciler) finishRootRotation(tx store.Tx, expectedRootCA // If the RootCA object has changed (because another root rotation was started or because some other node // had finished the root rotation), we cannot finish the root rotation that we were working on. - if !equality.RootCAEqualStable(expectedRootCA, &cluster.RootCA) { + if !equality.RootCAEqualStable(expectedRootCA, cluster.RootCA) { return errRootRotationChanged } @@ -224,11 +224,11 @@ func (r *rootRotationReconciler) finishRootRotation(tx store.Tx, expectedRootCA if err != nil { return errors.Wrap(err, "invalid cluster root rotation object") } - cluster.RootCA = api.RootCA{ + cluster.RootCA = &api.RootCA{ CACert: cluster.RootCA.RootRotation.CACert, CAKey: cluster.RootCA.RootRotation.CAKey, CACertHash: updatedRootCA.Digest.String(), - JoinTokens: api.JoinTokens{ + JoinTokens: &api.JoinTokens{ Worker: GenerateJoinToken(&updatedRootCA, cluster.FIPS), Manager: GenerateJoinToken(&updatedRootCA, cluster.FIPS), }, diff --git a/ca/server.go b/ca/server.go index 9ae1de5156..a7bb678edd 100644 --- a/ca/server.go +++ b/ca/server.go @@ -8,7 +8,6 @@ import ( "sync" "time" - gogotypes "github.com/gogo/protobuf/types" "github.com/moby/swarmkit/v2/api" "github.com/moby/swarmkit/v2/api/equality" "github.com/moby/swarmkit/v2/identity" @@ -17,6 +16,7 @@ import ( "github.com/pkg/errors" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" + "google.golang.org/protobuf/types/known/durationpb" ) const ( @@ -70,7 +70,7 @@ type Server struct { // DefaultCAConfig returns the default CA Config, with a default expiration. func DefaultCAConfig() api.CAConfig { return api.CAConfig{ - NodeCertExpiry: gogotypes.DurationProto(DefaultNodeCertExpiration), + NodeCertExpiry: durationpb.New(DefaultNodeCertExpiration), } } @@ -130,8 +130,13 @@ func (s *Server) GetUnlockKey(_ context.Context, _ *api.GetUnlockKeyRequest) (*a resp := api.GetUnlockKeyResponse{} s.store.View(func(tx store.ReadTx) { cluster := store.GetCluster(tx, s.clusterID) - resp.Version = cluster.Meta.Version - if cluster.Spec.EncryptionConfig.AutoLockManagers { + if cluster == nil { + return + } + if cluster.Meta != nil { + resp.Version = cluster.Meta.Version + } + if cluster.Spec.GetEncryptionConfig().GetAutoLockManagers() { for _, encryptionKey := range cluster.UnlockKeys { if encryptionKey.Subsystem == ManagerRole { resp.UnlockKey = encryptionKey.Key @@ -188,10 +193,10 @@ func (s *Server) NodeCertificateStatus(ctx context.Context, request *api.NodeCer }) // If this certificate has a final state, return it immediately (both pending and renew are transition states) - if isFinalState(node.Certificate.Status) { + if node.Certificate != nil && isFinalState(*node.Certificate.Status) { return &api.NodeCertificateStatusResponse{ - Status: &node.Certificate.Status, - Certificate: &node.Certificate, + Status: node.Certificate.Status, + Certificate: node.Certificate, }, nil } @@ -209,10 +214,10 @@ func (s *Server) NodeCertificateStatus(ctx context.Context, request *api.NodeCer case api.EventUpdateNode: // We got an update on the certificate record. If the status is a final state, // return the certificate. - if isFinalState(v.Node.Certificate.Status) { + if v.Node.Certificate != nil && isFinalState(*v.Node.Certificate.Status) { cert := v.Node.Certificate.Copy() return &api.NodeCertificateStatusResponse{ - Status: &cert.Status, + Status: cert.Status, Certificate: cert, }, nil } @@ -307,15 +312,15 @@ func (s *Server) IssueNodeCertificate(ctx context.Context, request *api.IssueNod node := &api.Node{ Role: role, ID: nodeID, - Certificate: api.Certificate{ + Certificate: &api.Certificate{ CSR: request.CSR, CN: nodeID, Role: role, - Status: api.IssuanceStatus{ + Status: &api.IssuanceStatus{ State: api.IssuanceStatePending, }, }, - Spec: api.NodeSpec{ + Spec: &api.NodeSpec{ DesiredRole: role, Membership: api.NodeMembershipAccepted, Availability: request.Availability, @@ -355,7 +360,7 @@ func (s *Server) IssueNodeCertificate(ctx context.Context, request *api.IssueNod // and changes the state to RENEW, so it can be picked up and signed by the signing reconciliation loop func (s *Server) issueRenewCertificate(ctx context.Context, nodeID string, csr []byte) (*api.IssueNodeCertificateResponse, error) { var ( - cert api.Certificate + cert *api.Certificate node *api.Node ) err := s.store.Update(func(tx store.Tx) error { @@ -371,11 +376,11 @@ func (s *Server) issueRenewCertificate(ctx context.Context, nodeID string, csr [ } // Create a new Certificate entry for this node with the new CSR and a RENEW state - cert = api.Certificate{ + cert = &api.Certificate{ CSR: csr, CN: node.ID, Role: node.Role, - Status: api.IssuanceStatus{ + Status: &api.IssuanceStatus{ State: api.IssuanceStateRenew, }, } @@ -517,7 +522,7 @@ func (s *Server) Run(ctx context.Context) error { case api.EventUpdateNode: // If this certificate is already at a final state // no need to evaluate and sign it. - if !isFinalState(v.Node.Certificate.Status) { + if v.Node.Certificate == nil || !isFinalState(*v.Node.Certificate.Status) { s.evaluateAndSignNodeCert(ctx, v.Node) } rootReconciler.UpdateNode(v.Node) @@ -637,7 +642,7 @@ func filterExternalCAURLS(ctx context.Context, desiredCert, defaultCert []byte, certForExtCA = defaultCert } certForExtCA = NormalizePEMs(certForExtCA) - if extCA.Protocol != api.ExternalCA_CAProtocolCFSSL { + if extCA.Protocol != api.CAProtocolCFSSL { log.G(ctx).Debugf("skipping external CA %d (url: %s) due to unknown protocol type", i, extCA.URL) continue } @@ -680,14 +685,8 @@ func (s *Server) UpdateRootCA(ctx context.Context, cluster *api.Cluster, reconci } expiry := DefaultNodeCertExpiration if cluster.Spec.CAConfig.NodeCertExpiry != nil { - // NodeCertExpiry exists, let's try to parse the duration out of it - clusterExpiry, err := gogotypes.DurationFromProto(cluster.Spec.CAConfig.NodeCertExpiry) - if err != nil { - log.G(ctx).WithError(err).Warn("failed to parse certificate expiration, using default") - } else { - // We were able to successfully parse the expiration out of the cluster. - expiry = clusterExpiry - } + // NodeCertExpiry exists, parse the duration out of it + expiry = cluster.Spec.CAConfig.NodeCertExpiry.AsDuration() } else { // NodeCertExpiry seems to be nil log.G(ctx).Warn("no certificate expiration specified, using default") @@ -740,6 +739,9 @@ func (s *Server) UpdateRootCA(ctx context.Context, cluster *api.Cluster, reconci func (s *Server) evaluateAndSignNodeCert(ctx context.Context, node *api.Node) error { // If the desired membership and actual state are in sync, there's // nothing to do. + if node.Certificate == nil || node.Certificate.Status == nil { + return nil + } certState := node.Certificate.Status.State if node.Spec.Membership == api.NodeMembershipAccepted && (certState == api.IssuanceStateIssued || certState == api.IssuanceStateRotate) { @@ -821,7 +823,7 @@ func (s *Server) signNodeCert(ctx context.Context, node *api.Node) error { return errors.Errorf("node %s not found", nodeID) } - node.Certificate.Status = api.IssuanceStatus{ + node.Certificate.Status = &api.IssuanceStatus{ State: api.IssuanceStateFailed, Err: err.Error(), } @@ -843,7 +845,7 @@ func (s *Server) signNodeCert(ctx context.Context, node *api.Node) error { for { err = s.store.Update(func(tx store.Tx) error { node.Certificate.Certificate = cert - node.Certificate.Status = api.IssuanceStatus{ + node.Certificate.Status = &api.IssuanceStatus{ State: api.IssuanceStateIssued, } diff --git a/ca/server_test.go b/ca/server_test.go index 6ee6fdc77d..29c4ad6757 100644 --- a/ca/server_test.go +++ b/ca/server_test.go @@ -7,7 +7,6 @@ import ( "crypto/x509" "fmt" "path/filepath" - "reflect" "testing" "time" @@ -24,6 +23,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "google.golang.org/grpc/codes" + "google.golang.org/protobuf/proto" ) var _ api.CAServer = &ca.Server{} @@ -388,11 +388,14 @@ func TestGetUnlockKey(t *testing.T) { resp, err := tc.CAClients[0].GetUnlockKey(tc.Context, &api.GetUnlockKeyRequest{}) require.NoError(t, err) require.Nil(t, resp.UnlockKey) - require.Equal(t, cluster.Meta.Version, resp.Version) + require.True(t, proto.Equal(cluster.Meta.Version, resp.Version), "proto messages should be equal") // Update the unlock key require.NoError(t, tc.MemoryStore.Update(func(tx store.Tx) error { cluster = store.GetCluster(tx, cluster.ID) + if cluster.Spec.EncryptionConfig == nil { + cluster.Spec.EncryptionConfig = &api.EncryptionConfig{} + } cluster.Spec.EncryptionConfig.AutoLockManagers = true cluster.UnlockKeys = []*api.EncryptionKey{{ Subsystem: ca.ManagerRole, @@ -491,18 +494,18 @@ func TestCAServerUpdateRootCA(t *testing.T) { fakeClusterSpec := func(rootCerts, key []byte, rotation *api.RootRotation, externalCAs []*api.ExternalCA) *api.Cluster { return &api.Cluster{ - RootCA: api.RootCA{ + RootCA: &api.RootCA{ CACert: rootCerts, CAKey: key, CACertHash: "hash", - JoinTokens: api.JoinTokens{ + JoinTokens: &api.JoinTokens{ Worker: "SWMTKN-1-worker", Manager: "SWMTKN-1-manager", }, RootRotation: rotation, }, - Spec: api.ClusterSpec{ - CAConfig: api.CAConfig{ + Spec: &api.ClusterSpec{ + CAConfig: &api.CAConfig{ ExternalCAs: externalCAs, }, }, @@ -526,7 +529,7 @@ func TestCAServerUpdateRootCA(t *testing.T) { for i, testCase := range []clusterObjToUpdate{ { clusterObj: fakeClusterSpec(tc.RootCA.Certs, nil, nil, []*api.ExternalCA{{ - Protocol: api.ExternalCA_CAProtocolCFSSL, + Protocol: api.CAProtocolCFSSL, URL: tc.ExternalSigningServer.URL, // without a CA cert, the URL gets successfully added, and there should be no error connecting to it }}), @@ -540,7 +543,7 @@ func TestCAServerUpdateRootCA(t *testing.T) { CrossSignedCACert: crossSigned, }, []*api.ExternalCA{ { - Protocol: api.ExternalCA_CAProtocolCFSSL, + Protocol: api.CAProtocolCFSSL, URL: tc.ExternalSigningServer.URL, // without a CA cert, we count this as the old tc.RootCA.Certs, and this should be ignored because we want the new root }, @@ -556,12 +559,12 @@ func TestCAServerUpdateRootCA(t *testing.T) { CrossSignedCACert: crossSigned, }, []*api.ExternalCA{ { - Protocol: api.ExternalCA_CAProtocolCFSSL, + Protocol: api.CAProtocolCFSSL, URL: tc.ExternalSigningServer.URL, // without a CA cert, we count this as the old tc.RootCA.Certs }, { - Protocol: api.ExternalCA_CAProtocolCFSSL, + Protocol: api.CAProtocolCFSSL, URL: externalServer.URL, CACert: append(cert, '\n'), }, @@ -656,7 +659,7 @@ func (r *rootRotationTester) convergeRootCA(wantRootCA *api.RootCA, descr string if err != nil || len(clusters) != 1 { return errors.Wrap(err, "unable to find cluster") } - clusters[0].RootCA = *wantRootCA + clusters[0].RootCA = wantRootCA return store.UpdateCluster(tx, clusters[0]) }), descr) } @@ -664,12 +667,12 @@ func (r *rootRotationTester) convergeRootCA(wantRootCA *api.RootCA, descr string func getFakeAPINode(t *testing.T, id string, state api.IssuanceStatus_State, tlsInfo *api.NodeTLSInfo, member bool) *api.Node { node := &api.Node{ ID: id, - Certificate: api.Certificate{ - Status: api.IssuanceStatus{ + Certificate: &api.Certificate{ + Status: &api.IssuanceStatus{ State: state, }, }, - Spec: api.NodeSpec{ + Spec: &api.NodeSpec{ Membership: api.NodeMembershipAccepted, }, } @@ -967,7 +970,7 @@ func TestRootRotationReconciliationWithChanges(t *testing.T) { startCAServer(rt.tc.Context, rt.tc.CAServer) } else { // otherwise, start the CA in the state where there is no root rotation, and start a root rotation - rt.convergeRootCA(&startCluster.RootCA, testcase.descr) // no root rotation + rt.convergeRootCA(startCluster.RootCA, testcase.descr) // no root rotation startCAServer(rt.tc.Context, rt.tc.CAServer) rt.convergeRootCA(testcase.rootCA, testcase.descr) } @@ -996,8 +999,8 @@ func TestRootRotationReconciliationWithChanges(t *testing.T) { return errors.New("no cluster found") } - if !equality.RootCAEqualStable(&cluster.RootCA, testcase.expectedRootCA) { - return fmt.Errorf("root CAs not equal:\n\texpected: %v\n\tactual: %v", *testcase.expectedRootCA, cluster.RootCA) + if !equality.RootCAEqualStable(cluster.RootCA, testcase.expectedRootCA) { + return fmt.Errorf("root CAs not equal:\n\texpected: %v\n\tactual: %v", testcase.expectedRootCA, cluster.RootCA) } if len(nodes) != len(testcase.expectedNodes) { return fmt.Errorf("number of expected nodes (%d) does not equal number of actual nodes (%d)", @@ -1008,11 +1011,11 @@ func TestRootRotationReconciliationWithChanges(t *testing.T) { if !ok { return fmt.Errorf("node %s is present and was unexpected", node.ID) } - if !reflect.DeepEqual(expected.Description, node.Description) { + if !proto.Equal(expected.Description, node.Description) { return fmt.Errorf("the node description of node %s is not expected:\n\texpected: %v\n\tactual: %v", node.ID, expected.Description, node.Description) } - if !reflect.DeepEqual(expected.Certificate.Status, node.Certificate.Status) { + if !proto.Equal(expected.Certificate.GetStatus(), node.Certificate.GetStatus()) { return fmt.Errorf("the certificate status of node %s is not expected:\n\texpected: %v\n\tactual: %v", node.ID, expected.Certificate, node.Certificate) } @@ -1115,7 +1118,7 @@ func TestRootRotationReconciliationNoChanges(t *testing.T) { // stop the CA server, get the cluster to the state we want (correct root CA, correct nodes, etc.) rt.tc.CAServer.Stop() rt.convergeWantedNodes(testcase.nodes, testcase.descr) - rt.convergeRootCA(&startCluster.RootCA, testcase.descr) // no root rotation + rt.convergeRootCA(startCluster.RootCA, testcase.descr) // no root rotation startCAServer(rt.tc.Context, rt.tc.CAServer) rt.convergeRootCA(testcase.rootCA, testcase.descr) @@ -1133,13 +1136,13 @@ func TestRootRotationReconciliationNoChanges(t *testing.T) { }) require.NoError(t, err) require.NotNil(t, cluster) - require.Equal(t, cluster.RootCA, *testcase.rootCA, testcase.descr) + require.True(t, proto.Equal(cluster.RootCA, testcase.rootCA), testcase.descr) require.Len(t, nodes, len(testcase.nodes), testcase.descr) for _, node := range nodes { expected, ok := testcase.nodes[node.ID] require.True(t, ok, "node %s: %s", node.ID, testcase.descr) - require.Equal(t, expected.Description, node.Description, "node %s: %s", node.ID, testcase.descr) - require.Equal(t, expected.Certificate.Status, node.Certificate.Status, "node %s: %s", node.ID, testcase.descr) + require.True(t, proto.Equal(expected.Description, node.Description), "node %s: %s", node.ID, testcase.descr) + require.True(t, proto.Equal(expected.Certificate.GetStatus(), node.Certificate.GetStatus()), "node %s: %s", node.ID, testcase.descr) } // ensure that the server's root CA object has the same expected key @@ -1234,7 +1237,7 @@ func TestRootRotationReconciliationRace(t *testing.T) { CAKey: rotationKey, CrossSignedCACert: rotationCrossSigned, } - cluster.RootCA = *rootCA + cluster.RootCA = rootCA return store.UpdateCluster(tx, cluster) })) for _, node := range nodes { @@ -1334,7 +1337,7 @@ func TestRootRotationReconciliationThrottled(t *testing.T) { CAKey: rotationKey, CrossSignedCACert: rotationCrossSigned, } - cluster.RootCA = *rootCA + cluster.RootCA = rootCA return store.UpdateCluster(tx, cluster) })) diff --git a/ca/testutils/cautils.go b/ca/testutils/cautils.go index 9bd491f03d..99dfad215e 100644 --- a/ca/testutils/cautils.go +++ b/ca/testutils/cautils.go @@ -203,7 +203,7 @@ func newTestCA(t *testing.T, tempBaseDir string, apiRootCA api.RootCA, krwGenera externalCAs = []*api.ExternalCA{ { - Protocol: api.ExternalCA_CAProtocolCFSSL, + Protocol: api.CAProtocolCFSSL, URL: externalSigningServer.URL, CACert: extRootCA.Certs, }, @@ -264,7 +264,7 @@ func newTestCA(t *testing.T, tempBaseDir string, apiRootCA api.RootCA, krwGenera serverOpts := []grpc.ServerOption{grpc.Creds(managerConfig.ServerTLSCreds)} grpcServer := grpc.NewServer(serverOpts...) - clusterObj := createClusterObject(t, s, organization, apiRootCA, &rootCA, externalCAs...) + clusterObj := createClusterObject(t, s, organization, &apiRootCA, &rootCA, externalCAs...) caServer := ca.NewServer(s, managerConfig) caServer.SetReconciliationRetryInterval(50 * time.Millisecond) @@ -319,16 +319,16 @@ func createNode(s *store.MemoryStore, nodeID, role string, csr, cert []byte) err err := s.Update(func(tx store.Tx) error { node := &api.Node{ ID: nodeID, - Certificate: api.Certificate{ + Certificate: &api.Certificate{ CSR: csr, CN: nodeID, Role: apiRole, - Status: api.IssuanceStatus{ + Status: &api.IssuanceStatus{ State: api.IssuanceStateIssued, }, Certificate: cert, }, - Spec: api.NodeSpec{ + Spec: &api.NodeSpec{ DesiredRole: apiRole, Membership: api.NodeMembershipAccepted, }, @@ -410,25 +410,31 @@ func genSecurityConfig(s *store.MemoryStore, rootCA ca.RootCA, krw *ca.KeyReadWr }) } -func createClusterObject(t *testing.T, s *store.MemoryStore, clusterID string, apiRootCA api.RootCA, caRootCA *ca.RootCA, externalCAs ...*api.ExternalCA) *api.Cluster { +func createClusterObject(t *testing.T, s *store.MemoryStore, clusterID string, apiRootCA *api.RootCA, caRootCA *ca.RootCA, externalCAs ...*api.ExternalCA) *api.Cluster { fips := strings.HasPrefix(clusterID, "FIPS.") cluster := &api.Cluster{ ID: clusterID, - Spec: api.ClusterSpec{ - Annotations: api.Annotations{ + Spec: &api.ClusterSpec{ + Annotations: &api.Annotations{ Name: store.DefaultClusterName, }, - CAConfig: api.CAConfig{ + CAConfig: &api.CAConfig{ ExternalCAs: externalCAs, }, }, RootCA: apiRootCA, FIPS: fips, } - if cluster.RootCA.JoinTokens.Worker == "" { - cluster.RootCA.JoinTokens.Worker = ca.GenerateJoinToken(caRootCA, fips) + if cluster.RootCA.GetJoinTokens().GetWorker() == "" { + cluster.RootCA.JoinTokens = &api.JoinTokens{ + Worker: ca.GenerateJoinToken(caRootCA, fips), + Manager: cluster.RootCA.GetJoinTokens().GetManager(), + } } - if cluster.RootCA.JoinTokens.Manager == "" { + if cluster.RootCA.GetJoinTokens().GetManager() == "" { + if cluster.RootCA.JoinTokens == nil { + cluster.RootCA.JoinTokens = &api.JoinTokens{} + } cluster.RootCA.JoinTokens.Manager = ca.GenerateJoinToken(caRootCA, fips) } err := s.Update(func(tx store.Tx) error { diff --git a/cli/external_ca.go b/cli/external_ca.go index d4c0eb29a9..085c1af36d 100644 --- a/cli/external_ca.go +++ b/cli/external_ca.go @@ -76,7 +76,7 @@ func parseExternalCA(caSpec string) (*api.ExternalCA, error) { case "protocol": hasProtocol = true if strings.ToLower(value) == "cfssl" { - externalCA.Protocol = api.ExternalCA_CAProtocolCFSSL + externalCA.Protocol = api.CAProtocolCFSSL } else { return nil, fmt.Errorf("unrecognized external CA protocol %s", value) } diff --git a/cli/external_ca_test.go b/cli/external_ca_test.go index f914c3a44f..e6a4c10ae5 100644 --- a/cli/external_ca_test.go +++ b/cli/external_ca_test.go @@ -32,7 +32,7 @@ func TestParseExternalCA(t *testing.T) { { input: "protocol=cfssl,url=https://example.com", expected: &api.ExternalCA{ - Protocol: api.ExternalCA_CAProtocolCFSSL, + Protocol: api.CAProtocolCFSSL, URL: "https://example.com", Options: map[string]string{}, }, diff --git a/cmd/proto-name-fix/main.go b/cmd/proto-name-fix/main.go new file mode 100644 index 0000000000..b1b11f41f3 --- /dev/null +++ b/cmd/proto-name-fix/main.go @@ -0,0 +1,108 @@ +// Command proto-name-fix applies field and type renames to protoc-gen-go +// generated *.pb.go files. The rename rules are loaded from rename_map.json, +// which is produced by protoc-gen-goswarm in the same protoc invocation. +// +// Usage: +// +// proto-name-fix -rename-map=/rename_map.json [...] +package main + +import ( + "encoding/json" + "flag" + "fmt" + "go/ast" + "go/format" + "go/parser" + "go/token" + "log" + "os" + "strings" +) + +func main() { + renameMapPath := flag.String("rename-map", "rename_map.json", "path to rename_map.json produced by protoc-gen-goswarm") + flag.Parse() + files := flag.Args() + if len(files) == 0 { + log.Fatal("proto-name-fix: no .pb.go files specified") + } + + renames, err := loadRenameMap(*renameMapPath) + if err != nil { + log.Fatalf("proto-name-fix: loading rename map: %v", err) + } + if len(renames) == 0 { + return + } + + for _, path := range files { + if err := fixFile(path, renames); err != nil { + log.Fatalf("proto-name-fix: %s: %v", path, err) + } + } +} + +type renameEntry struct { + From string `json:"from"` + To string `json:"to"` +} + +func loadRenameMap(path string) (map[string]string, error) { + data, err := os.ReadFile(path) + if err != nil { + if os.IsNotExist(err) { + return nil, nil + } + return nil, err + } + // Strip the leading blank line that protogen P() adds before content + content := strings.TrimSpace(string(data)) + var entries []renameEntry + if err := json.Unmarshal([]byte(content), &entries); err != nil { + return nil, fmt.Errorf("parsing %s: %v", path, err) + } + renames := make(map[string]string, len(entries)) + for _, e := range entries { + renames[e.From] = e.To + } + return renames, nil +} + +// fixFile applies the rename map to a single Go file using AST manipulation. +func fixFile(path string, renames map[string]string) error { + src, err := os.ReadFile(path) + if err != nil { + return err + } + + fset := token.NewFileSet() + f, err := parser.ParseFile(fset, path, src, parser.ParseComments) + if err != nil { + return fmt.Errorf("parse: %v", err) + } + + changed := false + ast.Inspect(f, func(n ast.Node) bool { + ident, ok := n.(*ast.Ident) + if !ok { + return true + } + if newName, ok := renames[ident.Name]; ok { + ident.Name = newName + changed = true + } + return true + }) + + if !changed { + return nil + } + + var buf strings.Builder + if err := format.Node(&buf, fset, f); err != nil { + return fmt.Errorf("format: %v", err) + } + + return os.WriteFile(path, []byte(buf.String()), 0o644) +} diff --git a/cmd/protoc-gen-gogoswarm/customnameid.go b/cmd/protoc-gen-gogoswarm/customnameid.go deleted file mode 100644 index c41e8db91e..0000000000 --- a/cmd/protoc-gen-gogoswarm/customnameid.go +++ /dev/null @@ -1,57 +0,0 @@ -package main - -import ( - "strings" - - "github.com/gogo/protobuf/gogoproto" - "github.com/gogo/protobuf/proto" - "github.com/gogo/protobuf/protoc-gen-gogo/descriptor" - "github.com/gogo/protobuf/protoc-gen-gogo/generator" - "github.com/gogo/protobuf/vanity" -) - -// CustomNameID preprocess the field, and set the [(gogoproto.customname) = "..."] -// if necessary, in order to avoid setting `gogoproto.customname` manually. -// The automatically assigned name should conform to Golang convention. -func CustomNameID(file *descriptor.FileDescriptorProto) { - - f := func(field *descriptor.FieldDescriptorProto) { - // Skip if [(gogoproto.customname) = "..."] has already been set. - if gogoproto.IsCustomName(field) { - return - } - // Skip if embedded - if gogoproto.IsEmbed(field) { - return - } - if field.OneofIndex != nil { - return - } - fieldName := generator.CamelCase(*field.Name) - switch { - case *field.Name == "id": - // id -> ID - fieldName = "ID" - case strings.HasPrefix(*field.Name, "id_"): - // id_some -> IDSome - fieldName = "ID" + fieldName[2:] - case strings.HasSuffix(*field.Name, "_id"): - // some_id -> SomeID - fieldName = fieldName[:len(fieldName)-2] + "ID" - case strings.HasSuffix(*field.Name, "_ids"): - // some_ids -> SomeIDs - fieldName = fieldName[:len(fieldName)-3] + "IDs" - default: - return - } - if field.Options == nil { - field.Options = &descriptor.FieldOptions{} - } - if err := proto.SetExtension(field.Options, gogoproto.E_Customname, &fieldName); err != nil { - panic(err) - } - } - - // Iterate through all fields in file - vanity.ForEachFieldExcludingExtensions(file.MessageType, f) -} diff --git a/cmd/protoc-gen-gogoswarm/main.go b/cmd/protoc-gen-gogoswarm/main.go deleted file mode 100644 index b216529213..0000000000 --- a/cmd/protoc-gen-gogoswarm/main.go +++ /dev/null @@ -1,36 +0,0 @@ -package main - -import ( - "github.com/gogo/protobuf/protoc-gen-gogo/descriptor" - "github.com/gogo/protobuf/vanity" - "github.com/gogo/protobuf/vanity/command" - _ "github.com/moby/swarmkit/v2/protobuf/plugin/authenticatedwrapper" - _ "github.com/moby/swarmkit/v2/protobuf/plugin/deepcopy" - _ "github.com/moby/swarmkit/v2/protobuf/plugin/raftproxy" - _ "github.com/moby/swarmkit/v2/protobuf/plugin/storeobject" -) - -func main() { - req := command.Read() - files := req.GetProtoFile() - files = vanity.FilterFiles(files, vanity.NotGoogleProtobufDescriptorProto) - - for _, opt := range []func(*descriptor.FileDescriptorProto){ - vanity.TurnOffGoGettersAll, - vanity.TurnOffGoStringerAll, - vanity.TurnOnMarshalerAll, - vanity.TurnOnStringerAll, - vanity.TurnOnUnmarshalerAll, - vanity.TurnOnSizerAll, - vanity.TurnOffGoUnrecognizedAll, - vanity.TurnOffGoUnkeyedAll, - vanity.TurnOffGoUnrecognizedAll, - vanity.TurnOffGoSizecacheAll, - CustomNameID, - } { - vanity.ForEachFile(files, opt) - } - - resp := command.Generate(req) - command.Write(resp) -} diff --git a/cmd/protoc-gen-goswarm/main.go b/cmd/protoc-gen-goswarm/main.go new file mode 100644 index 0000000000..6dd5fdc3d1 --- /dev/null +++ b/cmd/protoc-gen-goswarm/main.go @@ -0,0 +1,148 @@ +// Command protoc-gen-goswarm is a protoc plugin that generates SwarmKit-specific +// code alongside the standard protoc-gen-go output: +// +// - *.pb.deepcopy.go – Copy() and CopyFrom() methods +// - *.pb.storeobject.go – event types, StoreObject interface methods +// - *.pb.raftproxy.go – Raft-leader-aware gRPC server proxy wrappers +// - *.pb.authwrapper.go – TLS-authorization gRPC server wrappers +// - rename_map.json – field/type rename map for proto-name-fix +package main + +import ( + "encoding/json" + "sort" + "strings" + + "google.golang.org/protobuf/compiler/protogen" + "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/reflect/protoreflect" + + pluginpb "github.com/moby/swarmkit/v2/protobuf/plugin" + "github.com/moby/swarmkit/v2/protobuf/plugin/authenticatedwrapper" + "github.com/moby/swarmkit/v2/protobuf/plugin/deepcopy" + "github.com/moby/swarmkit/v2/protobuf/plugin/naming" + "github.com/moby/swarmkit/v2/protobuf/plugin/raftproxy" + "github.com/moby/swarmkit/v2/protobuf/plugin/storeobject" +) + +func main() { + protogen.Options{}.Run(func(gen *protogen.Plugin) error { + // Collect renames across all generated files. + allRenames := make(map[string]string) + + for _, f := range gen.Files { + if !f.Generate { + continue + } + deepcopy.Generate(gen, f) + storeobject.Generate(gen, f) + raftproxy.Generate(gen, f) + authenticatedwrapper.Generate(gen, f) + collectRenames(f, allRenames) + } + + if len(allRenames) == 0 { + return nil + } + + // Write the rename map to rename_map.json at the output root. + // proto-name-fix reads this file. + out := gen.NewGeneratedFile("rename_map.json", "") + data, err := marshalRenameMap(allRenames) + if err != nil { + return err + } + out.P(string(data)) + return nil + }) +} + +// collectRenames builds the rename map for all messages and enums in f. +func collectRenames(f *protogen.File, renames map[string]string) { + for _, m := range f.Messages { + collectMessageRenames(m, renames) + } + for _, e := range f.Enums { + collectEnumRenames("", e, renames) + } +} + +func collectMessageRenames(m *protogen.Message, renames map[string]string) { + // Field renames (including oneof fields and their wrapper struct types) + for _, f := range m.Fields { + std := f.GoName + final := naming.GoFieldName(f) + if std != final { + renames[std] = final + renames["Get"+std] = "Get" + final + // For oneof fields, also rename the wrapper struct type: + // e.g., SelectBy_Id → SelectBy_ID + if f.Oneof != nil && !f.Oneof.Desc.IsSynthetic() { + wrapperStd := m.GoIdent.GoName + "_" + std + wrapperFinal := m.GoIdent.GoName + "_" + final + renames[wrapperStd] = wrapperFinal + } + } + } + // Nested enums (use the full Go type name: MessageName_EnumName) + for _, e := range m.Enums { + collectEnumRenames(m.GoIdent.GoName, e, renames) + } + // Recurse + for _, nested := range m.Messages { + collectMessageRenames(nested, renames) + } +} + +// collectEnumRenames handles both top-level and nested enum renames. +// msgPrefix is the enclosing message's Go name (empty for top-level enums). +func collectEnumRenames(msgPrefix string, e *protogen.Enum, renames map[string]string) { + protoEnumGoName := e.GoIdent.GoName // e.g. "Mount_Type" for nested, "TaskState" for top-level + + desiredTypeName := naming.GoEnumName(e) + + // Only add type rename if the name actually changes + if protoEnumGoName != desiredTypeName { + renames[protoEnumGoName] = desiredTypeName + } + + _ = msgPrefix // used via e.GoIdent.GoName which already includes the prefix + + for _, v := range e.Values { + std := v.GoIdent.GoName // e.g. "Mount_Type_BIND" or "TaskState_NEW" + final := naming.GoEnumValueName(v) + if std != final { + renames[std] = final + } + } +} + +// marshalRenameMap produces a canonical JSON representation sorted by key. +func marshalRenameMap(renames map[string]string) ([]byte, error) { + keys := make([]string, 0, len(renames)) + for k := range renames { + keys = append(keys, k) + } + sort.Strings(keys) + + type kv struct { + From string `json:"from"` + To string `json:"to"` + } + entries := make([]kv, 0, len(keys)) + for _, k := range keys { + entries = append(entries, kv{From: k, To: renames[k]}) + } + data, err := json.MarshalIndent(entries, "", " ") + if err != nil { + return nil, err + } + return data, nil +} + +// dummy references to ensure imports compile +var _ = proto.HasExtension +var _ = pluginpb.E_GoName +var _ = protoreflect.Name("") +var _ = strings.HasPrefix + diff --git a/cmd/swarm-bench/benchmark.go b/cmd/swarm-bench/benchmark.go index 6d119f7a49..6d67c19d37 100644 --- a/cmd/swarm-bench/benchmark.go +++ b/cmd/swarm-bench/benchmark.go @@ -72,10 +72,10 @@ func (b *Benchmark) Run(ctx context.Context) error { func (b *Benchmark) spec() *api.ServiceSpec { return &api.ServiceSpec{ - Annotations: api.Annotations{ + Annotations: &api.Annotations{ Name: "benchmark", }, - Task: api.TaskSpec{ + Task: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{ Image: "alpine:latest", diff --git a/direct.mk b/direct.mk index b3f604ae52..8590b2ef7a 100644 --- a/direct.mk +++ b/direct.mk @@ -12,7 +12,7 @@ PACKAGES = $(shell go list ./...) INTEGRATION_PACKAGE = $(shell go list ./integration) # Project binaries. -COMMANDS=swarm-bench protoc-gen-gogoswarm +COMMANDS=swarm-bench protoc-gen-goswarm proto-name-fix BINARIES=$(addprefix bin/,$(COMMANDS)) SWARMD_COMMANDS=swarmd swarmctl swarm-rafttool SWARMD_BINARIES=$(addprefix swarmd/bin/,$(SWARMD_COMMANDS)) @@ -43,24 +43,75 @@ setup: ## install dependencies @echo "🐳 $@" # install golangci-lint to ./bin/golangci-lint @curl -fsSL https://raw.githubusercontent.com/golangci/golangci-lint/v2.1.5/install.sh | sh -s v2.1.5 - @go install tool github.com/containerd/protobuild + # install standard protobuf code generators + @go install google.golang.org/protobuf/cmd/protoc-gen-go@latest + @go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest .PHONY: generate generate: protos @echo "🐳 $@" @PATH=${ROOTDIR}/bin:${GOBIN}:${PATH} go generate -x ${PACKAGES} +# API protos get the full treatment (go + grpc + goswarm). plugin.proto is an +# options-definition file (analogous to descriptor.proto) and is generated +# separately with protoc-gen-go only — it must not receive the swarmkit codegen +# plugins (deepcopy/storeobject/raftproxy/authwrapper). +PROTO_SRCS = $(wildcard api/*.proto) +# Include paths: project root, system protobuf includes, vendor for etcd raft proto, +# and internal stubs that satisfy gogoproto imports in vendored .proto files. +PROTO_INCLUDES = -I. -I/usr/local/include -Ivendor -Iinternal/protoc-stubs + +# Map well-known types, our plugin, and API protos to the correct Go packages. +# These -M flags are passed to protoc-gen-go, protoc-gen-go-grpc, and protoc-gen-goswarm. +_PROTO_M = \ + Mgoogle/protobuf/timestamp.proto=google.golang.org/protobuf/types/known/timestamppb \ + Mgoogle/protobuf/duration.proto=google.golang.org/protobuf/types/known/durationpb \ + Mgoogle/protobuf/any.proto=google.golang.org/protobuf/types/known/anypb \ + Mgoogle/protobuf/wrappers.proto=google.golang.org/protobuf/types/known/wrapperspb \ + Mgoogle/protobuf/field_mask.proto=google.golang.org/protobuf/types/known/fieldmaskpb \ + Mprotobuf/plugin/plugin.proto=github.com/moby/swarmkit/v2/protobuf/plugin \ + Mapi/types.proto=github.com/moby/swarmkit/v2/api \ + Mapi/specs.proto=github.com/moby/swarmkit/v2/api \ + Mapi/objects.proto=github.com/moby/swarmkit/v2/api \ + Mapi/control.proto=github.com/moby/swarmkit/v2/api \ + Mapi/dispatcher.proto=github.com/moby/swarmkit/v2/api \ + Mapi/ca.proto=github.com/moby/swarmkit/v2/api \ + Mapi/watch.proto=github.com/moby/swarmkit/v2/api \ + Mapi/health.proto=github.com/moby/swarmkit/v2/api \ + Mapi/raft.proto=github.com/moby/swarmkit/v2/api \ + Mapi/resource.proto=github.com/moby/swarmkit/v2/api \ + Mapi/snapshot.proto=github.com/moby/swarmkit/v2/api \ + Mapi/logbroker.proto=github.com/moby/swarmkit/v2/api \ + Mgo.etcd.io/raft/v3/raftpb/raft.proto=go.etcd.io/raft/v3/raftpb \ + Mgogoproto/gogo.proto=github.com/gogo/protobuf/gogoproto + +PROTO_M_FLAGS = $(addprefix --go_opt=,$(_PROTO_M)) \ + $(addprefix --go-grpc_opt=,$(_PROTO_M)) --go-grpc_opt=require_unimplemented_servers=false \ + $(addprefix --goswarm_opt=,$(_PROTO_M)) + .PHONY: protos -protos: bin/protoc-gen-gogoswarm ## generate protobuf - @echo "🐳 $@" - @PATH=${ROOTDIR}/bin:${GOBIN}:${PATH} protobuild ${PACKAGES} +protos: bin/protoc-gen-goswarm bin/proto-name-fix ## generate protobuf + @echo "🐳 $@" + @GOPATH_BIN=$$(go env GOPATH)/bin && PATH=${ROOTDIR}/bin:$${GOPATH_BIN}:${PATH} && \ + protoc $(PROTO_INCLUDES) \ + $(addprefix --go_opt=,$(_PROTO_M)) \ + --go_out=. --go_opt=paths=source_relative \ + protobuf/plugin/plugin.proto && \ + protoc $(PROTO_INCLUDES) $(PROTO_M_FLAGS) \ + --go_out=. --go_opt=paths=source_relative \ + --go-grpc_out=. --go-grpc_opt=paths=source_relative \ + --goswarm_out=. --goswarm_opt=paths=source_relative \ + --plugin=protoc-gen-goswarm=${ROOTDIR}/bin/protoc-gen-goswarm \ + $(PROTO_SRCS) + @echo "🐳 Applying name fixes..." + @${ROOTDIR}/bin/proto-name-fix -rename-map=rename_map.json api/*.pb.go .PHONY: checkprotos -checkprotos: generate ## check if protobufs needs to be generated again +checkprotos: protos ## check if protobufs needs to be generated again @echo "🐳 $@" @test -z "$$(git status --short | grep ".pb.go" | tee /dev/stderr)" || \ ((git diff | cat) && \ - (echo "👹 please run 'make generate' when making changes to proto files" && false)) + (echo "👹 please run 'make protos' when making changes to proto files" && false)) .PHONY: check check: fmt-proto @@ -72,8 +123,6 @@ check: ## Run various source code validation tools fmt-proto: @test -z "$$(find . -path ./vendor -prune -o ! -name timestamp.proto ! -name duration.proto -name '*.proto' -type f -exec grep -Hn -e "^ " {} \; | tee /dev/stderr)" || \ (echo "👹 please indent proto files with tabs only" && false) - @test -z "$$(find . -path ./vendor -prune -o -name '*.proto' -type f -exec grep -Hn "Meta meta = " {} \; | grep -v '(gogoproto.nullable) = false' | tee /dev/stderr)" || \ - (echo "👹 meta fields in proto files must have option (gogoproto.nullable) = false" && false) .PHONY: build build: ## build the go packages @@ -154,8 +203,3 @@ dep-validate: go-mod-vendor go-mod-vendor: @go mod tidy @go mod vendor - @# ensure that key protobuf spec files are in vendor dir - @module=github.com/gogo/protobuf ; \ - prefix=$$(go env GOMODCACHE)/$${module} ; \ - version=$$(go list -m -f '{{.Version}}' $${module}) ; \ - cp -a $${prefix}@$${version}/protobuf vendor/$${module}/ && chmod -R u+w vendor/$${module} diff --git a/go.mod b/go.mod index 525094ad0b..322f7f43b7 100644 --- a/go.mod +++ b/go.mod @@ -12,7 +12,6 @@ require ( github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c github.com/docker/go-metrics v0.0.1 github.com/fernet/fernet-go v0.0.0-20211208181803-9f70042a33ee - github.com/gogo/protobuf v1.3.2 github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 github.com/hashicorp/go-memdb v1.3.2 github.com/onsi/ginkgo v1.16.5 @@ -59,6 +58,7 @@ require ( github.com/dustin/go-humanize v1.0.1 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/go-logr/logr v1.4.3 // indirect + github.com/gogo/protobuf v1.3.2 // indirect github.com/golang/protobuf v1.5.4 // indirect github.com/google/certificate-transparency-go v1.1.4 // indirect github.com/google/go-cmp v0.7.0 // indirect diff --git a/integration/cluster_test.go b/integration/cluster_test.go index f2f1daf9dd..03c01fee7d 100644 --- a/integration/cluster_test.go +++ b/integration/cluster_test.go @@ -193,13 +193,13 @@ func (c *testCluster) runNode(n *testNode, nodeOrder int) error { // CreateService creates dummy service. func (c *testCluster) CreateService(name string, instances int) (string, error) { spec := &api.ServiceSpec{ - Annotations: api.Annotations{Name: name}, + Annotations: &api.Annotations{Name: name}, Mode: &api.ServiceSpec_Replicated{ Replicated: &api.ReplicatedService{ Replicas: uint64(instances), }, }, - Task: api.TaskSpec{ + Task: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{Image: "alpine", Command: []string{"sh"}}, }, @@ -299,7 +299,7 @@ func (c *testCluster) SetNodeRole(id string, role api.NodeRole) error { if _, err := c.api.UpdateNode(context.Background(), &api.UpdateNodeRequest{ NodeID: id, Spec: spec, - NodeVersion: &resp.Node.Meta.Version, + NodeVersion: resp.Node.Meta.Version, }); err != nil { // there possible problems on calling update node because redirecting // node or leader might want to shut down @@ -367,7 +367,7 @@ func (c *testCluster) RotateRootCA(cert, key []byte) error { _, err = c.api.UpdateCluster(context.Background(), &api.UpdateClusterRequest{ ClusterID: clusterInfo.ID, Spec: newSpec, - ClusterVersion: &clusterInfo.Meta.Version, + ClusterVersion: clusterInfo.Meta.Version, }) return err }, opsTimeout) @@ -382,9 +382,9 @@ func (c *testCluster) RotateUnlockKey() error { } _, err = c.api.UpdateCluster(context.Background(), &api.UpdateClusterRequest{ ClusterID: clusterInfo.ID, - Spec: &clusterInfo.Spec, - ClusterVersion: &clusterInfo.Meta.Version, - Rotation: api.KeyRotation{ + Spec: clusterInfo.Spec, + ClusterVersion: clusterInfo.Meta.Version, + Rotation: &api.KeyRotation{ ManagerUnlockKey: true, }, }) @@ -404,7 +404,7 @@ func (c *testCluster) AutolockManagers(autolock bool) error { _, err = c.api.UpdateCluster(context.Background(), &api.UpdateClusterRequest{ ClusterID: clusterInfo.ID, Spec: newSpec, - ClusterVersion: &clusterInfo.Meta.Version, + ClusterVersion: clusterInfo.Meta.Version, }) return err }, opsTimeout) diff --git a/integration/integration_test.go b/integration/integration_test.go index a8ef644f14..d565e6e58a 100644 --- a/integration/integration_test.go +++ b/integration/integration_test.go @@ -490,7 +490,7 @@ func TestDemoteDownedManager(t *testing.T) { _, err := cl.api.UpdateNode(context.Background(), &api.UpdateNodeRequest{ NodeID: nodeID, Spec: spec, - NodeVersion: &resp.Node.Meta.Version, + NodeVersion: resp.Node.Meta.Version, }) return err }, opsTimeout)) diff --git a/internal/protoc-stubs/gogoproto/gogo.proto b/internal/protoc-stubs/gogoproto/gogo.proto new file mode 100644 index 0000000000..13c40ffa88 --- /dev/null +++ b/internal/protoc-stubs/gogoproto/gogo.proto @@ -0,0 +1,95 @@ +// Stub gogo.proto that satisfies transitive imports without requiring the gogo +// runtime. All options are defined as no-ops for protoc compilation purposes. +syntax = "proto2"; + +package gogoproto; + +option go_package = "github.com/gogo/protobuf/gogoproto"; + +import "google/protobuf/descriptor.proto"; + +extend google.protobuf.FileOptions { + optional bool goproto_getters_all = 63001; + optional bool goproto_enum_prefix_all = 63002; + optional bool goproto_stringer_all = 63003; + optional bool verbose_equal_all = 63004; + optional bool face_all = 63005; + optional bool gostring_all = 63006; + optional bool populate_all = 63007; + optional bool stringer_all = 63008; + optional bool onlyone_all = 63009; + optional bool equal_all = 63013; + optional bool description_all = 63014; + optional bool testgen_all = 63015; + optional bool benchgen_all = 63016; + optional bool marshaler_all = 63017; + optional bool unmarshaler_all = 63018; + optional bool stable_marshaler_all = 63019; + optional bool sizer_all = 63020; + optional bool unsafe_marshaler_all = 63023; + optional bool unsafe_unmarshaler_all = 63024; + optional bool goproto_extensions_map_all = 63025; + optional bool goproto_unrecognized_all = 63026; + optional bool gogoproto_import = 63027; + optional bool protosizer_all = 63028; + optional bool compare_all = 63029; + optional bool typedecl_all = 63030; + optional bool messagename_all = 63031; + optional bool goproto_registration = 63032; + optional bool goproto_sizecache_all = 63034; + optional bool goproto_unkeyed_all = 63035; +} + +extend google.protobuf.MessageOptions { + optional bool goproto_getters = 64001; + optional bool goproto_stringer = 64003; + optional bool verbose_equal = 64004; + optional bool face = 64005; + optional bool gostring = 64006; + optional bool populate = 64007; + optional bool equal = 64013; + optional bool description = 64014; + optional bool testgen = 64015; + optional bool benchgen = 64016; + optional bool marshaler = 64017; + optional bool unmarshaler = 64018; + optional bool stable_marshaler = 64019; + optional bool sizer = 64020; + optional bool unsafe_marshaler = 64023; + optional bool unsafe_unmarshaler = 64024; + optional bool goproto_extensions_map = 64025; + optional bool goproto_unrecognized = 64026; + optional bool protosizer = 64028; + optional bool compare = 64029; + optional bool typedecl = 64030; + optional bool messagename = 64031; + optional bool goproto_sizecache = 64032; + optional bool goproto_unkeyed = 64033; +} + +extend google.protobuf.FieldOptions { + optional bool nullable = 65001; + optional bool embed = 65002; + optional string customtype = 65003; + optional string customname = 65004; + optional string jsontag = 65005; + optional string moretags = 65006; + optional string casttype = 65007; + optional string castkey = 65008; + optional string castvalue = 65009; + optional bool stdtime = 65010; + optional bool stdduration = 65011; + optional bool wktpointer = 65012; +} + +extend google.protobuf.EnumOptions { + optional bool goproto_enum_prefix = 62001; + optional bool goproto_enum_stringer = 62021; + optional bool enum_stringer = 62022; + optional string enum_customname = 62023; + optional bool enumdecl = 62024; +} + +extend google.protobuf.EnumValueOptions { + optional string enumvalue_customname = 66001; +} diff --git a/manager/allocator/allocator_test_suite.go b/manager/allocator/allocator_test_suite.go index c4cffa2d62..8a4a0ad0a9 100644 --- a/manager/allocator/allocator_test_suite.go +++ b/manager/allocator/allocator_test_suite.go @@ -61,8 +61,8 @@ func (suite *testSuite) TestAllocator() { // Predefined node-local networkTestNoDuplicateIPs p := &api.Network{ ID: "one_unIque_id", - Spec: api.NetworkSpec{ - Annotations: api.Annotations{ + Spec: &api.NetworkSpec{ + Annotations: &api.Annotations{ Name: "pred_bridge_network", Labels: map[string]string{ "com.docker.swarm.predefined": "true", @@ -75,8 +75,8 @@ func (suite *testSuite) TestAllocator() { // Node-local swarm scope network nln := &api.Network{ ID: "another_unIque_id", - Spec: api.NetworkSpec{ - Annotations: api.Annotations{ + Spec: &api.NetworkSpec{ + Annotations: &api.Annotations{ Name: "swarm-macvlan", }, DriverConfig: &api.Driver{Name: "macvlan"}, @@ -88,8 +88,8 @@ func (suite *testSuite) TestAllocator() { // populate ingress network in := &api.Network{ ID: "ingress-nw-id", - Spec: api.NetworkSpec{ - Annotations: api.Annotations{ + Spec: &api.NetworkSpec{ + Annotations: &api.Annotations{ Name: "default-ingress", }, Ingress: true, @@ -99,8 +99,8 @@ func (suite *testSuite) TestAllocator() { n1 := &api.Network{ ID: "testID1", - Spec: api.NetworkSpec{ - Annotations: api.Annotations{ + Spec: &api.NetworkSpec{ + Annotations: &api.Annotations{ Name: "test1", }, }, @@ -109,11 +109,11 @@ func (suite *testSuite) TestAllocator() { s1 := &api.Service{ ID: "testServiceID1", - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "service1", }, - Task: api.TaskSpec{ + Task: &api.TaskSpec{ Networks: []*api.NetworkAttachmentConfig{ { Target: "testID1", @@ -153,7 +153,7 @@ func (suite *testSuite) TestAllocator() { t1 := &api.Task{ ID: "testTaskID1", - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateNew, }, Networks: []*api.NetworkAttachment{ @@ -166,7 +166,7 @@ func (suite *testSuite) TestAllocator() { t2 := &api.Task{ ID: "testTaskIDPreInit", - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateNew, }, ServiceID: "testServiceID1", @@ -179,11 +179,11 @@ func (suite *testSuite) TestAllocator() { sp1 := &api.Service{ ID: "predServiceID1", - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "predService1", }, - Task: api.TaskSpec{ + Task: &api.TaskSpec{ Networks: []*api.NetworkAttachmentConfig{ { Target: p.ID, @@ -197,7 +197,7 @@ func (suite *testSuite) TestAllocator() { tp1 := &api.Task{ ID: "predTaskID1", - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateNew, }, Networks: []*api.NetworkAttachment{ @@ -213,11 +213,11 @@ func (suite *testSuite) TestAllocator() { sp2 := &api.Service{ ID: "predServiceID2", - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "predService2", }, - Task: api.TaskSpec{ + Task: &api.TaskSpec{ Networks: []*api.NetworkAttachmentConfig{ { Target: nln.ID, @@ -231,7 +231,7 @@ func (suite *testSuite) TestAllocator() { tp2 := &api.Task{ ID: "predTaskID2", - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateNew, }, Networks: []*api.NetworkAttachment{ @@ -308,8 +308,8 @@ func (suite *testSuite) TestAllocator() { suite.NoError(s.Update(func(tx store.Tx) error { n2 := &api.Network{ ID: "testID2", - Spec: api.NetworkSpec{ - Annotations: api.Annotations{ + Spec: &api.NetworkSpec{ + Annotations: &api.Annotations{ Name: "test2", }, }, @@ -323,8 +323,8 @@ func (suite *testSuite) TestAllocator() { suite.NoError(s.Update(func(tx store.Tx) error { s2 := &api.Service{ ID: "testServiceID2", - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "service2", }, Networks: []*api.NetworkAttachmentConfig{ @@ -344,7 +344,7 @@ func (suite *testSuite) TestAllocator() { suite.NoError(s.Update(func(tx store.Tx) error { t2 := &api.Task{ ID: "testTaskID2", - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateNew, }, ServiceID: "testServiceID2", @@ -359,8 +359,8 @@ func (suite *testSuite) TestAllocator() { // Now try adding a task which depends on a network before adding the network. n3 := &api.Network{ ID: "testID3", - Spec: api.NetworkSpec{ - Annotations: api.Annotations{ + Spec: &api.NetworkSpec{ + Annotations: &api.Annotations{ Name: "test3", }, }, @@ -369,7 +369,7 @@ func (suite *testSuite) TestAllocator() { suite.NoError(s.Update(func(tx store.Tx) error { t3 := &api.Task{ ID: "testTaskID3", - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateNew, }, DesiredState: api.TaskStateRunning, @@ -405,14 +405,14 @@ func (suite *testSuite) TestAllocator() { suite.NoError(s.Update(func(tx store.Tx) error { t5 := &api.Task{ ID: "testTaskID5", - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Networks: []*api.NetworkAttachmentConfig{ { Target: "testID2", }, }, }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateNew, }, DesiredState: api.TaskStateRunning, @@ -440,7 +440,7 @@ func (suite *testSuite) TestAllocator() { suite.NoError(s.Update(func(tx store.Tx) error { t4 := &api.Task{ ID: "testTaskID4", - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateNew, }, DesiredState: api.TaskStateRunning, @@ -484,8 +484,8 @@ func (suite *testSuite) TestAllocator() { // later and verify if task reconciles and moves to ALLOCATED. n4 := &api.Network{ ID: "testID4", - Spec: api.NetworkSpec{ - Annotations: api.Annotations{ + Spec: &api.NetworkSpec{ + Annotations: &api.Annotations{ Name: "test4", }, DriverConfig: &api.Driver{ @@ -515,7 +515,7 @@ func (suite *testSuite) TestAllocator() { suite.NoError(s.Update(func(tx store.Tx) error { t6 := &api.Task{ ID: "testTaskID6", - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateNew, }, DesiredState: api.TaskStateRunning, @@ -544,8 +544,8 @@ func (suite *testSuite) TestAllocator() { // reconciles and moves to ALLOCATED. s3 := &api.Service{ ID: "testServiceID3", - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "service3", }, Endpoint: &api.EndpointSpec{ @@ -582,7 +582,7 @@ func (suite *testSuite) TestAllocator() { suite.NoError(s.Update(func(tx store.Tx) error { t7 := &api.Task{ ID: "testTaskID7", - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateNew, }, ServiceID: "testServiceID4", @@ -612,8 +612,8 @@ func (suite *testSuite) TestNoDuplicateIPs() { // populate ingress network in := &api.Network{ ID: "ingress-nw-id", - Spec: api.NetworkSpec{ - Annotations: api.Annotations{ + Spec: &api.NetworkSpec{ + Annotations: &api.Annotations{ Name: "default-ingress", }, Ingress: true, @@ -632,8 +632,8 @@ func (suite *testSuite) TestNoDuplicateIPs() { suite.NoError(store.CreateNetwork(tx, in)) n1 := &api.Network{ ID: "testID1", - Spec: api.NetworkSpec{ - Annotations: api.Annotations{ + Spec: &api.NetworkSpec{ + Annotations: &api.Annotations{ Name: "test1", }, }, @@ -652,11 +652,11 @@ func (suite *testSuite) TestNoDuplicateIPs() { s1 := &api.Service{ ID: "testServiceID1", - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "service1", }, - Task: api.TaskSpec{ + Task: &api.TaskSpec{ Networks: []*api.NetworkAttachmentConfig{ { Target: "testID1", @@ -713,7 +713,7 @@ func (suite *testSuite) TestNoDuplicateIPs() { // numbered in ascending order, but it took // until the 52nd task. ID: "testTaskID" + strconv.Itoa(reps-i), - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateNew, }, ServiceID: "testServiceID1", @@ -742,8 +742,8 @@ func (suite *testSuite) TestAllocatorRestoreForDuplicateIPs() { // populate ingress network in := &api.Network{ ID: "ingress-nw-id", - Spec: api.NetworkSpec{ - Annotations: api.Annotations{ + Spec: &api.NetworkSpec{ + Annotations: &api.Annotations{ Name: "default-ingress", }, Ingress: true, @@ -763,8 +763,8 @@ func (suite *testSuite) TestAllocatorRestoreForDuplicateIPs() { for i := 0; i != numsvcstsks; i++ { svc := &api.Service{ ID: "testServiceID" + strconv.Itoa(i), - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "service" + strconv.Itoa(i), }, Endpoint: &api.EndpointSpec{ @@ -806,7 +806,7 @@ func (suite *testSuite) TestAllocatorRestoreForDuplicateIPs() { suite.NoError(s.Update(func(tx store.Tx) error { tsk := &api.Task{ ID: "testTaskID" + strconv.Itoa(i), - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateNew, }, ServiceID: "testServiceID" + strconv.Itoa(i), @@ -879,8 +879,8 @@ func (suite *testSuite) TestAllocatorRestartNoEndpointSpec() { // populate ingress network in := &api.Network{ ID: "overlay1", - Spec: api.NetworkSpec{ - Annotations: api.Annotations{ + Spec: &api.NetworkSpec{ + Annotations: &api.Annotations{ Name: "net1", }, }, @@ -900,14 +900,14 @@ func (suite *testSuite) TestAllocatorRestartNoEndpointSpec() { for i := 0; i != numsvcstsks; i++ { svc := &api.Service{ ID: "testServiceID" + strconv.Itoa(i), - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "service" + strconv.Itoa(i), }, // Endpoint: &api.EndpointSpec{ // Mode: api.ResolutionModeVirtualIP, // }, - Task: api.TaskSpec{ + Task: &api.TaskSpec{ Networks: []*api.NetworkAttachmentConfig{ { Target: "overlay1", @@ -936,7 +936,7 @@ func (suite *testSuite) TestAllocatorRestartNoEndpointSpec() { suite.NoError(s.Update(func(tx store.Tx) error { tsk := &api.Task{ ID: "testTaskID" + strconv.Itoa(i), - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateNew, }, ServiceID: "testServiceID" + strconv.Itoa(i), @@ -1028,8 +1028,8 @@ func (suite *testSuite) TestAllocatorRestoreForUnallocatedNetwork() { // populate ingress network in := &api.Network{ ID: "ingress-nw-id", - Spec: api.NetworkSpec{ - Annotations: api.Annotations{ + Spec: &api.NetworkSpec{ + Annotations: &api.Annotations{ Name: "default-ingress", }, Ingress: true, @@ -1048,8 +1048,8 @@ func (suite *testSuite) TestAllocatorRestoreForUnallocatedNetwork() { n1 = &api.Network{ ID: "testID1", - Spec: api.NetworkSpec{ - Annotations: api.Annotations{ + Spec: &api.NetworkSpec{ + Annotations: &api.Annotations{ Name: "test1", }, }, @@ -1070,8 +1070,8 @@ func (suite *testSuite) TestAllocatorRestoreForUnallocatedNetwork() { // Intentionally named testID0 so that in restore this network // is looked into first ID: "testID0", - Spec: api.NetworkSpec{ - Annotations: api.Annotations{ + Spec: &api.NetworkSpec{ + Annotations: &api.Annotations{ Name: "test2", }, }, @@ -1081,11 +1081,11 @@ func (suite *testSuite) TestAllocatorRestoreForUnallocatedNetwork() { for i := 0; i != numsvcstsks; i++ { svc := &api.Service{ ID: "testServiceID" + strconv.Itoa(i), - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "service" + strconv.Itoa(i), }, - Task: api.TaskSpec{ + Task: &api.TaskSpec{ Networks: []*api.NetworkAttachmentConfig{ { Target: "testID1", @@ -1134,10 +1134,10 @@ func (suite *testSuite) TestAllocatorRestoreForUnallocatedNetwork() { suite.NoError(s.Update(func(tx store.Tx) error { tsk := &api.Task{ ID: "testTaskID" + strconv.Itoa(i), - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateNew, }, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Networks: []*api.NetworkAttachmentConfig{ { Target: "testID1", @@ -1224,8 +1224,8 @@ func (suite *testSuite) TestNodeAllocator() { // populate ingress network in := &api.Network{ ID: "ingress", - Spec: api.NetworkSpec{ - Annotations: api.Annotations{ + Spec: &api.NetworkSpec{ + Annotations: &api.Annotations{ Name: "ingress", }, Ingress: true, @@ -1235,8 +1235,8 @@ func (suite *testSuite) TestNodeAllocator() { n1 := &api.Network{ ID: "overlayID1", - Spec: api.NetworkSpec{ - Annotations: api.Annotations{ + Spec: &api.NetworkSpec{ + Annotations: &api.Annotations{ Name: "overlayID1", }, }, @@ -1246,8 +1246,8 @@ func (suite *testSuite) TestNodeAllocator() { // this network will never be used for any task nUnused := &api.Network{ ID: "overlayIDUnused", - Spec: api.NetworkSpec{ - Annotations: api.Annotations{ + Spec: &api.NetworkSpec{ + Annotations: &api.Annotations{ Name: "overlayIDUnused", }, }, @@ -1275,7 +1275,7 @@ func (suite *testSuite) TestNodeAllocator() { ID: "task1", NodeID: node1.ID, DesiredState: api.TaskStateRunning, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Networks: []*api.NetworkAttachmentConfig{ { Target: "overlayID1", @@ -1310,8 +1310,8 @@ func (suite *testSuite) TestNodeAllocator() { // Add a network and validate that nothing has changed in the nodes n2 := &api.Network{ ID: "overlayID2", - Spec: api.NetworkSpec{ - Annotations: api.Annotations{ + Spec: &api.NetworkSpec{ + Annotations: &api.Annotations{ Name: "overlayID2", }, }, @@ -1333,7 +1333,7 @@ func (suite *testSuite) TestNodeAllocator() { ID: "task2", NodeID: node2.ID, DesiredState: api.TaskStateRunning, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Networks: []*api.NetworkAttachmentConfig{ { Target: "overlayID2", @@ -1360,7 +1360,7 @@ func (suite *testSuite) TestNodeAllocator() { ID: "task3", NodeID: node1.ID, DesiredState: api.TaskStateRunning, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Networks: []*api.NetworkAttachmentConfig{ { Target: "overlayID1", @@ -1416,8 +1416,8 @@ func (suite *testSuite) TestNodeAllocator() { // Validate that a LB IP address is not allocated for node-local networks p := &api.Network{ ID: "bridge", - Spec: api.NetworkSpec{ - Annotations: api.Annotations{ + Spec: &api.NetworkSpec{ + Annotations: &api.Annotations{ Name: "pred_bridge_network", Labels: map[string]string{ "com.docker.swarm.predefined": "true", @@ -1450,8 +1450,8 @@ func (suite *testSuite) TestNodeAttachmentOnLeadershipChange() { net1 := &api.Network{ ID: "ingress", - Spec: api.NetworkSpec{ - Annotations: api.Annotations{ + Spec: &api.NetworkSpec{ + Annotations: &api.Annotations{ Name: "ingress", }, Ingress: true, @@ -1460,8 +1460,8 @@ func (suite *testSuite) TestNodeAttachmentOnLeadershipChange() { net2 := &api.Network{ ID: "net2", - Spec: api.NetworkSpec{ - Annotations: api.Annotations{ + Spec: &api.NetworkSpec{ + Annotations: &api.Annotations{ Name: "net2", }, }, @@ -1475,7 +1475,7 @@ func (suite *testSuite) TestNodeAttachmentOnLeadershipChange() { ID: "task1", NodeID: node1.ID, DesiredState: api.TaskStateRunning, - Spec: api.TaskSpec{}, + Spec: &api.TaskSpec{}, } // this task is not yet assigned. we will assign it to node1 after running @@ -1484,7 +1484,7 @@ func (suite *testSuite) TestNodeAttachmentOnLeadershipChange() { task2 := &api.Task{ ID: "task2", DesiredState: api.TaskStateRunning, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Networks: []*api.NetworkAttachmentConfig{ { Target: "net2", @@ -1556,8 +1556,8 @@ func (suite *testSuite) TestAllocateServiceConflictingUserDefinedPorts() { // populate ingress network in := &api.Network{ ID: "ingress-nw-id", - Spec: api.NetworkSpec{ - Annotations: api.Annotations{ + Spec: &api.NetworkSpec{ + Annotations: &api.Annotations{ Name: "default-ingress", }, Ingress: true, @@ -1577,8 +1577,8 @@ func (suite *testSuite) TestAllocateServiceConflictingUserDefinedPorts() { s1 := &api.Service{ ID: svcID, - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "service1", }, Endpoint: &api.EndpointSpec{ @@ -1640,8 +1640,8 @@ func (suite *testSuite) TestDeallocateServiceAllocate() { newSvc := func(id string) *api.Service { return &api.Service{ ID: id, - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "service1", }, Endpoint: &api.EndpointSpec{ @@ -1662,8 +1662,8 @@ func (suite *testSuite) TestDeallocateServiceAllocate() { // populate ingress network in := &api.Network{ ID: "ingress-nw-id", - Spec: api.NetworkSpec{ - Annotations: api.Annotations{ + Spec: &api.NetworkSpec{ + Annotations: &api.Annotations{ Name: "default-ingress", }, Ingress: true, @@ -1722,8 +1722,8 @@ func (suite *testSuite) TestServiceAddRemovePorts() { // populate ingress network in := &api.Network{ ID: "ingress-nw-id", - Spec: api.NetworkSpec{ - Annotations: api.Annotations{ + Spec: &api.NetworkSpec{ + Annotations: &api.Annotations{ Name: "default-ingress", }, Ingress: true, @@ -1743,8 +1743,8 @@ func (suite *testSuite) TestServiceAddRemovePorts() { s1 := &api.Service{ ID: svcID, - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "service1", }, Endpoint: &api.EndpointSpec{ @@ -1836,8 +1836,8 @@ func (suite *testSuite) TestServiceUpdatePort() { // populate ingress network in := &api.Network{ ID: "ingress-nw-id", - Spec: api.NetworkSpec{ - Annotations: api.Annotations{ + Spec: &api.NetworkSpec{ + Annotations: &api.Annotations{ Name: "default-ingress", }, Ingress: true, @@ -1857,8 +1857,8 @@ func (suite *testSuite) TestServiceUpdatePort() { s1 := &api.Service{ ID: svcID, - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "service1", }, Endpoint: &api.EndpointSpec{ @@ -1919,8 +1919,8 @@ func (suite *testSuite) TestServicePortAllocationIsRepeatable() { // populate ingress network in := &api.Network{ ID: "ingress-nw-id", - Spec: api.NetworkSpec{ - Annotations: api.Annotations{ + Spec: &api.NetworkSpec{ + Annotations: &api.Annotations{ Name: "default-ingress", }, Ingress: true, @@ -1940,8 +1940,8 @@ func (suite *testSuite) TestServicePortAllocationIsRepeatable() { s1 := &api.Service{ ID: svcID, - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "service1", }, Endpoint: &api.EndpointSpec{ diff --git a/manager/allocator/allocator_test_suite_linux.go b/manager/allocator/allocator_test_suite_linux.go index cfc74091b2..4da7674741 100644 --- a/manager/allocator/allocator_test_suite_linux.go +++ b/manager/allocator/allocator_test_suite_linux.go @@ -17,8 +17,8 @@ func (suite *testSuite) TestIPAMNotNil() { // Predefined node-local network p := &api.Network{ ID: "one_unIque_id", - Spec: api.NetworkSpec{ - Annotations: api.Annotations{ + Spec: &api.NetworkSpec{ + Annotations: &api.Annotations{ Name: "pred_bridge_network", Labels: map[string]string{ "com.docker.swarm.predefined": "true", @@ -31,8 +31,8 @@ func (suite *testSuite) TestIPAMNotNil() { // Node-local swarm scope network nln := &api.Network{ ID: "another_unIque_id", - Spec: api.NetworkSpec{ - Annotations: api.Annotations{ + Spec: &api.NetworkSpec{ + Annotations: &api.Annotations{ Name: "swarm-macvlan", }, DriverConfig: &api.Driver{Name: "macvlan"}, @@ -44,8 +44,8 @@ func (suite *testSuite) TestIPAMNotNil() { // populate ingress network in := &api.Network{ ID: "ingress-nw-id", - Spec: api.NetworkSpec{ - Annotations: api.Annotations{ + Spec: &api.NetworkSpec{ + Annotations: &api.Annotations{ Name: "default-ingress", }, Ingress: true, diff --git a/manager/allocator/network.go b/manager/allocator/network.go index b79cb304ba..898e5d3a64 100644 --- a/manager/allocator/network.go +++ b/manager/allocator/network.go @@ -701,7 +701,7 @@ func (nc *networkContext) isServiceAllocated(s *api.Service, flags ...func(*netw for _, flag := range flags { flag(&options) } - if (s.Spec.Endpoint != nil && len(s.Spec.Endpoint.Ports) != 0) || + if (s.GetSpec().GetEndpoint() != nil && len(s.GetSpec().GetEndpoint().GetPorts()) != 0) || (s.Endpoint != nil && len(s.Endpoint.Ports) != 0) { return nc.portAllocator.isPortsAllocatedOnInit(s, options.OnInit) } @@ -1530,7 +1530,7 @@ func (a *Allocator) NetworkAllocator() networkallocator.NetworkAllocator { // updateTaskStatus sets TaskStatus and updates timestamp. func updateTaskStatus(t *api.Task, newStatus api.TaskState, message string) { - t.Status = api.TaskStatus{ + t.Status = &api.TaskStatus{ State: newStatus, Message: message, Timestamp: ptypes.MustTimestampProto(time.Now()), diff --git a/manager/allocator/network_test.go b/manager/allocator/network_test.go index e768de2410..05249a1769 100644 --- a/manager/allocator/network_test.go +++ b/manager/allocator/network_test.go @@ -9,7 +9,7 @@ import ( func TestUpdatePortsInHostPublishMode(t *testing.T) { service := api.Service{ - Spec: api.ServiceSpec{ + Spec: &api.ServiceSpec{ Endpoint: &api.EndpointSpec{ Ports: []*api.PortConfig{ { diff --git a/manager/allocator/networkallocator/inert.go b/manager/allocator/networkallocator/inert.go index d722a166df..e2a1e3a5d2 100644 --- a/manager/allocator/networkallocator/inert.go +++ b/manager/allocator/networkallocator/inert.go @@ -74,7 +74,7 @@ func (Inert) AllocateAttachment(_ *api.Node, _ *api.NetworkAttachment) error { // AllocateService succeeds iff the service specifies no network attachments. func (Inert) AllocateService(s *api.Service) error { - if len(s.Spec.Task.Networks) > 0 || len(s.Spec.Networks) > 0 { + if len(s.GetSpec().GetTask().GetNetworks()) > 0 || len(s.GetSpec().GetNetworks()) > 0 { return errUnavailable } return nil @@ -82,7 +82,7 @@ func (Inert) AllocateService(s *api.Service) error { // AllocateTask succeeds iff the task specifies no network attachments. func (Inert) AllocateTask(t *api.Task) error { - if len(t.Spec.Networks) > 0 { + if len(t.GetSpec().GetNetworks()) > 0 { return errUnavailable } return nil diff --git a/manager/allocator/portallocator.go b/manager/allocator/portallocator.go index 7afc12f7d8..37989cc6b6 100644 --- a/manager/allocator/portallocator.go +++ b/manager/allocator/portallocator.go @@ -36,7 +36,15 @@ type portSpace struct { dynamicPortSpace *idm.IDM } -type allocatedPorts map[api.PortConfig]map[uint32]*api.PortConfig +// portConfigKey is a comparable struct used as a map key for port configuration. +// It captures the fields that uniquely identify a port within a single Endpoint. +type portConfigKey struct { + Name string + Protocol api.PortConfig_Protocol + TargetPort uint32 +} + +type allocatedPorts map[portConfigKey]map[uint32]*api.PortConfig // addState add the state of an allocated port to the collection. // `allocatedPorts` is a map of portKey:publishedPort:portState. @@ -131,8 +139,8 @@ func newPortSpace(protocol api.PortConfig_Protocol) *portSpace { // getPortConfigKey returns a map key for doing set operations with // ports. The key consists of name, protocol and target port which // uniquely identifies a port within a single Endpoint. -func getPortConfigKey(p *api.PortConfig) api.PortConfig { - return api.PortConfig{ +func getPortConfigKey(p *api.PortConfig) portConfigKey { + return portConfigKey{ Name: p.Name, Protocol: p.Protocol, TargetPort: p.TargetPort, diff --git a/manager/allocator/portallocator_test.go b/manager/allocator/portallocator_test.go index e85ffbe79d..ac6c9ed1e2 100644 --- a/manager/allocator/portallocator_test.go +++ b/manager/allocator/portallocator_test.go @@ -16,7 +16,7 @@ func TestReconcilePortConfigs(t *testing.T) { portConfigsBinds := []portConfigsBind{ { input: &api.Service{ - Spec: api.ServiceSpec{ + Spec: &api.ServiceSpec{ Endpoint: &api.EndpointSpec{ Ports: []*api.PortConfig{ { @@ -41,7 +41,7 @@ func TestReconcilePortConfigs(t *testing.T) { }, { input: &api.Service{ - Spec: api.ServiceSpec{ + Spec: &api.ServiceSpec{ Endpoint: &api.EndpointSpec{ Ports: []*api.PortConfig{ { @@ -87,7 +87,7 @@ func TestReconcilePortConfigs(t *testing.T) { }, { input: &api.Service{ - Spec: api.ServiceSpec{ + Spec: &api.ServiceSpec{ Endpoint: &api.EndpointSpec{ Ports: []*api.PortConfig{ { @@ -121,7 +121,7 @@ func TestReconcilePortConfigs(t *testing.T) { }, { input: &api.Service{ - Spec: api.ServiceSpec{ + Spec: &api.ServiceSpec{ Endpoint: &api.EndpointSpec{ Ports: []*api.PortConfig{ { @@ -184,7 +184,7 @@ func TestAllocateServicePorts(t *testing.T) { // Service has no endpoint in ServiceSpec s := &api.Service{ - Spec: api.ServiceSpec{ + Spec: &api.ServiceSpec{ Endpoint: nil, }, Endpoint: &api.Endpoint{ @@ -204,7 +204,7 @@ func TestAllocateServicePorts(t *testing.T) { // Service has a published port 10001 in ServiceSpec s = &api.Service{ - Spec: api.ServiceSpec{ + Spec: &api.ServiceSpec{ Endpoint: &api.EndpointSpec{ Ports: []*api.PortConfig{ { @@ -234,7 +234,7 @@ func TestAllocateServicePorts(t *testing.T) { // Service has a published port 10001 in ServiceSpec // which is already allocated on host s = &api.Service{ - Spec: api.ServiceSpec{ + Spec: &api.ServiceSpec{ Endpoint: &api.EndpointSpec{ Ports: []*api.PortConfig{ { @@ -277,7 +277,7 @@ func TestHostPublishPortsNeedUpdate(t *testing.T) { // both Endpoint and Spec.Endpoint are nil name: "NilEndpointAndSpec", input: &api.Service{ - Spec: api.ServiceSpec{ + Spec: &api.ServiceSpec{ Endpoint: nil, }, Endpoint: nil, @@ -288,7 +288,7 @@ func TestHostPublishPortsNeedUpdate(t *testing.T) { // non host mode does not impact name: "NonHostModePort", input: &api.Service{ - Spec: api.ServiceSpec{ + Spec: &api.ServiceSpec{ Endpoint: &api.EndpointSpec{ Ports: []*api.PortConfig{ { @@ -308,7 +308,7 @@ func TestHostPublishPortsNeedUpdate(t *testing.T) { // publish mode is different name: "PublishModeDifferent", input: &api.Service{ - Spec: api.ServiceSpec{ + Spec: &api.ServiceSpec{ Endpoint: &api.EndpointSpec{ Ports: []*api.PortConfig{ { @@ -337,7 +337,7 @@ func TestHostPublishPortsNeedUpdate(t *testing.T) { { name: "NothingChanged", input: &api.Service{ - Spec: api.ServiceSpec{ + Spec: &api.ServiceSpec{ Endpoint: &api.EndpointSpec{ Ports: []*api.PortConfig{ { @@ -370,7 +370,7 @@ func TestHostPublishPortsNeedUpdate(t *testing.T) { // is as allocated, we need to skip the allocation name: "PublishPortNotSpecified", input: &api.Service{ - Spec: api.ServiceSpec{ + Spec: &api.ServiceSpec{ Endpoint: &api.EndpointSpec{ Ports: []*api.PortConfig{ { @@ -400,7 +400,7 @@ func TestHostPublishPortsNeedUpdate(t *testing.T) { // we are still in charge of allocating one name: "OnePublishPortSpecifiedButDone", input: &api.Service{ - Spec: api.ServiceSpec{ + Spec: &api.ServiceSpec{ Endpoint: &api.EndpointSpec{ Ports: []*api.PortConfig{ { @@ -443,7 +443,7 @@ func TestHostPublishPortsNeedUpdate(t *testing.T) { // we are still in charge of allocating one and we did. name: "OnePublishPortSpecifiedButDone", input: &api.Service{ - Spec: api.ServiceSpec{ + Spec: &api.ServiceSpec{ Endpoint: &api.EndpointSpec{ Ports: []*api.PortConfig{ { @@ -505,7 +505,7 @@ func TestIsPortsAllocated(t *testing.T) { // both Endpoint and Spec.Endpoint are nil name: "BothNil", input: &api.Service{ - Spec: api.ServiceSpec{ + Spec: &api.ServiceSpec{ Endpoint: nil, }, Endpoint: nil, @@ -516,7 +516,7 @@ func TestIsPortsAllocated(t *testing.T) { // Endpoint is non-nil and Spec.Endpoint is nil name: "NilSpec", input: &api.Service{ - Spec: api.ServiceSpec{ + Spec: &api.ServiceSpec{ Endpoint: &api.EndpointSpec{ Ports: []*api.PortConfig{ { @@ -536,7 +536,7 @@ func TestIsPortsAllocated(t *testing.T) { // Endpoint is nil and Spec.Endpoint is non-nil name: "NilEndpoint", input: &api.Service{ - Spec: api.ServiceSpec{ + Spec: &api.ServiceSpec{ Endpoint: nil, }, Endpoint: &api.Endpoint{ @@ -556,7 +556,7 @@ func TestIsPortsAllocated(t *testing.T) { // Endpoint and Spec.Endpoint have different length name: "DifferentLengths", input: &api.Service{ - Spec: api.ServiceSpec{ + Spec: &api.ServiceSpec{ Endpoint: &api.EndpointSpec{ Ports: []*api.PortConfig{ { @@ -591,7 +591,7 @@ func TestIsPortsAllocated(t *testing.T) { // Endpoint and Spec.Endpoint have different TargetPort name: "DifferentTargetPort", input: &api.Service{ - Spec: api.ServiceSpec{ + Spec: &api.ServiceSpec{ Endpoint: &api.EndpointSpec{ Ports: []*api.PortConfig{ { @@ -620,7 +620,7 @@ func TestIsPortsAllocated(t *testing.T) { // Endpoint and Spec.Endpoint have different PublishedPort name: "DifferentPublishedPort", input: &api.Service{ - Spec: api.ServiceSpec{ + Spec: &api.ServiceSpec{ Endpoint: &api.EndpointSpec{ Ports: []*api.PortConfig{ { @@ -649,7 +649,7 @@ func TestIsPortsAllocated(t *testing.T) { // Endpoint and Spec.Endpoint are the same and PublishedPort is 0 name: "NotYetAssignedPublishedPort", input: &api.Service{ - Spec: api.ServiceSpec{ + Spec: &api.ServiceSpec{ Endpoint: &api.EndpointSpec{ Ports: []*api.PortConfig{ { @@ -678,7 +678,7 @@ func TestIsPortsAllocated(t *testing.T) { // Endpoint and Spec.Endpoint are the same and PublishedPort is non-0 name: "NonzeroPublishedPort", input: &api.Service{ - Spec: api.ServiceSpec{ + Spec: &api.ServiceSpec{ Endpoint: &api.EndpointSpec{ Ports: []*api.PortConfig{ { @@ -707,7 +707,7 @@ func TestIsPortsAllocated(t *testing.T) { // Endpoint and Spec.Endpoint are the same except PublishedPort, and PublishedPort in Endpoint is non-0 name: "AlreadyAssignedPublishedPort", input: &api.Service{ - Spec: api.ServiceSpec{ + Spec: &api.ServiceSpec{ Endpoint: &api.EndpointSpec{ Ports: []*api.PortConfig{ { @@ -736,7 +736,7 @@ func TestIsPortsAllocated(t *testing.T) { // Endpoint and Spec.Endpoint are the same except the ports are in different order name: "DifferentOrders", input: &api.Service{ - Spec: api.ServiceSpec{ + Spec: &api.ServiceSpec{ Endpoint: &api.EndpointSpec{ Ports: []*api.PortConfig{ { @@ -792,7 +792,7 @@ func TestIsPortsAllocated(t *testing.T) { // See docker/docker#29730 name: "MultiplePublishedPort", input: &api.Service{ - Spec: api.ServiceSpec{ + Spec: &api.ServiceSpec{ Endpoint: &api.EndpointSpec{ Ports: []*api.PortConfig{ { @@ -849,7 +849,7 @@ func TestIsPortsAllocated(t *testing.T) { // one published host port is removed and another is added name: "DifferentTargetPortHostMode", input: &api.Service{ - Spec: api.ServiceSpec{ + Spec: &api.ServiceSpec{ Endpoint: &api.EndpointSpec{ Ports: []*api.PortConfig{ { diff --git a/manager/controlapi/ca_rotation.go b/manager/controlapi/ca_rotation.go index 7a2a4980ec..4ffc576ad3 100644 --- a/manager/controlapi/ca_rotation.go +++ b/manager/controlapi/ca_rotation.go @@ -66,7 +66,7 @@ func newRootRotationObject(ctx context.Context, securityConfig *ca.SecurityConfi // We need the same credentials but to connect to the original URLs (in case we are in the middle of a root rotation already) var urls []string for _, c := range extCAs { - if c.Protocol == api.ExternalCA_CAProtocolCFSSL { + if c.Protocol == api.CAProtocolCFSSL { urls = append(urls, c.URL) } } @@ -138,7 +138,7 @@ func validateHasAtLeastOneExternalCA(ctx context.Context, externalCAs map[string Certificates: securityConfig.ClientTLSCreds.Config().Certificates, } for i, ca := range specific { - if ca.Protocol == api.ExternalCA_CAProtocolCFSSL { + if ca.Protocol == api.CAProtocolCFSSL { if err := validateExternalCAURL(&dialer, &opts, ca.URL); err != nil { log.G(ctx).WithError(err).Warnf("external CA # %d is unreachable or invalid", i+1) } else { @@ -196,7 +196,12 @@ func getNormalizedExtCAs(caConfig *api.CAConfig, normalizedCurrentRootCACert []b // - Otherwise, start a new root rotation using the desired signing cert and desired signing key as the root rotation // signing cert and key. If a root rotation is already in progress, just replace it and start over. func validateCAConfig(ctx context.Context, securityConfig *ca.SecurityConfig, cluster *api.Cluster) (*api.RootCA, error) { - newConfig := cluster.Spec.CAConfig.Copy() + var newConfig *api.CAConfig + if cluster.Spec.GetCAConfig() != nil { + newConfig = cluster.Spec.CAConfig.Copy() + } else { + newConfig = &api.CAConfig{} + } newConfig.SigningCACert = ca.NormalizePEMs(newConfig.SigningCACert) // ensure this is normalized before we use it if len(newConfig.SigningCAKey) > 0 && len(newConfig.SigningCACert) == 0 { @@ -210,7 +215,7 @@ func validateCAConfig(ctx context.Context, securityConfig *ca.SecurityConfig, cl } var oldCertExtCAs []*api.ExternalCA - if !hasSigningKey(&cluster.RootCA) { + if !hasSigningKey(cluster.RootCA) { // If we are going from external -> internal, but providing the external CA's signing key, // then we don't need to validate any external CAs. We can in fact abort any outstanding root @@ -243,7 +248,7 @@ func validateCAConfig(ctx context.Context, securityConfig *ca.SecurityConfig, cl if err != nil { return nil, status.Error(codes.Internal, err.Error()) } - return newRootRotationObject(ctx, securityConfig, &cluster.RootCA, newRootCA, oldCertExtCAs, newConfig.ForceRotate) + return newRootRotationObject(ctx, securityConfig, cluster.RootCA, newRootCA, oldCertExtCAs, newConfig.ForceRotate) } // we also need to make sure that if the current root rotation requires an external CA, those external CAs are @@ -255,7 +260,7 @@ func validateCAConfig(ctx context.Context, securityConfig *ca.SecurityConfig, cl } } - return &cluster.RootCA, nil // no change, return as is + return cluster.RootCA, nil // no change, return as is } // A desired cert and maybe key were provided - we need to make sure the cert and key (if provided) match. @@ -312,5 +317,5 @@ func validateCAConfig(ctx context.Context, securityConfig *ca.SecurityConfig, cl } // ok, everything's different; we have to begin a new root rotation which means generating a new cross-signed cert - return newRootRotationObject(ctx, securityConfig, &cluster.RootCA, newRootCA, oldCertExtCAs, newConfig.ForceRotate) + return newRootRotationObject(ctx, securityConfig, cluster.RootCA, newRootCA, oldCertExtCAs, newConfig.ForceRotate) } diff --git a/manager/controlapi/ca_rotation_test.go b/manager/controlapi/ca_rotation_test.go index 650a62d3ab..90e10c04b4 100644 --- a/manager/controlapi/ca_rotation_test.go +++ b/manager/controlapi/ca_rotation_test.go @@ -18,18 +18,19 @@ import ( "github.com/stretchr/testify/require" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" + "google.golang.org/protobuf/proto" "github.com/moby/swarmkit/v2/log" ) type rootCARotationTestCase struct { - rootCA api.RootCA - caConfig api.CAConfig + rootCA *api.RootCA + caConfig *api.CAConfig // what to expect if the validate and update succeeds - we can't always check that everything matches, for instance if // random values for join tokens or cross signed certs, or generated root rotation cert/key, // are expected - expectRootCA api.RootCA + expectRootCA *api.RootCA expectJoinTokenChange bool expectGeneratedRootRotation bool expectGeneratedCross bool @@ -39,11 +40,11 @@ type rootCARotationTestCase struct { expectErrorString string } -var initialLocalRootCA = api.RootCA{ +var initialLocalRootCA = &api.RootCA{ CACert: testutils.ECDSA256SHA256Cert, CAKey: testutils.ECDSA256Key, CACertHash: "DEADBEEF", - JoinTokens: api.JoinTokens{ + JoinTokens: &api.JoinTokens{ Worker: "SWMTKN-1-worker", Manager: "SWMTKN-1-manager", }, @@ -75,20 +76,20 @@ func TestValidateCAConfigInvalidValues(t *testing.T) { ca.DefaultNodeCertExpiration, nil) require.NoError(t, err) - initialExternalRootCA := initialLocalRootCA + initialExternalRootCA := initialLocalRootCA.Copy() initialExternalRootCA.CAKey = nil crossSigned, err := localRootCA.CrossSignCACertificate(rotationCert) require.NoError(t, err) - initExternalRootCAWithRotation := initialExternalRootCA + initExternalRootCAWithRotation := initialExternalRootCA.Copy() initExternalRootCAWithRotation.RootRotation = &api.RootRotation{ CACert: rotationCert, CAKey: rotationKey, CrossSignedCACert: crossSigned, } - initWithExternalRootRotation := initialLocalRootCA + initWithExternalRootRotation := initialLocalRootCA.Copy() initWithExternalRootRotation.RootRotation = &api.RootRotation{ CACert: rotationCert, CrossSignedCACert: crossSigned, @@ -111,14 +112,14 @@ func TestValidateCAConfigInvalidValues(t *testing.T) { for _, invalid := range []rootCARotationTestCase{ { rootCA: initialLocalRootCA, - caConfig: api.CAConfig{ + caConfig: &api.CAConfig{ SigningCAKey: initialLocalRootCA.CAKey, }, expectErrorString: "the signing CA cert must also be provided", }, { rootCA: initExternalRootCAWithRotation, // even if a root rotation is already in progress, the current CA external URL must be present - caConfig: api.CAConfig{ + caConfig: &api.CAConfig{ ExternalCAs: []*api.ExternalCA{ { URL: initExtServer.URL, @@ -135,7 +136,7 @@ func TestValidateCAConfigInvalidValues(t *testing.T) { }, { rootCA: initialExternalRootCA, - caConfig: api.CAConfig{ + caConfig: &api.CAConfig{ SigningCACert: rotationCert, // even if there's a desired cert, the current CA external URL must be present ExternalCAs: []*api.ExternalCA{ // right certs, but invalid URLs in several ways { @@ -156,7 +157,7 @@ func TestValidateCAConfigInvalidValues(t *testing.T) { }, { rootCA: initialLocalRootCA, - caConfig: api.CAConfig{ + caConfig: &api.CAConfig{ SigningCACert: rotationCert, ExternalCAs: []*api.ExternalCA{ { @@ -174,7 +175,7 @@ func TestValidateCAConfigInvalidValues(t *testing.T) { }, { rootCA: initialLocalRootCA, - caConfig: api.CAConfig{ + caConfig: &api.CAConfig{ SigningCACert: rotationCert, ExternalCAs: []*api.ExternalCA{ // right certs, but invalid URLs in several ways { @@ -195,7 +196,7 @@ func TestValidateCAConfigInvalidValues(t *testing.T) { }, { rootCA: initWithExternalRootRotation, - caConfig: api.CAConfig{ // no forceRotate change, no explicit signing cert change + caConfig: &api.CAConfig{ // no forceRotate change, no explicit signing cert change ExternalCAs: []*api.ExternalCA{ { URL: rotateExtServer.URL, @@ -212,7 +213,7 @@ func TestValidateCAConfigInvalidValues(t *testing.T) { }, { rootCA: initWithExternalRootRotation, - caConfig: api.CAConfig{ // no forceRotate change, no explicit signing cert change + caConfig: &api.CAConfig{ // no forceRotate change, no explicit signing cert change ExternalCAs: []*api.ExternalCA{ { URL: initExtServer.URL, @@ -230,12 +231,12 @@ func TestValidateCAConfigInvalidValues(t *testing.T) { }, { rootCA: initialExternalRootCA, - caConfig: api.CAConfig{}, // removing the current external CA is not supported + caConfig: &api.CAConfig{}, // removing the current external CA is not supported expectErrorString: "there must be at least one valid, reachable external CA corresponding to the current CA certificate", }, { rootCA: initialExternalRootCA, - caConfig: api.CAConfig{ + caConfig: &api.CAConfig{ SigningCACert: rotationCert, ExternalCAs: []*api.ExternalCA{ { @@ -252,7 +253,7 @@ func TestValidateCAConfigInvalidValues(t *testing.T) { }, { rootCA: initialExternalRootCA, - caConfig: api.CAConfig{ + caConfig: &api.CAConfig{ SigningCACert: rotationCert, ExternalCAs: []*api.ExternalCA{ { @@ -269,7 +270,7 @@ func TestValidateCAConfigInvalidValues(t *testing.T) { }, { rootCA: initialLocalRootCA, - caConfig: api.CAConfig{ + caConfig: &api.CAConfig{ SigningCACert: append(rotationCert, initialLocalRootCA.CACert...), SigningCAKey: rotationKey, }, @@ -277,7 +278,7 @@ func TestValidateCAConfigInvalidValues(t *testing.T) { }, { rootCA: initialLocalRootCA, - caConfig: api.CAConfig{ + caConfig: &api.CAConfig{ SigningCACert: testutils.ReDateCert(t, rotationCert, rotationCert, rotationKey, time.Now().Add(-1*time.Minute), time.Now().Add(364*helpers.OneDay)), SigningCAKey: rotationKey, @@ -286,7 +287,7 @@ func TestValidateCAConfigInvalidValues(t *testing.T) { }, { rootCA: initialLocalRootCA, - caConfig: api.CAConfig{ + caConfig: &api.CAConfig{ SigningCACert: initialLocalRootCA.CACert, SigningCAKey: testutils.ExpiredKey, // same cert but mismatching key }, @@ -296,7 +297,7 @@ func TestValidateCAConfigInvalidValues(t *testing.T) { // this is just one class of failures caught by NewRootCA, not going to bother testing others, since they are // extensively tested in NewRootCA rootCA: initialLocalRootCA, - caConfig: api.CAConfig{ + caConfig: &api.CAConfig{ SigningCACert: testutils.ExpiredCert, SigningCAKey: testutils.ExpiredKey, }, @@ -305,7 +306,7 @@ func TestValidateCAConfigInvalidValues(t *testing.T) { } { cluster := &api.Cluster{ RootCA: invalid.rootCA, - Spec: api.ClusterSpec{ + Spec: &api.ClusterSpec{ CAConfig: invalid.caConfig, }, } @@ -325,8 +326,8 @@ func runValidTestCases(t *testing.T, testcases []*rootCARotationTestCase, localR for _, valid := range testcases { casectx := log.WithField(ctx, "testcase", valid.description) cluster := &api.Cluster{ - RootCA: *valid.rootCA.Copy(), - Spec: api.ClusterSpec{ + RootCA: valid.rootCA.Copy(), + Spec: &api.ClusterSpec{ CAConfig: valid.caConfig, }, } @@ -335,13 +336,13 @@ func runValidTestCases(t *testing.T, testcases []*rootCARotationTestCase, localR require.NoError(t, err, valid.description) // ensure that the cluster was not mutated - require.Equal(t, valid.rootCA, cluster.RootCA) + require.True(t, proto.Equal(valid.rootCA, cluster.RootCA), "cluster should not be mutated: %s", valid.description) // Because join tokens are random, we can't predict exactly what it is, so this needs to be manually checked if valid.expectJoinTokenChange { require.NotEmpty(t, result.JoinTokens, valid.rootCA.JoinTokens, valid.description) } else { - require.Equal(t, result.JoinTokens, valid.rootCA.JoinTokens, valid.description) + require.True(t, proto.Equal(result.JoinTokens, valid.rootCA.JoinTokens), valid.description) } result.JoinTokens = valid.expectRootCA.JoinTokens @@ -369,11 +370,11 @@ func runValidTestCases(t *testing.T, testcases []*rootCARotationTestCase, localR // just assert that the value has changed. if valid.expectGeneratedRootRotation { require.NotNil(t, result.RootRotation, valid.description) - require.NotEqual(t, valid.rootCA.RootRotation, result.RootRotation, valid.description) + require.False(t, proto.Equal(valid.rootCA.RootRotation, result.RootRotation), valid.description) result.RootRotation = valid.expectRootCA.RootRotation } - require.Equal(t, result, &valid.expectRootCA, valid.description) + require.True(t, proto.Equal(result, valid.expectRootCA), valid.description) } } @@ -404,7 +405,7 @@ func TestValidateCAConfigValidValues(t *testing.T) { parsedKey, err := helpers.ParsePrivateKeyPEM(testutils.ECDSA256Key) require.NoError(t, err) - initialExternalRootCA := initialLocalRootCA + initialExternalRootCA := initialLocalRootCA.Copy() initialExternalRootCA.CAKey = nil // set up 2 external CAs that can be contacted for signing @@ -423,17 +424,17 @@ func TestValidateCAConfigValidValues(t *testing.T) { defer rotateExtServer.Stop() require.NoError(t, rotateExtServer.EnableCASigning()) - getExpectedRootCA := func(hasKey bool) api.RootCA { - result := initialLocalRootCA + getExpectedRootCA := func(hasKey bool) *api.RootCA { + result := initialLocalRootCA.Copy() result.LastForcedRotation = 5 - result.JoinTokens = api.JoinTokens{} + result.JoinTokens = &api.JoinTokens{} if !hasKey { result.CAKey = nil } return result } - getRootCAWithRotation := func(base api.RootCA, cert, key, cross []byte) api.RootCA { - init := base + getRootCAWithRotation := func(base *api.RootCA, cert, key, cross []byte) *api.RootCA { + init := base.Copy() init.RootRotation = &api.RootRotation{ CACert: cert, CAKey: key, @@ -447,7 +448,7 @@ func TestValidateCAConfigValidValues(t *testing.T) { { description: "no specified config changes results no root rotation", rootCA: initialLocalRootCA, - caConfig: api.CAConfig{}, + caConfig: &api.CAConfig{}, expectRootCA: initialLocalRootCA, }, }, &localRootCA) @@ -457,7 +458,7 @@ func TestValidateCAConfigValidValues(t *testing.T) { { description: "same desired cert and key as current Root CA results in no root rotation", rootCA: initialLocalRootCA, - caConfig: api.CAConfig{ + caConfig: &api.CAConfig{ SigningCACert: uglifyOnePEM(initialLocalRootCA.CACert), SigningCAKey: initialLocalRootCA.CAKey, ForceRotate: 5, @@ -467,7 +468,7 @@ func TestValidateCAConfigValidValues(t *testing.T) { { description: "same desired cert as current Root CA but external->internal (remove external CA is ok) results in no root rotation and no key -> key", rootCA: initialExternalRootCA, - caConfig: api.CAConfig{ + caConfig: &api.CAConfig{ SigningCACert: uglifyOnePEM(initialLocalRootCA.CACert), SigningCAKey: initialLocalRootCA.CAKey, ForceRotate: 5, @@ -477,7 +478,7 @@ func TestValidateCAConfigValidValues(t *testing.T) { { description: "same desired cert as current Root CA but internal->external results in no root rotation and key -> no key", rootCA: initialLocalRootCA, - caConfig: api.CAConfig{ + caConfig: &api.CAConfig{ SigningCACert: initialLocalRootCA.CACert, ExternalCAs: []*api.ExternalCA{ { @@ -492,7 +493,7 @@ func TestValidateCAConfigValidValues(t *testing.T) { { description: "same desired cert and key as current Root CA but adding an external CA results in no root rotation and no key change", rootCA: initialLocalRootCA, - caConfig: api.CAConfig{ + caConfig: &api.CAConfig{ SigningCACert: initialLocalRootCA.CACert, SigningCAKey: initialLocalRootCA.CAKey, ExternalCAs: []*api.ExternalCA{ @@ -527,7 +528,7 @@ func TestValidateCAConfigValidValues(t *testing.T) { { description: "same desired cert and key as current root rotation results in no change in root rotation", rootCA: getRootCAWithRotation(initialLocalRootCA, rotationCert, rotationKey, crossSigned), - caConfig: api.CAConfig{ + caConfig: &api.CAConfig{ SigningCACert: testutils.ECDSACertChain[2], SigningCAKey: testutils.ECDSACertChainKeys[2], ForceRotate: 5, @@ -537,7 +538,7 @@ func TestValidateCAConfigValidValues(t *testing.T) { { description: "same desired cert as current root rotation but external->internal results minor change in root rotation (no key -> key)", rootCA: getRootCAWithRotation(initialLocalRootCA, rotationCert, nil, crossSigned), - caConfig: api.CAConfig{ + caConfig: &api.CAConfig{ SigningCACert: testutils.ECDSACertChain[2], SigningCAKey: testutils.ECDSACertChainKeys[2], ForceRotate: 5, @@ -547,7 +548,7 @@ func TestValidateCAConfigValidValues(t *testing.T) { { description: "same desired cert as current root rotation but internal->external results minor change in root rotation (key -> no key)", rootCA: getRootCAWithRotation(initialLocalRootCA, rotationCert, rotationKey, crossSigned), - caConfig: api.CAConfig{ + caConfig: &api.CAConfig{ SigningCACert: testutils.ECDSACertChain[2], ForceRotate: 5, ExternalCAs: []*api.ExternalCA{ @@ -584,7 +585,7 @@ func TestValidateCAConfigValidValues(t *testing.T) { { description: "desired cert being a renewed rotation RootCA cert + rotation key results in replaced root rotation because the cert has changed", rootCA: getRootCAWithRotation(initialLocalRootCA, rotationCert, rotationKey, crossSigned), - caConfig: api.CAConfig{ + caConfig: &api.CAConfig{ SigningCACert: uglifyOnePEM(renewedRotationCert), SigningCAKey: rotationKey, ForceRotate: 5, @@ -595,7 +596,7 @@ func TestValidateCAConfigValidValues(t *testing.T) { { description: "desired cert being a different rotation rootCA cert results in replaced root rotation (only new external CA required, not old rotation external CA)", rootCA: getRootCAWithRotation(initialLocalRootCA, rotationCert, nil, crossSigned), - caConfig: api.CAConfig{ + caConfig: &api.CAConfig{ SigningCACert: uglifyOnePEM(differentInitialCert), ForceRotate: 5, ExternalCAs: []*api.ExternalCA{ @@ -619,14 +620,14 @@ func TestValidateCAConfigValidValues(t *testing.T) { { description: "generating cert and key results in root rotation", rootCA: initialLocalRootCA, - caConfig: api.CAConfig{ForceRotate: 5}, + caConfig: &api.CAConfig{ForceRotate: 5}, expectRootCA: getRootCAWithRotation(getExpectedRootCA(true), nil, nil, nil), expectGeneratedRootRotation: true, }, { description: "generating cert for external->internal results in root rotation", rootCA: initialExternalRootCA, - caConfig: api.CAConfig{ + caConfig: &api.CAConfig{ ForceRotate: 5, ExternalCAs: []*api.ExternalCA{ { @@ -641,14 +642,14 @@ func TestValidateCAConfigValidValues(t *testing.T) { { description: "generating cert and key results in replacing root rotation", rootCA: getRootCAWithRotation(initialLocalRootCA, rotationCert, rotationKey, crossSigned), - caConfig: api.CAConfig{ForceRotate: 5}, + caConfig: &api.CAConfig{ForceRotate: 5}, expectRootCA: getRootCAWithRotation(getExpectedRootCA(true), nil, nil, nil), expectGeneratedRootRotation: true, }, { description: "generating cert and key results in replacing root rotation; external CAs required by old root rotation are no longer necessary", rootCA: getRootCAWithRotation(initialLocalRootCA, rotationCert, nil, crossSigned), - caConfig: api.CAConfig{ForceRotate: 5}, + caConfig: &api.CAConfig{ForceRotate: 5}, expectRootCA: getRootCAWithRotation(getExpectedRootCA(true), nil, nil, nil), expectGeneratedRootRotation: true, }, @@ -665,7 +666,7 @@ func TestValidateCAConfigValidValues(t *testing.T) { { description: "no desired certificate specified, no force rotation: no change to external CA root (which has no outstanding rotation)", rootCA: initialExternalRootCA, - caConfig: api.CAConfig{ + caConfig: &api.CAConfig{ ExternalCAs: []*api.ExternalCA{ { URL: initExtServer.URL, diff --git a/manager/controlapi/cluster.go b/manager/controlapi/cluster.go index f2f32ee107..15528acc0a 100644 --- a/manager/controlapi/cluster.go +++ b/manager/controlapi/cluster.go @@ -5,7 +5,6 @@ import ( "strings" "time" - gogotypes "github.com/gogo/protobuf/types" "github.com/moby/swarmkit/v2/api" "github.com/moby/swarmkit/v2/ca" "github.com/moby/swarmkit/v2/log" @@ -36,11 +35,8 @@ func validateClusterSpec(spec *api.ClusterSpec) error { } // Validate that expiry time being provided is valid, and over our minimum - if spec.CAConfig.NodeCertExpiry != nil { - expiry, err := gogotypes.DurationFromProto(spec.CAConfig.NodeCertExpiry) - if err != nil { - return status.Error(codes.InvalidArgument, errInvalidArgument.Error()) - } + if spec.GetCAConfig().GetNodeCertExpiry() != nil { + expiry := spec.CAConfig.NodeCertExpiry.AsDuration() if expiry < ca.MinNodeCertExpiration { return status.Errorf(codes.InvalidArgument, "minimum certificate expiry time is: %s", ca.MinNodeCertExpiration) } @@ -48,7 +44,7 @@ func validateClusterSpec(spec *api.ClusterSpec) error { // Validate that AcceptancePolicies only include Secrets that are bcrypted // TODO(diogo): Add a global list of acceptance algorithms. We only support bcrypt for now. - if len(spec.AcceptancePolicy.Policies) > 0 { + if len(spec.GetAcceptancePolicy().GetPolicies()) > 0 { for _, policy := range spec.AcceptancePolicy.Policies { if policy.Secret != nil && strings.ToLower(policy.Secret.Alg) != "bcrypt" { return status.Errorf(codes.InvalidArgument, "hashing algorithm is not supported: %s", policy.Secret.Alg) @@ -57,17 +53,14 @@ func validateClusterSpec(spec *api.ClusterSpec) error { } // Validate that heartbeatPeriod time being provided is valid - if spec.Dispatcher.HeartbeatPeriod != nil { - heartbeatPeriod, err := gogotypes.DurationFromProto(spec.Dispatcher.HeartbeatPeriod) - if err != nil { - return status.Error(codes.InvalidArgument, errInvalidArgument.Error()) - } + if spec.GetDispatcher().GetHeartbeatPeriod() != nil { + heartbeatPeriod := spec.Dispatcher.HeartbeatPeriod.AsDuration() if heartbeatPeriod < 0 { return status.Errorf(codes.InvalidArgument, "heartbeat time period cannot be a negative duration") } } - if spec.Annotations.Name != store.DefaultClusterName { + if spec.GetAnnotations().GetName() != store.DefaultClusterName { return status.Errorf(codes.InvalidArgument, "modification of cluster name is not allowed") } @@ -119,22 +112,25 @@ func (s *Server) UpdateCluster(ctx context.Context, request *api.UpdateClusterRe } // This ensures that we have the current rootCA with which to generate tokens (expiration doesn't matter // for generating the tokens) - rootCA, err := ca.RootCAFromAPI(&cluster.RootCA, ca.DefaultNodeCertExpiration) + rootCA, err := ca.RootCAFromAPI(cluster.RootCA, ca.DefaultNodeCertExpiration) if err != nil { log.G(ctx).WithField( "method", "(*controlapi.Server).UpdateCluster").WithError(err).Error("invalid cluster root CA") return status.Errorf(codes.Internal, "error loading cluster rootCA for update") } - cluster.Meta.Version = *request.ClusterVersion - cluster.Spec = *request.Spec.Copy() + cluster.Meta.Version = request.ClusterVersion + cluster.Spec = request.Spec.Copy() expireBlacklistedCerts(cluster) - if request.Rotation.WorkerJoinToken { + if cluster.RootCA.JoinTokens == nil { + cluster.RootCA.JoinTokens = &api.JoinTokens{} + } + if request.GetRotation().GetWorkerJoinToken() { cluster.RootCA.JoinTokens.Worker = ca.GenerateJoinToken(&rootCA, cluster.FIPS) } - if request.Rotation.ManagerJoinToken { + if request.GetRotation().GetManagerJoinToken() { cluster.RootCA.JoinTokens.Manager = ca.GenerateJoinToken(&rootCA, cluster.FIPS) } @@ -142,13 +138,13 @@ func (s *Server) UpdateCluster(ctx context.Context, request *api.UpdateClusterRe if err != nil { return err } - cluster.RootCA = *updatedRootCA + cluster.RootCA = updatedRootCA var unlockKeys []*api.EncryptionKey var managerKey *api.EncryptionKey for _, eKey := range cluster.UnlockKeys { if eKey.Subsystem == ca.ManagerRole { - if !cluster.Spec.EncryptionConfig.AutoLockManagers { + if !cluster.Spec.GetEncryptionConfig().GetAutoLockManagers() { continue } managerKey = eKey @@ -157,14 +153,14 @@ func (s *Server) UpdateCluster(ctx context.Context, request *api.UpdateClusterRe } switch { - case !cluster.Spec.EncryptionConfig.AutoLockManagers: + case !cluster.Spec.GetEncryptionConfig().GetAutoLockManagers(): break case managerKey == nil: unlockKeys = append(unlockKeys, &api.EncryptionKey{ Subsystem: ca.ManagerRole, Key: encryption.GenerateSecretKey(), }) - case request.Rotation.ManagerUnlockKey: + case request.GetRotation().GetManagerUnlockKey(): managerKey.Key = encryption.GenerateSecretKey() } cluster.UnlockKeys = unlockKeys @@ -256,23 +252,36 @@ func redactClusters(clusters []*api.Cluster) []*api.Cluster { // Copy all the mandatory fields // Do not copy secret keys redactedSpec := cluster.Spec.Copy() - redactedSpec.CAConfig.SigningCAKey = nil - // the cert is not a secret, but if API users get the cluster spec and then update, - // then because the cert is included but not the key, the user can get update errors - // or unintended consequences (such as telling swarm to forget about the key so long - // as there is a corresponding external CA) - redactedSpec.CAConfig.SigningCACert = nil - - redactedRootCA := cluster.RootCA.Copy() - redactedRootCA.CAKey = nil - if r := redactedRootCA.RootRotation; r != nil { - r.CAKey = nil + // Redact acceptance policy secret data to avoid leaking sensitive values + if redactedSpec.AcceptancePolicy != nil { + for _, policy := range redactedSpec.AcceptancePolicy.Policies { + if policy.Secret != nil { + policy.Secret.Data = nil + } + } + } + if redactedSpec.CAConfig != nil { + redactedSpec.CAConfig.SigningCAKey = nil + // the cert is not a secret, but if API users get the cluster spec and then update, + // then because the cert is included but not the key, the user can get update errors + // or unintended consequences (such as telling swarm to forget about the key so long + // as there is a corresponding external CA) + redactedSpec.CAConfig.SigningCACert = nil + } + + var redactedRootCA *api.RootCA + if cluster.RootCA != nil { + redactedRootCA = cluster.RootCA.Copy() + redactedRootCA.CAKey = nil + if r := redactedRootCA.RootRotation; r != nil { + r.CAKey = nil + } } newCluster := &api.Cluster{ ID: cluster.ID, Meta: cluster.Meta, - Spec: *redactedSpec, - RootCA: *redactedRootCA, + Spec: redactedSpec, + RootCA: redactedRootCA, BlacklistedCertificates: cluster.BlacklistedCertificates, DefaultAddressPool: cluster.DefaultAddressPool, SubnetSize: cluster.SubnetSize, @@ -301,8 +310,8 @@ func expireBlacklistedCerts(cluster *api.Cluster) { continue } - expiry, err := gogotypes.TimestampFromProto(blacklistedCert.Expiry) - if err == nil && nowMinusGrace.After(expiry) { + expiry := blacklistedCert.Expiry.AsTime() + if nowMinusGrace.After(expiry) { delete(cluster.BlacklistedCertificates, cn) } } diff --git a/manager/controlapi/cluster_test.go b/manager/controlapi/cluster_test.go index 56cfb34f96..68c8688df6 100644 --- a/manager/controlapi/cluster_test.go +++ b/manager/controlapi/cluster_test.go @@ -5,9 +5,8 @@ import ( "fmt" "testing" "time" - - gogotypes "github.com/gogo/protobuf/types" "github.com/moby/swarmkit/v2/api" + "google.golang.org/protobuf/types/known/durationpb" "github.com/moby/swarmkit/v2/ca" "github.com/moby/swarmkit/v2/ca/testutils" "github.com/moby/swarmkit/v2/manager/state/store" @@ -20,18 +19,18 @@ import ( func createClusterSpec(name string) *api.ClusterSpec { return &api.ClusterSpec{ - Annotations: api.Annotations{ + Annotations: &api.Annotations{ Name: name, }, - CAConfig: api.CAConfig{ - NodeCertExpiry: gogotypes.DurationProto(ca.DefaultNodeCertExpiration), + CAConfig: &api.CAConfig{ + NodeCertExpiry: durationpb.New(ca.DefaultNodeCertExpiration), }, } } func createClusterObj(id, name string, policy api.AcceptancePolicy, rootCA *ca.RootCA) *api.Cluster { spec := createClusterSpec(name) - spec.AcceptancePolicy = policy + spec.AcceptancePolicy = &policy var key []byte if s, err := rootCA.Signer(); err == nil { @@ -40,12 +39,12 @@ func createClusterObj(id, name string, policy api.AcceptancePolicy, rootCA *ca.R return &api.Cluster{ ID: id, - Spec: *spec, - RootCA: api.RootCA{ + Spec: spec, + RootCA: &api.RootCA{ CACert: rootCA.Certs, CAKey: key, CACertHash: rootCA.Digest.String(), - JoinTokens: api.JoinTokens{ + JoinTokens: &api.JoinTokens{ Worker: ca.GenerateJoinToken(rootCA, false), Manager: ca.GenerateJoinToken(rootCA, false), }, @@ -74,29 +73,29 @@ func TestValidateClusterSpec(t *testing.T) { }, { spec: &api.ClusterSpec{ - Annotations: api.Annotations{ + Annotations: &api.Annotations{ Name: store.DefaultClusterName, }, - CAConfig: api.CAConfig{ - NodeCertExpiry: gogotypes.DurationProto(29 * time.Minute), + CAConfig: &api.CAConfig{ + NodeCertExpiry: durationpb.New(29 * time.Minute), }, }, c: codes.InvalidArgument, }, { spec: &api.ClusterSpec{ - Annotations: api.Annotations{ + Annotations: &api.Annotations{ Name: store.DefaultClusterName, }, - Dispatcher: api.DispatcherConfig{ - HeartbeatPeriod: gogotypes.DurationProto(-29 * time.Minute), + Dispatcher: &api.DispatcherConfig{ + HeartbeatPeriod: durationpb.New(-29 * time.Minute), }, }, c: codes.InvalidArgument, }, { spec: &api.ClusterSpec{ - Annotations: api.Annotations{ + Annotations: &api.Annotations{ Name: "", }, }, @@ -104,7 +103,7 @@ func TestValidateClusterSpec(t *testing.T) { }, { spec: &api.ClusterSpec{ - Annotations: api.Annotations{ + Annotations: &api.Annotations{ Name: "blah", }, }, @@ -162,15 +161,16 @@ func TestGetClusterWithSecret(t *testing.T) { assert.Error(t, err) assert.Equal(t, codes.NotFound, grpcutils.ErrorCode(err)) - policy := api.AcceptancePolicy{Policies: []*api.AcceptancePolicy_RoleAdmissionPolicy{{Secret: &api.AcceptancePolicy_RoleAdmissionPolicy_Secret{Data: []byte("secret")}}}} - cluster := createCluster(t, ts, "name", "name", policy, ts.Server.securityConfig.RootCA()) + policy := &api.AcceptancePolicy{Policies: []*api.AcceptancePolicy_RoleAdmissionPolicy{{Secret: &api.AcceptancePolicy_RoleAdmissionPolicy_Secret{Data: []byte("secret")}}}} + cluster := createCluster(t, ts, "name", "name", *policy, ts.Server.securityConfig.RootCA()) r, err := ts.Client.GetCluster(context.Background(), &api.GetClusterRequest{ClusterID: cluster.ID}) assert.NoError(t, err) cluster.Meta.Version = r.Cluster.Meta.Version assert.NotEqual(t, cluster, r.Cluster) - assert.NotContains(t, r.Cluster.String(), "secret") assert.NotContains(t, r.Cluster.String(), "PRIVATE") - assert.NotNil(t, r.Cluster.Spec.AcceptancePolicy.Policies[0].Secret.Data) + // Secret Data is redacted from the response; verify the policy structure exists but data is zeroed + assert.NotNil(t, r.Cluster.Spec.AcceptancePolicy.Policies[0].Secret) + assert.Nil(t, r.Cluster.Spec.AcceptancePolicy.Policies[0].Secret.Data) } func TestUpdateCluster(t *testing.T) { @@ -182,16 +182,16 @@ func TestUpdateCluster(t *testing.T) { assert.Error(t, err) assert.Equal(t, codes.InvalidArgument, grpcutils.ErrorCode(err)) - _, err = ts.Client.UpdateCluster(context.Background(), &api.UpdateClusterRequest{ClusterID: "invalid", Spec: &cluster.Spec, ClusterVersion: &api.Version{}}) + _, err = ts.Client.UpdateCluster(context.Background(), &api.UpdateClusterRequest{ClusterID: "invalid", Spec: cluster.Spec, ClusterVersion: &api.Version{}}) assert.Error(t, err) assert.Equal(t, codes.NotFound, grpcutils.ErrorCode(err)) // No update options. - _, err = ts.Client.UpdateCluster(context.Background(), &api.UpdateClusterRequest{ClusterID: cluster.ID, Spec: &cluster.Spec}) + _, err = ts.Client.UpdateCluster(context.Background(), &api.UpdateClusterRequest{ClusterID: cluster.ID, Spec: cluster.Spec}) assert.Error(t, err) assert.Equal(t, codes.InvalidArgument, grpcutils.ErrorCode(err)) - _, err = ts.Client.UpdateCluster(context.Background(), &api.UpdateClusterRequest{ClusterID: cluster.ID, Spec: &cluster.Spec, ClusterVersion: &cluster.Meta.Version}) + _, err = ts.Client.UpdateCluster(context.Background(), &api.UpdateClusterRequest{ClusterID: cluster.ID, Spec: cluster.Spec, ClusterVersion: cluster.Meta.Version}) assert.NoError(t, err) r, err := ts.Client.ListClusters(context.Background(), &api.ListClustersRequest{ @@ -204,11 +204,11 @@ func TestUpdateCluster(t *testing.T) { assert.Equal(t, cluster.Spec.Annotations.Name, r.Clusters[0].Spec.Annotations.Name) assert.Len(t, r.Clusters[0].Spec.AcceptancePolicy.Policies, 0) - r.Clusters[0].Spec.AcceptancePolicy = api.AcceptancePolicy{Policies: []*api.AcceptancePolicy_RoleAdmissionPolicy{{Secret: &api.AcceptancePolicy_RoleAdmissionPolicy_Secret{Alg: "bcrypt", Data: []byte("secret")}}}} + r.Clusters[0].Spec.AcceptancePolicy = &api.AcceptancePolicy{Policies: []*api.AcceptancePolicy_RoleAdmissionPolicy{{Secret: &api.AcceptancePolicy_RoleAdmissionPolicy_Secret{Alg: "bcrypt", Data: []byte("secret")}}}} _, err = ts.Client.UpdateCluster(context.Background(), &api.UpdateClusterRequest{ ClusterID: cluster.ID, - Spec: &r.Clusters[0].Spec, - ClusterVersion: &r.Clusters[0].Meta.Version, + Spec: r.Clusters[0].Spec, + ClusterVersion: r.Clusters[0].Meta.Version, }) assert.NoError(t, err) @@ -222,24 +222,25 @@ func TestUpdateCluster(t *testing.T) { assert.Equal(t, cluster.Spec.Annotations.Name, r.Clusters[0].Spec.Annotations.Name) assert.Len(t, r.Clusters[0].Spec.AcceptancePolicy.Policies, 1) - r.Clusters[0].Spec.AcceptancePolicy = api.AcceptancePolicy{Policies: []*api.AcceptancePolicy_RoleAdmissionPolicy{{Secret: &api.AcceptancePolicy_RoleAdmissionPolicy_Secret{Alg: "bcrypt", Data: []byte("secret")}}}} + r.Clusters[0].Spec.AcceptancePolicy = &api.AcceptancePolicy{Policies: []*api.AcceptancePolicy_RoleAdmissionPolicy{{Secret: &api.AcceptancePolicy_RoleAdmissionPolicy_Secret{Alg: "bcrypt", Data: []byte("secret")}}}} returnedCluster, err := ts.Client.UpdateCluster(context.Background(), &api.UpdateClusterRequest{ ClusterID: cluster.ID, - Spec: &r.Clusters[0].Spec, - ClusterVersion: &r.Clusters[0].Meta.Version, + Spec: r.Clusters[0].Spec, + ClusterVersion: r.Clusters[0].Meta.Version, }) assert.NoError(t, err) - assert.NotContains(t, returnedCluster.String(), "secret") assert.NotContains(t, returnedCluster.String(), "PRIVATE") - assert.NotNil(t, returnedCluster.Cluster.Spec.AcceptancePolicy.Policies[0].Secret.Data) + // Secret Data is redacted from the response; verify the policy structure exists but data is zeroed + assert.NotNil(t, returnedCluster.Cluster.Spec.AcceptancePolicy.Policies[0].Secret) + assert.Nil(t, returnedCluster.Cluster.Spec.AcceptancePolicy.Policies[0].Secret.Data) // Versioning. assert.NoError(t, err) - version := &returnedCluster.Cluster.Meta.Version + version := returnedCluster.Cluster.Meta.Version _, err = ts.Client.UpdateCluster(context.Background(), &api.UpdateClusterRequest{ ClusterID: cluster.ID, - Spec: &r.Clusters[0].Spec, + Spec: r.Clusters[0].Spec, ClusterVersion: version, }) assert.NoError(t, err) @@ -247,7 +248,7 @@ func TestUpdateCluster(t *testing.T) { // Perform an update with the "old" version. _, err = ts.Client.UpdateCluster(context.Background(), &api.UpdateClusterRequest{ ClusterID: cluster.ID, - Spec: &r.Clusters[0].Spec, + Spec: r.Clusters[0].Spec, ClusterVersion: version, }) assert.Error(t, err) @@ -272,9 +273,9 @@ func TestUpdateClusterRotateToken(t *testing.T) { // Rotate worker token _, err = ts.Client.UpdateCluster(context.Background(), &api.UpdateClusterRequest{ ClusterID: cluster.ID, - Spec: &cluster.Spec, - ClusterVersion: &cluster.Meta.Version, - Rotation: api.KeyRotation{ + Spec: cluster.Spec, + ClusterVersion: cluster.Meta.Version, + Rotation: &api.KeyRotation{ WorkerJoinToken: true, }, }) @@ -294,9 +295,9 @@ func TestUpdateClusterRotateToken(t *testing.T) { // Rotate manager token _, err = ts.Client.UpdateCluster(context.Background(), &api.UpdateClusterRequest{ ClusterID: cluster.ID, - Spec: &cluster.Spec, - ClusterVersion: &r.Clusters[0].Meta.Version, - Rotation: api.KeyRotation{ + Spec: cluster.Spec, + ClusterVersion: r.Clusters[0].Meta.Version, + Rotation: &api.KeyRotation{ ManagerJoinToken: true, }, }) @@ -316,9 +317,9 @@ func TestUpdateClusterRotateToken(t *testing.T) { // Rotate both tokens _, err = ts.Client.UpdateCluster(context.Background(), &api.UpdateClusterRequest{ ClusterID: cluster.ID, - Spec: &cluster.Spec, - ClusterVersion: &r.Clusters[0].Meta.Version, - Rotation: api.KeyRotation{ + Spec: cluster.Spec, + ClusterVersion: r.Clusters[0].Meta.Version, + Rotation: &api.KeyRotation{ WorkerJoinToken: true, ManagerJoinToken: true, }, @@ -370,7 +371,7 @@ func TestUpdateClusterRotateUnlockKey(t *testing.T) { return } - validateListResult := func(expectedLocked bool) api.Version { + validateListResult := func(expectedLocked bool) *api.Version { r, err := ts.Client.ListClusters(context.Background(), &api.ListClustersRequest{ Filters: &api.ListClustersRequest_Filters{ NamePrefixes: []string{store.DefaultClusterName}, @@ -379,7 +380,7 @@ func TestUpdateClusterRotateUnlockKey(t *testing.T) { require.NoError(t, err) require.Len(t, r.Clusters, 1) - require.Equal(t, expectedLocked, r.Clusters[0].Spec.EncryptionConfig.AutoLockManagers) + require.Equal(t, expectedLocked, r.Clusters[0].Spec.GetEncryptionConfig().GetAutoLockManagers()) require.Nil(t, r.Clusters[0].UnlockKeys) // redacted return r.Clusters[0].Meta.Version @@ -392,9 +393,9 @@ func TestUpdateClusterRotateUnlockKey(t *testing.T) { // Rotate unlock key without turning auto-lock on - key should still be nil _, err := ts.Client.UpdateCluster(context.Background(), &api.UpdateClusterRequest{ ClusterID: cluster.ID, - Spec: &cluster.Spec, - ClusterVersion: &version, - Rotation: api.KeyRotation{ + Spec: cluster.Spec, + ClusterVersion: version, + Rotation: &api.KeyRotation{ ManagerUnlockKey: true, }, }) @@ -404,11 +405,14 @@ func TestUpdateClusterRotateUnlockKey(t *testing.T) { // Enable auto-lock only, no rotation boolean spec := cluster.Spec.Copy() + if spec.EncryptionConfig == nil { + spec.EncryptionConfig = &api.EncryptionConfig{} + } spec.EncryptionConfig.AutoLockManagers = true _, err = ts.Client.UpdateCluster(context.Background(), &api.UpdateClusterRequest{ ClusterID: cluster.ID, Spec: spec, - ClusterVersion: &version, + ClusterVersion: version, }) require.NoError(t, err) version = validateListResult(true) @@ -419,8 +423,8 @@ func TestUpdateClusterRotateUnlockKey(t *testing.T) { _, err = ts.Client.UpdateCluster(context.Background(), &api.UpdateClusterRequest{ ClusterID: cluster.ID, Spec: spec, - ClusterVersion: &version, - Rotation: api.KeyRotation{ + ClusterVersion: version, + Rotation: &api.KeyRotation{ ManagerUnlockKey: true, }, }) @@ -435,7 +439,7 @@ func TestUpdateClusterRotateUnlockKey(t *testing.T) { _, err = ts.Client.UpdateCluster(context.Background(), &api.UpdateClusterRequest{ ClusterID: cluster.ID, Spec: spec, - ClusterVersion: &version, + ClusterVersion: version, }) require.NoError(t, err) version = validateListResult(true) @@ -445,9 +449,9 @@ func TestUpdateClusterRotateUnlockKey(t *testing.T) { // Disable auto lock _, err = ts.Client.UpdateCluster(context.Background(), &api.UpdateClusterRequest{ ClusterID: cluster.ID, - Spec: &cluster.Spec, // set back to original spec - ClusterVersion: &version, - Rotation: api.KeyRotation{ + Spec: cluster.Spec, // set back to original spec + ClusterVersion: version, + Rotation: &api.KeyRotation{ ManagerUnlockKey: true, // this will be ignored because we disable the auto-lock }, }) @@ -477,7 +481,7 @@ func TestUpdateClusterRootRotation(t *testing.T) { _, err = ts.Client.UpdateCluster(context.Background(), &api.UpdateClusterRequest{ ClusterID: cluster.ID, Spec: updatedSpec, - ClusterVersion: &cluster.Meta.Version, + ClusterVersion: cluster.Meta.Version, }) require.NoError(t, err) @@ -509,7 +513,7 @@ func TestUpdateClusterRootRotation(t *testing.T) { ts.Store.View(func(tx store.ReadTx) { c := store.GetCluster(tx, cluster.ID) require.NotNil(t, c) - rootCA = &c.RootCA + rootCA = c.RootCA }) return } @@ -519,11 +523,11 @@ func TestUpdateClusterRootRotation(t *testing.T) { // update something else, but make sure this doesn't the root CA rotation doesn't change updatedSpec = cluster.Spec.Copy() - updatedSpec.CAConfig.NodeCertExpiry = gogotypes.DurationProto(time.Hour) + updatedSpec.CAConfig.NodeCertExpiry = durationpb.New(time.Hour) _, err = ts.Client.UpdateCluster(context.Background(), &api.UpdateClusterRequest{ ClusterID: cluster.ID, Spec: updatedSpec, - ClusterVersion: &cluster.Meta.Version, + ClusterVersion: cluster.Meta.Version, }) require.NoError(t, err) @@ -560,22 +564,23 @@ func TestListClustersWithSecrets(t *testing.T) { assert.NoError(t, err) assert.Empty(t, r.Clusters) - policy := api.AcceptancePolicy{Policies: []*api.AcceptancePolicy_RoleAdmissionPolicy{{Secret: &api.AcceptancePolicy_RoleAdmissionPolicy_Secret{Alg: "bcrypt", Data: []byte("secret")}}}} + policy := &api.AcceptancePolicy{Policies: []*api.AcceptancePolicy_RoleAdmissionPolicy{{Secret: &api.AcceptancePolicy_RoleAdmissionPolicy_Secret{Alg: "bcrypt", Data: []byte("secret")}}}} - createCluster(t, ts, "id1", "name1", policy, ts.Server.securityConfig.RootCA()) + createCluster(t, ts, "id1", "name1", *policy, ts.Server.securityConfig.RootCA()) r, err = ts.Client.ListClusters(context.Background(), &api.ListClustersRequest{}) assert.NoError(t, err) assert.Equal(t, 1, len(r.Clusters)) - createCluster(t, ts, "id2", "name2", policy, ts.Server.securityConfig.RootCA()) - createCluster(t, ts, "id3", "name3", policy, ts.Server.securityConfig.RootCA()) + createCluster(t, ts, "id2", "name2", *policy, ts.Server.securityConfig.RootCA()) + createCluster(t, ts, "id3", "name3", *policy, ts.Server.securityConfig.RootCA()) r, err = ts.Client.ListClusters(context.Background(), &api.ListClustersRequest{}) assert.NoError(t, err) assert.Equal(t, 3, len(r.Clusters)) for _, cluster := range r.Clusters { - assert.NotContains(t, cluster.String(), policy.Policies[0].Secret) assert.NotContains(t, cluster.String(), "PRIVATE") - assert.NotNil(t, cluster.Spec.AcceptancePolicy.Policies[0].Secret.Data) + // Secret Data is redacted from the response; verify the policy structure exists but data is zeroed + assert.NotNil(t, cluster.Spec.AcceptancePolicy.Policies[0].Secret) + assert.Nil(t, cluster.Spec.AcceptancePolicy.Policies[0].Secret.Data) } } diff --git a/manager/controlapi/config.go b/manager/controlapi/config.go index 6bb2f80ff6..aa6c28bdb3 100644 --- a/manager/controlapi/config.go +++ b/manager/controlapi/config.go @@ -20,7 +20,7 @@ const MaxConfigSize = 1000 * 1024 // 1000KB func configFromConfigSpec(spec *api.ConfigSpec) *api.Config { return &api.Config{ ID: identity.NewID(), - Spec: *spec, + Spec: spec, } } @@ -70,7 +70,7 @@ func (s *Server) UpdateConfig(ctx context.Context, request *api.UpdateConfigRequ } // We only allow updating Labels - config.Meta.Version = *request.ConfigVersion + config.Meta.Version = request.ConfigVersion config.Spec.Annotations.Labels = request.Spec.Annotations.Labels return store.UpdateConfig(tx, config) @@ -236,7 +236,7 @@ func validateConfigSpec(spec *api.ConfigSpec) error { if spec == nil { return status.Error(codes.InvalidArgument, errInvalidArgument.Error()) } - if err := validateConfigOrSecretAnnotations(spec.Annotations); err != nil { + if err := validateConfigOrSecretAnnotations(*spec.Annotations); err != nil { return err } diff --git a/manager/controlapi/config_test.go b/manager/controlapi/config_test.go index 148d7d2763..d7af042e3f 100644 --- a/manager/controlapi/config_test.go +++ b/manager/controlapi/config_test.go @@ -11,11 +11,12 @@ import ( "github.com/moby/swarmkit/v2/testutils" "github.com/stretchr/testify/assert" "google.golang.org/grpc/codes" + "google.golang.org/protobuf/proto" ) func createConfigSpec(name string, data []byte, labels map[string]string) *api.ConfigSpec { return &api.ConfigSpec{ - Annotations: api.Annotations{Name: name, Labels: labels}, + Annotations: &api.Annotations{Name: name, Labels: labels}, Data: data, } } @@ -110,7 +111,7 @@ func TestCreateConfig(t *testing.T) { assert.NoError(t, err) assert.NotNil(t, resp) assert.NotNil(t, resp.Config) - assert.Equal(t, *creationSpec, resp.Config.Spec) + assert.True(t, proto.Equal(creationSpec, resp.Config.Spec), "config spec should be equal") // for sanity, check that the stored config still has the config data var storedConfig *api.Config @@ -151,7 +152,7 @@ func TestGetConfig(t *testing.T) { assert.NoError(t, err) assert.NotNil(t, resp) assert.NotNil(t, resp.Config) - assert.Equal(t, config, resp.Config) + assert.True(t, proto.Equal(config, resp.Config), "config should be equal") } func TestUpdateConfig(t *testing.T) { @@ -179,8 +180,8 @@ func TestUpdateConfig(t *testing.T) { config.Spec.Data = []byte{1} resp, err := ts.Client.UpdateConfig(context.Background(), &api.UpdateConfigRequest{ ConfigID: config.ID, - Spec: &config.Spec, - ConfigVersion: &config.Meta.Version, + Spec: config.Spec, + ConfigVersion: config.Meta.Version, }) assert.Equal(t, codes.InvalidArgument, testutils.ErrorCode(err), testutils.ErrorDesc(err)) @@ -189,8 +190,8 @@ func TestUpdateConfig(t *testing.T) { config.Spec.Annotations.Name = "AnotherName" resp, err = ts.Client.UpdateConfig(context.Background(), &api.UpdateConfigRequest{ ConfigID: config.ID, - Spec: &config.Spec, - ConfigVersion: &config.Meta.Version, + Spec: config.Spec, + ConfigVersion: config.Meta.Version, }) assert.Equal(t, codes.InvalidArgument, testutils.ErrorCode(err), testutils.ErrorDesc(err)) @@ -200,8 +201,8 @@ func TestUpdateConfig(t *testing.T) { assert.NotNil(t, config.Spec.Data) resp, err = ts.Client.UpdateConfig(context.Background(), &api.UpdateConfigRequest{ ConfigID: config.ID, - Spec: &config.Spec, - ConfigVersion: &config.Meta.Version, + Spec: config.Spec, + ConfigVersion: config.Meta.Version, }) assert.NoError(t, err) assert.NotNil(t, resp) @@ -213,8 +214,8 @@ func TestUpdateConfig(t *testing.T) { config.Spec.Data = nil resp, err = ts.Client.UpdateConfig(context.Background(), &api.UpdateConfigRequest{ ConfigID: config.ID, - Spec: &config.Spec, - ConfigVersion: &resp.Config.Meta.Version, + Spec: config.Spec, + ConfigVersion: resp.Config.Meta.Version, }) assert.NoError(t, err) assert.NotNil(t, resp) @@ -227,8 +228,8 @@ func TestUpdateConfig(t *testing.T) { config.Spec.Annotations.Name = "name" resp, err = ts.Client.UpdateConfig(context.Background(), &api.UpdateConfigRequest{ ConfigID: config.ID, - Spec: &config.Spec, - ConfigVersion: &resp.Config.Meta.Version, + Spec: config.Spec, + ConfigVersion: resp.Config.Meta.Version, }) assert.NoError(t, err) assert.NotNil(t, resp) @@ -255,7 +256,7 @@ func TestRemoveUnusedConfig(t *testing.T) { resp, err := ts.Client.RemoveConfig(context.Background(), &api.RemoveConfigRequest{ConfigID: config.ID}) assert.NoError(t, err) - assert.Equal(t, api.RemoveConfigResponse{}, *resp) + assert.True(t, proto.Equal(&api.RemoveConfigResponse{}, resp), "remove response should be empty") // ---- it was really removed because attempting to remove it again fails with a NotFound ---- _, err = ts.Client.RemoveConfig(context.Background(), &api.RemoveConfigRequest{ConfigID: config.ID}) diff --git a/manager/controlapi/extension.go b/manager/controlapi/extension.go index 32e3d4ac57..238bc3e2ce 100644 --- a/manager/controlapi/extension.go +++ b/manager/controlapi/extension.go @@ -24,7 +24,7 @@ func (s *Server) CreateExtension(ctx context.Context, request *api.CreateExtensi extension := &api.Extension{ ID: identity.NewID(), - Annotations: *request.Annotations, + Annotations: request.Annotations, Description: request.Description, } diff --git a/manager/controlapi/extension_test.go b/manager/controlapi/extension_test.go index 7da1a8e41d..5bae98b82b 100644 --- a/manager/controlapi/extension_test.go +++ b/manager/controlapi/extension_test.go @@ -6,6 +6,7 @@ import ( "github.com/stretchr/testify/assert" "google.golang.org/grpc/codes" + "google.golang.org/protobuf/proto" "github.com/moby/swarmkit/v2/api" "github.com/moby/swarmkit/v2/manager/state/store" @@ -115,7 +116,7 @@ func TestRemoveUnreferencedExtension(t *testing.T) { resp1, err := ts.Client.RemoveExtension(context.Background(), &api.RemoveExtensionRequest{ExtensionID: resp.Extension.ID}) assert.NoError(t, err) - assert.Equal(t, api.RemoveExtensionResponse{}, *resp1) + assert.True(t, proto.Equal(&api.RemoveExtensionResponse{}, resp1), "remove response should be empty") // ---- verify the extension was really removed because attempting to remove it again fails with a NotFound ---- _, err = ts.Client.RemoveExtension(context.Background(), &api.RemoveExtensionRequest{ExtensionID: resp.Extension.ID}) diff --git a/manager/controlapi/network.go b/manager/controlapi/network.go index ce485aea2a..a7366f7d4e 100644 --- a/manager/controlapi/network.go +++ b/manager/controlapi/network.go @@ -77,7 +77,7 @@ func (s *Server) validateNetworkSpec(spec *api.NetworkSpec) error { return status.Errorf(codes.InvalidArgument, "ingress network cannot be attachable") } - if err := validateAnnotations(spec.Annotations); err != nil { + if err := validateAnnotations(*spec.Annotations); err != nil { return err } @@ -111,7 +111,7 @@ func (s *Server) CreateNetwork(_ context.Context, request *api.CreateNetworkRequ // duplicate creations. See #65 n := &api.Network{ ID: identity.NewID(), - Spec: *request.Spec, + Spec: request.Spec, } err := s.store.Update(func(tx store.Tx) error { diff --git a/manager/controlapi/network_test.go b/manager/controlapi/network_test.go index aa427533e0..7cdfc68340 100644 --- a/manager/controlapi/network_test.go +++ b/manager/controlapi/network_test.go @@ -16,7 +16,7 @@ import ( func createNetworkSpec(name string) *api.NetworkSpec { return &api.NetworkSpec{ - Annotations: api.Annotations{ + Annotations: &api.Annotations{ Name: name, }, } @@ -33,7 +33,7 @@ func (s *Server) createInternalNetwork(ctx context.Context, request *api.CreateN // duplicate creations. See #65 n := &api.Network{ ID: identity.NewID(), - Spec: *request.Spec, + Spec: request.Spec, } err := s.store.Update(func(tx store.Tx) error { @@ -50,14 +50,14 @@ func (s *Server) createInternalNetwork(ctx context.Context, request *api.CreateN func createServiceInNetworkSpec(name, image string, nwid string, instances uint64) *api.ServiceSpec { return &api.ServiceSpec{ - Annotations: api.Annotations{ + Annotations: &api.Annotations{ Name: name, Labels: map[string]string{ "common": "yes", "unique": name, }, }, - Task: api.TaskSpec{ + Task: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{ Image: image, diff --git a/manager/controlapi/node.go b/manager/controlapi/node.go index 036e60329b..b9c1ea7d69 100644 --- a/manager/controlapi/node.go +++ b/manager/controlapi/node.go @@ -3,11 +3,12 @@ package controlapi import ( "context" "crypto/x509" + "time" "encoding/pem" - gogotypes "github.com/gogo/protobuf/types" "github.com/moby/swarmkit/v2/api" "github.com/moby/swarmkit/v2/manager/state/raft/membership" + "github.com/moby/swarmkit/v2/protobuf/ptypes" "github.com/moby/swarmkit/v2/manager/state/store" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" @@ -241,8 +242,8 @@ func (s *Server) UpdateNode(_ context.Context, request *api.UpdateNodeRequest) ( } } - node.Meta.Version = *request.NodeVersion - node.Spec = *request.Spec.Copy() + node.Meta.Version = request.NodeVersion + node.Spec = request.Spec.Copy() return store.UpdateNode(tx, node) }) if err != nil { @@ -274,9 +275,9 @@ func orphanNodeTasks(tx store.Tx, nodeID string) error { // // therefore, we restrict updating to only tasks in a non-terminal // state. Tasks in a terminal state do not need to be updated. - if task.Status.State < api.TaskStateCompleted { - task.Status = api.TaskStatus{ - Timestamp: gogotypes.TimestampNow(), + if task.Status.GetState() < api.TaskStateCompleted { + task.Status = &api.TaskStatus{ + Timestamp: ptypes.MustTimestampProto(time.Now()), State: api.TaskStateOrphaned, Message: "Task belonged to a node that has been deleted", } @@ -301,7 +302,7 @@ func (s *Server) RemoveNode(_ context.Context, request *api.RemoveNodeRequest) ( if node == nil { return status.Errorf(codes.NotFound, "node %s not found", request.NodeID) } - if node.Spec.DesiredRole == api.NodeRoleManager { + if node.GetSpec().GetDesiredRole() == api.NodeRoleManager { if s.raft == nil { return status.Errorf(codes.FailedPrecondition, "node %s is a manager but cannot access node information from the raft memberlist", request.NodeID) } @@ -309,7 +310,7 @@ func (s *Server) RemoveNode(_ context.Context, request *api.RemoveNodeRequest) ( return status.Errorf(codes.FailedPrecondition, "node %s is a cluster manager and is a member of the raft cluster. It must be demoted to worker before removal", request.NodeID) } } - if !request.Force && node.Status.State == api.NodeStatus_READY { + if !request.Force && node.GetStatus().GetState() == api.NodeStatus_READY { return status.Errorf(codes.FailedPrecondition, "node %s is not down and can't be removed", request.NodeID) } @@ -327,15 +328,12 @@ func (s *Server) RemoveNode(_ context.Context, request *api.RemoveNodeRequest) ( // Set an expiry time for this RemovedNode if a certificate // exists and can be parsed. - if len(node.Certificate.Certificate) != 0 { + if len(node.GetCertificate().GetCertificate()) != 0 { certBlock, _ := pem.Decode(node.Certificate.Certificate) if certBlock != nil { X509Cert, err := x509.ParseCertificate(certBlock.Bytes) if err == nil && !X509Cert.NotAfter.IsZero() { - expiry, err := gogotypes.TimestampProto(X509Cert.NotAfter) - if err == nil { - blacklistedCert.Expiry = expiry - } + blacklistedCert.Expiry = ptypes.MustTimestampProto(X509Cert.NotAfter) } } } diff --git a/manager/controlapi/node_test.go b/manager/controlapi/node_test.go index 795e3d8d76..0bca10fb31 100644 --- a/manager/controlapi/node_test.go +++ b/manager/controlapi/node_test.go @@ -22,10 +22,10 @@ import ( func createNode(t *testing.T, ts *testServer, id string, role api.NodeRole, membership api.NodeSpec_Membership, state api.NodeStatus_State) *api.Node { node := &api.Node{ ID: id, - Spec: api.NodeSpec{ + Spec: &api.NodeSpec{ Membership: membership, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: state, }, Role: role, @@ -161,8 +161,8 @@ func TestListNodesWithLabelFilter(t *testing.T) { nodes := make([]*api.Node, 3) nodes[0] = &api.Node{ ID: "node0", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Labels: map[string]string{ "allcommon": "node", "nodelabel1": "shouldmatch", @@ -183,8 +183,8 @@ func TestListNodesWithLabelFilter(t *testing.T) { nodes[1] = &api.Node{ ID: "node1", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Labels: map[string]string{ "allcommon": "node", "nodelabel1": "shouldmatch", @@ -204,8 +204,8 @@ func TestListNodesWithLabelFilter(t *testing.T) { } nodes[2] = &api.Node{ ID: "node2", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Labels: map[string]string{ "allcommon": "node", "nodelabel1": "shouldnevermatch", @@ -361,8 +361,8 @@ func TestRemoveNodes(t *testing.T) { ts.Store.Update(func(tx store.Tx) error { store.CreateCluster(tx, &api.Cluster{ ID: identity.NewID(), - Spec: api.ClusterSpec{ - Annotations: api.Annotations{ + Spec: &api.ClusterSpec{ + Annotations: &api.Annotations{ Name: store.DefaultClusterName, }, }, @@ -682,7 +682,7 @@ func TestUpdateNode(t *testing.T) { assert.NoError(t, nodes[1].MemoryStore().Update(func(tx store.Tx) error { assert.NoError(t, store.CreateNode(tx, &api.Node{ ID: nodes[1].SecurityConfig.ClientTLSCreds.NodeID(), - Spec: api.NodeSpec{ + Spec: &api.NodeSpec{ Membership: api.NodeMembershipAccepted, }, Role: api.NodeRoleManager, @@ -721,7 +721,7 @@ func TestUpdateNode(t *testing.T) { _, err = ts.Client.UpdateNode(context.Background(), &api.UpdateNodeRequest{ NodeID: nodeID, Spec: spec, - NodeVersion: &r.Node.Meta.Version, + NodeVersion: r.Node.Meta.Version, }) assert.NoError(t, err) @@ -734,12 +734,12 @@ func TestUpdateNode(t *testing.T) { assert.NotNil(t, r.Node.Spec) assert.Equal(t, api.NodeAvailabilityDrain, r.Node.Spec.Availability) - version := &r.Node.Meta.Version - _, err = ts.Client.UpdateNode(context.Background(), &api.UpdateNodeRequest{NodeID: nodeID, Spec: &r.Node.Spec, NodeVersion: version}) + version := r.Node.Meta.Version + _, err = ts.Client.UpdateNode(context.Background(), &api.UpdateNodeRequest{NodeID: nodeID, Spec: r.Node.Spec, NodeVersion: version}) assert.NoError(t, err) // Perform an update with the "old" version. - _, err = ts.Client.UpdateNode(context.Background(), &api.UpdateNodeRequest{NodeID: nodeID, Spec: &r.Node.Spec, NodeVersion: version}) + _, err = ts.Client.UpdateNode(context.Background(), &api.UpdateNodeRequest{NodeID: nodeID, Spec: r.Node.Spec, NodeVersion: version}) assert.Error(t, err) } @@ -760,7 +760,7 @@ func testUpdateNodeDemote(t *testing.T) { assert.NoError(t, nodes[1].MemoryStore().Update(func(tx store.Tx) error { assert.NoError(t, store.CreateNode(tx, &api.Node{ ID: nodes[1].SecurityConfig.ClientTLSCreds.NodeID(), - Spec: api.NodeSpec{ + Spec: &api.NodeSpec{ DesiredRole: api.NodeRoleManager, Membership: api.NodeMembershipAccepted, }, @@ -768,7 +768,7 @@ func testUpdateNodeDemote(t *testing.T) { })) assert.NoError(t, store.CreateNode(tx, &api.Node{ ID: nodes[2].SecurityConfig.ClientTLSCreds.NodeID(), - Spec: api.NodeSpec{ + Spec: &api.NodeSpec{ DesiredRole: api.NodeRoleManager, Membership: api.NodeMembershipAccepted, }, @@ -776,7 +776,7 @@ func testUpdateNodeDemote(t *testing.T) { })) assert.NoError(t, store.CreateNode(tx, &api.Node{ ID: nodes[3].SecurityConfig.ClientTLSCreds.NodeID(), - Spec: api.NodeSpec{ + Spec: &api.NodeSpec{ DesiredRole: api.NodeRoleManager, Membership: api.NodeMembershipAccepted, }, @@ -806,7 +806,7 @@ func testUpdateNodeDemote(t *testing.T) { assert.NoError(t, err) spec := r.Node.Spec.Copy() spec.DesiredRole = api.NodeRoleWorker - version := &r.Node.Meta.Version + version := r.Node.Meta.Version _, err = ts.Client.UpdateNode(context.Background(), &api.UpdateNodeRequest{ NodeID: nodes[2].SecurityConfig.ClientTLSCreds.NodeID(), Spec: spec, @@ -839,7 +839,7 @@ func testUpdateNodeDemote(t *testing.T) { assert.NoError(t, err) spec = r.Node.Spec.Copy() spec.DesiredRole = api.NodeRoleWorker - version = &r.Node.Meta.Version + version = r.Node.Meta.Version _, err = ts.Client.UpdateNode(context.Background(), &api.UpdateNodeRequest{ NodeID: nodes[3].SecurityConfig.ClientTLSCreds.NodeID(), Spec: spec, @@ -876,7 +876,7 @@ func testUpdateNodeDemote(t *testing.T) { assert.NoError(t, err) spec = r.Node.Spec.Copy() spec.DesiredRole = api.NodeRoleWorker - version = &r.Node.Meta.Version + version = r.Node.Meta.Version _, err = ts.Client.UpdateNode(context.Background(), &api.UpdateNodeRequest{ NodeID: demoteNode.SecurityConfig.ClientTLSCreds.NodeID(), Spec: spec, @@ -909,7 +909,7 @@ func testUpdateNodeDemote(t *testing.T) { assert.NoError(t, err) spec = r.Node.Spec.Copy() spec.DesiredRole = api.NodeRoleWorker - version = &r.Node.Meta.Version + version = r.Node.Meta.Version _, err = ts.Client.UpdateNode(context.Background(), &api.UpdateNodeRequest{ NodeID: lastNode.SecurityConfig.ClientTLSCreds.NodeID(), Spec: spec, @@ -923,7 +923,7 @@ func testUpdateNodeDemote(t *testing.T) { assert.NoError(t, err) spec = r.Node.Spec.Copy() spec.Availability = api.NodeAvailabilityDrain - version = &r.Node.Meta.Version + version = r.Node.Meta.Version _, err = ts.Client.UpdateNode(context.Background(), &api.UpdateNodeRequest{ NodeID: lastNode.SecurityConfig.ClientTLSCreds.NodeID(), Spec: spec, @@ -951,8 +951,8 @@ func TestOrphanNodeTasks(t *testing.T) { ts.Store.Update(func(tx store.Tx) error { store.CreateCluster(tx, &api.Cluster{ ID: identity.NewID(), - Spec: api.ClusterSpec{ - Annotations: api.Annotations{ + Spec: &api.ClusterSpec{ + Annotations: &api.Annotations{ Name: store.DefaultClusterName, }, }, @@ -982,8 +982,8 @@ func TestOrphanNodeTasks(t *testing.T) { err = ts.Store.Update(func(tx store.Tx) error { n := &api.Network{ ID: "net1id", - Spec: api.NetworkSpec{ - Annotations: api.Annotations{ + Spec: &api.NetworkSpec{ + Annotations: &api.Annotations{ Name: "net1name", }, Attachable: true, @@ -1000,10 +1000,10 @@ func TestOrphanNodeTasks(t *testing.T) { ID: "task1", NodeID: "id2", DesiredState: api.TaskStateRunning, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateRunning, }, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Runtime: &api.TaskSpec_Attachment{ Attachment: &api.NetworkAttachmentSpec{ ContainerID: "container1", @@ -1027,10 +1027,10 @@ func TestOrphanNodeTasks(t *testing.T) { ID: "task2", NodeID: "id1", DesiredState: api.TaskStateRunning, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateRunning, }, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Runtime: &api.TaskSpec_Attachment{ Attachment: &api.NetworkAttachmentSpec{ ContainerID: "container2", @@ -1054,10 +1054,10 @@ func TestOrphanNodeTasks(t *testing.T) { ID: "task3", NodeID: "id2", DesiredState: api.TaskStateRunning, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateRunning, }, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{}, }, @@ -1072,10 +1072,10 @@ func TestOrphanNodeTasks(t *testing.T) { ID: "task4", NodeID: "id1", DesiredState: api.TaskStateRunning, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateRunning, }, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{}, }, @@ -1091,12 +1091,12 @@ func TestOrphanNodeTasks(t *testing.T) { ID: "task5", NodeID: "id2", DesiredState: api.TaskStateRunning, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ // use TaskStateCompleted, as this is the earliest terminal // state (this ensures we don't actually use <= instead of <) State: api.TaskStateCompleted, }, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{}, }, diff --git a/manager/controlapi/resource.go b/manager/controlapi/resource.go index 37e930ac94..f4ee37381d 100644 --- a/manager/controlapi/resource.go +++ b/manager/controlapi/resource.go @@ -30,7 +30,7 @@ func (s *Server) CreateResource(ctx context.Context, request *api.CreateResource } r := &api.Resource{ ID: identity.NewID(), - Annotations: *request.Annotations, + Annotations: request.Annotations, Kind: request.Kind, Payload: request.Payload, } @@ -202,9 +202,9 @@ func (s *Server) UpdateResource(_ context.Context, request *api.UpdateResourceRe if r.Annotations.Name != request.Annotations.Name { return status.Errorf(codes.InvalidArgument, "cannot change resource name") } - r.Annotations = *request.Annotations + r.Annotations = request.Annotations } - r.Meta.Version = *request.ResourceVersion + r.Meta.Version = request.ResourceVersion // only alter the payload if the if request.Payload != nil { r.Payload = request.Payload diff --git a/manager/controlapi/resource_test.go b/manager/controlapi/resource_test.go index 0ea74f08ae..d6ca777931 100644 --- a/manager/controlapi/resource_test.go +++ b/manager/controlapi/resource_test.go @@ -4,11 +4,11 @@ import ( "context" "fmt" "testing" - - gogotypes "github.com/gogo/protobuf/types" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "google.golang.org/grpc/codes" + "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/types/known/anypb" "github.com/moby/swarmkit/v2/api" "github.com/moby/swarmkit/v2/manager/state/store" @@ -35,7 +35,7 @@ func prepResource(t *testing.T, ts *testServer) *api.Resource { Name: "SomeName", Labels: map[string]string{"some": "label"}, } - anyMsg, err := gogotypes.MarshalAny(anyContent) + anyMsg, err := anypb.New(anyContent) require.NoError(t, err) // first, create a valid resource, to ensure that that works @@ -77,7 +77,7 @@ func TestCreateResource(t *testing.T) { Name: "ValidResource", }, Kind: testExtName, - Payload: &gogotypes.Any{}, + Payload: &anypb.Any{}, } resp, err := ts.Client.CreateResource(context.Background(), req) @@ -132,7 +132,7 @@ func TestCreateResource(t *testing.T) { Name: "ValidResource", }, Kind: testExtName, - Payload: &gogotypes.Any{}, + Payload: &anypb.Any{}, }, code: codes.AlreadyExists, }, @@ -168,14 +168,14 @@ func TestUpdateResourceValid(t *testing.T) { newContent := &api.Annotations{ Name: "SomeNewName", } - newMsg, err := gogotypes.MarshalAny(newContent) + newMsg, err := anypb.New(newContent) require.NoError(t, err) - r.Annotations = *newAnnotations + r.Annotations = newAnnotations r.Payload = newMsg return &api.UpdateResourceRequest{ ResourceID: resourceID, - ResourceVersion: &r.Meta.Version, + ResourceVersion: r.Meta.Version, Annotations: newAnnotations, Payload: newMsg, } @@ -186,8 +186,8 @@ func TestUpdateResourceValid(t *testing.T) { r.Annotations.Labels = map[string]string{"onlyUpdating": "theseLabels"} return &api.UpdateResourceRequest{ ResourceID: r.ID, - ResourceVersion: &r.Meta.Version, - Annotations: &r.Annotations, + ResourceVersion: r.Meta.Version, + Annotations: r.Annotations, } }, }, { @@ -196,12 +196,12 @@ func TestUpdateResourceValid(t *testing.T) { newContent := &api.Annotations{ Name: "OnlyUpdatingPayload", } - newMsg, err := gogotypes.MarshalAny(newContent) + newMsg, err := anypb.New(newContent) require.NoError(t, err) r.Payload = newMsg return &api.UpdateResourceRequest{ ResourceID: resourceID, - ResourceVersion: &r.Meta.Version, + ResourceVersion: r.Meta.Version, Payload: newMsg, } }, @@ -218,8 +218,8 @@ func TestUpdateResourceValid(t *testing.T) { require.NoError(t, err) require.NotNil(t, resp) require.NotNil(t, resp.Resource) - assert.Equal(t, resp.Resource.Payload, r.Payload) - assert.Equal(t, resp.Resource.Annotations, r.Annotations) + assert.True(t, proto.Equal(resp.Resource.Payload, r.Payload), "payload should be equal") + assert.True(t, proto.Equal(resp.Resource.Annotations, r.Annotations), "annotations should be equal") assert.Equal(t, resp.Resource.Kind, testExtName) }) } @@ -240,7 +240,7 @@ func TestUpdateResourceInvalid(t *testing.T) { name: "MissingID", req: &api.UpdateResourceRequest{ ResourceID: "", - ResourceVersion: &resource.Meta.Version, + ResourceVersion: resource.Meta.Version, }, code: codes.InvalidArgument, }, { @@ -253,7 +253,7 @@ func TestUpdateResourceInvalid(t *testing.T) { name: "NotFound", req: &api.UpdateResourceRequest{ ResourceID: "notreal", - ResourceVersion: &resource.Meta.Version, + ResourceVersion: resource.Meta.Version, }, code: codes.NotFound, }, { @@ -267,7 +267,7 @@ func TestUpdateResourceInvalid(t *testing.T) { name: "ChangedName", req: &api.UpdateResourceRequest{ ResourceID: resource.ID, - ResourceVersion: &resource.Meta.Version, + ResourceVersion: resource.Meta.Version, Annotations: &api.Annotations{ Name: "different", }, diff --git a/manager/controlapi/secret.go b/manager/controlapi/secret.go index 9a1bb0e5f2..4ecd175647 100644 --- a/manager/controlapi/secret.go +++ b/manager/controlapi/secret.go @@ -18,7 +18,7 @@ import ( func secretFromSecretSpec(spec *api.SecretSpec) *api.Secret { return &api.Secret{ ID: identity.NewID(), - Spec: *spec, + Spec: spec, } } @@ -68,7 +68,7 @@ func (s *Server) UpdateSecret(ctx context.Context, request *api.UpdateSecretRequ } // We only allow updating Labels - secret.Meta.Version = *request.SecretVersion + secret.Meta.Version = request.SecretVersion secret.Spec.Annotations.Labels = request.Spec.Annotations.Labels return store.UpdateSecret(tx, secret) @@ -244,7 +244,7 @@ func validateSecretSpec(spec *api.SecretSpec) error { if spec == nil { return status.Error(codes.InvalidArgument, errInvalidArgument.Error()) } - if err := validateConfigOrSecretAnnotations(spec.Annotations); err != nil { + if err := validateConfigOrSecretAnnotations(*spec.Annotations); err != nil { return err } // Check if secret driver is defined diff --git a/manager/controlapi/secret_test.go b/manager/controlapi/secret_test.go index 12d927fe33..f45875dffd 100644 --- a/manager/controlapi/secret_test.go +++ b/manager/controlapi/secret_test.go @@ -11,11 +11,12 @@ import ( "github.com/moby/swarmkit/v2/testutils" "github.com/stretchr/testify/assert" "google.golang.org/grpc/codes" + "google.golang.org/protobuf/proto" ) func createSecretSpec(name string, data []byte, labels map[string]string) *api.SecretSpec { return &api.SecretSpec{ - Annotations: api.Annotations{Name: name, Labels: labels}, + Annotations: &api.Annotations{Name: name, Labels: labels}, Data: data, } } @@ -122,7 +123,7 @@ func TestCreateSecret(t *testing.T) { assert.NotNil(t, resp.Secret) // the data should be empty/omitted - assert.Equal(t, *createSecretSpec("name", nil, nil), resp.Secret.Spec) + assert.True(t, proto.Equal(createSecretSpec("name", nil, nil), resp.Secret.Spec), "secret spec should match (data omitted)") // for sanity, check that the stored secret still has the secret data var storedSecret *api.Secret @@ -165,9 +166,9 @@ func TestGetSecret(t *testing.T) { assert.NotNil(t, resp.Secret) // the data should be empty/omitted - assert.NotEqual(t, secret, resp.Secret) + assert.False(t, proto.Equal(secret, resp.Secret), "secret with data should not equal response (data omitted)") secret.Spec.Data = nil - assert.Equal(t, secret, resp.Secret) + assert.True(t, proto.Equal(secret, resp.Secret), "secret without data should equal response") } func TestUpdateSecret(t *testing.T) { @@ -195,8 +196,8 @@ func TestUpdateSecret(t *testing.T) { secret.Spec.Data = []byte{1} resp, err := ts.Client.UpdateSecret(context.Background(), &api.UpdateSecretRequest{ SecretID: secret.ID, - Spec: &secret.Spec, - SecretVersion: &secret.Meta.Version, + Spec: secret.Spec, + SecretVersion: secret.Meta.Version, }) assert.Equal(t, codes.InvalidArgument, testutils.ErrorCode(err), testutils.ErrorDesc(err)) @@ -205,8 +206,8 @@ func TestUpdateSecret(t *testing.T) { secret.Spec.Annotations.Name = "AnotherName" resp, err = ts.Client.UpdateSecret(context.Background(), &api.UpdateSecretRequest{ SecretID: secret.ID, - Spec: &secret.Spec, - SecretVersion: &secret.Meta.Version, + Spec: secret.Spec, + SecretVersion: secret.Meta.Version, }) assert.Equal(t, codes.InvalidArgument, testutils.ErrorCode(err), testutils.ErrorDesc(err)) @@ -216,8 +217,8 @@ func TestUpdateSecret(t *testing.T) { assert.NotNil(t, secret.Spec.Data) resp, err = ts.Client.UpdateSecret(context.Background(), &api.UpdateSecretRequest{ SecretID: secret.ID, - Spec: &secret.Spec, - SecretVersion: &secret.Meta.Version, + Spec: secret.Spec, + SecretVersion: secret.Meta.Version, }) assert.NoError(t, err) assert.NotNil(t, resp) @@ -229,8 +230,8 @@ func TestUpdateSecret(t *testing.T) { secret.Spec.Data = nil resp, err = ts.Client.UpdateSecret(context.Background(), &api.UpdateSecretRequest{ SecretID: secret.ID, - Spec: &secret.Spec, - SecretVersion: &resp.Secret.Meta.Version, + Spec: secret.Spec, + SecretVersion: resp.Secret.Meta.Version, }) assert.NoError(t, err) assert.NotNil(t, resp) @@ -243,8 +244,8 @@ func TestUpdateSecret(t *testing.T) { secret.Spec.Annotations.Name = "name" resp, err = ts.Client.UpdateSecret(context.Background(), &api.UpdateSecretRequest{ SecretID: secret.ID, - Spec: &secret.Spec, - SecretVersion: &resp.Secret.Meta.Version, + Spec: secret.Spec, + SecretVersion: resp.Secret.Meta.Version, }) assert.NoError(t, err) assert.NotNil(t, resp) @@ -271,7 +272,7 @@ func TestRemoveUnusedSecret(t *testing.T) { resp, err := ts.Client.RemoveSecret(context.Background(), &api.RemoveSecretRequest{SecretID: secret.ID}) assert.NoError(t, err) - assert.Equal(t, api.RemoveSecretResponse{}, *resp) + assert.True(t, proto.Equal(&api.RemoveSecretResponse{}, resp), "remove response should be empty") // ---- it was really removed because attempting to remove it again fails with a NotFound ---- _, err = ts.Client.RemoveSecret(context.Background(), &api.RemoveSecretRequest{SecretID: secret.ID}) diff --git a/manager/controlapi/server_test.go b/manager/controlapi/server_test.go index 0d0cd26c7e..c382ff27d1 100644 --- a/manager/controlapi/server_test.go +++ b/manager/controlapi/server_test.go @@ -82,7 +82,7 @@ func newTestServer(t *testing.T) *testServer { &api.CreateNetworkRequest{ Spec: &api.NetworkSpec{ Ingress: true, - Annotations: api.Annotations{ + Annotations: &api.Annotations{ Name: "test-ingress", }, }, diff --git a/manager/controlapi/service.go b/manager/controlapi/service.go index 013be7dc57..2166490ef4 100644 --- a/manager/controlapi/service.go +++ b/manager/controlapi/service.go @@ -8,7 +8,6 @@ import ( "time" "github.com/distribution/reference" - gogotypes "github.com/gogo/protobuf/types" "github.com/moby/swarmkit/v2/api" "github.com/moby/swarmkit/v2/api/defaults" "github.com/moby/swarmkit/v2/api/genericresource" @@ -65,20 +64,14 @@ func validateRestartPolicy(rp *api.RestartPolicy) error { } if rp.Delay != nil { - delay, err := gogotypes.DurationFromProto(rp.Delay) - if err != nil { - return err - } + delay := rp.Delay.AsDuration() if delay < 0 { return status.Errorf(codes.InvalidArgument, "TaskSpec: restart-delay cannot be negative") } } if rp.Window != nil { - win, err := gogotypes.DurationFromProto(rp.Window) - if err != nil { - return err - } + win := rp.Window.AsDuration() if win < 0 { return status.Errorf(codes.InvalidArgument, "TaskSpec: restart-window cannot be negative") } @@ -100,15 +93,12 @@ func validateUpdate(uc *api.UpdateConfig) error { return nil } - if uc.Delay < 0 { + if uc.Delay.AsDuration() < 0 { return status.Errorf(codes.InvalidArgument, "TaskSpec: update-delay cannot be negative") } if uc.Monitor != nil { - monitor, err := gogotypes.DurationFromProto(uc.Monitor) - if err != nil { - return err - } + monitor := uc.Monitor.AsDuration() if monitor < 0 { return status.Errorf(codes.InvalidArgument, "TaskSpec: update-monitor cannot be negative") } @@ -132,15 +122,15 @@ func validateContainerSpec(taskSpec api.TaskSpec) error { Architecture: "architecture", }, }, &api.Task{ - Spec: taskSpec, + Spec: &taskSpec, ServiceID: "serviceid", Slot: 1, NodeID: "nodeid", Networks: []*api.NetworkAttachment{}, - Annotations: api.Annotations{ + Annotations: &api.Annotations{ Name: "taskname", }, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "servicename", }, Endpoint: &api.Endpoint{}, @@ -174,7 +164,7 @@ func validateImage(image string) error { } // validateMounts validates if there are duplicate mounts in containerSpec -func validateMounts(mounts []api.Mount) error { +func validateMounts(mounts []*api.Mount) error { mountMap := make(map[string]bool) for _, mount := range mounts { if _, exists := mountMap[mount.Target]; exists { @@ -193,40 +183,28 @@ func validateHealthCheck(hc *api.HealthConfig) error { } if hc.Interval != nil { - interval, err := gogotypes.DurationFromProto(hc.Interval) - if err != nil { - return err - } + interval := hc.Interval.AsDuration() if interval != 0 && interval < minimumDuration { return status.Errorf(codes.InvalidArgument, "ContainerSpec: Interval in HealthConfig cannot be less than %s", minimumDuration) } } if hc.Timeout != nil { - timeout, err := gogotypes.DurationFromProto(hc.Timeout) - if err != nil { - return err - } + timeout := hc.Timeout.AsDuration() if timeout != 0 && timeout < minimumDuration { return status.Errorf(codes.InvalidArgument, "ContainerSpec: Timeout in HealthConfig cannot be less than %s", minimumDuration) } } if hc.StartPeriod != nil { - sp, err := gogotypes.DurationFromProto(hc.StartPeriod) - if err != nil { - return err - } + sp := hc.StartPeriod.AsDuration() if sp != 0 && sp < minimumDuration { return status.Errorf(codes.InvalidArgument, "ContainerSpec: StartPeriod in HealthConfig cannot be less than %s", minimumDuration) } } if hc.StartInterval != nil { - interval, err := gogotypes.DurationFromProto(hc.StartInterval) - if err != nil { - return err - } + interval := hc.StartInterval.AsDuration() if interval != 0 && interval < minimumDuration { return status.Errorf(codes.InvalidArgument, "ContainerSpec: StartInterval in HealthConfig cannot be less than %s", minimumDuration) } @@ -528,11 +506,23 @@ func validateServiceSpec(spec *api.ServiceSpec) error { if spec == nil { return status.Error(codes.InvalidArgument, errInvalidArgument.Error()) } - if err := validateAnnotations(spec.Annotations); err != nil { - return err + if spec.Annotations != nil { + if err := validateAnnotations(*spec.Annotations); err != nil { + return err + } + } else { + if err := validateAnnotations(api.Annotations{}); err != nil { + return err + } } - if err := validateTaskSpec(spec.Task); err != nil { - return err + if spec.Task != nil { + if err := validateTaskSpec(*spec.Task); err != nil { + return err + } + } else { + if err := validateTaskSpec(api.TaskSpec{}); err != nil { + return err + } } err := validateMode(spec) if err != nil { @@ -741,13 +731,14 @@ func (s *Server) CreateService(_ context.Context, request *api.CreateServiceRequ // duplicate creations. See #65 service := &api.Service{ ID: identity.NewID(), - Spec: *request.Spec, + Spec: request.Spec, SpecVersion: &api.Version{}, } if isJobSpec(request.Spec) { service.JobStatus = &api.JobStatus{ - LastExecution: gogotypes.TimestampNow(), + LastExecution: ptypes.MustTimestampProto(time.Now()), + JobIteration: &api.Version{Index: 0}, } } @@ -801,7 +792,7 @@ func (s *Server) GetService(_ context.Context, request *api.GetServiceRequest) ( } if request.InsertDefaults { - service.Spec = *defaults.InterpolateService(&service.Spec) + service.Spec = defaults.InterpolateService(service.Spec) } return &api.GetServiceResponse{ @@ -879,13 +870,16 @@ func (s *Server) UpdateService(_ context.Context, request *api.UpdateServiceRequ return status.Error(codes.Unimplemented, errRenameNotSupported.Error()) } - service.Meta.Version = *request.ServiceVersion + service.Meta.Version = request.ServiceVersion // if the service has a JobStatus, that means it must be a Job, and we // should increment the JobIteration if service.JobStatus != nil { + if service.JobStatus.JobIteration == nil { + service.JobStatus.JobIteration = &api.Version{} + } service.JobStatus.JobIteration.Index = service.JobStatus.JobIteration.Index + 1 - service.JobStatus.LastExecution = gogotypes.TimestampNow() + service.JobStatus.LastExecution = ptypes.MustTimestampProto(time.Now()) } if request.Rollback == api.UpdateServiceRequest_PREVIOUS { @@ -895,7 +889,7 @@ func (s *Server) UpdateService(_ context.Context, request *api.UpdateServiceRequ curSpec := service.Spec.Copy() curSpecVersion := service.SpecVersion - service.Spec = *service.PreviousSpec.Copy() + service.Spec = service.PreviousSpec.Copy() service.SpecVersion = service.PreviousSpecVersion.Copy() service.PreviousSpec = curSpec service.PreviousSpecVersion = curSpecVersion @@ -908,7 +902,7 @@ func (s *Server) UpdateService(_ context.Context, request *api.UpdateServiceRequ } else { service.PreviousSpec = service.Spec.Copy() service.PreviousSpecVersion = service.SpecVersion - service.Spec = *request.Spec.Copy() + service.Spec = request.Spec.Copy() // Set spec version. Note that this will not match the // service's Meta.Version after the store update. The // versions for the spec and the service itself are not @@ -1090,7 +1084,7 @@ func (s *Server) ListServiceStatuses(_ context.Context, req *api.ListServiceStat } if service.JobStatus != nil { - jobIteration = &service.JobStatus.JobIteration + jobIteration = service.JobStatus.JobIteration } } @@ -1108,11 +1102,11 @@ func (s *Server) ListServiceStatuses(_ context.Context, req *api.ListServiceStat // additionally, since we've verified that the service is a // job and the task belongs to this iteration, we should // increment CompletedTasks - if task.Status.State == api.TaskStateCompleted { + if task.GetStatus().GetState() == api.TaskStateCompleted { status.CompletedTasks++ } } - if task.Status.State == api.TaskStateRunning { + if task.GetStatus().GetState() == api.TaskStateRunning { status.RunningTasks++ } @@ -1125,7 +1119,7 @@ func (s *Server) ListServiceStatuses(_ context.Context, req *api.ListServiceStat // for jobs, this is any task with desired state Completed // which is not actually in that state. - if global && task.Status.State != api.TaskStateCompleted && task.DesiredState == api.TaskStateCompleted { + if global && task.GetStatus().GetState() != api.TaskStateCompleted && task.DesiredState == api.TaskStateCompleted { status.DesiredTasks++ } } diff --git a/manager/controlapi/service_test.go b/manager/controlapi/service_test.go index b3b92ddb8a..deb8f62943 100644 --- a/manager/controlapi/service_test.go +++ b/manager/controlapi/service_test.go @@ -3,13 +3,14 @@ package controlapi import ( "context" "fmt" - "reflect" "strings" "testing" "time" - - gogotypes "github.com/gogo/protobuf/types" "github.com/moby/swarmkit/v2/api" + "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/types/known/anypb" + "google.golang.org/protobuf/types/known/durationpb" + "google.golang.org/protobuf/types/known/timestamppb" "github.com/moby/swarmkit/v2/identity" "github.com/moby/swarmkit/v2/manager/state/store" "github.com/moby/swarmkit/v2/testutils" @@ -23,7 +24,7 @@ func createGenericSpec(name, runtime string) *api.ServiceSpec { spec.Task.Runtime = &api.TaskSpec_Generic{ Generic: &api.GenericRuntimeSpec{ Kind: runtime, - Payload: &gogotypes.Any{ + Payload: &anypb.Any{ TypeUrl: "com.docker.custom.runtime", Value: []byte{0}, }, @@ -34,14 +35,14 @@ func createGenericSpec(name, runtime string) *api.ServiceSpec { func createSpec(name, image string, instances uint64) *api.ServiceSpec { return &api.ServiceSpec{ - Annotations: api.Annotations{ + Annotations: &api.Annotations{ Name: name, Labels: map[string]string{ "common": "yes", "unique": name, }, }, - Task: api.TaskSpec{ + Task: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{ Image: image, @@ -58,7 +59,7 @@ func createSpec(name, image string, instances uint64) *api.ServiceSpec { func createSpecWithDuplicateMounts(name string) *api.ServiceSpec { service := createSpec("", "image", 1) - mounts := []api.Mount{ + mounts := []*api.Mount{ { Target: "/foo", Source: "/mnt/mount1", @@ -84,7 +85,7 @@ func createSecret(t *testing.T, ts *testServer, secretName, target string) *api. secretSpec := createSecretSpec(secretName, []byte(secretName), nil) secret := &api.Secret{ ID: fmt.Sprintf("ID%v", secretName), - Spec: *secretSpec, + Spec: secretSpec, } err := ts.Store.Update(func(tx store.Tx) error { return store.CreateSecret(tx, secret) @@ -116,7 +117,7 @@ func createConfig(t *testing.T, ts *testServer, configName, target string) *api. configSpec := createConfigSpec(configName, []byte(configName), nil) config := &api.Config{ ID: fmt.Sprintf("ID%v", configName), - Spec: *configSpec, + Spec: configSpec, } err := ts.Store.Update(func(tx store.Tx) error { return store.CreateConfig(tx, config) @@ -271,27 +272,27 @@ func TestValidateTaskSpec(t *testing.T) { c: codes.Unimplemented, }, { - s: createSpec("", "", 0).Task, + s: *createSpec("", "", 0).Task, c: codes.InvalidArgument, }, { - s: createSpec("", "busybox###", 0).Task, + s: *createSpec("", "busybox###", 0).Task, c: codes.InvalidArgument, }, { - s: createGenericSpec("name", "").Task, + s: *createGenericSpec("name", "").Task, c: codes.InvalidArgument, }, { - s: createGenericSpec("name", "c").Task, + s: *createGenericSpec("name", "c").Task, c: codes.InvalidArgument, }, { - s: createSpecWithDuplicateMounts("test").Task, + s: *createSpecWithDuplicateMounts("test").Task, c: codes.InvalidArgument, }, { - s: createSpecWithHostnameTemplate("", "{{.Nothing.here}}").Task, + s: *createSpecWithHostnameTemplate("", "{{.Nothing.here}}").Task, c: codes.InvalidArgument, }, } { @@ -301,9 +302,9 @@ func TestValidateTaskSpec(t *testing.T) { } for _, good := range []api.TaskSpec{ - createSpec("", "image", 0).Task, - createGenericSpec("", "custom").Task, - createSpecWithHostnameTemplate("service", "{{.Service.Name}}-{{.Task.Slot}}").Task, + *createSpec("", "image", 0).Task, + *createGenericSpec("", "custom").Task, + *createSpecWithHostnameTemplate("service", "{{.Service.Name}}-{{.Task.Slot}}").Task, } { err := validateTaskSpec(good) assert.NoError(t, err) @@ -316,7 +317,7 @@ func TestValidateContainerSpec(t *testing.T) { c codes.Code } - bad1 := api.TaskSpec{ + bad1 := &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{ Image: "", // image name should not be empty @@ -324,18 +325,18 @@ func TestValidateContainerSpec(t *testing.T) { }, } - bad2 := api.TaskSpec{ + bad2 := &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{ Image: "image", - Mounts: []api.Mount{ + Mounts: []*api.Mount{ { - Type: api.Mount_MountType(0), + Type: api.MountType(0), Source: "/data", Target: "/data", }, { - Type: api.Mount_MountType(0), + Type: api.MountType(0), Source: "/data2", Target: "/data", // duplicate mount point }, @@ -344,17 +345,17 @@ func TestValidateContainerSpec(t *testing.T) { }, } - bad3 := api.TaskSpec{ + bad3 := &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{ Image: "image", Healthcheck: &api.HealthConfig{ Test: []string{"curl 127.0.0.1:3000"}, - Interval: gogotypes.DurationProto(time.Duration(-1 * time.Second)), // invalid negative duration - Timeout: gogotypes.DurationProto(time.Duration(-1 * time.Second)), // invalid negative duration + Interval: durationpb.New(time.Duration(-1 * time.Second)), // invalid negative duration + Timeout: durationpb.New(time.Duration(-1 * time.Second)), // invalid negative duration Retries: -1, // invalid negative integer - StartPeriod: gogotypes.DurationProto(time.Duration(-1 * time.Second)), // invalid negative duration - StartInterval: gogotypes.DurationProto(time.Duration(-1 * time.Second)), // invalid negative duration + StartPeriod: durationpb.New(time.Duration(-1 * time.Second)), // invalid negative duration + StartInterval: durationpb.New(time.Duration(-1 * time.Second)), // invalid negative duration }, }, }, @@ -362,15 +363,15 @@ func TestValidateContainerSpec(t *testing.T) { for _, bad := range []BadSpec{ { - spec: bad1, + spec: *bad1, c: codes.InvalidArgument, }, { - spec: bad2, + spec: *bad2, c: codes.InvalidArgument, }, { - spec: bad3, + spec: *bad3, c: codes.InvalidArgument, }, } { @@ -379,35 +380,35 @@ func TestValidateContainerSpec(t *testing.T) { assert.Equal(t, bad.c, testutils.ErrorCode(err), testutils.ErrorDesc(err)) } - good1 := api.TaskSpec{ + good1 := &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{ Image: "image", - Mounts: []api.Mount{ + Mounts: []*api.Mount{ { - Type: api.Mount_MountType(0), + Type: api.MountType(0), Source: "/data", Target: "/data", }, { - Type: api.Mount_MountType(0), + Type: api.MountType(0), Source: "/data2", Target: "/data2", }, }, Healthcheck: &api.HealthConfig{ Test: []string{"curl 127.0.0.1:3000"}, - Interval: gogotypes.DurationProto(time.Duration(1 * time.Second)), - Timeout: gogotypes.DurationProto(time.Duration(3 * time.Second)), + Interval: durationpb.New(time.Duration(1 * time.Second)), + Timeout: durationpb.New(time.Duration(3 * time.Second)), Retries: 5, - StartPeriod: gogotypes.DurationProto(time.Duration(1 * time.Second)), - StartInterval: gogotypes.DurationProto(time.Duration(1 * time.Second)), + StartPeriod: durationpb.New(time.Duration(1 * time.Second)), + StartInterval: durationpb.New(time.Duration(1 * time.Second)), }, }, }, } - for _, good := range []api.TaskSpec{good1} { + for _, good := range []api.TaskSpec{*good1} { err := validateContainerSpec(good) assert.NoError(t, err) } @@ -425,7 +426,7 @@ func TestValidateServiceSpec(t *testing.T) { c: codes.InvalidArgument, }, { - spec: &api.ServiceSpec{Annotations: api.Annotations{Name: "name"}}, + spec: &api.ServiceSpec{Annotations: &api.Annotations{Name: "name"}}, c: codes.InvalidArgument, }, { @@ -499,13 +500,13 @@ func TestValidateServiceSpecJobsDifference(t *testing.T) { // be verified for correctness replicatedServiceBrokenUpdate := cannedSpec.Copy() replicatedServiceBrokenUpdate.Update = &api.UpdateConfig{ - Delay: -1 * time.Second, + Delay: durationpb.New(-1 * time.Second), } err = validateServiceSpec(replicatedServiceBrokenUpdate) assert.Error(t, err) replicatedServiceCorrectUpdate := replicatedServiceBrokenUpdate.Copy() - replicatedServiceCorrectUpdate.Update.Delay = time.Second + replicatedServiceCorrectUpdate.Update.Delay = durationpb.New(time.Second) err = validateServiceSpec(replicatedServiceCorrectUpdate) assert.NoError(t, err) @@ -519,26 +520,26 @@ func TestValidateServiceSpecJobsDifference(t *testing.T) { assert.Error(t, err) globalServiceCorrectUpdate := globalServiceBrokenUpdate.Copy() - globalServiceCorrectUpdate.Update.Delay = time.Second + globalServiceCorrectUpdate.Update.Delay = durationpb.New(time.Second) err = validateServiceSpec(globalServiceCorrectUpdate) } func TestValidateRestartPolicy(t *testing.T) { bad := []*api.RestartPolicy{ { - Delay: gogotypes.DurationProto(time.Duration(-1 * time.Second)), - Window: gogotypes.DurationProto(time.Duration(-1 * time.Second)), + Delay: durationpb.New(time.Duration(-1 * time.Second)), + Window: durationpb.New(time.Duration(-1 * time.Second)), }, { - Delay: gogotypes.DurationProto(time.Duration(20 * time.Second)), - Window: gogotypes.DurationProto(time.Duration(-4 * time.Second)), + Delay: durationpb.New(time.Duration(20 * time.Second)), + Window: durationpb.New(time.Duration(-4 * time.Second)), }, } good := []*api.RestartPolicy{ { - Delay: gogotypes.DurationProto(time.Duration(10 * time.Second)), - Window: gogotypes.DurationProto(time.Duration(1 * time.Second)), + Delay: durationpb.New(time.Duration(10 * time.Second)), + Window: durationpb.New(time.Duration(1 * time.Second)), }, } @@ -555,17 +556,17 @@ func TestValidateRestartPolicy(t *testing.T) { func TestValidateUpdate(t *testing.T) { bad := []*api.UpdateConfig{ - {Delay: -1 * time.Second}, - {Delay: -1000 * time.Second}, - {Monitor: gogotypes.DurationProto(time.Duration(-1 * time.Second))}, - {Monitor: gogotypes.DurationProto(time.Duration(-1000 * time.Second))}, + {Delay: durationpb.New(-1 * time.Second)}, + {Delay: durationpb.New(-1000 * time.Second)}, + {Monitor: durationpb.New(time.Duration(-1 * time.Second))}, + {Monitor: durationpb.New(time.Duration(-1000 * time.Second))}, {MaxFailureRatio: -0.1}, {MaxFailureRatio: 1.1}, } good := []*api.UpdateConfig{ - {Delay: time.Second}, - {Monitor: gogotypes.DurationProto(time.Duration(time.Second))}, + {Delay: durationpb.New(time.Second)}, + {Monitor: durationpb.New(time.Duration(time.Second))}, {MaxFailureRatio: 0.5}, } @@ -788,7 +789,7 @@ func TestSecretValidation(t *testing.T) { _, err = ts.Client.UpdateService(context.Background(), &api.UpdateServiceRequest{ ServiceID: rs.Service.ID, Spec: serviceSpec1, - ServiceVersion: &rs.Service.Meta.Version, + ServiceVersion: rs.Service.Meta.Version, }) assert.Equal(t, codes.InvalidArgument, testutils.ErrorCode(err)) } @@ -896,7 +897,7 @@ func TestConfigValidation(t *testing.T) { _, err = ts.Client.UpdateService(context.Background(), &api.UpdateServiceRequest{ ServiceID: rs.Service.ID, Spec: serviceSpec1, - ServiceVersion: &rs.Service.Meta.Version, + ServiceVersion: rs.Service.Meta.Version, }) assert.Equal(t, codes.InvalidArgument, testutils.ErrorCode(err)) } @@ -928,16 +929,16 @@ func TestUpdateService(t *testing.T) { assert.Error(t, err) assert.Equal(t, codes.InvalidArgument, testutils.ErrorCode(err)) - _, err = ts.Client.UpdateService(context.Background(), &api.UpdateServiceRequest{ServiceID: "invalid", Spec: &service.Spec, ServiceVersion: &api.Version{}}) + _, err = ts.Client.UpdateService(context.Background(), &api.UpdateServiceRequest{ServiceID: "invalid", Spec: service.Spec, ServiceVersion: &api.Version{}}) assert.Error(t, err) assert.Equal(t, codes.NotFound, testutils.ErrorCode(err)) // No update options. - _, err = ts.Client.UpdateService(context.Background(), &api.UpdateServiceRequest{ServiceID: service.ID, Spec: &service.Spec}) + _, err = ts.Client.UpdateService(context.Background(), &api.UpdateServiceRequest{ServiceID: service.ID, Spec: service.Spec}) assert.Error(t, err) assert.Equal(t, codes.InvalidArgument, testutils.ErrorCode(err)) - _, err = ts.Client.UpdateService(context.Background(), &api.UpdateServiceRequest{ServiceID: service.ID, Spec: &service.Spec, ServiceVersion: &service.Meta.Version}) + _, err = ts.Client.UpdateService(context.Background(), &api.UpdateServiceRequest{ServiceID: service.ID, Spec: service.Spec, ServiceVersion: service.Meta.Version}) assert.NoError(t, err) r, err := ts.Client.GetService(context.Background(), &api.GetServiceRequest{ServiceID: service.ID}) @@ -950,8 +951,8 @@ func TestUpdateService(t *testing.T) { mode.Replicated.Replicas = 42 _, err = ts.Client.UpdateService(context.Background(), &api.UpdateServiceRequest{ ServiceID: service.ID, - Spec: &r.Service.Spec, - ServiceVersion: &r.Service.Meta.Version, + Spec: r.Service.Spec, + ServiceVersion: r.Service.Meta.Version, }) assert.NoError(t, err) @@ -970,8 +971,8 @@ func TestUpdateService(t *testing.T) { } _, err = ts.Client.UpdateService(context.Background(), &api.UpdateServiceRequest{ ServiceID: service.ID, - Spec: &r.Service.Spec, - ServiceVersion: &r.Service.Meta.Version, + Spec: r.Service.Spec, + ServiceVersion: r.Service.Meta.Version, }) assert.Error(t, err) assert.True(t, strings.Contains(err.Error(), errModeChangeNotAllowed.Error())) @@ -979,11 +980,11 @@ func TestUpdateService(t *testing.T) { // Versioning. r, err = ts.Client.GetService(context.Background(), &api.GetServiceRequest{ServiceID: service.ID}) assert.NoError(t, err) - version := &r.Service.Meta.Version + version := r.Service.Meta.Version _, err = ts.Client.UpdateService(context.Background(), &api.UpdateServiceRequest{ ServiceID: service.ID, - Spec: &r.Service.Spec, + Spec: r.Service.Spec, ServiceVersion: version, }) assert.NoError(t, err) @@ -991,7 +992,7 @@ func TestUpdateService(t *testing.T) { // Perform an update with the "old" version. _, err = ts.Client.UpdateService(context.Background(), &api.UpdateServiceRequest{ ServiceID: service.ID, - Spec: &r.Service.Spec, + Spec: r.Service.Spec, ServiceVersion: version, }) assert.Error(t, err) @@ -1000,7 +1001,7 @@ func TestUpdateService(t *testing.T) { r.Service.Spec.Annotations.Name = "newname" _, err = ts.Client.UpdateService(context.Background(), &api.UpdateServiceRequest{ ServiceID: service.ID, - Spec: &r.Service.Spec, + Spec: r.Service.Spec, ServiceVersion: version, }) assert.Error(t, err) @@ -1024,7 +1025,7 @@ func TestUpdateService(t *testing.T) { _, err = ts.Client.UpdateService(context.Background(), &api.UpdateServiceRequest{ ServiceID: rs.Service.ID, Spec: spec3, - ServiceVersion: &rs.Service.Meta.Version, + ServiceVersion: rs.Service.Meta.Version, }) assert.Error(t, err) assert.Equal(t, codes.InvalidArgument, testutils.ErrorCode(err)) @@ -1034,7 +1035,7 @@ func TestUpdateService(t *testing.T) { _, err = ts.Client.UpdateService(context.Background(), &api.UpdateServiceRequest{ ServiceID: rs.Service.ID, Spec: spec3, - ServiceVersion: &rs.Service.Meta.Version, + ServiceVersion: rs.Service.Meta.Version, }) assert.NoError(t, err) @@ -1046,7 +1047,7 @@ func TestUpdateService(t *testing.T) { _, err = ts.Client.UpdateService(context.Background(), &api.UpdateServiceRequest{ ServiceID: rs.Service.ID, Spec: spec4, - ServiceVersion: &rs.Service.Meta.Version, + ServiceVersion: rs.Service.Meta.Version, }) assert.Error(t, err) assert.Equal(t, codes.InvalidArgument, testutils.ErrorCode(err)) @@ -1072,8 +1073,8 @@ func TestServiceUpdateRejectNetworkChange(t *testing.T) { _, err = ts.Client.UpdateService(context.Background(), &api.UpdateServiceRequest{ ServiceID: service.ID, - Spec: &service.Spec, - ServiceVersion: &service.Meta.Version, + Spec: service.Spec, + ServiceVersion: service.Meta.Version, }) assert.Error(t, err) assert.True(t, strings.Contains(err.Error(), errNetworkUpdateNotSupported.Error())) @@ -1096,8 +1097,8 @@ func TestServiceUpdateRejectNetworkChange(t *testing.T) { _, err = ts.Client.UpdateService(context.Background(), &api.UpdateServiceRequest{ ServiceID: service.ID, - Spec: &service.Spec, - ServiceVersion: &service.Meta.Version, + Spec: service.Spec, + ServiceVersion: service.Meta.Version, }) assert.NoError(t, err) @@ -1120,8 +1121,8 @@ func TestServiceUpdateRejectNetworkChange(t *testing.T) { _, err = ts.Client.UpdateService(context.Background(), &api.UpdateServiceRequest{ ServiceID: service.ID, - Spec: &service.Spec, - ServiceVersion: &service.Meta.Version, + Spec: service.Spec, + ServiceVersion: service.Meta.Version, }) assert.NoError(t, err) } @@ -1246,10 +1247,10 @@ func TestServiceEndpointSpecUpdate(t *testing.T) { ts := newTestServer(t) defer ts.Stop() spec := &api.ServiceSpec{ - Annotations: api.Annotations{ + Annotations: &api.Annotations{ Name: "name", }, - Task: api.TaskSpec{ + Task: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{ Image: "image", @@ -1570,7 +1571,7 @@ func TestListServiceStatuses(t *testing.T) { ID: identity.NewID(), DesiredState: desired, Spec: s.Spec.Task, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: actual, }, ServiceID: s.ID, @@ -1589,7 +1590,7 @@ func TestListServiceStatuses(t *testing.T) { withJobIteration := func(s *api.Service, task *api.Task) { assert.NotNil(t, s.JobStatus) - task.JobIteration = &(s.JobStatus.JobIteration) + task.JobIteration = s.JobStatus.JobIteration } // alias task states for brevity @@ -1670,7 +1671,7 @@ func TestListServiceStatuses(t *testing.T) { context.Background(), &api.UpdateServiceRequest{ ServiceID: replicatedJob2.ID, - ServiceVersion: &replicatedJob2.Meta.Version, + ServiceVersion: replicatedJob2.Meta.Version, Spec: replicatedJob2Spec, }, ) @@ -1699,7 +1700,7 @@ func TestListServiceStatuses(t *testing.T) { goneSpec := createSpec("gone", "image", 3) gone := &api.Service{ ID: identity.NewID(), - Spec: *goneSpec, + Spec: goneSpec, } for i := 0; i < 3; i++ { @@ -1780,7 +1781,7 @@ func TestListServiceStatuses(t *testing.T) { if visited[i] { continue } - if reflect.DeepEqual(expect, r.Statuses[i]) { + if proto.Equal(expect, r.Statuses[i]) { visited[i] = true found = true break @@ -1801,10 +1802,10 @@ func TestJobService(t *testing.T) { // first, create a replicated job mode service spec spec := &api.ServiceSpec{ - Annotations: api.Annotations{ + Annotations: &api.Annotations{ Name: "replicatedjob", }, - Task: api.TaskSpec{ + Task: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{ Image: "image", @@ -1819,14 +1820,14 @@ func TestJobService(t *testing.T) { }, } - before := gogotypes.TimestampNow() + before := timestamppb.Now() // now, create the service resp, err := ts.Client.CreateService( context.Background(), &api.CreateServiceRequest{ Spec: spec, }, ) - after := gogotypes.TimestampNow() + after := timestamppb.Now() // ensure there are no errors require.NoError(t, err) @@ -1837,14 +1838,14 @@ func TestJobService(t *testing.T) { require.NotNil(t, resp.Service.JobStatus, "expected JobStatus to not be nil") // and ensure that JobStatus.JobIteration is set to 0, which is the default require.Equal( - t, resp.Service.JobStatus.JobIteration.Index, uint64(0), + t, resp.Service.JobStatus.GetJobIteration().GetIndex(), uint64(0), "expected JobIteration for new replicated job to be 0", ) require.NotNil(t, resp.Service.JobStatus.LastExecution) - assert.True(t, resp.Service.JobStatus.LastExecution.Compare(before) >= 0, + assert.True(t, resp.Service.JobStatus.LastExecution.AsTime().Compare(before.AsTime()) >= 0, "expected %v to be after %v", resp.Service.JobStatus.LastExecution, before, ) - assert.True(t, resp.Service.JobStatus.LastExecution.Compare(after) <= 0, + assert.True(t, resp.Service.JobStatus.LastExecution.AsTime().Compare(after.AsTime()) <= 0, "expected %v to be before %v", resp.Service.JobStatus.LastExecution, after, ) @@ -1854,13 +1855,13 @@ func TestJobService(t *testing.T) { gspec.Mode = &api.ServiceSpec_GlobalJob{ GlobalJob: &api.GlobalJob{}, } - before = gogotypes.TimestampNow() + before = timestamppb.Now() gresp, gerr := ts.Client.CreateService( context.Background(), &api.CreateServiceRequest{ Spec: gspec, }, ) - after = gogotypes.TimestampNow() + after = timestamppb.Now() require.NoError(t, gerr) require.NotNil(t, gresp) @@ -1871,24 +1872,24 @@ func TestJobService(t *testing.T) { "expected JobIteration for new global job to be 0", ) require.NotNil(t, gresp.Service.JobStatus.LastExecution) - assert.True(t, gresp.Service.JobStatus.LastExecution.Compare(before) >= 0, + assert.True(t, gresp.Service.JobStatus.LastExecution.AsTime().Compare(before.AsTime()) >= 0, "expected %v to be after %v", gresp.Service.JobStatus.LastExecution, before, ) - assert.True(t, gresp.Service.JobStatus.LastExecution.Compare(after) <= 0, + assert.True(t, gresp.Service.JobStatus.LastExecution.AsTime().Compare(after.AsTime()) <= 0, "expected %v to be before %v", gresp.Service.JobStatus.LastExecution, after, ) // now test that updating the service increments the JobIteration spec.Task.ForceUpdate = spec.Task.ForceUpdate + 1 - before = gogotypes.TimestampNow() + before = timestamppb.Now() uresp, uerr := ts.Client.UpdateService( context.Background(), &api.UpdateServiceRequest{ ServiceID: resp.Service.ID, - ServiceVersion: &(resp.Service.Meta.Version), + ServiceVersion: resp.Service.Meta.Version, Spec: spec, }, ) - after = gogotypes.TimestampNow() + after = timestamppb.Now() require.NoError(t, uerr) require.NotNil(t, uresp) @@ -1900,24 +1901,24 @@ func TestJobService(t *testing.T) { "expected JobIteration for updated replicated job to be 1", ) require.NotNil(t, uresp.Service.JobStatus.LastExecution) - assert.True(t, uresp.Service.JobStatus.LastExecution.Compare(before) >= 0, + assert.True(t, uresp.Service.JobStatus.LastExecution.AsTime().Compare(before.AsTime()) >= 0, "expected %v to be after %v", uresp.Service.JobStatus.LastExecution, before, ) - assert.True(t, uresp.Service.JobStatus.LastExecution.Compare(after) <= 0, + assert.True(t, uresp.Service.JobStatus.LastExecution.AsTime().Compare(after.AsTime()) <= 0, "expected %v to be before %v", uresp.Service.JobStatus.LastExecution, after, ) // rinse and repeat gspec.Task.ForceUpdate = spec.Task.ForceUpdate + 1 - before = gogotypes.TimestampNow() + before = timestamppb.Now() guresp, guerr := ts.Client.UpdateService( context.Background(), &api.UpdateServiceRequest{ ServiceID: gresp.Service.ID, - ServiceVersion: &(gresp.Service.Meta.Version), + ServiceVersion: gresp.Service.Meta.Version, Spec: gspec, }, ) - after = gogotypes.TimestampNow() + after = timestamppb.Now() require.NoError(t, guerr) require.NotNil(t, guresp) @@ -1928,10 +1929,10 @@ func TestJobService(t *testing.T) { "expected JobIteration for updated replicated job to be 1", ) require.NotNil(t, guresp.Service.JobStatus.LastExecution) - assert.True(t, guresp.Service.JobStatus.LastExecution.Compare(before) >= 0, + assert.True(t, guresp.Service.JobStatus.LastExecution.AsTime().Compare(before.AsTime()) >= 0, "expected %v to be after %v", guresp.Service.JobStatus.LastExecution, before, ) - assert.True(t, guresp.Service.JobStatus.LastExecution.Compare(after) <= 0, + assert.True(t, guresp.Service.JobStatus.LastExecution.AsTime().Compare(after.AsTime()) <= 0, "expected %v to be before %v", guresp.Service.JobStatus.LastExecution, after, ) } diff --git a/manager/controlapi/task.go b/manager/controlapi/task.go index 129d41888c..b254851a38 100644 --- a/manager/controlapi/task.go +++ b/manager/controlapi/task.go @@ -117,7 +117,7 @@ func (s *Server) ListTasks(_ context.Context, request *api.ListTasksRequest) (*a return filterContainsPrefix(e.ID, request.Filters.IDPrefixes) }, func(e *api.Task) bool { - return filterMatchLabels(e.ServiceAnnotations.Labels, request.Filters.Labels) + return filterMatchLabels(e.GetServiceAnnotations().GetLabels(), request.Filters.Labels) }, func(e *api.Task) bool { return filterContains(e.ServiceID, request.Filters.ServiceIDs) diff --git a/manager/controlapi/task_test.go b/manager/controlapi/task_test.go index 894b533d26..5b95a6f74d 100644 --- a/manager/controlapi/task_test.go +++ b/manager/controlapi/task_test.go @@ -18,7 +18,7 @@ func createTask(t *testing.T, ts *testServer, desiredState api.TaskState) *api.T task := &api.Task{ ID: identity.NewID(), DesiredState: desiredState, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{}, }, diff --git a/manager/controlapi/volume.go b/manager/controlapi/volume.go index d0a09b11b8..d2d49b6963 100644 --- a/manager/controlapi/volume.go +++ b/manager/controlapi/volume.go @@ -2,7 +2,6 @@ package controlapi import ( "context" - "reflect" "strings" "github.com/moby/swarmkit/v2/api" @@ -10,6 +9,7 @@ import ( "github.com/moby/swarmkit/v2/manager/state/store" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" + "google.golang.org/protobuf/proto" ) func (s *Server) CreateVolume(_ context.Context, request *api.CreateVolumeRequest) (*api.CreateVolumeResponse, error) { @@ -36,7 +36,7 @@ func (s *Server) CreateVolume(_ context.Context, request *api.CreateVolumeReques volume := &api.Volume{ ID: identity.NewID(), - Spec: *request.Spec, + Spec: request.Spec, } err := s.store.Update(func(tx store.Tx) error { // check all secrets, so that we can return an error indicating ALL @@ -95,19 +95,19 @@ func (s *Server) UpdateVolume(_ context.Context, request *api.UpdateVolumeReques if request.Spec.Group != volume.Spec.Group { return status.Errorf(codes.InvalidArgument, "Group cannot be updated") } - if !reflect.DeepEqual(request.Spec.AccessibilityRequirements, volume.Spec.AccessibilityRequirements) { + if !proto.Equal(request.Spec.AccessibilityRequirements, volume.Spec.AccessibilityRequirements) { return status.Errorf(codes.InvalidArgument, "AccessibilityRequirements cannot be updated") } - if !reflect.DeepEqual(request.Spec.Driver, volume.Spec.Driver) { + if !proto.Equal(request.Spec.Driver, volume.Spec.Driver) { return status.Errorf(codes.InvalidArgument, "Driver cannot be updated") } - if !reflect.DeepEqual(request.Spec.AccessMode, volume.Spec.AccessMode) { + if !proto.Equal(request.Spec.AccessMode, volume.Spec.AccessMode) { return status.Errorf(codes.InvalidArgument, "AccessMode cannot be updated") } - if !reflect.DeepEqual(request.Spec.Secrets, volume.Spec.Secrets) { + if !secretsEqual(request.Spec.Secrets, volume.Spec.Secrets) { return status.Errorf(codes.InvalidArgument, "Secrets cannot be updated") } - if !reflect.DeepEqual(request.Spec.CapacityRange, volume.Spec.CapacityRange) { + if !proto.Equal(request.Spec.CapacityRange, volume.Spec.CapacityRange) { return status.Errorf(codes.InvalidArgument, "CapacityRange cannot be updated") } @@ -117,7 +117,7 @@ func (s *Server) UpdateVolume(_ context.Context, request *api.UpdateVolumeReques volume.Spec.Annotations.Labels = request.Spec.Annotations.Labels volume.Spec.Availability = request.Spec.Availability - volume.Meta.Version = *request.VolumeVersion + volume.Meta.Version = request.VolumeVersion if err := store.UpdateVolume(tx, volume); err != nil { return err } @@ -134,6 +134,19 @@ func (s *Server) UpdateVolume(_ context.Context, request *api.UpdateVolumeReques }, nil } +// secretsEqual compares two slices of VolumeSecret using proto.Equal for each element. +func secretsEqual(a, b []*api.VolumeSecret) bool { + if len(a) != len(b) { + return false + } + for i := range a { + if !proto.Equal(a[i], b[i]) { + return false + } + } + return true +} + func (s *Server) ListVolumes(_ context.Context, request *api.ListVolumesRequest) (*api.ListVolumesResponse, error) { var ( volumes []*api.Volume diff --git a/manager/controlapi/volume_test.go b/manager/controlapi/volume_test.go index 6c897e9513..3354377535 100644 --- a/manager/controlapi/volume_test.go +++ b/manager/controlapi/volume_test.go @@ -8,6 +8,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "google.golang.org/grpc/codes" + "google.golang.org/protobuf/proto" "github.com/moby/swarmkit/v2/api" "github.com/moby/swarmkit/v2/manager/state/store" @@ -20,8 +21,8 @@ const testVolumeDriver = "somedriver" // copy before using, to avoid affecting other tests. var cannedVolume = &api.Volume{ ID: "someid", - Spec: api.VolumeSpec{ - Annotations: api.Annotations{ + Spec: &api.VolumeSpec{ + Annotations: &api.Annotations{ Name: "somename", }, Group: "somegroup", @@ -57,9 +58,9 @@ func TestCreateVolumeNoName(t *testing.T) { defer ts.Stop() v := cannedVolume.Copy() - v.Spec.Annotations = api.Annotations{} + v.Spec.Annotations = &api.Annotations{} _, err := ts.Client.CreateVolume(context.Background(), &api.CreateVolumeRequest{ - Spec: &v.Spec, + Spec: v.Spec, }) assert.Error(t, err) @@ -76,7 +77,7 @@ func TestCreateVolumeNoDriver(t *testing.T) { // no driver _, err := ts.Client.CreateVolume(context.Background(), &api.CreateVolumeRequest{ - Spec: &v.Spec, + Spec: v.Spec, }) assert.Error(t, err) @@ -93,14 +94,14 @@ func TestCreateVolumeValid(t *testing.T) { v := cannedVolume.Copy() resp, err := ts.Client.CreateVolume(context.Background(), &api.CreateVolumeRequest{ - Spec: &v.Spec, + Spec: v.Spec, }) assert.NoError(t, err) require.NotNil(t, resp) require.NotNil(t, resp.Volume, "volume in response should not be nil") assert.NotEmpty(t, resp.Volume.ID, "volume ID should not be empty") - assert.Equal(t, resp.Volume.Spec, v.Spec, "response spec should match request spec") + assert.True(t, proto.Equal(resp.Volume.Spec, v.Spec), "response spec should match request spec") var volume *api.Volume ts.Store.View(func(tx store.ReadTx) { @@ -119,8 +120,8 @@ func TestCreateVolumeValidateSecrets(t *testing.T) { secrets := []*api.Secret{ { ID: "someID1", - Spec: api.SecretSpec{ - Annotations: api.Annotations{ + Spec: &api.SecretSpec{ + Annotations: &api.Annotations{ Name: "somename1", }, }, @@ -148,7 +149,7 @@ func TestCreateVolumeValidateSecrets(t *testing.T) { } _, err := ts.Client.CreateVolume(context.Background(), &api.CreateVolumeRequest{ - Spec: &v.Spec, + Spec: v.Spec, }) assert.Error(t, err, "expected creating a volume when a secret doesn't exist to fail") assert.Contains(t, err.Error(), "secret") @@ -163,7 +164,7 @@ func TestCreateVolumeValidateSecrets(t *testing.T) { }, } _, err = ts.Client.CreateVolume(context.Background(), &api.CreateVolumeRequest{ - Spec: &v.Spec, + Spec: v.Spec, }) assert.NoError(t, err) } @@ -179,7 +180,7 @@ func TestCreateVolumeInvalidAccessMode(t *testing.T) { volume.Spec.AccessMode = nil _, err := ts.Client.CreateVolume(context.Background(), &api.CreateVolumeRequest{ - Spec: &volume.Spec, + Spec: volume.Spec, }) assert.Error(t, err) assert.Contains(t, err.Error(), "AccessMode must not be nil") @@ -187,7 +188,7 @@ func TestCreateVolumeInvalidAccessMode(t *testing.T) { volume.Spec.AccessMode = &api.VolumeAccessMode{} _, err = ts.Client.CreateVolume(context.Background(), &api.CreateVolumeRequest{ - Spec: &volume.Spec, + Spec: volume.Spec, }) assert.Error(t, err) assert.Contains(t, err.Error(), "either Mount or Block") @@ -221,7 +222,7 @@ func TestUpdateVolume(t *testing.T) { resp, err := ts.Client.UpdateVolume(context.Background(), &api.UpdateVolumeRequest{ VolumeID: volume.ID, - VolumeVersion: &volume.Meta.Version, + VolumeVersion: volume.Meta.Version, Spec: spec, }) @@ -229,7 +230,7 @@ func TestUpdateVolume(t *testing.T) { require.NotNil(t, resp, "response was nil") require.NotNil(t, resp.Volume, "response.Volume was nil") require.Equal(t, resp.Volume.ID, volume.ID) - require.Equal(t, resp.Volume.Spec, *spec) + require.True(t, proto.Equal(resp.Volume.Spec, spec), "response spec should match updated spec") // now get the updated volume from the store var updatedVolume *api.Volume @@ -237,7 +238,7 @@ func TestUpdateVolume(t *testing.T) { updatedVolume = store.GetVolume(tx, volume.ID) }) require.NotNil(t, updatedVolume) - assert.Equal(t, *spec, updatedVolume.Spec) + assert.True(t, proto.Equal(spec, updatedVolume.Spec), "stored spec should match updated spec") } // TestUpdateVolumeMissingRequestComponents tests that an UpdateVolumeRequest @@ -248,7 +249,7 @@ func TestUpdateVolumeMissingRequestComponents(t *testing.T) { // empty ID _, err := ts.Client.UpdateVolume(context.Background(), &api.UpdateVolumeRequest{ - Spec: &cannedVolume.Spec, + Spec: cannedVolume.Spec, VolumeVersion: &api.Version{}, }) assert.Error(t, err) @@ -267,7 +268,7 @@ func TestUpdateVolumeMissingRequestComponents(t *testing.T) { // empty version _, err = ts.Client.UpdateVolume(context.Background(), &api.UpdateVolumeRequest{ VolumeID: cannedVolume.ID, - Spec: &cannedVolume.Spec, + Spec: cannedVolume.Spec, }) assert.Error(t, err) assert.Equal(t, codes.InvalidArgument, testutils.ErrorCode(err)) @@ -282,7 +283,7 @@ func TestUpdateVolumeNotFound(t *testing.T) { _, err := ts.Client.UpdateVolume(context.Background(), &api.UpdateVolumeRequest{ VolumeID: cannedVolume.ID, - Spec: &cannedVolume.Spec, + Spec: cannedVolume.Spec, VolumeVersion: &api.Version{}, }) @@ -407,7 +408,7 @@ func TestUpdateVolumeInvalidFields(t *testing.T) { _, err = ts.Client.UpdateVolume(context.Background(), &api.UpdateVolumeRequest{ VolumeID: volume.ID, Spec: spec, - VolumeVersion: &volume.Meta.Version, + VolumeVersion: volume.Meta.Version, }) require.Error(t, err) assert.Equal(t, codes.InvalidArgument, testutils.ErrorCode(err)) @@ -435,7 +436,7 @@ func TestGetVolume(t *testing.T) { assert.NoError(t, err) require.NotNil(t, resp) require.NotNil(t, resp.Volume) - require.Equal(t, resp.Volume, volume) + require.True(t, proto.Equal(resp.Volume, volume), "volume should be equal") } func TestGetVolumeNotFound(t *testing.T) { @@ -460,8 +461,8 @@ func TestListVolumesByGroup(t *testing.T) { volumes := []*api.Volume{ { ID: "volid0", - Spec: api.VolumeSpec{ - Annotations: api.Annotations{ + Spec: &api.VolumeSpec{ + Annotations: &api.Annotations{ Name: "invol0", Labels: map[string]string{ "label1": "yes", @@ -474,8 +475,8 @@ func TestListVolumesByGroup(t *testing.T) { }, }, { ID: "volid1", - Spec: api.VolumeSpec{ - Annotations: api.Annotations{ + Spec: &api.VolumeSpec{ + Annotations: &api.Annotations{ Name: "vol1", Labels: map[string]string{ "label2": "no", @@ -488,8 +489,8 @@ func TestListVolumesByGroup(t *testing.T) { }, }, { ID: "volid2", - Spec: api.VolumeSpec{ - Annotations: api.Annotations{ + Spec: &api.VolumeSpec{ + Annotations: &api.Annotations{ Name: "vol2", Labels: map[string]string{ "label2": "yes", @@ -502,8 +503,8 @@ func TestListVolumesByGroup(t *testing.T) { }, }, { ID: "volid3", - Spec: api.VolumeSpec{ - Annotations: api.Annotations{ + Spec: &api.VolumeSpec{ + Annotations: &api.Annotations{ Name: "vol3", Labels: map[string]string{ "label1": "no", @@ -516,8 +517,8 @@ func TestListVolumesByGroup(t *testing.T) { }, }, { ID: "involid4", - Spec: api.VolumeSpec{ - Annotations: api.Annotations{ + Spec: &api.VolumeSpec{ + Annotations: &api.Annotations{ Name: "invol4", Labels: map[string]string{ "label1": "yes", diff --git a/manager/csi/manager_test.go b/manager/csi/manager_test.go index 6cd2b73e3e..2c970c9f06 100644 --- a/manager/csi/manager_test.go +++ b/manager/csi/manager_test.go @@ -126,8 +126,8 @@ var _ = Describe("Manager", func() { nodes = append(nodes, &api.Node{ ID: "nodeID1", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "node1", }, }, @@ -145,8 +145,8 @@ var _ = Describe("Manager", func() { }, &api.Node{ ID: "nodeID2", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "node2", }, }, @@ -167,8 +167,8 @@ var _ = Describe("Manager", func() { volumes = append(volumes, &api.Volume{ ID: "volumeID1", - Spec: api.VolumeSpec{ - Annotations: api.Annotations{ + Spec: &api.VolumeSpec{ + Annotations: &api.Annotations{ Name: "volume1", }, Driver: &api.Driver{ @@ -178,8 +178,8 @@ var _ = Describe("Manager", func() { }, &api.Volume{ ID: "volumeID2", - Spec: api.VolumeSpec{ - Annotations: api.Annotations{ + Spec: &api.VolumeSpec{ + Annotations: &api.Annotations{ Name: "volume2", }, Driver: &api.Driver{ @@ -253,8 +253,8 @@ var _ = Describe("Manager", func() { vm.init(context.Background()) volume := &api.Volume{ ID: "someVolume", - Spec: api.VolumeSpec{ - Annotations: api.Annotations{ + Spec: &api.VolumeSpec{ + Annotations: &api.Annotations{ Name: "volumeName", }, Driver: &api.Driver{ @@ -315,8 +315,8 @@ var _ = Describe("Manager", func() { nodes = append(nodes, &api.Node{ ID: "nodeID1", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "node1", }, }, @@ -334,8 +334,8 @@ var _ = Describe("Manager", func() { }, &api.Node{ ID: "nodeID2", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "node2", }, }, @@ -353,8 +353,8 @@ var _ = Describe("Manager", func() { }, &api.Node{ ID: "nodeIDextra", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "nodeExtra", }, }, @@ -370,8 +370,8 @@ var _ = Describe("Manager", func() { err := s.Update(func(tx store.Tx) error { return store.CreateNode(tx, &api.Node{ ID: "nodeID3", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "node3", }, }, @@ -526,8 +526,8 @@ var _ = Describe("Manager", func() { v1 = &api.Volume{ ID: "volumeID1", - Spec: api.VolumeSpec{ - Annotations: api.Annotations{ + Spec: &api.VolumeSpec{ + Annotations: &api.Annotations{ Name: "volume1", }, Driver: &api.Driver{ @@ -682,8 +682,8 @@ var _ = Describe("Manager", func() { // volume volume := &api.Volume{ ID: "volumeID", - Spec: api.VolumeSpec{ - Annotations: api.Annotations{ + Spec: &api.VolumeSpec{ + Annotations: &api.Annotations{ Name: "volumeName", }, Driver: &api.Driver{ diff --git a/manager/csi/plugin_test.go b/manager/csi/plugin_test.go index 7b10009a3d..8da86b5b7b 100644 --- a/manager/csi/plugin_test.go +++ b/manager/csi/plugin_test.go @@ -44,13 +44,13 @@ var _ = Describe("Plugin manager", func() { secretMap: map[string]*api.Secret{ "secretID1": { ID: "secretID1", - Spec: api.SecretSpec{ + Spec: &api.SecretSpec{ Data: []byte("superdupersecret1"), }, }, "secretID2": { ID: "secretID2", - Spec: api.SecretSpec{ + Spec: &api.SecretSpec{ Data: []byte("superdupersecret2"), }, }, @@ -78,8 +78,8 @@ var _ = Describe("Plugin manager", func() { BeforeEach(func() { v = &api.Volume{ ID: "someID", - Spec: api.VolumeSpec{ - Annotations: api.Annotations{ + Spec: &api.VolumeSpec{ + Annotations: &api.Annotations{ Name: "someVolume", }, Driver: &api.Driver{ @@ -217,8 +217,8 @@ var _ = Describe("Plugin manager", func() { It("should make a csi.ControllerPublishVolumeRequest for the given volume", func() { v := &api.Volume{ ID: "volumeID1", - Spec: api.VolumeSpec{ - Annotations: api.Annotations{ + Spec: &api.VolumeSpec{ + Annotations: &api.Annotations{ Name: "volumeName1", }, Driver: &api.Driver{ @@ -291,8 +291,8 @@ var _ = Describe("Plugin manager", func() { BeforeEach(func() { v = &api.Volume{ ID: "volumeID", - Spec: api.VolumeSpec{ - Annotations: api.Annotations{ + Spec: &api.VolumeSpec{ + Annotations: &api.Annotations{ Name: "volumeName", }, Driver: &api.Driver{ @@ -356,8 +356,8 @@ var _ = Describe("Plugin manager", func() { BeforeEach(func() { v = &api.Volume{ ID: "volumeID1", - Spec: api.VolumeSpec{ - Annotations: api.Annotations{ + Spec: &api.VolumeSpec{ + Annotations: &api.Annotations{ Name: "volumeName1", }, Driver: &api.Driver{ @@ -451,8 +451,8 @@ var _ = Describe("Plugin manager", func() { BeforeEach(func() { v = &api.Volume{ ID: "volumeID1", - Spec: api.VolumeSpec{ - Annotations: api.Annotations{ + Spec: &api.VolumeSpec{ + Annotations: &api.Annotations{ Name: "volumeName1", }, Driver: &api.Driver{ diff --git a/manager/deallocator/deallocator_test.go b/manager/deallocator/deallocator_test.go index a2ed082f72..4ee08e3053 100644 --- a/manager/deallocator/deallocator_test.go +++ b/manager/deallocator/deallocator_test.go @@ -196,7 +196,7 @@ func TestServiceNotMarkedForDeletion(t *testing.T) { defer stopDeallocator(t, deallocator, ran) updateStoreAndWaitForEvent(t, deallocator, func(tx store.Tx) { - service.Meta = api.Meta{Version: api.Version{Index: 12}} + service.Meta = &api.Meta{Version: &api.Version{Index: 12}} require.NoError(t, store.UpdateService(tx, service)) }, // the deallocator shouldn't do any DB updates based on this event @@ -362,11 +362,11 @@ func updateStoreAndWaitForEvent(t *testing.T, deallocator *Deallocator, cb func( func newService(id string, pendingDelete bool, networks ...*api.Network) *api.Service { return &api.Service{ ID: id, - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: id, }, - Task: api.TaskSpec{ + Task: &api.TaskSpec{ Networks: newNetworkConfigs(networks...), }, }, @@ -377,8 +377,8 @@ func newService(id string, pendingDelete bool, networks ...*api.Network) *api.Se func newNetwork(id string, pendingDelete bool) *api.Network { return &api.Network{ ID: id, - Spec: api.NetworkSpec{ - Annotations: api.Annotations{ + Spec: &api.NetworkSpec{ + Annotations: &api.Annotations{ Name: id, }, }, diff --git a/manager/dirty.go b/manager/dirty.go index 19540a6cdf..65c49cde5d 100644 --- a/manager/dirty.go +++ b/manager/dirty.go @@ -46,6 +46,10 @@ func (m *Manager) IsStateDirty() (bool, error) { field := val.Field(i) structField := val.Type().Field(i) if structField.Type.Kind() != reflect.Slice { + // Skip internal protobuf fields (MessageState, SizeCache, etc.) + if !structField.IsExported() { + continue + } panic(fmt.Sprintf("unexpected field type in StoreSnapshot: %s (type %v)", structField.Name, structField.Type.Kind())) } if structField.Name != "Nodes" && structField.Name != "Clusters" && structField.Name != "Networks" && field.Len() != 0 { diff --git a/manager/dispatcher/assignments.go b/manager/dispatcher/assignments.go index a7e3da0927..03c4dd1ba5 100644 --- a/manager/dispatcher/assignments.go +++ b/manager/dispatcher/assignments.go @@ -82,7 +82,7 @@ func assignSecret(a *assignmentSet, readTx store.ReadTx, mapKey typeAndID, t *ap Secret: secret, }, }, - Action: api.AssignmentChange_AssignmentActionUpdate, + Action: api.AssignmentActionUpdate, } } @@ -102,14 +102,14 @@ func assignConfig(a *assignmentSet, readTx store.ReadTx, mapKey typeAndID) { Config: config, }, }, - Action: api.AssignmentChange_AssignmentActionUpdate, + Action: api.AssignmentActionUpdate, } } func (a *assignmentSet) addTaskDependencies(readTx store.ReadTx, t *api.Task) { // first, we go through all ResourceReferences, which give us the necessary // information about which secrets and configs are in use. - for _, resourceRef := range t.Spec.ResourceReferences { + for _, resourceRef := range t.GetSpec().GetResourceReferences() { mapKey := typeAndID{objType: resourceRef.ResourceType, id: resourceRef.ResourceID} // if there are no tasks using this dependency yet, then we can assign // it. @@ -176,7 +176,7 @@ func (a *assignmentSet) releaseDependency(mapKey typeAndID, assignment *api.Assi delete(a.tasksUsingDependency, mapKey) a.changes[mapKey] = &api.AssignmentChange{ Assignment: assignment, - Action: api.AssignmentChange_AssignmentActionRemove, + Action: api.AssignmentActionRemove, } return true } @@ -186,7 +186,7 @@ func (a *assignmentSet) releaseDependency(mapKey typeAndID, assignment *api.Assi func (a *assignmentSet) releaseTaskDependencies(_ store.ReadTx, t *api.Task) bool { var modified bool - for _, resourceRef := range t.Spec.ResourceReferences { + for _, resourceRef := range t.GetSpec().GetResourceReferences() { var assignment *api.Assignment switch resourceRef.ResourceType { case api.ResourceType_SECRET: @@ -292,7 +292,7 @@ func (a *assignmentSet) addOrUpdateTask(readTx store.ReadTx, t *api.Task) bool { Task: t, }, }, - Action: api.AssignmentChange_AssignmentActionUpdate, + Action: api.AssignmentActionUpdate, } return true } @@ -367,9 +367,9 @@ func (a *assignmentSet) addOrUpdateVolume(readTx store.ReadTx, v *api.Volume) bo // has a volume published; for example, the node may be restarting, and // the in-memory store does not have knowledge of the volume. if publishStatus.State == api.VolumePublishStatus_PENDING_NODE_UNPUBLISH { - assignmentChange.Action = api.AssignmentChange_AssignmentActionRemove + assignmentChange.Action = api.AssignmentActionRemove } else { - assignmentChange.Action = api.AssignmentChange_AssignmentActionUpdate + assignmentChange.Action = api.AssignmentActionUpdate } a.changes[volumeKey] = assignmentChange a.volumesMap[v.ID] = publishStatus @@ -414,7 +414,7 @@ func (a *assignmentSet) removeTask(readTx store.ReadTx, t *api.Task) bool { Task: &api.Task{ID: t.ID}, }, }, - Action: api.AssignmentChange_AssignmentActionRemove, + Action: api.AssignmentActionRemove, } delete(a.tasksMap, t.ID) @@ -448,14 +448,14 @@ func (a *assignmentSet) secret(readTx store.ReadTx, task *api.Task, secretID str if secret == nil { return nil, false, fmt.Errorf("secret not found") } - if secret.Spec.Driver == nil { + if secret.GetSpec().GetDriver() == nil { return secret, false, nil } d, err := a.dp.NewSecretDriver(secret.Spec.Driver) if err != nil { return nil, false, err } - value, doNotReuse, err := d.Get(&secret.Spec, task) + value, doNotReuse, err := d.Get(secret.Spec, task) if err != nil { return nil, false, err } @@ -463,6 +463,9 @@ func (a *assignmentSet) secret(readTx store.ReadTx, task *api.Task, secretID str return nil, false, err } // Assign the secret + if secret.Spec == nil { + secret.Spec = &api.SecretSpec{} + } secret.Spec.Data = value return secret, doNotReuse, nil } diff --git a/manager/dispatcher/assignments_test.go b/manager/dispatcher/assignments_test.go index 7b65a0b7db..4209cfa008 100644 --- a/manager/dispatcher/assignments_test.go +++ b/manager/dispatcher/assignments_test.go @@ -19,16 +19,16 @@ func TestAssignVolume(t *testing.T) { for _, s := range []*api.Secret{ { ID: "secret1", - Spec: api.SecretSpec{ - Annotations: api.Annotations{ + Spec: &api.SecretSpec{ + Annotations: &api.Annotations{ Name: "secretName1", }, Data: []byte("foo"), }, }, { ID: "secret2", - Spec: api.SecretSpec{ - Annotations: api.Annotations{ + Spec: &api.SecretSpec{ + Annotations: &api.Annotations{ Name: "secretName2", }, Data: []byte("foo"), @@ -42,8 +42,8 @@ func TestAssignVolume(t *testing.T) { v := &api.Volume{ ID: "volume1", - Spec: api.VolumeSpec{ - Annotations: api.Annotations{ + Spec: &api.VolumeSpec{ + Annotations: &api.Annotations{ Name: "volumeName1", }, Driver: &api.Driver{ @@ -138,7 +138,7 @@ func TestAssignVolume(t *testing.T) { var foundSecret1, foundSecret2 bool for _, change := range m.Changes { if vol, ok := change.Assignment.Item.(*api.Assignment_Volume); ok { - assert.Equal(t, change.Action, api.AssignmentChange_AssignmentActionUpdate) + assert.Equal(t, change.Action, api.AssignmentActionUpdate) assert.Equal(t, vol.Volume, &api.VolumeAssignment{ ID: "volume1", VolumeID: "volumeID1", @@ -167,7 +167,7 @@ func TestAssignVolume(t *testing.T) { } // every one of these should be an Update change - assert.Equal(t, change.Action, api.AssignmentChange_AssignmentActionUpdate) + assert.Equal(t, change.Action, api.AssignmentActionUpdate) } assert.True(t, foundSecret1) @@ -194,7 +194,7 @@ func TestAssignVolume(t *testing.T) { m = as.message() assert.Len(t, m.Changes, 1) - assert.Equal(t, m.Changes[0].Action, api.AssignmentChange_AssignmentActionRemove) + assert.Equal(t, m.Changes[0].Action, api.AssignmentActionRemove) v, ok := m.Changes[0].Assignment.Item.(*api.Assignment_Volume) assert.True(t, ok) assert.Equal(t, v.Volume, &api.VolumeAssignment{ @@ -234,7 +234,7 @@ func TestAssignVolume(t *testing.T) { foundSecret2 = false for _, change := range m.Changes { - assert.Equal(t, change.Action, api.AssignmentChange_AssignmentActionRemove) + assert.Equal(t, change.Action, api.AssignmentActionRemove) s, ok := change.Assignment.Item.(*api.Assignment_Secret) assert.True(t, ok) switch s.Secret.ID { diff --git a/manager/dispatcher/dispatcher.go b/manager/dispatcher/dispatcher.go index 5bc230fec3..aba448389b 100644 --- a/manager/dispatcher/dispatcher.go +++ b/manager/dispatcher/dispatcher.go @@ -10,7 +10,6 @@ import ( "github.com/docker/go-events" "github.com/docker/go-metrics" - gogotypes "github.com/gogo/protobuf/types" "github.com/moby/swarmkit/v2/api" "github.com/moby/swarmkit/v2/api/equality" "github.com/moby/swarmkit/v2/ca" @@ -23,6 +22,7 @@ import ( "github.com/pkg/errors" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" + "google.golang.org/protobuf/types/known/durationpb" ) const ( @@ -248,9 +248,11 @@ func (d *Dispatcher) Run(ctx context.Context) error { return err } if len(clusters) == 1 { - heartbeatPeriod, err := gogotypes.DurationFromProto(clusters[0].Spec.Dispatcher.HeartbeatPeriod) - if err == nil && heartbeatPeriod > 0 { - d.config.HeartbeatPeriod = heartbeatPeriod + if clusters[0].Spec.GetDispatcher().GetHeartbeatPeriod() != nil { + heartbeatPeriod := clusters[0].Spec.Dispatcher.HeartbeatPeriod.AsDuration() + if heartbeatPeriod > 0 { + d.config.HeartbeatPeriod = heartbeatPeriod + } } if clusters[0].NetworkBootstrapKeys != nil { d.networkBootstrapKeys = clusters[0].NetworkBootstrapKeys @@ -318,9 +320,8 @@ func (d *Dispatcher) Run(ctx context.Context) error { log.G(ctx).Info("cluster update event") cluster := v.(api.EventUpdateCluster) d.mu.Lock() - if cluster.Cluster.Spec.Dispatcher.HeartbeatPeriod != nil { - // ignore error, since Spec has passed validation before - heartbeatPeriod, _ := gogotypes.DurationFromProto(cluster.Cluster.Spec.Dispatcher.HeartbeatPeriod) + if cluster.Cluster.Spec.GetDispatcher().GetHeartbeatPeriod() != nil { + heartbeatPeriod := cluster.Cluster.Spec.Dispatcher.HeartbeatPeriod.AsDuration() if heartbeatPeriod != d.config.HeartbeatPeriod { // only call d.nodes.updatePeriod when heartbeatPeriod changes d.config.HeartbeatPeriod = heartbeatPeriod @@ -437,7 +438,7 @@ func (d *Dispatcher) markNodesUnknown(ctx context.Context) error { return nil } // do not try to resurrect down nodes - if node.Status.State == api.NodeStatus_DOWN { + if node.GetStatus().GetState() == api.NodeStatus_DOWN { nodeCopy := node expireFunc := func() { log.Infof("moving tasks to orphaned state for node: %s", nodeCopy.ID) @@ -453,6 +454,9 @@ func (d *Dispatcher) markNodesUnknown(ctx context.Context) error { return nil } + if node.Status == nil { + node.Status = &api.NodeStatus{} + } node.Status.State = api.NodeStatus_UNKNOWN node.Status.Message = `Node moved to "unknown" state due to leadership change in cluster` @@ -770,14 +774,14 @@ func (d *Dispatcher) processUpdates(ctx context.Context) { return nil } - logger = logger.WithField("state.transition", fmt.Sprintf("%v->%v", task.Status.State, taskStatus.State)) + logger = logger.WithField("state.transition", fmt.Sprintf("%v->%v", task.Status.GetState(), taskStatus.State)) - if task.Status == *taskStatus { + if task.Status.GetState() == taskStatus.State && task.Status.GetMessage() == taskStatus.Message && task.Status.GetErr() == taskStatus.Err { logger.Debug("task status identical, ignoring") return nil } - if task.Status.State > taskStatus.State { + if task.Status.GetState() > taskStatus.State { logger.Debug("task status invalid transition") return nil } @@ -793,7 +797,7 @@ func (d *Dispatcher) processUpdates(ctx context.Context) { schedulingDelayTimer.UpdateSince(start) } - task.Status = *taskStatus + task.Status = taskStatus task.Status.AppliedBy = d.securityConfig.ClientTLSCreds.NodeID() task.Status.AppliedAt = ptypes.MustTimestampProto(time.Now()) logger.Debugf("state for task %v updated to %v", task.GetID(), task.Status.State) @@ -819,6 +823,9 @@ func (d *Dispatcher) processUpdates(ctx context.Context) { } if nodeUpdate.status != nil { + if node.Status == nil { + node.Status = &api.NodeStatus{} + } node.Status.State = nodeUpdate.status.State node.Status.Message = nodeUpdate.status.Message if nodeUpdate.status.Addr != "" { @@ -946,7 +953,7 @@ func (d *Dispatcher) Tasks(r *api.TasksRequest, stream api.Dispatcher_TasksServe var tasks []*api.Task for _, t := range tasksMap { // dispatcher only sends tasks that have been assigned to a node - if t != nil && t.Status.State >= api.TaskStateAssigned { + if t != nil && t.GetStatus().GetState() >= api.TaskStateAssigned { tasks = append(tasks, t) } } @@ -975,7 +982,7 @@ func (d *Dispatcher) Tasks(r *api.TasksRequest, stream api.Dispatcher_TasksServe // States ASSIGNED and below are set by the orchestrator/scheduler, // not the agent, so tasks in these states need to be sent to the // agent even if nothing else has changed. - if equality.TasksEqualStable(oldTask, v.Task) && v.Task.Status.State > api.TaskStateAssigned { + if equality.TasksEqualStable(oldTask, v.Task) && v.Task.GetStatus().GetState() > api.TaskStateAssigned { // this update should not trigger action at agent tasksMap[v.Task.ID] = v.Task continue @@ -1233,7 +1240,10 @@ func (d *Dispatcher) moveTasksToOrphaned(nodeID string) error { // // Tasks in a final state (e.g. rejected) *cannot* have made // progress, therefore there's no point in marking them as orphaned - if task.Status.State >= api.TaskStateAssigned && task.Status.State <= api.TaskStateRunning { + if task.GetStatus().GetState() >= api.TaskStateAssigned && task.GetStatus().GetState() <= api.TaskStateRunning { + if task.Status == nil { + task.Status = &api.TaskStatus{} + } task.Status.State = api.TaskStateOrphaned } @@ -1334,7 +1344,7 @@ func (d *Dispatcher) Heartbeat(ctx context.Context, r *api.HeartbeatRequest) (*a period, err := d.nodes.Heartbeat(nodeInfo.NodeID, r.SessionID) log.G(ctx).WithField("method", "(*Dispatcher).Heartbeat").Debugf("received heartbeat from worker %v, expect next heartbeat in %v", nodeInfo, period) - return &api.HeartbeatResponse{Period: period}, err + return &api.HeartbeatResponse{Period: durationpb.New(period)}, err } func (d *Dispatcher) getManagers() []*api.WeightedPeer { diff --git a/manager/dispatcher/dispatcher_test.go b/manager/dispatcher/dispatcher_test.go index b5e4311e07..ff4aa2f0aa 100644 --- a/manager/dispatcher/dispatcher_test.go +++ b/manager/dispatcher/dispatcher_test.go @@ -14,6 +14,7 @@ import ( "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/credentials" + "google.golang.org/protobuf/proto" "github.com/docker/go-events" "github.com/moby/swarmkit/v2/api" @@ -441,28 +442,28 @@ func TestAssignmentsSecretDriver(t *testing.T) { secret := &api.Secret{ ID: "driverSecret", - Spec: api.SecretSpec{ - Annotations: api.Annotations{Name: existingSecretName}, + Spec: &api.SecretSpec{ + Annotations: &api.Annotations{Name: existingSecretName}, Driver: &api.Driver{Name: secretDriver}, }, } doNotReuseSecret := &api.Secret{ ID: "driverDoNotReuseSecret", - Spec: api.SecretSpec{ - Annotations: api.Annotations{Name: doNotReuseExistingSecretName}, + Spec: &api.SecretSpec{ + Annotations: &api.Annotations{Name: doNotReuseExistingSecretName}, Driver: &api.Driver{Name: secretDriver}, }, } errSecret := &api.Secret{ ID: "driverErrSecret", - Spec: api.SecretSpec{ - Annotations: api.Annotations{Name: errSecretName}, + Spec: &api.SecretSpec{ + Annotations: &api.Annotations{Name: errSecretName}, Driver: &api.Driver{Name: secretDriver}, }, } config := &api.Config{ ID: "config", - Spec: api.ConfigSpec{ + Spec: &api.ConfigSpec{ Data: []byte("config"), }, } @@ -471,9 +472,9 @@ func TestAssignmentsSecretDriver(t *testing.T) { task := &api.Task{ NodeID: nodeID, ID: "secretTask", - Status: api.TaskStatus{State: api.TaskStateReady}, + Status: &api.TaskStatus{State: api.TaskStateReady}, DesiredState: api.TaskStateNew, - Spec: spec, + Spec: &spec, Endpoint: &api.Endpoint{ Spec: &api.EndpointSpec{ Mode: serviceEndpointMode, @@ -483,12 +484,12 @@ func TestAssignmentsSecretDriver(t *testing.T) { PublishedPort: portConfig.PublishedPort, Protocol: api.PortConfig_Protocol(portConfig.Protocol), TargetPort: portConfig.TargetPort, - PublishMode: api.PortConfig_PublishMode(portConfig.PublishMode), + PublishMode: api.PublishMode(portConfig.PublishMode), }, }, }, }, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: serviceName, Labels: serviceLabels, }, @@ -537,8 +538,8 @@ func TestAssignmentsWithVolume(t *testing.T) { volumes := []*api.Volume{ { ID: "volumeID0", - Spec: api.VolumeSpec{ - Annotations: api.Annotations{ + Spec: &api.VolumeSpec{ + Annotations: &api.Annotations{ Name: "volumeName", }, Driver: &api.Driver{ @@ -568,8 +569,8 @@ func TestAssignmentsWithVolume(t *testing.T) { }, }, { ID: "volumeID1", - Spec: api.VolumeSpec{ - Annotations: api.Annotations{ + Spec: &api.VolumeSpec{ + Annotations: &api.Annotations{ Name: "volumeOtherName", }, Group: "volumeGroup", @@ -608,24 +609,24 @@ func TestAssignmentsWithVolume(t *testing.T) { secrets := []*api.Secret{ { ID: "secret0", - Spec: api.SecretSpec{ - Annotations: api.Annotations{ + Spec: &api.SecretSpec{ + Annotations: &api.Annotations{ Name: "secretName0", }, Data: []byte("secret0 data"), }, }, { ID: "secret1", - Spec: api.SecretSpec{ - Annotations: api.Annotations{ + Spec: &api.SecretSpec{ + Annotations: &api.Annotations{ Name: "secretName1", }, Data: []byte("secret1 data"), }, }, { ID: "secret2", - Spec: api.SecretSpec{ - Annotations: api.Annotations{ + Spec: &api.SecretSpec{ + Annotations: &api.Annotations{ Name: "secretName2", }, Data: []byte("secret2 data"), @@ -636,14 +637,14 @@ func TestAssignmentsWithVolume(t *testing.T) { task := &api.Task{ ID: "task1", NodeID: nodeID, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateAssigned, }, DesiredState: api.TaskStateRunning, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{ - Mounts: []api.Mount{ + Mounts: []*api.Mount{ { Type: api.MountTypeCluster, Source: "volumeName", @@ -667,7 +668,7 @@ func TestAssignmentsWithVolume(t *testing.T) { }, }, }, - ResourceReferences: []api.ResourceReference{ + ResourceReferences: []*api.ResourceReference{ { ResourceID: "secret1", ResourceType: api.ResourceType_SECRET, @@ -718,7 +719,7 @@ func TestAssignmentsWithVolume(t *testing.T) { verifyChanges(t, resp.Changes, []changeExpectations{ { - action: api.AssignmentChange_AssignmentActionUpdate, + action: api.AssignmentActionUpdate, tasks: []*api.Task{task}, secrets: secrets, volumes: []*api.VolumeAssignment{ @@ -769,7 +770,7 @@ func TestAssignmentsWithVolume(t *testing.T) { assert.Equal(t, volumeChanges[idAndAction{ id: "volumeID0", - action: api.AssignmentChange_AssignmentActionUpdate, + action: api.AssignmentActionUpdate, }], &api.VolumeAssignment{ ID: "volumeID0", @@ -867,7 +868,7 @@ func testAssignmentsInitialNodeTasksWithGivenTasks(t *testing.T, genTasks taskGe updatedSecrets, updatedConfigs := filterDependencies(secrets, configs, assignedToRunningTasks, nil) verifyChanges(t, resp.Changes, []changeExpectations{ { - action: api.AssignmentChange_AssignmentActionUpdate, + action: api.AssignmentActionUpdate, tasks: atLeastAssignedTasks, // dispatcher sends task updates for all tasks >= ASSIGNED secrets: updatedSecrets, configs: updatedConfigs, @@ -893,11 +894,11 @@ func testAssignmentsInitialNodeTasksWithGivenTasks(t *testing.T, genTasks taskGe verifyChanges(t, resp.Changes, []changeExpectations{ { // ASSIGNED tasks are always sent down even if they haven't changed - action: api.AssignmentChange_AssignmentActionUpdate, + action: api.AssignmentActionUpdate, tasks: filterTasks(tasks, func(s api.TaskState) bool { return s == api.TaskStateAssigned }), }, { - action: api.AssignmentChange_AssignmentActionRemove, + action: api.AssignmentActionRemove, secrets: updatedSecrets, configs: updatedConfigs, }, @@ -921,7 +922,7 @@ func testAssignmentsInitialNodeTasksWithGivenTasks(t *testing.T, genTasks taskGe updatedSecrets, updatedConfigs = filterDependencies(secrets, configs, atLeastAssignedTasks, nil) verifyChanges(t, resp.Changes, []changeExpectations{ { - action: api.AssignmentChange_AssignmentActionRemove, + action: api.AssignmentActionRemove, tasks: atLeastAssignedTasks, secrets: updatedSecrets, configs: updatedConfigs, @@ -932,8 +933,8 @@ func testAssignmentsInitialNodeTasksWithGivenTasks(t *testing.T, genTasks taskGe func mockNumberedConfig(i int) *api.Config { return &api.Config{ ID: fmt.Sprintf("IDconfig%d", i), - Spec: api.ConfigSpec{ - Annotations: api.Annotations{ + Spec: &api.ConfigSpec{ + Annotations: &api.Annotations{ Name: fmt.Sprintf("config%d", i), }, Data: []byte(fmt.Sprintf("config%d", i)), @@ -944,8 +945,8 @@ func mockNumberedConfig(i int) *api.Config { func mockNumberedSecret(i int) *api.Secret { return &api.Secret{ ID: fmt.Sprintf("IDsecret%d", i), - Spec: api.SecretSpec{ - Annotations: api.Annotations{ + Spec: &api.SecretSpec{ + Annotations: &api.Annotations{ Name: fmt.Sprintf("secret%d", i), }, Data: []byte(fmt.Sprintf("secret%d", i)), @@ -957,9 +958,9 @@ func mockNumberedReadyTask(i int, nodeID string, taskState api.TaskState, spec a return &api.Task{ NodeID: nodeID, ID: fmt.Sprintf("testTask%d", i), - Status: api.TaskStatus{State: taskState}, + Status: &api.TaskStatus{State: taskState}, DesiredState: api.TaskStateReady, - Spec: spec, + Spec: &spec, } } @@ -968,8 +969,8 @@ func makeMockResource(tx store.Tx, resourceRef *api.ResourceReference) error { case api.ResourceType_SECRET: dummySecret := &api.Secret{ ID: resourceRef.ResourceID, - Spec: api.SecretSpec{ - Annotations: api.Annotations{ + Spec: &api.SecretSpec{ + Annotations: &api.Annotations{ Name: fmt.Sprintf("dummy_secret_%s", resourceRef.ResourceID), }, Data: []byte(fmt.Sprintf("secret_%s", resourceRef.ResourceID)), @@ -983,8 +984,8 @@ func makeMockResource(tx store.Tx, resourceRef *api.ResourceReference) error { case api.ResourceType_CONFIG: dummyConfig := &api.Config{ ID: resourceRef.ResourceID, - Spec: api.ConfigSpec{ - Annotations: api.Annotations{ + Spec: &api.ConfigSpec{ + Annotations: &api.Annotations{ Name: fmt.Sprintf("dummy_config_%s", resourceRef.ResourceID), }, Data: []byte(fmt.Sprintf("config_%s", resourceRef.ResourceID)), @@ -1096,7 +1097,7 @@ func testAssignmentsAddingTasksWithGivenTasks(t *testing.T, genTasks taskGenerat updatedSecrets, updatedConfigs := filterDependencies(createdSecrets, createdConfigs, assignedToRunningTasks, nil) verifyChanges(t, resp.Changes, []changeExpectations{ { - action: api.AssignmentChange_AssignmentActionUpdate, + action: api.AssignmentActionUpdate, tasks: atLeastAssignedTasks, // dispatcher sends task updates for all tasks >= ASSIGNED secrets: updatedSecrets, configs: updatedConfigs, @@ -1124,7 +1125,7 @@ func testAssignmentsAddingTasksWithGivenTasks(t *testing.T, genTasks taskGenerat updatedSecrets, updatedConfigs = filterDependencies(secrets, configs, atLeastAssignedTasks, nil) verifyChanges(t, resp.Changes, []changeExpectations{ { - action: api.AssignmentChange_AssignmentActionRemove, + action: api.AssignmentActionRemove, tasks: atLeastAssignedTasks, secrets: updatedSecrets, configs: updatedConfigs, @@ -1201,7 +1202,7 @@ func testAssignmentsDependencyUpdateAndDeletionWithGivenTasks(t *testing.T, genT updatedSecrets, updatedConfigs := filterDependencies(secrets, configs, assignedToRunningTasks, nil) verifyChanges(t, resp.Changes, []changeExpectations{ { - action: api.AssignmentChange_AssignmentActionUpdate, + action: api.AssignmentActionUpdate, tasks: atLeastAssignedTasks, // dispatcher sends task updates for all tasks >= ASSIGNED secrets: updatedSecrets, configs: updatedConfigs, @@ -1280,13 +1281,13 @@ func TestTasksStatusChange(t *testing.T) { testTask1 := &api.Task{ NodeID: nodeID, ID: "testTask1", - Status: api.TaskStatus{State: api.TaskStateAssigned}, + Status: &api.TaskStatus{State: api.TaskStateAssigned}, DesiredState: api.TaskStateReady, } testTask2 := &api.Task{ NodeID: nodeID, ID: "testTask2", - Status: api.TaskStatus{State: api.TaskStateAssigned}, + Status: &api.TaskStatus{State: api.TaskStateAssigned}, DesiredState: api.TaskStateReady, } @@ -1319,7 +1320,7 @@ func TestTasksStatusChange(t *testing.T) { verifyChanges(t, resp.Changes, []changeExpectations{ { - action: api.AssignmentChange_AssignmentActionUpdate, + action: api.AssignmentActionUpdate, tasks: []*api.Task{testTask1, testTask2}, }, }) @@ -1331,7 +1332,7 @@ func TestTasksStatusChange(t *testing.T) { } task.NodeID = nodeID // only Status is changed for task1 - task.Status = api.TaskStatus{State: api.TaskStateFailed, Err: "1234"} + task.Status = &api.TaskStatus{State: api.TaskStateFailed, Err: "1234"} task.DesiredState = api.TaskStateReady return store.UpdateTask(tx, task) })) @@ -1370,12 +1371,12 @@ func TestTasksBatch(t *testing.T) { testTask1 := &api.Task{ NodeID: nodeID, ID: "testTask1", - Status: api.TaskStatus{State: api.TaskStateAssigned}, + Status: &api.TaskStatus{State: api.TaskStateAssigned}, } testTask2 := &api.Task{ NodeID: nodeID, ID: "testTask2", - Status: api.TaskStatus{State: api.TaskStateAssigned}, + Status: &api.TaskStatus{State: api.TaskStateAssigned}, } stream, err := gd.Clients[0].Assignments(context.Background(), &api.AssignmentsRequest{SessionID: expectedSessionID}) @@ -1413,7 +1414,7 @@ func TestTasksBatch(t *testing.T) { // all tasks have been deleted verifyChanges(t, resp.Changes, []changeExpectations{ { - action: api.AssignmentChange_AssignmentActionRemove, + action: api.AssignmentActionRemove, tasks: []*api.Task{testTask1, testTask2}, }, }) @@ -1470,7 +1471,7 @@ func TestTaskUpdate(t *testing.T) { testTask4 := &api.Task{ ID: "testTask4", NodeID: nodeID, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateShutdown, }, } @@ -1483,23 +1484,23 @@ func TestTaskUpdate(t *testing.T) { }) assert.NoError(t, err) - testTask1.Status = api.TaskStatus{State: api.TaskStateAssigned} - testTask2.Status = api.TaskStatus{State: api.TaskStateAssigned} - testTask3.Status = api.TaskStatus{State: api.TaskStateAssigned} - testTask4.Status = api.TaskStatus{State: api.TaskStateRunning} + testTask1.Status = &api.TaskStatus{State: api.TaskStateAssigned} + testTask2.Status = &api.TaskStatus{State: api.TaskStateAssigned} + testTask3.Status = &api.TaskStatus{State: api.TaskStateAssigned} + testTask4.Status = &api.TaskStatus{State: api.TaskStateRunning} updReq := &api.UpdateTaskStatusRequest{ Updates: []*api.UpdateTaskStatusRequest_TaskStatusUpdate{ { TaskID: testTask1.ID, - Status: &testTask1.Status, + Status: testTask1.Status, }, { TaskID: testTask2.ID, - Status: &testTask2.Status, + Status: testTask2.Status, }, { TaskID: testTask4.ID, - Status: &testTask4.Status, + Status: testTask4.Status, }, }, } @@ -1521,7 +1522,7 @@ func TestTaskUpdate(t *testing.T) { updReq.Updates = []*api.UpdateTaskStatusRequest_TaskStatusUpdate{ { TaskID: testTask3.ID, - Status: &testTask3.Status, + Status: testTask3.Status, }, } @@ -1538,18 +1539,18 @@ func TestTaskUpdate(t *testing.T) { assert.NotNil(t, storeTask1) storeTask2 := store.GetTask(readTx, testTask2.ID) assert.NotNil(t, storeTask2) - assert.Equal(t, storeTask1.Status.State, api.TaskStateAssigned) - assert.Equal(t, storeTask2.Status.State, api.TaskStateAssigned) + assert.Equal(t, storeTask1.GetStatus().GetState(), api.TaskStateAssigned) + assert.Equal(t, storeTask2.GetStatus().GetState(), api.TaskStateAssigned) storeTask3 := store.GetTask(readTx, testTask3.ID) assert.NotNil(t, storeTask3) - assert.Equal(t, storeTask3.Status.State, api.TaskStateNew) + assert.Equal(t, storeTask3.GetStatus().GetState(), api.TaskStateNew) // The update to task4's state should be ignored because it // would have moved backwards. storeTask4 := store.GetTask(readTx, testTask4.ID) assert.NotNil(t, storeTask4) - assert.Equal(t, storeTask4.Status.State, api.TaskStateShutdown) + assert.Equal(t, storeTask4.GetStatus().GetState(), api.TaskStateShutdown) }) } @@ -1567,12 +1568,12 @@ func TestTaskUpdateNoCert(t *testing.T) { }) assert.NoError(t, err) - testTask1.Status = api.TaskStatus{State: api.TaskStateAssigned} + testTask1.Status = &api.TaskStatus{State: api.TaskStateAssigned} updReq := &api.UpdateTaskStatusRequest{ Updates: []*api.UpdateTaskStatusRequest_TaskStatusUpdate{ { TaskID: testTask1.ID, - Status: &testTask1.Status, + Status: testTask1.Status, }, }, } @@ -1926,12 +1927,12 @@ func makeTasksAndDependenciesWithRedundantReferences(t *testing.T, nodeID string func taskSpecFromDependencies(dependencies ...interface{}) api.TaskSpec { var secretRefs []*api.SecretReference var configRefs []*api.ConfigReference - var resourceRefs []api.ResourceReference + var resourceRefs []*api.ResourceReference for _, d := range dependencies { switch v := d.(type) { case *api.Secret: secretRefs = append(secretRefs, &api.SecretReference{ - SecretName: v.Spec.Annotations.Name, + SecretName: v.GetSpec().GetAnnotations().GetName(), SecretID: v.ID, Target: &api.SecretReference_File{ File: &api.FileTarget{ @@ -1944,7 +1945,7 @@ func taskSpecFromDependencies(dependencies ...interface{}) api.TaskSpec { }) case *api.Config: configRefs = append(configRefs, &api.ConfigReference{ - ConfigName: v.Spec.Annotations.Name, + ConfigName: v.GetSpec().GetAnnotations().GetName(), ConfigID: v.ID, Target: &api.ConfigReference_File{ File: &api.FileTarget{ @@ -1956,7 +1957,7 @@ func taskSpecFromDependencies(dependencies ...interface{}) api.TaskSpec { }, }) case *api.ResourceReference: - resourceRefs = append(resourceRefs, api.ResourceReference{ + resourceRefs = append(resourceRefs, &api.ResourceReference{ ResourceID: v.ResourceID, ResourceType: v.ResourceType, }) @@ -2014,13 +2015,13 @@ func TestOldTasks(t *testing.T) { testTask1 := &api.Task{ NodeID: nodeID, ID: "testTask1", - Status: api.TaskStatus{State: api.TaskStateAssigned}, + Status: &api.TaskStatus{State: api.TaskStateAssigned}, DesiredState: api.TaskStateReady, } testTask2 := &api.Task{ NodeID: nodeID, ID: "testTask2", - Status: api.TaskStatus{State: api.TaskStateAssigned}, + Status: &api.TaskStatus{State: api.TaskStateAssigned}, DesiredState: api.TaskStateReady, } @@ -2063,7 +2064,7 @@ func TestOldTasks(t *testing.T) { return errors.New("no task") } task.NodeID = nodeID - task.Status = api.TaskStatus{State: api.TaskStateAssigned} + task.Status = &api.TaskStatus{State: api.TaskStateAssigned} task.DesiredState = api.TaskStateRunning return store.UpdateTask(tx, task) })) @@ -2111,13 +2112,13 @@ func TestOldTasksStatusChange(t *testing.T) { testTask1 := &api.Task{ NodeID: nodeID, ID: "testTask1", - Status: api.TaskStatus{State: api.TaskStateAssigned}, + Status: &api.TaskStatus{State: api.TaskStateAssigned}, DesiredState: api.TaskStateReady, } testTask2 := &api.Task{ NodeID: nodeID, ID: "testTask2", - Status: api.TaskStatus{State: api.TaskStateAssigned}, + Status: &api.TaskStatus{State: api.TaskStateAssigned}, DesiredState: api.TaskStateReady, } @@ -2161,7 +2162,7 @@ func TestOldTasksStatusChange(t *testing.T) { } task.NodeID = nodeID // only Status is changed for task1 - task.Status = api.TaskStatus{State: api.TaskStateFailed, Err: "1234"} + task.Status = &api.TaskStatus{State: api.TaskStateFailed, Err: "1234"} task.DesiredState = api.TaskStateReady return store.UpdateTask(tx, task) })) @@ -2200,12 +2201,12 @@ func TestOldTasksBatch(t *testing.T) { testTask1 := &api.Task{ NodeID: nodeID, ID: "testTask1", - Status: api.TaskStatus{State: api.TaskStateAssigned}, + Status: &api.TaskStatus{State: api.TaskStateAssigned}, } testTask2 := &api.Task{ NodeID: nodeID, ID: "testTask2", - Status: api.TaskStatus{State: api.TaskStateAssigned}, + Status: &api.TaskStatus{State: api.TaskStateAssigned}, } stream, err := gd.Clients[0].Tasks(context.Background(), &api.TasksRequest{SessionID: expectedSessionID}) @@ -2287,7 +2288,7 @@ func TestClusterUpdatesSendMessages(t *testing.T) { { msg, err = stream.Recv() require.NoError(t, err) - require.Equal(t, expected, msg) + require.True(t, proto.Equal(expected, msg)) } // changing the peers results in a new message with updated managers @@ -2298,7 +2299,7 @@ func TestClusterUpdatesSendMessages(t *testing.T) { require.NoError(t, err) require.Len(t, msg.Managers, 2) expected.Managers = msg.Managers - require.Equal(t, expected, msg) + require.True(t, proto.Equal(expected, msg)) } // changing the rootCA cert and has in the cluster results in a new message with an updated cert @@ -2317,7 +2318,7 @@ func TestClusterUpdatesSendMessages(t *testing.T) { { msg, err = stream.Recv() require.NoError(t, err) - require.Equal(t, expected, msg) + require.True(t, proto.Equal(expected, msg)) } } diff --git a/manager/encryption/encryption.go b/manager/encryption/encryption.go index 45d98cf6ef..e1f0833359 100644 --- a/manager/encryption/encryption.go +++ b/manager/encryption/encryption.go @@ -7,7 +7,7 @@ import ( "io" "strings" - "github.com/gogo/protobuf/proto" + "google.golang.org/protobuf/proto" "github.com/moby/swarmkit/v2/api" "github.com/pkg/errors" ) @@ -52,7 +52,7 @@ func (n noopCrypter) Encrypt(data []byte) (*api.MaybeEncryptedRecord, error) { } func (n noopCrypter) Algorithm() api.MaybeEncryptedRecord_Algorithm { - return api.MaybeEncryptedRecord_NotEncrypted + return api.NotEncrypted } // NoopCrypter is just a pass-through crypter - it does not actually encrypt or diff --git a/manager/encryption/fernet.go b/manager/encryption/fernet.go index fea08d2939..c6b4098d2f 100644 --- a/manager/encryption/fernet.go +++ b/manager/encryption/fernet.go @@ -22,7 +22,7 @@ func NewFernet(key []byte) Fernet { // Algorithm returns the type of algorithm this is (Fernet, which uses AES128-CBC) func (f Fernet) Algorithm() api.MaybeEncryptedRecord_Algorithm { - return api.MaybeEncryptedRecord_FernetAES128CBC + return api.FernetAES128CBC } // Encrypt encrypts some bytes and returns an encrypted record diff --git a/manager/encryption/fernet_test.go b/manager/encryption/fernet_test.go index 3cf951fda2..33a36d160b 100644 --- a/manager/encryption/fernet_test.go +++ b/manager/encryption/fernet_test.go @@ -55,7 +55,7 @@ func TestFernetInvalidAlgorithm(t *testing.T) { crypter := NewFernet(key) er, err := crypter.Encrypt([]byte("Hello again world")) require.NoError(t, err) - er.Algorithm = api.MaybeEncryptedRecord_NotEncrypted + er.Algorithm = api.NotEncrypted _, err = crypter.Decrypt(*er) require.Error(t, err) diff --git a/manager/encryption/nacl.go b/manager/encryption/nacl.go index 2928d1294a..68acfc4ccc 100644 --- a/manager/encryption/nacl.go +++ b/manager/encryption/nacl.go @@ -31,7 +31,7 @@ func NewNACLSecretbox(key []byte) NACLSecretbox { // Algorithm returns the type of algorithm this is (NACL Secretbox using XSalsa20 and Poly1305) func (n NACLSecretbox) Algorithm() api.MaybeEncryptedRecord_Algorithm { - return api.MaybeEncryptedRecord_NACLSecretboxSalsa20Poly1305 + return api.NACLSecretboxSalsa20Poly1305 } // Encrypt encrypts some bytes and returns an encrypted record diff --git a/manager/encryption/nacl_test.go b/manager/encryption/nacl_test.go index ee4d0b03d6..8b70568221 100644 --- a/manager/encryption/nacl_test.go +++ b/manager/encryption/nacl_test.go @@ -51,7 +51,7 @@ func TestNACLSecretboxInvalidAlgorithm(t *testing.T) { crypter := NewNACLSecretbox(key) er, err := crypter.Encrypt([]byte("Hello again world")) require.NoError(t, err) - er.Algorithm = api.MaybeEncryptedRecord_NotEncrypted + er.Algorithm = api.NotEncrypted _, err = crypter.Decrypt(*er) require.Error(t, err) diff --git a/manager/keymanager/keymanager.go b/manager/keymanager/keymanager.go index 331c396b62..f6464d8e06 100644 --- a/manager/keymanager/keymanager.go +++ b/manager/keymanager/keymanager.go @@ -40,8 +40,8 @@ const ( // map of subsystems and corresponding encryption algorithm. Initially only // AES_128 in GCM mode is supported. var subsysToAlgo = map[string]api.EncryptionKey_Algorithm{ - SubsystemGossip: api.AES_128_GCM, - SubsystemIPSec: api.AES_128_GCM, + SubsystemGossip: api.EncryptionKey_AES_128_GCM, + SubsystemIPSec: api.EncryptionKey_AES_128_GCM, } type keyRing struct { diff --git a/manager/keymanager/keymanager_test.go b/manager/keymanager/keymanager_test.go index c957d74f55..f197845805 100644 --- a/manager/keymanager/keymanager_test.go +++ b/manager/keymanager/keymanager_test.go @@ -13,7 +13,7 @@ import ( func createClusterSpec(name string) *api.ClusterSpec { return &api.ClusterSpec{ - Annotations: api.Annotations{ + Annotations: &api.Annotations{ Name: name, }, } @@ -24,7 +24,7 @@ func createCluster(t *testing.T, s *store.MemoryStore, id, name string) *api.Clu cluster := &api.Cluster{ ID: id, - Spec: *spec, + Spec: spec, } assert.NoError(t, s.Update(func(tx store.Tx) error { return store.CreateCluster(tx, cluster) diff --git a/manager/logbroker/broker_test.go b/manager/logbroker/broker_test.go index cf84f16dae..45fa941a68 100644 --- a/manager/logbroker/broker_test.go +++ b/manager/logbroker/broker_test.go @@ -10,8 +10,6 @@ import ( "time" "google.golang.org/grpc" - - gogotypes "github.com/gogo/protobuf/types" "github.com/moby/swarmkit/v2/api" "github.com/moby/swarmkit/v2/ca" "github.com/moby/swarmkit/v2/ca/testutils" @@ -93,7 +91,7 @@ func TestLogBrokerLogs(t *testing.T) { wg.Done() }() - msgctx := api.LogContext{ + msgctx := &api.LogContext{ NodeID: agentSecurity.ClientTLSCreds.NodeID(), ServiceID: serviceID, TaskID: taskID, @@ -101,7 +99,7 @@ func TestLogBrokerLogs(t *testing.T) { for i := 0; i < nLogMessagesPerTask; i++ { require.NoError(t, publisher.Send(&api.PublishLogsMessage{ SubscriptionID: subscription.ID, - Messages: []api.LogMessage{newLogMessage(msgctx, "log message number %d", i)}, + Messages: []*api.LogMessage{newLogMessage(msgctx, "log message number %d", i)}, })) } }(nodeID, serviceID, taskID) @@ -394,7 +392,7 @@ func TestLogBrokerNoFollow(t *testing.T) { if err := store.CreateTask(tx, &api.Task{ ID: "task1", ServiceID: "service", - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateRunning, }, NodeID: agent1Security.ServerTLSCreds.NodeID(), @@ -405,7 +403,7 @@ func TestLogBrokerNoFollow(t *testing.T) { return store.CreateTask(tx, &api.Task{ ID: "task2", ServiceID: "service", - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateRunning, }, NodeID: agent2Security.ServerTLSCreds.NodeID(), @@ -447,8 +445,8 @@ func TestLogBrokerNoFollow(t *testing.T) { require.NoError(t, publisher.Send(&api.PublishLogsMessage{ SubscriptionID: subscription1.ID, - Messages: []api.LogMessage{ - newLogMessage(api.LogContext{ + Messages: []*api.LogMessage{ + newLogMessage(&api.LogContext{ NodeID: agent1Security.ServerTLSCreds.NodeID(), ServiceID: "service", TaskID: "task1", @@ -470,8 +468,8 @@ func TestLogBrokerNoFollow(t *testing.T) { require.NoError(t, publisher.Send(&api.PublishLogsMessage{ SubscriptionID: subscription2.ID, - Messages: []api.LogMessage{ - newLogMessage(api.LogContext{ + Messages: []*api.LogMessage{ + newLogMessage(&api.LogContext{ NodeID: agent2Security.ServerTLSCreds.NodeID(), ServiceID: "service", TaskID: "task2", @@ -512,7 +510,7 @@ func TestLogBrokerNoFollowMissingNode(t *testing.T) { if err := store.CreateTask(tx, &api.Task{ ID: "task1", ServiceID: "service", - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateRunning, }, NodeID: agentSecurity.ServerTLSCreds.NodeID(), @@ -524,7 +522,7 @@ func TestLogBrokerNoFollowMissingNode(t *testing.T) { ID: "task2", ServiceID: "service", NodeID: "node-2", - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateRunning, }, }) @@ -559,8 +557,8 @@ func TestLogBrokerNoFollowMissingNode(t *testing.T) { require.NoError(t, publisher.Send(&api.PublishLogsMessage{ SubscriptionID: subscription.ID, - Messages: []api.LogMessage{ - newLogMessage(api.LogContext{ + Messages: []*api.LogMessage{ + newLogMessage(&api.LogContext{ NodeID: agentSecurity.ServerTLSCreds.NodeID(), ServiceID: "service", TaskID: "task1", @@ -594,7 +592,7 @@ func TestLogBrokerNoFollowNotYetRunningTask(t *testing.T) { return store.CreateTask(tx, &api.Task{ ID: "task1", ServiceID: "service", - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateNew, }, }) @@ -639,7 +637,7 @@ func TestLogBrokerNoFollowDisconnect(t *testing.T) { if err := store.CreateTask(tx, &api.Task{ ID: "task1", ServiceID: "service", - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateRunning, }, NodeID: agent1Security.ServerTLSCreds.NodeID(), @@ -650,7 +648,7 @@ func TestLogBrokerNoFollowDisconnect(t *testing.T) { return store.CreateTask(tx, &api.Task{ ID: "task2", ServiceID: "service", - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateRunning, }, NodeID: agent2Security.ServerTLSCreds.NodeID(), @@ -692,8 +690,8 @@ func TestLogBrokerNoFollowDisconnect(t *testing.T) { require.NoError(t, publisher.Send(&api.PublishLogsMessage{ SubscriptionID: subscription1.ID, - Messages: []api.LogMessage{ - newLogMessage(api.LogContext{ + Messages: []*api.LogMessage{ + newLogMessage(&api.LogContext{ NodeID: agent1Security.ServerTLSCreds.NodeID(), ServiceID: "service", TaskID: "task1", @@ -813,14 +811,17 @@ func testBrokerClient(t *testing.T, tca *testutils.TestCA, addr string) (api.Log func printLogMessages(msgs ...api.LogMessage) { for _, msg := range msgs { - ts, _ := gogotypes.TimestampFromProto(msg.Timestamp) + var ts time.Time + if msg.Timestamp != nil { + ts = msg.Timestamp.AsTime() + } fmt.Printf("%v %v %s\n", msg.Context, ts, string(msg.Data)) } } // newLogMessage is just a helper to build a new log message. -func newLogMessage(msgctx api.LogContext, format string, vs ...interface{}) api.LogMessage { - return api.LogMessage{ +func newLogMessage(msgctx *api.LogContext, format string, vs ...interface{}) *api.LogMessage { + return &api.LogMessage{ Context: msgctx, Timestamp: ptypes.MustTimestampProto(time.Now()), Data: []byte(fmt.Sprintf(format, vs...)), diff --git a/manager/manager.go b/manager/manager.go index edd9702072..eb0253480a 100644 --- a/manager/manager.go +++ b/manager/manager.go @@ -15,7 +15,6 @@ import ( "github.com/docker/go-events" gmetrics "github.com/docker/go-metrics" - gogotypes "github.com/gogo/protobuf/types" grpc_prometheus "github.com/grpc-ecosystem/go-grpc-prometheus" "github.com/moby/swarmkit/v2/api" "github.com/moby/swarmkit/v2/ca" @@ -50,6 +49,7 @@ import ( "github.com/pkg/errors" "google.golang.org/grpc" "google.golang.org/grpc/credentials" + "google.golang.org/protobuf/types/known/durationpb" ) const ( @@ -1071,9 +1071,8 @@ func (m *Manager) becomeLeader(ctx context.Context) { cluster = store.GetCluster(tx, clusterID) }) var defaultConfig = dispatcher.DefaultConfig() - heartbeatPeriod, err := gogotypes.DurationFromProto(cluster.Spec.Dispatcher.HeartbeatPeriod) - if err == nil { - defaultConfig.HeartbeatPeriod = heartbeatPeriod + if cluster.Spec.GetDispatcher().GetHeartbeatPeriod() != nil { + defaultConfig.HeartbeatPeriod = cluster.Spec.Dispatcher.HeartbeatPeriod.AsDuration() } d.Init(m.raftNode, defaultConfig, drivers.New(m.config.PluginGetter), m.config.SecurityConfig) if err := d.Run(ctx); err != nil { @@ -1210,25 +1209,25 @@ func defaultClusterObject( return &api.Cluster{ ID: clusterID, - Spec: api.ClusterSpec{ - Annotations: api.Annotations{ + Spec: &api.ClusterSpec{ + Annotations: &api.Annotations{ Name: store.DefaultClusterName, }, - Orchestration: api.OrchestrationConfig{ + Orchestration: &api.OrchestrationConfig{ TaskHistoryRetentionLimit: defaultTaskHistoryRetentionLimit, }, - Dispatcher: api.DispatcherConfig{ - HeartbeatPeriod: gogotypes.DurationProto(dispatcher.DefaultHeartBeatPeriod), + Dispatcher: &api.DispatcherConfig{ + HeartbeatPeriod: durationpb.New(dispatcher.DefaultHeartBeatPeriod), }, - Raft: raftCfg, - CAConfig: initialCAConfig, - EncryptionConfig: encryptionConfig, + Raft: &raftCfg, + CAConfig: &initialCAConfig, + EncryptionConfig: &encryptionConfig, }, - RootCA: api.RootCA{ + RootCA: &api.RootCA{ CAKey: caKey, CACert: rootCA.Certs, CACertHash: rootCA.Digest.String(), - JoinTokens: api.JoinTokens{ + JoinTokens: &api.JoinTokens{ Worker: ca.GenerateJoinToken(rootCA, fips), Manager: ca.GenerateJoinToken(rootCA, fips), }, @@ -1245,14 +1244,14 @@ func defaultClusterObject( func managerNode(nodeID string, availability api.NodeSpec_Availability, vxlanPort uint32) *api.Node { return &api.Node{ ID: nodeID, - Certificate: api.Certificate{ + Certificate: &api.Certificate{ CN: nodeID, Role: api.NodeRoleManager, - Status: api.IssuanceStatus{ + Status: &api.IssuanceStatus{ State: api.IssuanceStateIssued, }, }, - Spec: api.NodeSpec{ + Spec: &api.NodeSpec{ DesiredRole: api.NodeRoleManager, Membership: api.NodeMembershipAccepted, Availability: availability, @@ -1268,9 +1267,9 @@ func managerNode(nodeID string, availability api.NodeSpec_Availability, vxlanPor func newIngressNetwork() *api.Network { return &api.Network{ ID: identity.NewID(), - Spec: api.NetworkSpec{ + Spec: &api.NetworkSpec{ Ingress: true, - Annotations: api.Annotations{ + Annotations: &api.Annotations{ Name: "ingress", }, DriverConfig: &api.Driver{}, @@ -1291,8 +1290,8 @@ func newIngressNetwork() *api.Network { func newPredefinedNetwork(name, driver string) *api.Network { return &api.Network{ ID: identity.NewID(), - Spec: api.NetworkSpec{ - Annotations: api.Annotations{ + Spec: &api.NetworkSpec{ + Annotations: &api.Annotations{ Name: name, Labels: map[string]string{ networkallocator.PredefinedLabel: "true", diff --git a/manager/manager_test.go b/manager/manager_test.go index 870548ffed..8c3277de54 100644 --- a/manager/manager_test.go +++ b/manager/manager_test.go @@ -25,6 +25,7 @@ import ( "github.com/moby/swarmkit/v2/manager/state/store" "github.com/moby/swarmkit/v2/testutils" "github.com/stretchr/testify/require" + "google.golang.org/protobuf/proto" ) func TestManager(t *testing.T) { @@ -164,10 +165,10 @@ func TestManager(t *testing.T) { })) require.NotNil(t, cluster) require.Len(t, cluster.UnlockKeys, 1) - require.Equal(t, &api.EncryptionKey{ + require.True(t, proto.Equal(&api.EncryptionKey{ Subsystem: ca.ManagerRole, Key: []byte("kek"), - }, cluster.UnlockKeys[0]) + }, cluster.UnlockKeys[0]), "encryption key should match") // Test removal of the agent node agentID := agentSecurityConfig.ClientTLSCreds.NodeID() @@ -175,7 +176,7 @@ func TestManager(t *testing.T) { return store.CreateNode(tx, &api.Node{ ID: agentID, - Certificate: api.Certificate{ + Certificate: &api.Certificate{ Role: api.NodeRoleWorker, CN: agentID, }, @@ -185,7 +186,7 @@ func TestManager(t *testing.T) { controlClient = api.NewControlClient(controlConn) _, err = controlClient.CreateNetwork(context.Background(), &api.CreateNetworkRequest{ Spec: &api.NetworkSpec{ - Annotations: api.Annotations{ + Annotations: &api.Annotations{ Name: "test-network-bad-driver", }, DriverConfig: &api.Driver{ @@ -302,7 +303,7 @@ func TestManagerLockUnlock(t *testing.T) { spec.EncryptionConfig.AutoLockManagers = true updateResp, err := client.UpdateCluster(tc.Context, &api.UpdateClusterRequest{ ClusterID: cluster.ID, - ClusterVersion: &cluster.Meta.Version, + ClusterVersion: cluster.Meta.Version, Spec: spec, }) if testutils.ErrorDesc(err) == "update out of sequence" { @@ -375,7 +376,7 @@ func TestManagerLockUnlock(t *testing.T) { spec.EncryptionConfig.AutoLockManagers = false _, err = client.UpdateCluster(tc.Context, &api.UpdateClusterRequest{ ClusterID: cluster.ID, - ClusterVersion: &cluster.Meta.Version, + ClusterVersion: cluster.Meta.Version, Spec: spec, }) if testutils.ErrorDesc(err) == "update out of sequence" { diff --git a/manager/metrics/collector.go b/manager/metrics/collector.go index b283092418..90462807ec 100644 --- a/manager/metrics/collector.go +++ b/manager/metrics/collector.go @@ -177,15 +177,15 @@ func (c *Collector) handleNodeEvent(event events.Event) { } // Skip updates if nothing changed. - if prevNode != nil && newNode != nil && prevNode.Status.State == newNode.Status.State { + if prevNode != nil && newNode != nil && prevNode.GetStatus().GetState() == newNode.GetStatus().GetState() { return } if prevNode != nil { - nodesMetric.WithValues(strings.ToLower(prevNode.Status.State.String())).Dec(1) + nodesMetric.WithValues(strings.ToLower(prevNode.GetStatus().GetState().String())).Dec(1) } if newNode != nil { - nodesMetric.WithValues(strings.ToLower(newNode.Status.State.String())).Inc(1) + nodesMetric.WithValues(strings.ToLower(newNode.GetStatus().GetState().String())).Inc(1) } } @@ -202,18 +202,18 @@ func (c *Collector) handleTaskEvent(event events.Event) { } // Skip updates if nothing changed. - if prevTask != nil && newTask != nil && prevTask.Status.State == newTask.Status.State { + if prevTask != nil && newTask != nil && prevTask.GetStatus().GetState() == newTask.GetStatus().GetState() { return } if prevTask != nil { tasksMetric.WithValues( - strings.ToLower(prevTask.Status.State.String()), + strings.ToLower(prevTask.GetStatus().GetState().String()), ).Dec(1) } if newTask != nil { tasksMetric.WithValues( - strings.ToLower(newTask.Status.State.String()), + strings.ToLower(newTask.GetStatus().GetState().String()), ).Inc(1) } } diff --git a/manager/orchestrator/constraintenforcer/constraint_enforcer.go b/manager/orchestrator/constraintenforcer/constraint_enforcer.go index 12fa40151f..20d88d2494 100644 --- a/manager/orchestrator/constraintenforcer/constraint_enforcer.go +++ b/manager/orchestrator/constraintenforcer/constraint_enforcer.go @@ -154,12 +154,12 @@ loop: if service := services[t.ServiceID]; service != nil { // This task is associated with a service, so we use the service's // current placement constraints. - placement = service.Spec.Task.Placement + placement = service.GetSpec().GetTask().GetPlacement() } else { // This task is not associated with a service (or the service no // longer exists), so we use the placement constraints from the // original task spec. - placement = t.Spec.Placement + placement = t.GetSpec().GetPlacement() } if placement != nil && len(placement.Constraints) > 0 { constraints, _ := constraint.Parse(placement.Constraints) @@ -171,18 +171,18 @@ loop: // Ensure that the task assigned to the node // still satisfies the resource limits. - if t.Spec.Resources != nil && t.Spec.Resources.Reservations != nil { - if t.Spec.Resources.Reservations.MemoryBytes > available.MemoryBytes { + if t.GetSpec().GetResources() != nil && t.GetSpec().GetResources().GetReservations() != nil { + if t.GetSpec().GetResources().GetReservations().GetMemoryBytes() > available.MemoryBytes { removeTasks[t.ID] = t continue } - if t.Spec.Resources.Reservations.NanoCPUs > available.NanoCPUs { + if t.GetSpec().GetResources().GetReservations().GetNanoCPUs() > available.NanoCPUs { removeTasks[t.ID] = t continue } - available.MemoryBytes -= t.Spec.Resources.Reservations.MemoryBytes - available.NanoCPUs -= t.Spec.Resources.Reservations.NanoCPUs + available.MemoryBytes -= t.GetSpec().GetResources().GetReservations().GetMemoryBytes() + available.NanoCPUs -= t.GetSpec().GetResources().GetReservations().GetNanoCPUs() } // Ensure that the task assigned to the node diff --git a/manager/orchestrator/constraintenforcer/constraint_enforcer_test.go b/manager/orchestrator/constraintenforcer/constraint_enforcer_test.go index 527af9d1d9..a81f4e8571 100644 --- a/manager/orchestrator/constraintenforcer/constraint_enforcer_test.go +++ b/manager/orchestrator/constraintenforcer/constraint_enforcer_test.go @@ -93,26 +93,26 @@ func TestConstraintEnforcer(t *testing.T) { // this node starts as a worker, but then is changed to a manager. { ID: "id1", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "name1", }, Availability: api.NodeAvailabilityActive, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, Role: api.NodeRoleWorker, }, { ID: "id2", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "name2", }, Availability: api.NodeAvailabilityActive, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, Description: &api.NodeDescription{ @@ -129,12 +129,12 @@ func TestConstraintEnforcer(t *testing.T) { { ID: "id0", DesiredState: api.TaskStateRunning, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Placement: &api.Placement{ Constraints: []string{"node.role == manager"}, }, }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateNew, }, NodeID: "id1", @@ -143,7 +143,7 @@ func TestConstraintEnforcer(t *testing.T) { { ID: "id1", DesiredState: api.TaskStateRunning, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateNew, }, NodeID: "id1", @@ -152,7 +152,7 @@ func TestConstraintEnforcer(t *testing.T) { { ID: "id5", DesiredState: api.TaskStateCompleted, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateNew, }, NodeID: "id1", @@ -163,12 +163,12 @@ func TestConstraintEnforcer(t *testing.T) { { ID: "id2", DesiredState: api.TaskStateRunning, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Placement: &api.Placement{ Constraints: []string{"node.role == worker"}, }, }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateRunning, }, NodeID: "id1", @@ -176,7 +176,7 @@ func TestConstraintEnforcer(t *testing.T) { { ID: "id3", DesiredState: api.TaskStateNew, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateNew, }, NodeID: "id2", @@ -184,14 +184,14 @@ func TestConstraintEnforcer(t *testing.T) { { ID: "id4", DesiredState: api.TaskStateReady, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Resources: &api.ResourceRequirements{ Reservations: &api.Resources{ MemoryBytes: 9e8, }, }, }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStatePending, }, NodeID: "id2", @@ -290,8 +290,8 @@ func TestConstraintEnforcer(t *testing.T) { func TestOutdatedTaskPlacementConstraints(t *testing.T) { node := &api.Node{ ID: "id0", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "node1", Labels: map[string]string{ "foo": "bar", @@ -299,7 +299,7 @@ func TestOutdatedTaskPlacementConstraints(t *testing.T) { }, Availability: api.NodeAvailabilityActive, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, Role: api.NodeRoleWorker, @@ -307,11 +307,11 @@ func TestOutdatedTaskPlacementConstraints(t *testing.T) { service := &api.Service{ ID: "id1", - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "service1", }, - Task: api.TaskSpec{ + Task: &api.TaskSpec{ Placement: &api.Placement{ Constraints: []string{ "node.labels.foo == bar", @@ -323,12 +323,12 @@ func TestOutdatedTaskPlacementConstraints(t *testing.T) { task := &api.Task{ ID: "id2", - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Placement: nil, // Note: No placement constraints. }, ServiceID: service.ID, NodeID: node.ID, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateRunning, }, DesiredState: api.TaskStateRunning, @@ -375,13 +375,13 @@ func TestOutdatedTaskPlacementConstraints(t *testing.T) { func TestGenericResourcesPlacementConstraints(t *testing.T) { node := &api.Node{ ID: "id0", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "node1", }, Availability: api.NodeAvailabilityActive, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, Role: api.NodeRoleWorker, @@ -394,11 +394,11 @@ func TestGenericResourcesPlacementConstraints(t *testing.T) { service := &api.Service{ ID: "id1", - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "service1", }, - Task: api.TaskSpec{ + Task: &api.TaskSpec{ Resources: &api.ResourceRequirements{ Reservations: &api.Resources{ Generic: genericresource.NewSet("mygeneric", "1"), @@ -410,7 +410,7 @@ func TestGenericResourcesPlacementConstraints(t *testing.T) { task := &api.Task{ ID: "id2", - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Resources: &api.ResourceRequirements{ Reservations: &api.Resources{ Generic: genericresource.NewSet("mygeneric", "1"), @@ -419,7 +419,7 @@ func TestGenericResourcesPlacementConstraints(t *testing.T) { }, ServiceID: service.ID, NodeID: node.ID, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateRunning, }, DesiredState: api.TaskStateRunning, @@ -471,13 +471,13 @@ func TestGenericResourcesPlacementConstraints(t *testing.T) { func TestGenericResourcesPlacementConstraintsDiscrete(t *testing.T) { node := &api.Node{ ID: "id0", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "node1", }, Availability: api.NodeAvailabilityActive, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, Role: api.NodeRoleWorker, @@ -499,11 +499,11 @@ func TestGenericResourcesPlacementConstraintsDiscrete(t *testing.T) { service := &api.Service{ ID: "id1", - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "service1", }, - Task: api.TaskSpec{ + Task: &api.TaskSpec{ Resources: &api.ResourceRequirements{ Reservations: &api.Resources{ Generic: []*api.GenericResource{ @@ -522,7 +522,7 @@ func TestGenericResourcesPlacementConstraintsDiscrete(t *testing.T) { task := &api.Task{ ID: "id2", - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Resources: &api.ResourceRequirements{ Reservations: &api.Resources{ Generic: []*api.GenericResource{ @@ -538,7 +538,7 @@ func TestGenericResourcesPlacementConstraintsDiscrete(t *testing.T) { }, ServiceID: service.ID, NodeID: node.ID, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateRunning, }, DesiredState: api.TaskStateRunning, diff --git a/manager/orchestrator/global/global.go b/manager/orchestrator/global/global.go index ba32d69d27..b823d68953 100644 --- a/manager/orchestrator/global/global.go +++ b/manager/orchestrator/global/global.go @@ -194,7 +194,7 @@ func (g *Orchestrator) FixTask(ctx context.Context, batch *store.Batch, t *api.T } // restart a task if it fails - if t.Status.State > api.TaskStateRunning { + if t.GetStatus().GetState() > api.TaskStateRunning { g.restartTasks[t.ID] = struct{}{} } } @@ -211,7 +211,7 @@ func (g *Orchestrator) handleTaskChange(_ context.Context, t *api.Task) { } // if a task has passed running, restart it - if t.Status.State > api.TaskStateRunning { + if t.GetStatus().GetState() > api.TaskStateRunning { g.restartTasks[t.ID] = struct{}{} } } @@ -312,7 +312,7 @@ func (g *Orchestrator) reconcileServices(ctx context.Context, serviceIDs []strin continue } - if node.Spec.Availability == api.NodeAvailabilityPause { + if node.GetSpec().GetAvailability() == api.NodeAvailabilityPause { // the node is paused, so we won't add or update // any tasks continue @@ -351,7 +351,7 @@ func (g *Orchestrator) reconcileServices(ctx context.Context, serviceIDs []strin // updateNode updates g.nodes based on the current node value func (g *Orchestrator) updateNode(node *api.Node) { - if node.Spec.Availability == api.NodeAvailabilityDrain || node.Status.State == api.NodeStatus_DOWN { + if node.GetSpec().GetAvailability() == api.NodeAvailabilityDrain || node.GetStatus().GetState() == api.NodeStatus_DOWN { delete(g.nodes, node.ID) } else { g.nodes[node.ID] = node @@ -362,8 +362,8 @@ func (g *Orchestrator) updateNode(node *api.Node) { func (g *Orchestrator) updateService(service *api.Service) { var constraints []constraint.Constraint - if service.Spec.Task.Placement != nil && len(service.Spec.Task.Placement.Constraints) != 0 { - constraints, _ = constraint.Parse(service.Spec.Task.Placement.Constraints) + if service.GetSpec().GetTask().GetPlacement() != nil && len(service.GetSpec().GetTask().GetPlacement().GetConstraints()) != 0 { + constraints, _ = constraint.Parse(service.GetSpec().GetTask().GetPlacement().GetConstraints()) } g.globalServices[service.ID] = globalService{ @@ -374,19 +374,19 @@ func (g *Orchestrator) updateService(service *api.Service) { // reconcileOneNode checks all global services on one node func (g *Orchestrator) reconcileOneNode(ctx context.Context, node *api.Node) { - if node.Spec.Availability == api.NodeAvailabilityDrain { + if node.GetSpec().GetAvailability() == api.NodeAvailabilityDrain { log.G(ctx).Debugf("global orchestrator: node %s in drain state, shutting down its tasks", node.ID) g.foreachTaskFromNode(ctx, node, g.shutdownTask) return } - if node.Status.State == api.NodeStatus_DOWN { + if node.GetStatus().GetState() == api.NodeStatus_DOWN { log.G(ctx).Debugf("global orchestrator: node %s is down, shutting down its tasks", node.ID) g.foreachTaskFromNode(ctx, node, g.shutdownTask) return } - if node.Spec.Availability == api.NodeAvailabilityPause { + if node.GetSpec().GetAvailability() == api.NodeAvailabilityPause { // the node is paused, so we won't add or update tasks return } @@ -509,7 +509,7 @@ func (g *Orchestrator) tickTasks(ctx context.Context) { return nil } - if node.Spec.Availability == api.NodeAvailabilityPause || + if node.GetSpec().GetAvailability() == api.NodeAvailabilityPause || !constraint.NodeMatches(serviceEntry.constraints, node) { t.DesiredState = api.TaskStateShutdown return store.UpdateTask(tx, t) diff --git a/manager/orchestrator/global/global_test.go b/manager/orchestrator/global/global_test.go index b6d96b44a0..cac0e86f8e 100644 --- a/manager/orchestrator/global/global_test.go +++ b/manager/orchestrator/global/global_test.go @@ -6,8 +6,8 @@ import ( "time" "github.com/docker/go-events" - gogotypes "github.com/gogo/protobuf/types" "github.com/moby/swarmkit/v2/api" + "google.golang.org/protobuf/types/known/durationpb" "github.com/moby/swarmkit/v2/manager/orchestrator/testutils" "github.com/moby/swarmkit/v2/manager/state" "github.com/moby/swarmkit/v2/manager/state/store" @@ -19,13 +19,13 @@ import ( var ( node1 = &api.Node{ ID: "nodeid1", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "name1", }, Availability: api.NodeAvailabilityActive, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, Description: &api.NodeDescription{ @@ -35,13 +35,13 @@ var ( } node2 = &api.Node{ ID: "nodeid2", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "name2", }, Availability: api.NodeAvailabilityActive, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, Description: &api.NodeDescription{ @@ -54,17 +54,17 @@ var ( service1 = &api.Service{ ID: "serviceid1", - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "name1", }, - Task: api.TaskSpec{ + Task: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{}, }, Restart: &api.RestartPolicy{ Condition: api.RestartOnAny, - Delay: gogotypes.DurationProto(restartDelay), + Delay: durationpb.New(restartDelay), }, }, Mode: &api.ServiceSpec_Global{ @@ -75,11 +75,11 @@ var ( service2 = &api.Service{ ID: "serviceid2", - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "name2", }, - Task: api.TaskSpec{ + Task: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{}, }, @@ -92,11 +92,11 @@ var ( serviceNoRestart = &api.Service{ ID: "serviceid3", - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "norestart", }, - Task: api.TaskSpec{ + Task: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{}, }, @@ -549,19 +549,19 @@ func TestInitializationRejectedTasks(t *testing.T) { ID: "task1", Slot: 0, DesiredState: api.TaskStateReady, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateRejected, }, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{}, }, Restart: &api.RestartPolicy{ Condition: api.RestartOnAny, - Delay: gogotypes.DurationProto(restartDelay), + Delay: durationpb.New(restartDelay), }, }, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "task1", }, ServiceID: "serviceid1", @@ -611,20 +611,20 @@ func TestInitializationFailedTasks(t *testing.T) { ID: "task1", Slot: 0, DesiredState: api.TaskStateRunning, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateFailed, Timestamp: ptypes.MustTimestampProto(before), }, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{}, }, Restart: &api.RestartPolicy{ Condition: api.RestartOnAny, - Delay: gogotypes.DurationProto(restartDelay), + Delay: durationpb.New(restartDelay), }, }, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "task1", }, ServiceID: "serviceid1", @@ -682,19 +682,19 @@ func TestInitializationExtraTask(t *testing.T) { ID: "task1", Slot: 0, DesiredState: api.TaskStateRunning, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateRunning, }, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{}, }, Restart: &api.RestartPolicy{ Condition: api.RestartOnAny, - Delay: gogotypes.DurationProto(restartDelay), + Delay: durationpb.New(restartDelay), }, }, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "task1", }, ServiceID: "serviceid1", @@ -704,19 +704,19 @@ func TestInitializationExtraTask(t *testing.T) { ID: "task2", Slot: 0, DesiredState: api.TaskStateRunning, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateRunning, }, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{}, }, Restart: &api.RestartPolicy{ Condition: api.RestartOnAny, - Delay: gogotypes.DurationProto(restartDelay), + Delay: durationpb.New(restartDelay), }, }, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "task2", }, ServiceID: "serviceid1", @@ -779,11 +779,11 @@ func TestInitializationMultipleServices(t *testing.T) { { ID: "task1", DesiredState: api.TaskStateRunning, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateRunning, }, Spec: service1.Spec.Task, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "task1", }, ServiceID: "serviceid1", @@ -792,11 +792,11 @@ func TestInitializationMultipleServices(t *testing.T) { { ID: "task2", DesiredState: api.TaskStateRunning, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateRunning, }, Spec: service2.Spec.Task, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "task2", }, ServiceID: "serviceid2", @@ -831,7 +831,7 @@ func TestInitializationMultipleServices(t *testing.T) { s1 := store.GetService(tx, "serviceid1") require.NotNil(t, s1) - s1.Spec.Task.Restart.Delay = gogotypes.DurationProto(70 * time.Millisecond) + s1.Spec.Task.Restart.Delay = durationpb.New(70 * time.Millisecond) assert.NoError(t, store.UpdateService(tx, s1)) return nil @@ -903,19 +903,19 @@ func TestInitializationTaskWithoutService(t *testing.T) { ID: "task1", Slot: 0, DesiredState: api.TaskStateRunning, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateRunning, }, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{}, }, Restart: &api.RestartPolicy{ Condition: api.RestartOnAny, - Delay: gogotypes.DurationProto(restartDelay), + Delay: durationpb.New(restartDelay), }, }, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "task1", }, ServiceID: "serviceid1", @@ -925,19 +925,19 @@ func TestInitializationTaskWithoutService(t *testing.T) { ID: "task2", Slot: 0, DesiredState: api.TaskStateRunning, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateRunning, }, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{}, }, Restart: &api.RestartPolicy{ Condition: api.RestartOnAny, - Delay: gogotypes.DurationProto(restartDelay), + Delay: durationpb.New(restartDelay), }, }, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "task2", }, ServiceID: "serviceid2", @@ -973,9 +973,9 @@ func TestInitializationTaskOnDrainedNode(t *testing.T) { // create nodes, services and tasks in store directly // where orchestrator runs, it should fix tasks to declarative state - n1 := *node1 + n1 := node1.Copy() n1.Spec.Availability = api.NodeAvailabilityDrain - addNode(t, s, &n1) + addNode(t, s, n1) addService(t, s, service1) tasks := []*api.Task{ // nodeid1 has 1 task for serviceid1 @@ -983,19 +983,19 @@ func TestInitializationTaskOnDrainedNode(t *testing.T) { ID: "task1", Slot: 0, DesiredState: api.TaskStateRunning, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateRunning, }, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{}, }, Restart: &api.RestartPolicy{ Condition: api.RestartOnAny, - Delay: gogotypes.DurationProto(restartDelay), + Delay: durationpb.New(restartDelay), }, }, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "task1", }, ServiceID: "serviceid1", @@ -1055,19 +1055,19 @@ func TestInitializationTaskOnNonexistentNode(t *testing.T) { ID: "task1", Slot: 0, DesiredState: api.TaskStateRunning, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateRunning, }, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{}, }, Restart: &api.RestartPolicy{ Condition: api.RestartOnAny, - Delay: gogotypes.DurationProto(restartDelay), + Delay: durationpb.New(restartDelay), }, }, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "task1", }, ServiceID: "serviceid1", @@ -1126,19 +1126,19 @@ func TestInitializationRestartHistory(t *testing.T) { SpecVersion: &api.Version{ Index: 2, }, - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "name1", }, - Task: api.TaskSpec{ + Task: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{}, }, Restart: &api.RestartPolicy{ Condition: api.RestartOnAny, - Delay: gogotypes.DurationProto(restartDelay), + Delay: durationpb.New(restartDelay), MaxAttempts: 3, - Window: gogotypes.DurationProto(10 * time.Minute), + Window: durationpb.New(10 * time.Minute), }, }, Mode: &api.ServiceSpec_Global{ @@ -1154,14 +1154,14 @@ func TestInitializationRestartHistory(t *testing.T) { // old spec versions should be ignored for restart tracking { ID: "oldspec", - Meta: api.Meta{ + Meta: &api.Meta{ CreatedAt: ptypes.MustTimestampProto(now.Add(-5 * time.Minute)), }, DesiredState: api.TaskStateShutdown, SpecVersion: &api.Version{ Index: 1, }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateShutdown, Timestamp: ptypes.MustTimestampProto(now.Add(-5 * time.Minute)), }, @@ -1172,14 +1172,14 @@ func TestInitializationRestartHistory(t *testing.T) { // this is the first task with the current spec version { ID: "firstcurrent", - Meta: api.Meta{ + Meta: &api.Meta{ CreatedAt: ptypes.MustTimestampProto(now.Add(-12 * time.Minute)), }, DesiredState: api.TaskStateShutdown, SpecVersion: &api.Version{ Index: 2, }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateFailed, Timestamp: ptypes.MustTimestampProto(now.Add(-12 * time.Minute)), }, @@ -1191,14 +1191,14 @@ func TestInitializationRestartHistory(t *testing.T) { // this task falls outside the restart window { ID: "outsidewindow", - Meta: api.Meta{ + Meta: &api.Meta{ CreatedAt: ptypes.MustTimestampProto(now.Add(-11 * time.Minute)), }, DesiredState: api.TaskStateShutdown, SpecVersion: &api.Version{ Index: 2, }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateFailed, Timestamp: ptypes.MustTimestampProto(now.Add(-11 * time.Minute)), }, @@ -1209,14 +1209,14 @@ func TestInitializationRestartHistory(t *testing.T) { // first task inside restart window { ID: "firstinside", - Meta: api.Meta{ + Meta: &api.Meta{ CreatedAt: ptypes.MustTimestampProto(now.Add(-9 * time.Minute)), }, DesiredState: api.TaskStateShutdown, SpecVersion: &api.Version{ Index: 2, }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateFailed, Timestamp: ptypes.MustTimestampProto(now.Add(-9 * time.Minute)), }, @@ -1227,14 +1227,14 @@ func TestInitializationRestartHistory(t *testing.T) { // second task inside restart window, currently running { ID: "secondinside", - Meta: api.Meta{ + Meta: &api.Meta{ CreatedAt: ptypes.MustTimestampProto(now.Add(-8 * time.Minute)), }, DesiredState: api.TaskStateRunning, SpecVersion: &api.Version{ Index: 2, }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateRunning, Timestamp: ptypes.MustTimestampProto(now.Add(-8 * time.Minute)), }, diff --git a/manager/orchestrator/jobs/global/reconciler.go b/manager/orchestrator/jobs/global/reconciler.go index c519507b81..992f1ca9e3 100644 --- a/manager/orchestrator/jobs/global/reconciler.go +++ b/manager/orchestrator/jobs/global/reconciler.go @@ -92,11 +92,11 @@ func (r *Reconciler) ReconcileService(id string) error { // we need to compute the constraints on the service so we know which nodes // to schedule it on var constraints []constraint.Constraint - if service.Spec.Task.Placement != nil && len(service.Spec.Task.Placement.Constraints) != 0 { + if service.GetSpec().GetTask().GetPlacement() != nil && len(service.GetSpec().GetTask().GetPlacement().GetConstraints()) != 0 { // constraint.Parse does return an error, but we don't need to check // it, because it was already checked when the service was created or // updated. - constraints, _ = constraint.Parse(service.Spec.Task.Placement.Constraints) + constraints, _ = constraint.Parse(service.GetSpec().GetTask().GetPlacement().GetConstraints()) } var candidateNodes []string @@ -115,10 +115,10 @@ func (r *Reconciler) ReconcileService(id string) error { continue } - if node.Spec.Availability != api.NodeAvailabilityActive { + if node.GetSpec().GetAvailability() != api.NodeAvailabilityActive { continue } - if node.Status.State != api.NodeStatus_READY { + if node.GetStatus().GetState() != api.NodeStatus_READY { continue } // you can append to a nil slice and get a non-nil slice, which is @@ -144,18 +144,18 @@ func (r *Reconciler) ReconcileService(id string) error { // state completed, including failed tasks. We only want to create // tasks for nodes on which there are no existing tasks. if task.JobIteration != nil { - if task.JobIteration.Index == service.JobStatus.JobIteration.Index && + if task.JobIteration.Index == service.JobStatus.GetJobIteration().GetIndex() && task.DesiredState <= api.TaskStateCompleted { // we already know the task is desired to be executing (because its // desired state is Completed). Check here to see if it's already // failed, so we can restart it - if task.Status.State > api.TaskStateCompleted { + if task.GetStatus().GetState() > api.TaskStateCompleted { restartTasks = append(restartTasks, task.ID) } nodeToTask[task.NodeID] = task.ID } - if task.JobIteration.Index != service.JobStatus.JobIteration.Index { + if task.JobIteration.Index != service.JobStatus.GetJobIteration().GetIndex() { if task.DesiredState != api.TaskStateRemove { removeTasks = append(removeTasks, task.ID) } @@ -173,7 +173,7 @@ func (r *Reconciler) ReconcileService(id string) error { // if the node does not already have a running or completed // task, create a task for this node. task := orchestrator.NewTask(cluster, service, 0, node) - task.JobIteration = &service.JobStatus.JobIteration + task.JobIteration = service.JobStatus.JobIteration task.DesiredState = api.TaskStateCompleted return store.CreateTask(tx, task) }); err != nil { @@ -238,7 +238,7 @@ func (r *Reconciler) ReconcileService(id string) error { } // if the task is still desired to be running, and is still // actually, running, then it still needs to be shut down. - if t.DesiredState > api.TaskStateCompleted || t.Status.State <= api.TaskStateRunning { + if t.DesiredState > api.TaskStateCompleted || t.GetStatus().GetState() <= api.TaskStateRunning { t.DesiredState = api.TaskStateShutdown return store.UpdateTask(tx, t) } diff --git a/manager/orchestrator/jobs/global/reconciler_test.go b/manager/orchestrator/jobs/global/reconciler_test.go index 1c9cf4641d..99fbc8f93c 100644 --- a/manager/orchestrator/jobs/global/reconciler_test.go +++ b/manager/orchestrator/jobs/global/reconciler_test.go @@ -58,22 +58,25 @@ var _ = Describe("Global Job Reconciler", func() { // Set up the service and nodes. We can change these later service = &api.Service{ ID: serviceID, - Spec: api.ServiceSpec{ + Spec: &api.ServiceSpec{ Mode: &api.ServiceSpec_GlobalJob{ // GlobalJob has no parameters GlobalJob: &api.GlobalJob{}, }, + Task: &api.TaskSpec{}, + }, + JobStatus: &api.JobStatus{ + JobIteration: &api.Version{Index: 0}, }, - JobStatus: &api.JobStatus{}, } cluster = &api.Cluster{ ID: "someCluster", - Spec: api.ClusterSpec{ - Annotations: api.Annotations{ + Spec: &api.ClusterSpec{ + Annotations: &api.Annotations{ Name: "someCluster", }, - TaskDefaults: api.TaskDefaults{ + TaskDefaults: &api.TaskDefaults{ LogDriver: &api.Driver{ Name: "someDriver", }, @@ -87,37 +90,37 @@ var _ = Describe("Global Job Reconciler", func() { nodes = []*api.Node{ { ID: "node1", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "name1", }, Availability: api.NodeAvailabilityActive, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, }, { ID: "node2", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "name2", }, Availability: api.NodeAvailabilityActive, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, }, { ID: "node3", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "name3", }, Availability: api.NodeAvailabilityActive, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, }, @@ -296,7 +299,7 @@ var _ = Describe("Global Job Reconciler", func() { ServiceID: serviceID, NodeID: "node1", DesiredState: api.TaskStateCompleted, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateRunning, }, JobIteration: &api.Version{}, @@ -307,7 +310,7 @@ var _ = Describe("Global Job Reconciler", func() { ServiceID: serviceID, NodeID: "node2", DesiredState: api.TaskStateCompleted, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateCompleted, }, JobIteration: &api.Version{}, @@ -378,7 +381,7 @@ var _ = Describe("Global Job Reconciler", func() { ServiceID: service.ID, NodeID: nodes[0].ID, DesiredState: api.TaskStateCompleted, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateRunning, }, JobIteration: &api.Version{ @@ -437,7 +440,7 @@ var _ = Describe("Global Job Reconciler", func() { ID: "someTask", NodeID: "someNode", DesiredState: api.TaskStateShutdown, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateShutdown, }, } @@ -460,7 +463,7 @@ var _ = Describe("Global Job Reconciler", func() { ID: "someTask", NodeID: "someNode", DesiredState: api.TaskStateCompleted, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateFailed, }, } diff --git a/manager/orchestrator/jobs/orchestrator_controlapi_integration_test.go b/manager/orchestrator/jobs/orchestrator_controlapi_integration_test.go index 396deac830..4bb90e363d 100644 --- a/manager/orchestrator/jobs/orchestrator_controlapi_integration_test.go +++ b/manager/orchestrator/jobs/orchestrator_controlapi_integration_test.go @@ -78,7 +78,7 @@ var _ = Describe("Integration between the controlapi and jobs orchestrator", fun // the controlapi tests use the older grpc.Dial with a manually entered // timeout. avoid that mess by just using the DialTimeout function // instead. - ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) // cancel after dial has completed is a no-op, but if we don't cancel, // linters will (probably) complain about a leaked context. defer cancel() @@ -88,6 +88,7 @@ var _ = Describe("Integration between the controlapi and jobs orchestrator", fun // funny reasons related to this connection being established async grpc.WithBlock(), grpc.WithInsecure(), + grpc.WithNoProxy(), // bypass HTTP proxy for unix socket connections ) Expect(err).ToNot(HaveOccurred()) @@ -114,7 +115,7 @@ var _ = Describe("Integration between the controlapi and jobs orchestrator", fun It("should create the requisite tasks for a new replicated job", func() { spec := &api.ServiceSpec{ - Annotations: api.Annotations{ + Annotations: &api.Annotations{ Name: "testService", }, Mode: &api.ServiceSpec_ReplicatedJob{ @@ -123,7 +124,7 @@ var _ = Describe("Integration between the controlapi and jobs orchestrator", fun TotalCompletions: 5, }, }, - Task: api.TaskSpec{ + Task: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{ Image: "image", diff --git a/manager/orchestrator/jobs/orchestrator_restart_test.go b/manager/orchestrator/jobs/orchestrator_restart_test.go index f04b6c004f..6a8c1ebfd6 100644 --- a/manager/orchestrator/jobs/orchestrator_restart_test.go +++ b/manager/orchestrator/jobs/orchestrator_restart_test.go @@ -9,9 +9,9 @@ import ( . "github.com/onsi/gomega" "github.com/docker/go-events" - gogotypes "github.com/gogo/protobuf/types" "github.com/moby/swarmkit/v2/api" + "google.golang.org/protobuf/types/known/durationpb" "github.com/moby/swarmkit/v2/manager/state/store" ) @@ -51,8 +51,8 @@ var _ = Describe("Jobs RestartSupervisor Integration", func() { service = &api.Service{ ID: "norestartservice", - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "norestartservice", }, Mode: &api.ServiceSpec_ReplicatedJob{ @@ -61,10 +61,10 @@ var _ = Describe("Jobs RestartSupervisor Integration", func() { TotalCompletions: uint64(1), }, }, - Task: api.TaskSpec{}, + Task: &api.TaskSpec{}, }, JobStatus: &api.JobStatus{ - JobIteration: api.Version{ + JobIteration: &api.Version{ Index: 0, }, }, @@ -155,7 +155,7 @@ var _ = Describe("Jobs RestartSupervisor Integration", func() { MaxAttempts: 3, // set a low but non-zero delay duration, so we avoid default // duration, which may be long. - Delay: gogotypes.DurationProto(100 * time.Millisecond), + Delay: durationpb.New(100 * time.Millisecond), } err := s.Update(func(tx store.Tx) error { return store.CreateService(tx, service) diff --git a/manager/orchestrator/jobs/orchestrator_test.go b/manager/orchestrator/jobs/orchestrator_test.go index 259e245fe4..01b909b0ab 100644 --- a/manager/orchestrator/jobs/orchestrator_test.go +++ b/manager/orchestrator/jobs/orchestrator_test.go @@ -55,8 +55,8 @@ var _ = Describe("Replicated job orchestrator", func() { for i := 0; i < 3; i++ { serviceReplicated := &api.Service{ ID: fmt.Sprintf("serviceReplicated%v", i), - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: fmt.Sprintf("serviceReplicated%v", i), }, Mode: &api.ServiceSpec_ReplicatedJob{ @@ -67,8 +67,8 @@ var _ = Describe("Replicated job orchestrator", func() { serviceGlobal := &api.Service{ ID: fmt.Sprintf("serviceGlobal%v", i), - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: fmt.Sprintf("serviceGlobal%v", i), }, Mode: &api.ServiceSpec_GlobalJob{ @@ -126,8 +126,8 @@ var _ = Describe("Replicated job orchestrator", func() { err := s.Update(func(tx store.Tx) error { errService := &api.Service{ ID: "errService", - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "errService", }, Mode: &api.ServiceSpec_ReplicatedJob{ @@ -168,8 +168,8 @@ var _ = Describe("Replicated job orchestrator", func() { for i := 0; i < 3; i++ { service := &api.Service{ ID: fmt.Sprintf("service%v", i), - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: fmt.Sprintf("service%v", i), }, Mode: &api.ServiceSpec_ReplicatedJob{ @@ -196,8 +196,8 @@ var _ = Describe("Replicated job orchestrator", func() { for i := 0; i < 3; i++ { service := &api.Service{ ID: fmt.Sprintf("service%v", i), - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: fmt.Sprintf("service%v", i), }, Mode: &api.ServiceSpec_GlobalJob{ @@ -224,8 +224,8 @@ var _ = Describe("Replicated job orchestrator", func() { err := s.Update(func(tx store.Tx) error { service := &api.Service{ ID: "serviceDelete", - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "serviceDelete", }, Mode: &api.ServiceSpec_ReplicatedJob{ @@ -246,7 +246,7 @@ var _ = Describe("Replicated job orchestrator", func() { ID: "task1", ServiceID: "serviceDelete", DesiredState: api.TaskStateCompleted, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateCompleted, }, } @@ -255,7 +255,7 @@ var _ = Describe("Replicated job orchestrator", func() { ID: "task2", ServiceID: "serviceDelete", DesiredState: api.TaskStateCompleted, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateRunning, }, } @@ -306,7 +306,7 @@ var _ = Describe("Replicated job orchestrator", func() { BeforeEach(func() { service := &api.Service{ ID: "service0", - Spec: api.ServiceSpec{ + Spec: &api.ServiceSpec{ Mode: &api.ServiceSpec_ReplicatedJob{ ReplicatedJob: &api.ReplicatedJob{}, }, @@ -322,7 +322,7 @@ var _ = Describe("Replicated job orchestrator", func() { ID: "someTask", ServiceID: "service0", DesiredState: api.TaskStateCompleted, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStatePreparing, }, } @@ -367,8 +367,8 @@ var _ = Describe("Replicated job orchestrator", func() { err := s.Update(func(tx store.Tx) error { service := &api.Service{ ID: "service0", - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "service0", }, Mode: &api.ServiceSpec_ReplicatedJob{ @@ -389,8 +389,8 @@ var _ = Describe("Replicated job orchestrator", func() { err = s.Update(func(tx store.Tx) error { service := &api.Service{ ID: "service1", - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "service1", }, Mode: &api.ServiceSpec_ReplicatedJob{ diff --git a/manager/orchestrator/jobs/replicated/reconciler.go b/manager/orchestrator/jobs/replicated/reconciler.go index 949bbff0dc..1164077642 100644 --- a/manager/orchestrator/jobs/replicated/reconciler.go +++ b/manager/orchestrator/jobs/replicated/reconciler.go @@ -88,7 +88,7 @@ func (r *Reconciler) ReconcileService(id string) error { // indicates which Version of iteration we're on. We should only be looking // at tasks of the latest Version - jobVersion := service.JobStatus.JobIteration.Index + jobVersion := service.JobStatus.GetJobIteration().GetIndex() // now, check how many tasks we need and how many we have running. note // that some of these Running tasks may complete before we even finish this @@ -119,7 +119,7 @@ func (r *Reconciler) ReconcileService(id string) error { // previous job iteration are not important if task.JobIteration != nil { if task.JobIteration.Index == jobVersion { - if task.Status.State == api.TaskStateCompleted { + if task.GetStatus().GetState() == api.TaskStateCompleted { completeTasks++ slots[task.Slot] = true } @@ -127,7 +127,7 @@ func (r *Reconciler) ReconcileService(id string) error { // the Restart Manager may put a task in the desired state Ready, // so we should match not only tasks in desired state Completed, // but also those in any valid running state. - if task.Status.State != api.TaskStateCompleted && task.DesiredState <= api.TaskStateCompleted { + if task.GetStatus().GetState() != api.TaskStateCompleted && task.DesiredState <= api.TaskStateCompleted { runningTasks++ slots[task.Slot] = true @@ -135,7 +135,7 @@ func (r *Reconciler) ReconcileService(id string) error { // it. throw it on the pile if so. this is still counted as a // running task for the purpose of determining how many new // tasks to create. - if task.Status.State > api.TaskStateCompleted { + if task.GetStatus().GetState() > api.TaskStateCompleted { restartTasks = append(restartTasks, task.ID) } } @@ -143,7 +143,7 @@ func (r *Reconciler) ReconcileService(id string) error { // tasks belonging to a previous iteration of the job may // exist. if any such tasks exist, they should have their task // state set to Remove - if task.Status.State <= api.TaskStateRunning && task.DesiredState != api.TaskStateRemove { + if task.GetStatus().GetState() <= api.TaskStateRunning && task.DesiredState != api.TaskStateRemove { removeTasks = append(removeTasks, task.ID) } } diff --git a/manager/orchestrator/jobs/replicated/reconciler_test.go b/manager/orchestrator/jobs/replicated/reconciler_test.go index 19f218ef69..cebfe39476 100644 --- a/manager/orchestrator/jobs/replicated/reconciler_test.go +++ b/manager/orchestrator/jobs/replicated/reconciler_test.go @@ -11,6 +11,7 @@ import ( "github.com/moby/swarmkit/v2/api" "github.com/moby/swarmkit/v2/manager/orchestrator" "github.com/moby/swarmkit/v2/manager/state/store" + "google.golang.org/protobuf/proto" ) type fakeRestartSupervisor struct { @@ -104,26 +105,27 @@ var _ = Describe("Replicated Job reconciler", func() { totalCompletions = 30 service = &api.Service{ ID: serviceID, - Spec: api.ServiceSpec{ + Spec: &api.ServiceSpec{ Mode: &api.ServiceSpec_ReplicatedJob{ ReplicatedJob: &api.ReplicatedJob{ MaxConcurrent: maxConcurrent, TotalCompletions: totalCompletions, }, }, + Task: &api.TaskSpec{}, }, JobStatus: &api.JobStatus{ - JobIteration: api.Version{Index: 0}, + JobIteration: &api.Version{Index: 0}, }, } cluster = &api.Cluster{ ID: "someCluster", - Spec: api.ClusterSpec{ - Annotations: api.Annotations{ + Spec: &api.ClusterSpec{ + Annotations: &api.Annotations{ Name: "someCluster", }, - TaskDefaults: api.TaskDefaults{ + TaskDefaults: &api.TaskDefaults{ LogDriver: &api.Driver{ Name: "someDriver", }, @@ -269,7 +271,7 @@ var _ = Describe("Replicated Job reconciler", func() { tasks := AllTasks(s) Expect(len(tasks) >= 1).To(BeTrue()) - Expect(tasks[0].LogDriver).To(Equal(cluster.Spec.TaskDefaults.LogDriver)) + Expect(proto.Equal(tasks[0].LogDriver, cluster.Spec.TaskDefaults.LogDriver)).To(BeTrue()) }) }) @@ -490,7 +492,7 @@ var _ = Describe("Replicated Job reconciler", func() { err := s.Update(func(tx store.Tx) error { service := &api.Service{ ID: "someService", - Spec: api.ServiceSpec{ + Spec: &api.ServiceSpec{ Mode: &api.ServiceSpec_ReplicatedJob{ ReplicatedJob: &api.ReplicatedJob{ MaxConcurrent: maxConcurrent, diff --git a/manager/orchestrator/replicated/drain_test.go b/manager/orchestrator/replicated/drain_test.go index 1e185b8260..2c5c5a2dc4 100644 --- a/manager/orchestrator/replicated/drain_test.go +++ b/manager/orchestrator/replicated/drain_test.go @@ -15,11 +15,11 @@ func TestDrain(t *testing.T) { ctx := context.Background() initialService := &api.Service{ ID: "id1", - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "name1", }, - Task: api.TaskSpec{ + Task: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{}, }, @@ -37,62 +37,62 @@ func TestDrain(t *testing.T) { initialNodeSet := []*api.Node{ { ID: "id1", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "name1", }, Availability: api.NodeAvailabilityActive, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, }, { ID: "id2", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "name2", }, Availability: api.NodeAvailabilityActive, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_DOWN, }, }, // We should NOT kick out tasks on UNKNOWN nodes. { ID: "id3", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "name3", }, Availability: api.NodeAvailabilityActive, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_UNKNOWN, }, }, { ID: "id4", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "name4", }, Availability: api.NodeAvailabilityPause, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, }, { ID: "id5", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "name5", }, Availability: api.NodeAvailabilityDrain, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, }, @@ -104,11 +104,11 @@ func TestDrain(t *testing.T) { ID: "id0", DesiredState: api.TaskStateRunning, Spec: initialService.Spec.Task, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateNew, }, Slot: 1, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "name0", }, ServiceID: "id1", @@ -118,11 +118,11 @@ func TestDrain(t *testing.T) { ID: "id1", DesiredState: api.TaskStateRunning, Spec: initialService.Spec.Task, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateNew, }, Slot: 2, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "name1", }, ServiceID: "id1", @@ -132,11 +132,11 @@ func TestDrain(t *testing.T) { ID: "id2", DesiredState: api.TaskStateRunning, Spec: initialService.Spec.Task, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateNew, }, Slot: 3, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "name2", }, ServiceID: "id1", @@ -146,11 +146,11 @@ func TestDrain(t *testing.T) { ID: "id3", DesiredState: api.TaskStateRunning, Spec: initialService.Spec.Task, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateNew, }, Slot: 4, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "name3", }, ServiceID: "id1", @@ -160,11 +160,11 @@ func TestDrain(t *testing.T) { ID: "id4", DesiredState: api.TaskStateRunning, Spec: initialService.Spec.Task, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateNew, }, Slot: 5, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "name4", }, ServiceID: "id1", @@ -174,11 +174,11 @@ func TestDrain(t *testing.T) { ID: "id5", DesiredState: api.TaskStateRunning, Spec: initialService.Spec.Task, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateNew, }, Slot: 6, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "name5", }, ServiceID: "id1", diff --git a/manager/orchestrator/replicated/replicated_test.go b/manager/orchestrator/replicated/replicated_test.go index 2c8aa8c5ba..c70ff222dc 100644 --- a/manager/orchestrator/replicated/replicated_test.go +++ b/manager/orchestrator/replicated/replicated_test.go @@ -4,9 +4,8 @@ import ( "context" "testing" "time" - - gogotypes "github.com/gogo/protobuf/types" "github.com/moby/swarmkit/v2/api" + "google.golang.org/protobuf/types/known/durationpb" "github.com/moby/swarmkit/v2/manager/orchestrator/testutils" "github.com/moby/swarmkit/v2/manager/state" "github.com/moby/swarmkit/v2/manager/state/store" @@ -33,11 +32,11 @@ func TestReplicatedOrchestrator(t *testing.T) { err := s.Update(func(tx store.Tx) error { s1 := &api.Service{ ID: "id1", - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "name1", }, - Task: api.TaskSpec{ + Task: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{}, }, @@ -71,11 +70,11 @@ func TestReplicatedOrchestrator(t *testing.T) { err = s.Update(func(tx store.Tx) error { s2 := &api.Service{ ID: "id2", - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "name2", }, - Task: api.TaskSpec{ + Task: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{}, }, @@ -100,11 +99,11 @@ func TestReplicatedOrchestrator(t *testing.T) { err = s.Update(func(tx store.Tx) error { s2 := &api.Service{ ID: "id2", - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "name2", }, - Task: api.TaskSpec{ + Task: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{}, }, @@ -133,11 +132,11 @@ func TestReplicatedOrchestrator(t *testing.T) { err = s.Update(func(tx store.Tx) error { s2 := &api.Service{ ID: "id2", - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "name2", }, - Task: api.TaskSpec{ + Task: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{}, }, @@ -214,8 +213,8 @@ func TestReplicatedScaleDown(t *testing.T) { s1 := &api.Service{ ID: "id1", - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "name1", }, Mode: &api.ServiceSpec_Replicated{ @@ -232,37 +231,37 @@ func TestReplicatedScaleDown(t *testing.T) { nodes := []*api.Node{ { ID: "node1", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "name1", }, Availability: api.NodeAvailabilityActive, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, }, { ID: "node2", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "name2", }, Availability: api.NodeAvailabilityActive, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, }, { ID: "node3", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "name3", }, Availability: api.NodeAvailabilityActive, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, }, @@ -281,10 +280,10 @@ func TestReplicatedScaleDown(t *testing.T) { ID: "task1", Slot: 1, DesiredState: api.TaskStateRunning, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateStarting, }, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "task1", }, ServiceID: "id1", @@ -294,10 +293,10 @@ func TestReplicatedScaleDown(t *testing.T) { ID: "task2", Slot: 2, DesiredState: api.TaskStateRunning, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateRunning, }, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "task2", }, ServiceID: "id1", @@ -307,10 +306,10 @@ func TestReplicatedScaleDown(t *testing.T) { ID: "task3", Slot: 3, DesiredState: api.TaskStateRunning, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateRunning, }, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "task3", }, ServiceID: "id1", @@ -320,10 +319,10 @@ func TestReplicatedScaleDown(t *testing.T) { ID: "task4", Slot: 4, DesiredState: api.TaskStateRunning, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateRunning, }, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "task4", }, ServiceID: "id1", @@ -333,10 +332,10 @@ func TestReplicatedScaleDown(t *testing.T) { ID: "task5", Slot: 5, DesiredState: api.TaskStateRunning, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateRunning, }, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "task5", }, ServiceID: "id1", @@ -346,10 +345,10 @@ func TestReplicatedScaleDown(t *testing.T) { ID: "task6", Slot: 6, DesiredState: api.TaskStateRunning, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateRunning, }, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "task6", }, ServiceID: "id1", @@ -359,10 +358,10 @@ func TestReplicatedScaleDown(t *testing.T) { ID: "task7", Slot: 7, DesiredState: api.TaskStateRunning, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateNew, }, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "task7", }, ServiceID: "id1", @@ -479,11 +478,11 @@ func TestInitializationRejectedTasks(t *testing.T) { service1 := &api.Service{ ID: "serviceid1", - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "name1", }, - Task: api.TaskSpec{ + Task: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{}, }, @@ -502,13 +501,13 @@ func TestInitializationRejectedTasks(t *testing.T) { nodes := []*api.Node{ { ID: "node1", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "name1", }, Availability: api.NodeAvailabilityActive, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, }, @@ -523,15 +522,15 @@ func TestInitializationRejectedTasks(t *testing.T) { ID: "task1", Slot: 1, DesiredState: api.TaskStateReady, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateRejected, }, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{}, }, }, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "task1", }, ServiceID: "serviceid1", @@ -597,11 +596,11 @@ func TestInitializationFailedTasks(t *testing.T) { service1 := &api.Service{ ID: "serviceid1", - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "name1", }, - Task: api.TaskSpec{ + Task: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{}, }, @@ -620,13 +619,13 @@ func TestInitializationFailedTasks(t *testing.T) { nodes := []*api.Node{ { ID: "node1", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "name1", }, Availability: api.NodeAvailabilityActive, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, }, @@ -641,15 +640,15 @@ func TestInitializationFailedTasks(t *testing.T) { ID: "task1", Slot: 1, DesiredState: api.TaskStateRunning, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateFailed, }, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{}, }, }, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "task1", }, ServiceID: "serviceid1", @@ -659,15 +658,15 @@ func TestInitializationFailedTasks(t *testing.T) { ID: "task2", Slot: 2, DesiredState: api.TaskStateRunning, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateStarting, }, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{}, }, }, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "task2", }, ServiceID: "serviceid1", @@ -731,11 +730,11 @@ func TestInitializationNodeDown(t *testing.T) { service1 := &api.Service{ ID: "serviceid1", - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "name1", }, - Task: api.TaskSpec{ + Task: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{}, }, @@ -754,13 +753,13 @@ func TestInitializationNodeDown(t *testing.T) { nodes := []*api.Node{ { ID: "node1", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "name1", }, Availability: api.NodeAvailabilityActive, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_DOWN, }, }, @@ -775,15 +774,15 @@ func TestInitializationNodeDown(t *testing.T) { ID: "task1", Slot: 1, DesiredState: api.TaskStateRunning, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateRunning, }, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{}, }, }, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "task1", }, ServiceID: "serviceid1", @@ -830,17 +829,17 @@ func TestInitializationDelayStart(t *testing.T) { service1 := &api.Service{ ID: "serviceid1", - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "name1", }, - Task: api.TaskSpec{ + Task: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{}, }, Restart: &api.RestartPolicy{ Condition: api.RestartOnAny, - Delay: gogotypes.DurationProto(100 * time.Millisecond), + Delay: durationpb.New(100 * time.Millisecond), }, }, Mode: &api.ServiceSpec_Replicated{ @@ -858,13 +857,13 @@ func TestInitializationDelayStart(t *testing.T) { nodes := []*api.Node{ { ID: "node1", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "name1", }, Availability: api.NodeAvailabilityActive, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, }, @@ -879,20 +878,20 @@ func TestInitializationDelayStart(t *testing.T) { ID: "task1", Slot: 1, DesiredState: api.TaskStateReady, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateReady, Timestamp: ptypes.MustTimestampProto(before), }, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{}, }, Restart: &api.RestartPolicy{ Condition: api.RestartOnAny, - Delay: gogotypes.DurationProto(100 * time.Millisecond), + Delay: durationpb.New(100 * time.Millisecond), }, }, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "task1", }, ServiceID: "serviceid1", diff --git a/manager/orchestrator/replicated/restart_test.go b/manager/orchestrator/replicated/restart_test.go index a7589bd375..415e45bfc9 100644 --- a/manager/orchestrator/replicated/restart_test.go +++ b/manager/orchestrator/replicated/restart_test.go @@ -4,9 +4,8 @@ import ( "context" "testing" "time" - - gogotypes "github.com/gogo/protobuf/types" "github.com/moby/swarmkit/v2/api" + "google.golang.org/protobuf/types/known/durationpb" "github.com/moby/swarmkit/v2/manager/orchestrator/testutils" "github.com/moby/swarmkit/v2/manager/state" "github.com/moby/swarmkit/v2/manager/state/store" @@ -33,17 +32,17 @@ func TestOrchestratorRestartOnAny(t *testing.T) { err := s.Update(func(tx store.Tx) error { j1 := &api.Service{ ID: "id1", - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "name1", }, - Task: api.TaskSpec{ + Task: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{}, }, Restart: &api.RestartPolicy{ Condition: api.RestartOnAny, - Delay: gogotypes.DurationProto(0), + Delay: durationpb.New(0), }, }, Mode: &api.ServiceSpec_Replicated{ @@ -73,7 +72,7 @@ func TestOrchestratorRestartOnAny(t *testing.T) { // Fail the first task. Confirm that it gets restarted. updatedTask1 := observedTask1.Copy() - updatedTask1.Status = api.TaskStatus{State: api.TaskStateFailed, Timestamp: ptypes.MustTimestampProto(time.Now())} + updatedTask1.Status = &api.TaskStatus{State: api.TaskStateFailed, Timestamp: ptypes.MustTimestampProto(time.Now())} err = s.Update(func(tx store.Tx) error { assert.NoError(t, store.UpdateTask(tx, updatedTask1)) return nil @@ -96,7 +95,7 @@ func TestOrchestratorRestartOnAny(t *testing.T) { // Mark the second task as completed. Confirm that it gets restarted. updatedTask2 := observedTask2.Copy() - updatedTask2.Status = api.TaskStatus{State: api.TaskStateCompleted, Timestamp: ptypes.MustTimestampProto(time.Now())} + updatedTask2.Status = &api.TaskStatus{State: api.TaskStateCompleted, Timestamp: ptypes.MustTimestampProto(time.Now())} err = s.Update(func(tx store.Tx) error { assert.NoError(t, store.UpdateTask(tx, updatedTask2)) return nil @@ -138,17 +137,17 @@ func TestOrchestratorRestartOnFailure(t *testing.T) { err := s.Update(func(tx store.Tx) error { j1 := &api.Service{ ID: "id1", - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "name1", }, - Task: api.TaskSpec{ + Task: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{}, }, Restart: &api.RestartPolicy{ Condition: api.RestartOnFailure, - Delay: gogotypes.DurationProto(0), + Delay: durationpb.New(0), }, }, Mode: &api.ServiceSpec_Replicated{ @@ -178,7 +177,7 @@ func TestOrchestratorRestartOnFailure(t *testing.T) { // Fail the first task. Confirm that it gets restarted. updatedTask1 := observedTask1.Copy() - updatedTask1.Status = api.TaskStatus{State: api.TaskStateFailed, Timestamp: ptypes.MustTimestampProto(time.Now())} + updatedTask1.Status = &api.TaskStatus{State: api.TaskStateFailed, Timestamp: ptypes.MustTimestampProto(time.Now())} err = s.Update(func(tx store.Tx) error { assert.NoError(t, store.UpdateTask(tx, updatedTask1)) return nil @@ -198,7 +197,7 @@ func TestOrchestratorRestartOnFailure(t *testing.T) { // Mark the second task as completed. Confirm that it does not get restarted. updatedTask2 := observedTask2.Copy() - updatedTask2.Status = api.TaskStatus{State: api.TaskStateCompleted, Timestamp: ptypes.MustTimestampProto(time.Now())} + updatedTask2.Status = &api.TaskStatus{State: api.TaskStateCompleted, Timestamp: ptypes.MustTimestampProto(time.Now())} err = s.Update(func(tx store.Tx) error { assert.NoError(t, store.UpdateTask(tx, updatedTask2)) return nil @@ -262,11 +261,11 @@ func TestOrchestratorRestartOnNone(t *testing.T) { err := s.Update(func(tx store.Tx) error { j1 := &api.Service{ ID: "id1", - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "name1", }, - Task: api.TaskSpec{ + Task: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{}, }, @@ -318,7 +317,7 @@ func TestOrchestratorRestartOnNone(t *testing.T) { // Mark the second task as completed. Confirm that it does not get restarted. updatedTask2 := observedTask2.Copy() - updatedTask2.Status = api.TaskStatus{State: api.TaskStateCompleted, Timestamp: ptypes.MustTimestampProto(time.Now())} + updatedTask2.Status = &api.TaskStatus{State: api.TaskStateCompleted, Timestamp: ptypes.MustTimestampProto(time.Now())} err = s.Update(func(tx store.Tx) error { assert.NoError(t, store.UpdateTask(tx, updatedTask2)) return nil @@ -395,17 +394,17 @@ func TestOrchestratorRestartDelay(t *testing.T) { err := s.Update(func(tx store.Tx) error { j1 := &api.Service{ ID: "id1", - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "name1", }, - Task: api.TaskSpec{ + Task: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{}, }, Restart: &api.RestartPolicy{ Condition: api.RestartOnAny, - Delay: gogotypes.DurationProto(100 * time.Millisecond), + Delay: durationpb.New(100 * time.Millisecond), }, }, Mode: &api.ServiceSpec_Replicated{ @@ -435,7 +434,7 @@ func TestOrchestratorRestartDelay(t *testing.T) { // Fail the first task. Confirm that it gets restarted. updatedTask1 := observedTask1.Copy() - updatedTask1.Status = api.TaskStatus{State: api.TaskStateFailed, Timestamp: ptypes.MustTimestampProto(time.Now())} + updatedTask1.Status = &api.TaskStatus{State: api.TaskStateFailed, Timestamp: ptypes.MustTimestampProto(time.Now())} before := time.Now() err = s.Update(func(tx store.Tx) error { assert.NoError(t, store.UpdateTask(tx, updatedTask1)) @@ -487,8 +486,8 @@ func TestOrchestratorRestartMaxAttempts(t *testing.T) { err := s.Update(func(tx store.Tx) error { j1 := &api.Service{ ID: "id1", - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "name1", }, Mode: &api.ServiceSpec_Replicated{ @@ -496,13 +495,13 @@ func TestOrchestratorRestartMaxAttempts(t *testing.T) { Replicas: 2, }, }, - Task: api.TaskSpec{ + Task: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{}, }, Restart: &api.RestartPolicy{ Condition: api.RestartOnAny, - Delay: gogotypes.DurationProto(100 * time.Millisecond), + Delay: durationpb.New(100 * time.Millisecond), MaxAttempts: 1, }, }, @@ -523,7 +522,7 @@ func TestOrchestratorRestartMaxAttempts(t *testing.T) { failTask := func(task *api.Task, expectRestart bool) { task = task.Copy() - task.Status = api.TaskStatus{State: api.TaskStateFailed, Timestamp: ptypes.MustTimestampProto(time.Now())} + task.Status = &api.TaskStatus{State: api.TaskStateFailed, Timestamp: ptypes.MustTimestampProto(time.Now())} err = s.Update(func(tx store.Tx) error { assert.NoError(t, store.UpdateTask(tx, task)) return nil @@ -655,8 +654,8 @@ func TestOrchestratorRestartWindow(t *testing.T) { err := s.Update(func(tx store.Tx) error { j1 := &api.Service{ ID: "id1", - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "name1", }, Mode: &api.ServiceSpec_Replicated{ @@ -664,12 +663,12 @@ func TestOrchestratorRestartWindow(t *testing.T) { Replicas: 2, }, }, - Task: api.TaskSpec{ + Task: &api.TaskSpec{ Restart: &api.RestartPolicy{ Condition: api.RestartOnAny, - Delay: gogotypes.DurationProto(100 * time.Millisecond), + Delay: durationpb.New(100 * time.Millisecond), MaxAttempts: 1, - Window: gogotypes.DurationProto(500 * time.Millisecond), + Window: durationpb.New(500 * time.Millisecond), }, }, }, @@ -694,7 +693,7 @@ func TestOrchestratorRestartWindow(t *testing.T) { // Fail the first task. Confirm that it gets restarted. updatedTask1 := observedTask1.Copy() - updatedTask1.Status = api.TaskStatus{State: api.TaskStateFailed, Timestamp: ptypes.MustTimestampProto(time.Now())} + updatedTask1.Status = &api.TaskStatus{State: api.TaskStateFailed, Timestamp: ptypes.MustTimestampProto(time.Now())} before := time.Now() err = s.Update(func(tx store.Tx) error { assert.NoError(t, store.UpdateTask(tx, updatedTask1)) @@ -727,7 +726,7 @@ func TestOrchestratorRestartWindow(t *testing.T) { // Fail the second task. Confirm that it gets restarted. updatedTask2 := observedTask2.Copy() - updatedTask2.Status = api.TaskStatus{State: api.TaskStateFailed, Timestamp: ptypes.MustTimestampProto(time.Now())} + updatedTask2.Status = &api.TaskStatus{State: api.TaskStateFailed, Timestamp: ptypes.MustTimestampProto(time.Now())} err = s.Update(func(tx store.Tx) error { assert.NoError(t, store.UpdateTask(tx, updatedTask2)) return nil @@ -752,7 +751,7 @@ func TestOrchestratorRestartWindow(t *testing.T) { // Fail the first instance again. It should not be restarted. updatedTask1 = observedTask3.Copy() - updatedTask1.Status = api.TaskStatus{State: api.TaskStateFailed, Timestamp: ptypes.MustTimestampProto(time.Now())} + updatedTask1.Status = &api.TaskStatus{State: api.TaskStateFailed, Timestamp: ptypes.MustTimestampProto(time.Now())} err = s.Update(func(tx store.Tx) error { assert.NoError(t, store.UpdateTask(tx, updatedTask1)) return nil @@ -774,7 +773,7 @@ func TestOrchestratorRestartWindow(t *testing.T) { // Fail the second instance again. It should get restarted because // enough time has elapsed since the last restarts. updatedTask2 = observedTask5.Copy() - updatedTask2.Status = api.TaskStatus{State: api.TaskStateFailed, Timestamp: ptypes.MustTimestampProto(time.Now())} + updatedTask2.Status = &api.TaskStatus{State: api.TaskStateFailed, Timestamp: ptypes.MustTimestampProto(time.Now())} before = time.Now() err = s.Update(func(tx store.Tx) error { assert.NoError(t, store.UpdateTask(tx, updatedTask2)) diff --git a/manager/orchestrator/replicated/slot.go b/manager/orchestrator/replicated/slot.go index 0009505cc7..924dd9bcbb 100644 --- a/manager/orchestrator/replicated/slot.go +++ b/manager/orchestrator/replicated/slot.go @@ -20,13 +20,13 @@ func (is slotsByRunningState) Less(i, j int) bool { jRunning := false for _, ii := range is[i] { - if ii.Status.State == api.TaskStateRunning { + if ii.GetStatus().GetState() == api.TaskStateRunning { iRunning = true break } } for _, ij := range is[j] { - if ij.Status.State == api.TaskStateRunning { + if ij.GetStatus().GetState() == api.TaskStateRunning { jRunning = true break } diff --git a/manager/orchestrator/replicated/update_test.go b/manager/orchestrator/replicated/update_test.go index a44b86ad38..9d9459ded3 100644 --- a/manager/orchestrator/replicated/update_test.go +++ b/manager/orchestrator/replicated/update_test.go @@ -7,8 +7,8 @@ import ( "time" "github.com/docker/go-events" - gogotypes "github.com/gogo/protobuf/types" "github.com/moby/swarmkit/v2/api" + "google.golang.org/protobuf/types/known/durationpb" "github.com/moby/swarmkit/v2/manager/orchestrator/testutils" "github.com/moby/swarmkit/v2/manager/state" "github.com/moby/swarmkit/v2/manager/state/store" @@ -119,11 +119,11 @@ func testUpdaterRollback(t *testing.T, rollbackFailureAction api.UpdateConfig_Fa err := s.Update(func(tx store.Tx) error { s1 := &api.Service{ ID: "id1", - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "name1", }, - Task: api.TaskSpec{ + Task: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{ Image: "image1", @@ -141,21 +141,21 @@ func testUpdaterRollback(t *testing.T, rollbackFailureAction api.UpdateConfig_Fa Update: &api.UpdateConfig{ FailureAction: api.UpdateConfig_ROLLBACK, Parallelism: 1, - Delay: 10 * time.Millisecond, + Delay: durationpb.New(10 * time.Millisecond), MaxFailureRatio: 0.4, }, Rollback: &api.UpdateConfig{ FailureAction: rollbackFailureAction, Parallelism: 1, - Delay: 10 * time.Millisecond, + Delay: durationpb.New(10 * time.Millisecond), MaxFailureRatio: 0.4, }, }, } if setMonitor { - s1.Spec.Update.Monitor = gogotypes.DurationProto(500 * time.Millisecond) - s1.Spec.Rollback.Monitor = gogotypes.DurationProto(500 * time.Millisecond) + s1.Spec.Update.Monitor = durationpb.New(500 * time.Millisecond) + s1.Spec.Rollback.Monitor = durationpb.New(500 * time.Millisecond) } if useSpecVersion { s1.SpecVersion = &api.Version{ diff --git a/manager/orchestrator/restart/restart.go b/manager/orchestrator/restart/restart.go index 420cca1734..16dcf66cbe 100644 --- a/manager/orchestrator/restart/restart.go +++ b/manager/orchestrator/restart/restart.go @@ -8,7 +8,6 @@ import ( "time" "github.com/docker/go-events" - gogotypes "github.com/gogo/protobuf/types" "github.com/moby/swarmkit/v2/api" "github.com/moby/swarmkit/v2/api/defaults" "github.com/moby/swarmkit/v2/log" @@ -36,7 +35,7 @@ type instanceRestartInfo struct { // Making the key version-agnostic and clearing the value whenever the // version changes avoids the issue of stale map entries for old // versions. - specVersion api.Version + specVersionIndex uint64 } type delayedStart struct { @@ -173,16 +172,11 @@ func (r *Supervisor) Restart(ctx context.Context, tx store.Tx, cluster *api.Clus var restartDelay time.Duration // Restart delay is not applied to drained nodes - if n == nil || n.Spec.Availability != api.NodeAvailabilityDrain { - if t.Spec.Restart != nil && t.Spec.Restart.Delay != nil { - var err error - restartDelay, err = gogotypes.DurationFromProto(t.Spec.Restart.Delay) - if err != nil { - log.G(ctx).WithError(err).Error("invalid restart delay; using default") - restartDelay, _ = gogotypes.DurationFromProto(defaults.Service.Task.Restart.Delay) - } + if n == nil || n.GetSpec().GetAvailability() != api.NodeAvailabilityDrain { + if t.GetSpec().GetRestart() != nil && t.GetSpec().GetRestart().GetDelay() != nil { + restartDelay = t.GetSpec().GetRestart().GetDelay().AsDuration() } else { - restartDelay, _ = gogotypes.DurationFromProto(defaults.Service.Task.Restart.Delay) + restartDelay = defaults.Service.Task.Restart.Delay.AsDuration() } } @@ -190,7 +184,7 @@ func (r *Supervisor) Restart(ctx context.Context, tx store.Tx, cluster *api.Clus // Normally we wait for the old task to stop running, but we skip this // if the old task is already dead or the node it's assigned to is down. - if (n != nil && n.Status.State == api.NodeStatus_DOWN) || t.Status.State > api.TaskStateRunning { + if (n != nil && n.GetStatus().GetState() == api.NodeStatus_DOWN) || t.Status.GetState() > api.TaskStateRunning { waitStop = false } @@ -224,14 +218,14 @@ func (r *Supervisor) shouldRestart(ctx context.Context, t *api.Task, service *ap if orchestrator.IsReplicatedJob(service) || orchestrator.IsGlobalJob(service) { // it'd be nice to put a fallthrough here, but we can't fallthrough // from inside of an if statement. - if t.Status.State == api.TaskStateCompleted { + if t.GetStatus().GetState() == api.TaskStateCompleted { return false } } case api.RestartOnFailure: // we won't restart if the task is in TaskStateCompleted, as this is a // not a failed state -- it indicates that the task exited with 0 - if t.Status.State == api.TaskStateCompleted { + if t.GetStatus().GetState() == api.TaskStateCompleted { return false } case api.RestartOnNone: @@ -239,7 +233,7 @@ func (r *Supervisor) shouldRestart(ctx context.Context, t *api.Task, service *ap return false } - if t.Spec.Restart == nil || t.Spec.Restart.MaxAttempts == 0 { + if t.GetSpec().GetRestart() == nil || t.GetSpec().GetRestart().GetMaxAttempts() == 0 { return true } @@ -258,40 +252,32 @@ func (r *Supervisor) shouldRestart(ctx context.Context, t *api.Task, service *ap defer r.mu.Unlock() restartInfo := r.historyByService[t.ServiceID][instanceTuple] - if restartInfo == nil || (t.SpecVersion != nil && *t.SpecVersion != restartInfo.specVersion) { + if restartInfo == nil || (t.SpecVersion != nil && t.SpecVersion.GetIndex() != restartInfo.specVersionIndex) { return true } - if t.Spec.Restart.Window == nil || (t.Spec.Restart.Window.Seconds == 0 && t.Spec.Restart.Window.Nanos == 0) { - return restartInfo.totalRestarts < t.Spec.Restart.MaxAttempts + restart := t.GetSpec().GetRestart() + restartWindow := restart.GetWindow() + if restartWindow == nil || (restartWindow.Seconds == 0 && restartWindow.Nanos == 0) { + return restartInfo.totalRestarts < restart.GetMaxAttempts() } if restartInfo.restartedInstances == nil { return true } - window, err := gogotypes.DurationFromProto(t.Spec.Restart.Window) - if err != nil { - log.G(ctx).WithError(err).Error("invalid restart lookback window") - return restartInfo.totalRestarts < t.Spec.Restart.MaxAttempts - } + window := restartWindow.AsDuration() var timestamp time.Time // Prefer the manager's timestamp over the agent's, since manager // clocks are more trustworthy. - if t.Status.AppliedAt != nil { - timestamp, err = gogotypes.TimestampFromProto(t.Status.AppliedAt) - if err != nil { - log.G(ctx).WithError(err).Error("invalid task status AppliedAt timestamp") - return restartInfo.totalRestarts < t.Spec.Restart.MaxAttempts - } + if t.Status.GetAppliedAt() != nil { + timestamp = t.Status.GetAppliedAt().AsTime() + } else if t.Status.GetTimestamp() != nil { + timestamp = t.Status.GetTimestamp().AsTime() } else { - // It's safe to call TimestampFromProto with a nil timestamp - timestamp, err = gogotypes.TimestampFromProto(t.Status.Timestamp) - if t.Status.Timestamp == nil || err != nil { - log.G(ctx).WithError(err).Error("invalid task completion timestamp") - return restartInfo.totalRestarts < t.Spec.Restart.MaxAttempts - } + log.G(ctx).Error("invalid task completion timestamp") + return restartInfo.totalRestarts < restart.GetMaxAttempts() } lookback := timestamp.Add(-window) @@ -324,7 +310,7 @@ func (r *Supervisor) shouldRestart(ctx context.Context, t *api.Task, service *ap restartInfo.restartedInstances = nil } - return numRestarts < t.Spec.Restart.MaxAttempts + return numRestarts < t.GetSpec().GetRestart().GetMaxAttempts() } // UpdatableTasksInSlot returns the set of tasks that should be passed to the @@ -374,7 +360,7 @@ func (r *Supervisor) UpdatableTasksInSlot(ctx context.Context, slot orchestrator // RecordRestartHistory updates the historyByService map to reflect the restart // of restartedTask. func (r *Supervisor) RecordRestartHistory(tuple orchestrator.SlotTuple, replacementTask *api.Task) { - if replacementTask.Spec.Restart == nil || replacementTask.Spec.Restart.MaxAttempts == 0 { + if replacementTask.GetSpec().GetRestart() == nil || replacementTask.GetSpec().GetRestart().GetMaxAttempts() == 0 { // No limit on the number of restarts, so no need to record // history. return @@ -393,26 +379,28 @@ func (r *Supervisor) RecordRestartHistory(tuple orchestrator.SlotTuple, replacem restartInfo := r.historyByService[serviceID][tuple] - if replacementTask.SpecVersion != nil && *replacementTask.SpecVersion != restartInfo.specVersion { + if replacementTask.SpecVersion != nil && replacementTask.SpecVersion.GetIndex() != restartInfo.specVersionIndex { // This task has a different SpecVersion from the one we're // tracking. Most likely, the service was updated. Past failures // shouldn't count against the new service definition, so clear // the history for this instance. *restartInfo = instanceRestartInfo{ - specVersion: *replacementTask.SpecVersion, + specVersionIndex: replacementTask.SpecVersion.GetIndex(), } } restartInfo.totalRestarts++ - if replacementTask.Spec.Restart.Window != nil && (replacementTask.Spec.Restart.Window.Seconds != 0 || replacementTask.Spec.Restart.Window.Nanos != 0) { + replWindow := replacementTask.GetSpec().GetRestart().GetWindow() + if replWindow != nil && (replWindow.Seconds != 0 || replWindow.Nanos != 0) { if restartInfo.restartedInstances == nil { restartInfo.restartedInstances = list.New() } - // it's okay to call TimestampFromProto with a nil argument - timestamp, err := gogotypes.TimestampFromProto(replacementTask.Meta.CreatedAt) - if replacementTask.Meta.CreatedAt == nil || err != nil { + var timestamp time.Time + if replacementTask.Meta.GetCreatedAt() != nil { + timestamp = replacementTask.Meta.GetCreatedAt().AsTime() + } else { timestamp = time.Now() } @@ -454,7 +442,7 @@ func (r *Supervisor) DelayStart(ctx context.Context, _ store.Tx, oldTask *api.Ta var watch chan events.Event cancelWatch := func() {} - waitForTask := waitStop && oldTask != nil && oldTask.Status.State <= api.TaskStateRunning + waitForTask := waitStop && oldTask != nil && oldTask.Status.GetState() <= api.TaskStateRunning if waitForTask { // Wait for either the old task to complete, or the old task's @@ -462,11 +450,11 @@ func (r *Supervisor) DelayStart(ctx context.Context, _ store.Tx, oldTask *api.Ta watch, cancelWatch = state.Watch( r.store.WatchQueue(), api.EventUpdateTask{ - Task: &api.Task{ID: oldTask.ID, Status: api.TaskStatus{State: api.TaskStateRunning}}, + Task: &api.Task{ID: oldTask.ID, Status: &api.TaskStatus{State: api.TaskStateRunning}}, Checks: []api.TaskCheckFunc{api.TaskCheckID, state.TaskCheckStateGreaterThan}, }, api.EventUpdateNode{ - Node: &api.Node{ID: oldTask.NodeID, Status: api.NodeStatus{State: api.NodeStatus_DOWN}}, + Node: &api.Node{ID: oldTask.NodeID, Status: &api.NodeStatus{State: api.NodeStatus_DOWN}}, Checks: []api.NodeCheckFunc{api.NodeCheckID, state.NodeCheckState}, }, api.EventDeleteNode{ diff --git a/manager/orchestrator/service_test.go b/manager/orchestrator/service_test.go index e103436f6c..5e4cffbcbe 100644 --- a/manager/orchestrator/service_test.go +++ b/manager/orchestrator/service_test.go @@ -13,7 +13,7 @@ func TestIsReplicatedJob(t *testing.T) { // first, create a spec with no mode, that we can reuse for each subtest. service := &api.Service{ ID: "someService", - Spec: api.ServiceSpec{}, + Spec: &api.ServiceSpec{}, } // this might seem like a good use-case for a table-based test, but the // various service modes do not share a common public interface, and so @@ -41,7 +41,7 @@ func TestIsGlobalJob(t *testing.T) { // first, create a spec with no mode, that we can reuse for each subtest. service := &api.Service{ ID: "someService", - Spec: api.ServiceSpec{}, + Spec: &api.ServiceSpec{}, } // this might seem like a good use-case for a table-based test, but the // various service modes do not share a common public interface, and so diff --git a/manager/orchestrator/task.go b/manager/orchestrator/task.go index 4f7bbdd33b..25b1e114a0 100644 --- a/manager/orchestrator/task.go +++ b/manager/orchestrator/task.go @@ -1,43 +1,43 @@ package orchestrator import ( - "reflect" "time" - google_protobuf "github.com/gogo/protobuf/types" "github.com/moby/swarmkit/v2/api" "github.com/moby/swarmkit/v2/api/defaults" "github.com/moby/swarmkit/v2/identity" "github.com/moby/swarmkit/v2/manager/constraint" "github.com/moby/swarmkit/v2/protobuf/ptypes" + "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/types/known/timestamppb" ) // NewTask creates a new task. func NewTask(cluster *api.Cluster, service *api.Service, slot uint64, nodeID string) *api.Task { var logDriver *api.Driver - if service.Spec.Task.LogDriver != nil { + if service.GetSpec().GetTask().GetLogDriver() != nil { // use the log driver specific to the task, if we have it. - logDriver = service.Spec.Task.LogDriver + logDriver = service.GetSpec().GetTask().GetLogDriver() } else if cluster != nil { // pick up the cluster default, if available. - logDriver = cluster.Spec.TaskDefaults.LogDriver // nil is okay here. + logDriver = cluster.GetSpec().GetTaskDefaults().GetLogDriver() // nil is okay here. } taskID := identity.NewID() task := api.Task{ ID: taskID, - ServiceAnnotations: service.Spec.Annotations, - Spec: service.Spec.Task, + ServiceAnnotations: service.GetSpec().GetAnnotations(), + Spec: service.GetSpec().GetTask(), SpecVersion: service.SpecVersion, ServiceID: service.ID, Slot: slot, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateNew, Timestamp: ptypes.MustTimestampProto(time.Now()), Message: "created", }, Endpoint: &api.Endpoint{ - Spec: service.Spec.Endpoint.Copy(), + Spec: service.GetSpec().GetEndpoint().Copy(), }, DesiredState: api.TaskStateRunning, LogDriver: logDriver, @@ -52,10 +52,10 @@ func NewTask(cluster *api.Cluster, service *api.Service, slot uint64, nodeID str } // RestartCondition returns the restart condition to apply to this task. -func RestartCondition(task *api.Task) api.RestartPolicy_RestartCondition { +func RestartCondition(task *api.Task) api.RestartCondition { restartCondition := defaults.Service.Task.Restart.Condition - if task.Spec.Restart != nil { - restartCondition = task.Spec.Restart.Condition + if task.GetSpec().GetRestart() != nil { + restartCondition = task.GetSpec().GetRestart().GetCondition() } return restartCondition } @@ -74,12 +74,15 @@ func IsTaskDirty(s *api.Service, t *api.Task, n *api.Node) bool { // If the spec version matches, we know the task is not dirty. However, // if it does not match, that doesn't mean the task is dirty, since // only a portion of the spec is included in the comparison. - if t.SpecVersion != nil && s.SpecVersion != nil && *s.SpecVersion == *t.SpecVersion { + if t.SpecVersion != nil && s.SpecVersion != nil && s.SpecVersion.GetIndex() == t.SpecVersion.GetIndex() { return false } // Make a deep copy of the service and task spec for the comparison. - serviceTaskSpec := *s.Spec.Task.Copy() + var serviceTaskSpec api.TaskSpec + if s.GetSpec().GetTask() != nil { + serviceTaskSpec = *s.Spec.Task.Copy() + } // Task is not dirty if the placement constraints alone changed // and the node currently assigned can satisfy the changed constraints. @@ -95,7 +98,7 @@ func IsTaskDirty(s *api.Service, t *api.Task, n *api.Node) bool { // a running (or ready to run) task to be considered 'dirty' when we // handle updates. // See https://github.com/docker/swarmkit/issues/971 - currentState := t.Status.State + currentState := t.Status.GetState() // Ignore PullOpts if the task is desired to be in a "runnable" state // and its last known current state is between READY and RUNNING in // which case we know that the task either successfully pulled its @@ -103,13 +106,18 @@ func IsTaskDirty(s *api.Service, t *api.Task, n *api.Node) bool { ignorePullOpts := t.DesiredState <= api.TaskStateRunning && currentState >= api.TaskStateReady && currentState <= api.TaskStateRunning - if ignorePullOpts && serviceTaskSpec.GetContainer() != nil && t.Spec.GetContainer() != nil { + if ignorePullOpts && serviceTaskSpec.GetContainer() != nil && t.GetSpec().GetContainer() != nil { // Modify the service's container spec. - serviceTaskSpec.GetContainer().PullOptions = t.Spec.GetContainer().PullOptions + serviceTaskSpec.GetContainer().PullOptions = t.GetSpec().GetContainer().GetPullOptions() } - return !reflect.DeepEqual(serviceTaskSpec, t.Spec) || - (t.Endpoint != nil && !reflect.DeepEqual(s.Spec.Endpoint, t.Endpoint.Spec)) + // If the task has no spec, treat it as an empty spec for comparison. + taskSpec := t.GetSpec() + if taskSpec == nil { + taskSpec = &api.TaskSpec{} + } + return !proto.Equal(&serviceTaskSpec, taskSpec) || + (t.Endpoint != nil && !proto.Equal(s.GetSpec().GetEndpoint(), t.Endpoint.Spec)) } // Checks if the current assigned node matches the Placement.Constraints @@ -119,37 +127,42 @@ func nodeMatches(s *api.Service, n *api.Node) bool { return false } - constraints, _ := constraint.Parse(s.Spec.Task.Placement.Constraints) + constraints, _ := constraint.Parse(s.GetSpec().GetTask().GetPlacement().GetConstraints()) return constraint.NodeMatches(constraints, n) } // IsTaskDirtyPlacementConstraintsOnly checks if the Placement field alone // in the spec has changed. func IsTaskDirtyPlacementConstraintsOnly(serviceTaskSpec api.TaskSpec, t *api.Task) bool { + // Get the task spec, treating nil as an empty spec. + taskSpec := t.GetSpec() + if taskSpec == nil { + taskSpec = &api.TaskSpec{} + } // Compare the task placement constraints. - if reflect.DeepEqual(serviceTaskSpec.Placement, t.Spec.Placement) { + if proto.Equal(serviceTaskSpec.Placement, taskSpec.Placement) { return false } // Update spec placement to only the fields // other than the placement constraints in the spec. - serviceTaskSpec.Placement = t.Spec.Placement - return reflect.DeepEqual(serviceTaskSpec, t.Spec) + serviceTaskSpec.Placement = taskSpec.Placement + return proto.Equal(&serviceTaskSpec, taskSpec) } // InvalidNode is true if the node is nil, down, or drained func InvalidNode(n *api.Node) bool { return n == nil || - n.Status.State == api.NodeStatus_DOWN || - n.Spec.Availability == api.NodeAvailabilityDrain + n.GetStatus().GetState() == api.NodeStatus_DOWN || + n.GetSpec().GetAvailability() == api.NodeAvailabilityDrain } -func taskTimestamp(t *api.Task) *google_protobuf.Timestamp { - if t.Status.AppliedAt != nil { - return t.Status.AppliedAt +func taskTimestamp(t *api.Task) *timestamppb.Timestamp { + if t.Status.GetAppliedAt() != nil { + return t.Status.GetAppliedAt() } - return t.Status.Timestamp + return t.Status.GetTimestamp() } // TasksByTimestamp sorts tasks by applied timestamp if available, otherwise diff --git a/manager/orchestrator/task_test.go b/manager/orchestrator/task_test.go index 58b5918be0..dbc2e767eb 100644 --- a/manager/orchestrator/task_test.go +++ b/manager/orchestrator/task_test.go @@ -4,11 +4,10 @@ import ( "sort" "strconv" "testing" - - google_protobuf "github.com/gogo/protobuf/types" "github.com/stretchr/testify/assert" "github.com/moby/swarmkit/v2/api" + "google.golang.org/protobuf/types/known/timestamppb" ) // Test IsTaskDirty() for placement constraints. @@ -16,11 +15,11 @@ func TestIsTaskDirty(t *testing.T) { service := &api.Service{ ID: "id1", SpecVersion: &api.Version{Index: 1}, - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "name1", }, - Task: api.TaskSpec{ + Task: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{ Image: "v:1", @@ -32,7 +31,7 @@ func TestIsTaskDirty(t *testing.T) { task := &api.Task{ ID: "task1", - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{ Image: "v:1", @@ -69,11 +68,11 @@ func TestIsTaskDirty(t *testing.T) { func TestIsTaskDirtyPlacementConstraintsOnly(t *testing.T) { service := &api.Service{ ID: "id1", - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "name1", }, - Task: api.TaskSpec{ + Task: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{ Image: "v:1", @@ -85,7 +84,7 @@ func TestIsTaskDirtyPlacementConstraintsOnly(t *testing.T) { task := &api.Task{ ID: "task1", - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{ Image: "v:1", @@ -94,20 +93,20 @@ func TestIsTaskDirtyPlacementConstraintsOnly(t *testing.T) { }, } - assert.False(t, IsTaskDirtyPlacementConstraintsOnly(service.Spec.Task, task)) + assert.False(t, IsTaskDirtyPlacementConstraintsOnly(*service.Spec.Task, task)) // Update only placement constraints. service.Spec.Task.Placement = &api.Placement{} service.Spec.Task.Placement.Constraints = append(service.Spec.Task.Placement.Constraints, "node==*") - assert.True(t, IsTaskDirtyPlacementConstraintsOnly(service.Spec.Task, task)) + assert.True(t, IsTaskDirtyPlacementConstraintsOnly(*service.Spec.Task, task)) // Update something else in the task spec. service.Spec.Task.GetContainer().Image = "v:2" - assert.False(t, IsTaskDirtyPlacementConstraintsOnly(service.Spec.Task, task)) + assert.False(t, IsTaskDirtyPlacementConstraintsOnly(*service.Spec.Task, task)) // Clear out placement constraints. service.Spec.Task.Placement.Constraints = nil - assert.False(t, IsTaskDirtyPlacementConstraintsOnly(service.Spec.Task, task)) + assert.False(t, IsTaskDirtyPlacementConstraintsOnly(*service.Spec.Task, task)) } // Test Task sorting, which is currently based on @@ -119,8 +118,8 @@ func TestTaskSort(t *testing.T) { for i := 0; i < size; i++ { task := &api.Task{ ID: "id_" + strconv.Itoa(i), - Status: api.TaskStatus{ - Timestamp: &google_protobuf.Timestamp{Seconds: seconds}, + Status: &api.TaskStatus{ + Timestamp: ×tamppb.Timestamp{Seconds: seconds}, }, } @@ -130,19 +129,19 @@ func TestTaskSort(t *testing.T) { sort.Sort(TasksByTimestamp(tasks)) for i, task := range tasks { - expected := &google_protobuf.Timestamp{Seconds: int64(i + 1)} + expected := ×tamppb.Timestamp{Seconds: int64(i + 1)} assert.Equal(t, expected, task.Status.Timestamp) assert.Equal(t, "id_"+strconv.Itoa(size-(i+1)), task.ID) } for i, task := range tasks { - task.Status.AppliedAt = &google_protobuf.Timestamp{Seconds: int64(size - i)} + task.Status.AppliedAt = ×tamppb.Timestamp{Seconds: int64(size - i)} } sort.Sort(TasksByTimestamp(tasks)) sort.Sort(TasksByTimestamp(tasks)) for i, task := range tasks { - expected := &google_protobuf.Timestamp{Seconds: int64(i + 1)} + expected := ×tamppb.Timestamp{Seconds: int64(i + 1)} assert.Equal(t, expected, task.Status.AppliedAt) assert.Equal(t, "id_"+strconv.Itoa(i), task.ID) } diff --git a/manager/orchestrator/taskinit/init.go b/manager/orchestrator/taskinit/init.go index 34331e6548..c9f2c851e6 100644 --- a/manager/orchestrator/taskinit/init.go +++ b/manager/orchestrator/taskinit/init.go @@ -5,7 +5,6 @@ import ( "sort" "time" - gogotypes "github.com/gogo/protobuf/types" "github.com/moby/swarmkit/v2/api" "github.com/moby/swarmkit/v2/api/defaults" "github.com/moby/swarmkit/v2/log" @@ -59,26 +58,24 @@ func CheckTasks(ctx context.Context, s *store.MemoryStore, readTx store.ReadTx, // desired state ready is a transient state that it should be started. // however previous leader may not have started it, retry start here - if t.DesiredState != api.TaskStateReady || t.Status.State > api.TaskStateCompleted { + if t.DesiredState != api.TaskStateReady || t.Status.GetState() > api.TaskStateCompleted { continue } - restartDelay, _ := gogotypes.DurationFromProto(defaults.Service.Task.Restart.Delay) + restartDelay := defaults.Service.Task.Restart.Delay.AsDuration() if t.Spec.Restart != nil && t.Spec.Restart.Delay != nil { - var err error - restartDelay, err = gogotypes.DurationFromProto(t.Spec.Restart.Delay) - if err != nil { - log.G(ctx).WithError(err).Error("invalid restart delay") - restartDelay, _ = gogotypes.DurationFromProto(defaults.Service.Task.Restart.Delay) - } + restartDelay = t.Spec.Restart.Delay.AsDuration() } if restartDelay != 0 { var timestamp time.Time - if t.Status.AppliedAt != nil { - timestamp, err = gogotypes.TimestampFromProto(t.Status.AppliedAt) - } else { - timestamp, err = gogotypes.TimestampFromProto(t.Status.Timestamp) + var hasTimestamp bool + if t.Status.GetAppliedAt() != nil { + timestamp = t.Status.GetAppliedAt().AsTime() + hasTimestamp = true + } else if t.Status.GetTimestamp() != nil { + timestamp = t.Status.GetTimestamp().AsTime() + hasTimestamp = true } - if err == nil { + if hasTimestamp { restartTime := timestamp.Add(restartDelay) calculatedRestartDelay := time.Until(restartTime) if calculatedRestartDelay < restartDelay { diff --git a/manager/orchestrator/taskreaper/task_reaper_test.go b/manager/orchestrator/taskreaper/task_reaper_test.go index e4e53bde29..41ab36df0d 100644 --- a/manager/orchestrator/taskreaper/task_reaper_test.go +++ b/manager/orchestrator/taskreaper/task_reaper_test.go @@ -11,9 +11,8 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - - gogotypes "github.com/gogo/protobuf/types" "github.com/moby/swarmkit/v2/api" + "google.golang.org/protobuf/types/known/durationpb" "github.com/moby/swarmkit/v2/identity" "github.com/moby/swarmkit/v2/manager/orchestrator/replicated" "github.com/moby/swarmkit/v2/manager/orchestrator/testutils" @@ -32,11 +31,11 @@ func TestTaskReaperInit(t *testing.T) { // Create the basic cluster with precooked tasks we need for the taskreaper cluster := &api.Cluster{ - Spec: api.ClusterSpec{ - Annotations: api.Annotations{ + Spec: &api.ClusterSpec{ + Annotations: &api.Annotations{ Name: store.DefaultClusterName, }, - Orchestration: api.OrchestrationConfig{ + Orchestration: &api.OrchestrationConfig{ TaskHistoryRetentionLimit: 2, }, }, @@ -45,11 +44,11 @@ func TestTaskReaperInit(t *testing.T) { // this service is alive and active, has no tasks to clean up service := &api.Service{ ID: "cleanservice", - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "cleanservice", }, - Task: api.TaskSpec{ + Task: &api.TaskSpec{ // the runtime spec isn't looked at and doesn't really need to // be filled in Runtime: &api.TaskSpec_Container{ @@ -69,7 +68,7 @@ func TestTaskReaperInit(t *testing.T) { ID: "cleantask1", Slot: 1, DesiredState: api.TaskStateRunning, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateRunning, }, ServiceID: "cleanservice", @@ -79,7 +78,7 @@ func TestTaskReaperInit(t *testing.T) { ID: "cleantask2", Slot: 2, DesiredState: api.TaskStateRunning, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateRunning, }, ServiceID: "cleanservice", @@ -91,7 +90,7 @@ func TestTaskReaperInit(t *testing.T) { ID: "retainedtask", Slot: 1, DesiredState: api.TaskStateShutdown, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateFailed, }, ServiceID: "cleanservice", @@ -102,7 +101,7 @@ func TestTaskReaperInit(t *testing.T) { ID: "removedtask", Slot: 3, DesiredState: api.TaskStateRemove, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateShutdown, }, ServiceID: "cleanservice", @@ -114,7 +113,7 @@ func TestTaskReaperInit(t *testing.T) { ID: "terminaltask1", Slot: 1, DesiredState: api.TaskStateRemove, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateRunning, }, ServiceID: "goneservice", @@ -125,7 +124,7 @@ func TestTaskReaperInit(t *testing.T) { ID: "terminaltask2", Slot: 2, DesiredState: api.TaskStateRemove, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ // use COMPLETE because it's the earliest terminal state State: api.TaskStateCompleted, }, @@ -137,7 +136,7 @@ func TestTaskReaperInit(t *testing.T) { ID: "earlytask1", Slot: 3, DesiredState: api.TaskStateRemove, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStatePending, }, ServiceID: "goneservice", @@ -148,7 +147,7 @@ func TestTaskReaperInit(t *testing.T) { ID: "earlytask2", Slot: 4, DesiredState: api.TaskStateRemove, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateNew, }, ServiceID: "goneservice", @@ -210,11 +209,11 @@ func TestTaskHistory(t *testing.T) { assert.NoError(t, s.Update(func(tx store.Tx) error { store.CreateCluster(tx, &api.Cluster{ ID: identity.NewID(), - Spec: api.ClusterSpec{ - Annotations: api.Annotations{ + Spec: &api.ClusterSpec{ + Annotations: &api.Annotations{ Name: store.DefaultClusterName, }, - Orchestration: api.OrchestrationConfig{ + Orchestration: &api.OrchestrationConfig{ TaskHistoryRetentionLimit: 2, }, }, @@ -236,8 +235,8 @@ func TestTaskHistory(t *testing.T) { err := s.Update(func(tx store.Tx) error { j1 := &api.Service{ ID: "id1", - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "name1", }, Mode: &api.ServiceSpec_Replicated{ @@ -245,10 +244,10 @@ func TestTaskHistory(t *testing.T) { Replicas: 2, }, }, - Task: api.TaskSpec{ + Task: &api.TaskSpec{ Restart: &api.RestartPolicy{ Condition: api.RestartOnAny, - Delay: gogotypes.DurationProto(0), + Delay: durationpb.New(0), }, }, }, @@ -275,10 +274,10 @@ func TestTaskHistory(t *testing.T) { // Fail both tasks. They should both get restarted. updatedTask1 := observedTask1.Copy() updatedTask1.Status.State = api.TaskStateFailed - updatedTask1.ServiceAnnotations = api.Annotations{Name: "original"} + updatedTask1.ServiceAnnotations = &api.Annotations{Name: "original"} updatedTask2 := observedTask2.Copy() updatedTask2.Status.State = api.TaskStateFailed - updatedTask2.ServiceAnnotations = api.Annotations{Name: "original"} + updatedTask2.ServiceAnnotations = &api.Annotations{Name: "original"} err = s.Update(func(tx store.Tx) error { assert.NoError(t, store.UpdateTask(tx, updatedTask1)) assert.NoError(t, store.UpdateTask(tx, updatedTask2)) @@ -341,11 +340,11 @@ func TestTaskStateRemoveOnScaledown(t *testing.T) { assert.NoError(t, s.Update(func(tx store.Tx) error { store.CreateCluster(tx, &api.Cluster{ ID: identity.NewID(), - Spec: api.ClusterSpec{ - Annotations: api.Annotations{ + Spec: &api.ClusterSpec{ + Annotations: &api.Annotations{ Name: store.DefaultClusterName, }, - Orchestration: api.OrchestrationConfig{ + Orchestration: &api.OrchestrationConfig{ // set TaskHistoryRetentionLimit to a negative value, so // that it is not considered in this test TaskHistoryRetentionLimit: -1, @@ -366,8 +365,8 @@ func TestTaskStateRemoveOnScaledown(t *testing.T) { service1 := &api.Service{ ID: "id1", - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "name1", }, Mode: &api.ServiceSpec_Replicated{ @@ -375,10 +374,10 @@ func TestTaskStateRemoveOnScaledown(t *testing.T) { Replicas: 2, }, }, - Task: api.TaskSpec{ + Task: &api.TaskSpec{ Restart: &api.RestartPolicy{ Condition: api.RestartOnAny, - Delay: gogotypes.DurationProto(0), + Delay: durationpb.New(0), }, }, }, @@ -408,10 +407,10 @@ func TestTaskStateRemoveOnScaledown(t *testing.T) { // Set both tasks to RUNNING, so the service is successfully running updatedTask1 := observedTask1.Copy() updatedTask1.Status.State = api.TaskStateRunning - updatedTask1.ServiceAnnotations = api.Annotations{Name: "original"} + updatedTask1.ServiceAnnotations = &api.Annotations{Name: "original"} updatedTask2 := observedTask2.Copy() updatedTask2.Status.State = api.TaskStateRunning - updatedTask2.ServiceAnnotations = api.Annotations{Name: "original"} + updatedTask2.ServiceAnnotations = &api.Annotations{Name: "original"} err = s.Update(func(tx store.Tx) error { assert.NoError(t, store.UpdateTask(tx, updatedTask1)) assert.NoError(t, store.UpdateTask(tx, updatedTask2)) @@ -472,11 +471,11 @@ func TestTaskStateRemoveOnServiceRemoval(t *testing.T) { assert.NoError(t, s.Update(func(tx store.Tx) error { store.CreateCluster(tx, &api.Cluster{ ID: identity.NewID(), - Spec: api.ClusterSpec{ - Annotations: api.Annotations{ + Spec: &api.ClusterSpec{ + Annotations: &api.Annotations{ Name: store.DefaultClusterName, }, - Orchestration: api.OrchestrationConfig{ + Orchestration: &api.OrchestrationConfig{ // set TaskHistoryRetentionLimit to a negative value, so // that it is not considered in this test TaskHistoryRetentionLimit: -1, @@ -496,8 +495,8 @@ func TestTaskStateRemoveOnServiceRemoval(t *testing.T) { service1 := &api.Service{ ID: "id1", - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "name1", }, Mode: &api.ServiceSpec_Replicated{ @@ -505,10 +504,10 @@ func TestTaskStateRemoveOnServiceRemoval(t *testing.T) { Replicas: 2, }, }, - Task: api.TaskSpec{ + Task: &api.TaskSpec{ Restart: &api.RestartPolicy{ Condition: api.RestartOnAny, - Delay: gogotypes.DurationProto(0), + Delay: durationpb.New(0), }, }, }, @@ -540,10 +539,10 @@ func TestTaskStateRemoveOnServiceRemoval(t *testing.T) { // Set both tasks to RUNNING, so the service is successfully running updatedTask1 := observedTask1.Copy() updatedTask1.Status.State = api.TaskStateRunning - updatedTask1.ServiceAnnotations = api.Annotations{Name: "original"} + updatedTask1.ServiceAnnotations = &api.Annotations{Name: "original"} updatedTask2 := observedTask2.Copy() updatedTask2.Status.State = api.TaskStateRunning - updatedTask2.ServiceAnnotations = api.Annotations{Name: "original"} + updatedTask2.ServiceAnnotations = &api.Annotations{Name: "original"} err = s.Update(func(tx store.Tx) error { assert.NoError(t, store.UpdateTask(tx, updatedTask1)) assert.NoError(t, store.UpdateTask(tx, updatedTask2)) @@ -609,11 +608,11 @@ func TestServiceRemoveDeadTasks(t *testing.T) { assert.NoError(t, s.Update(func(tx store.Tx) error { store.CreateCluster(tx, &api.Cluster{ ID: identity.NewID(), - Spec: api.ClusterSpec{ - Annotations: api.Annotations{ + Spec: &api.ClusterSpec{ + Annotations: &api.Annotations{ Name: store.DefaultClusterName, }, - Orchestration: api.OrchestrationConfig{ + Orchestration: &api.OrchestrationConfig{ // set TaskHistoryRetentionLimit to a negative value, so // that it is not considered in this test TaskHistoryRetentionLimit: -1, @@ -633,8 +632,8 @@ func TestServiceRemoveDeadTasks(t *testing.T) { service1 := &api.Service{ ID: "id1", - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "name1", }, Mode: &api.ServiceSpec_Replicated{ @@ -642,11 +641,11 @@ func TestServiceRemoveDeadTasks(t *testing.T) { Replicas: 2, }, }, - Task: api.TaskSpec{ + Task: &api.TaskSpec{ Restart: &api.RestartPolicy{ // Turn off restart to get an accurate count on tasks. Condition: api.RestartOnNone, - Delay: gogotypes.DurationProto(0), + Delay: durationpb.New(0), }, }, }, @@ -678,10 +677,10 @@ func TestServiceRemoveDeadTasks(t *testing.T) { // Set both task states to RUNNING. updatedTask1 := observedTask1.Copy() updatedTask1.Status.State = api.TaskStateRunning - updatedTask1.ServiceAnnotations = api.Annotations{Name: "original"} + updatedTask1.ServiceAnnotations = &api.Annotations{Name: "original"} updatedTask2 := observedTask2.Copy() updatedTask2.Status.State = api.TaskStateRunning - updatedTask2.ServiceAnnotations = api.Annotations{Name: "original"} + updatedTask2.ServiceAnnotations = &api.Annotations{Name: "original"} err = s.Update(func(tx store.Tx) error { assert.NoError(t, store.UpdateTask(tx, updatedTask1)) assert.NoError(t, store.UpdateTask(tx, updatedTask2)) @@ -698,11 +697,11 @@ func TestServiceRemoveDeadTasks(t *testing.T) { updatedTask3 := observedTask1.Copy() updatedTask3.DesiredState = api.TaskStateCompleted updatedTask3.Status.State = api.TaskStateCompleted - updatedTask3.ServiceAnnotations = api.Annotations{Name: "original"} + updatedTask3.ServiceAnnotations = &api.Annotations{Name: "original"} updatedTask4 := observedTask2.Copy() updatedTask4.DesiredState = api.TaskStateCompleted updatedTask4.Status.State = api.TaskStateCompleted - updatedTask4.ServiceAnnotations = api.Annotations{Name: "original"} + updatedTask4.ServiceAnnotations = &api.Annotations{Name: "original"} err = s.Update(func(tx store.Tx) error { assert.NoError(t, store.UpdateTask(tx, updatedTask3)) assert.NoError(t, store.UpdateTask(tx, updatedTask4)) @@ -772,11 +771,11 @@ func TestTaskReaperBatching(t *testing.T) { // to a low value assert.NoError(t, store.CreateCluster(tx, &api.Cluster{ ID: identity.NewID(), - Spec: api.ClusterSpec{ - Annotations: api.Annotations{ + Spec: &api.ClusterSpec{ + Annotations: &api.Annotations{ Name: store.DefaultClusterName, }, - Orchestration: api.OrchestrationConfig{ + Orchestration: &api.OrchestrationConfig{ TaskHistoryRetentionLimit: 1, }, }, @@ -787,7 +786,7 @@ func TestTaskReaperBatching(t *testing.T) { ServiceID: "bar", Slot: 0, DesiredState: api.TaskStateShutdown, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateShutdown, }, } @@ -800,7 +799,7 @@ func TestTaskReaperBatching(t *testing.T) { ServiceID: "bar", Slot: 1, DesiredState: api.TaskStateShutdown, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateShutdown, }, } @@ -815,7 +814,7 @@ func TestTaskReaperBatching(t *testing.T) { // based on exceeding the retention limit Slot: uint64(i), DesiredState: api.TaskStateShutdown, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateShutdown, }, } @@ -829,7 +828,7 @@ func TestTaskReaperBatching(t *testing.T) { ServiceID: "bar", Slot: 2, DesiredState: api.TaskStateShutdown, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateShutdown, }, } @@ -955,11 +954,11 @@ func TestServiceRemoveUnassignedTasks(t *testing.T) { assert.NoError(t, s.Update(func(tx store.Tx) error { store.CreateCluster(tx, &api.Cluster{ ID: identity.NewID(), - Spec: api.ClusterSpec{ - Annotations: api.Annotations{ + Spec: &api.ClusterSpec{ + Annotations: &api.Annotations{ Name: store.DefaultClusterName, }, - Orchestration: api.OrchestrationConfig{ + Orchestration: &api.OrchestrationConfig{ // set TaskHistoryRetentionLimit to a negative value, so // that tasks are cleaned up right away. TaskHistoryRetentionLimit: 1, @@ -979,8 +978,8 @@ func TestServiceRemoveUnassignedTasks(t *testing.T) { service1 := &api.Service{ ID: "id1", - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "name1", }, Mode: &api.ServiceSpec_Replicated{ @@ -988,11 +987,11 @@ func TestServiceRemoveUnassignedTasks(t *testing.T) { Replicas: 1, }, }, - Task: api.TaskSpec{ + Task: &api.TaskSpec{ Restart: &api.RestartPolicy{ // Turn off restart to get an accurate count on tasks. Condition: api.RestartOnNone, - Delay: gogotypes.DurationProto(0), + Delay: durationpb.New(0), }, }, }, @@ -1020,7 +1019,7 @@ func TestServiceRemoveUnassignedTasks(t *testing.T) { // Set the task state to PENDING to simulate allocation. updatedTask1 := observedTask1.Copy() updatedTask1.Status.State = api.TaskStatePending - updatedTask1.ServiceAnnotations = api.Annotations{Name: "original"} + updatedTask1.ServiceAnnotations = &api.Annotations{Name: "original"} err = s.Update(func(tx store.Tx) error { assert.NoError(t, store.UpdateTask(tx, updatedTask1)) return nil @@ -1110,8 +1109,8 @@ func TestTick(t *testing.T) { // Create a service in the store for the following test cases. service1 := &api.Service{ ID: "id1", - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "name1", }, Mode: &api.ServiceSpec_Replicated{ @@ -1119,11 +1118,11 @@ func TestTick(t *testing.T) { Replicas: 1, }, }, - Task: api.TaskSpec{ + Task: &api.TaskSpec{ Restart: &api.RestartPolicy{ // Turn off restart to get an accurate count on tasks. Condition: api.RestartOnNone, - Delay: gogotypes.DurationProto(0), + Delay: durationpb.New(0), }, }, }, @@ -1132,8 +1131,8 @@ func TestTick(t *testing.T) { // Create another service in the store for the following test cases. service2 := &api.Service{ ID: "id2", - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "name2", }, Mode: &api.ServiceSpec_Replicated{ @@ -1141,11 +1140,11 @@ func TestTick(t *testing.T) { Replicas: 1, }, }, - Task: api.TaskSpec{ + Task: &api.TaskSpec{ Restart: &api.RestartPolicy{ // Turn off restart to get an accurate count on tasks. Condition: api.RestartOnNone, - Delay: gogotypes.DurationProto(0), + Delay: durationpb.New(0), }, }, }, @@ -1177,11 +1176,11 @@ func TestTick(t *testing.T) { ID: "id1task1", Slot: 1, DesiredState: api.TaskStateShutdown, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateShutdown, }, ServiceID: "id1", - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "name1", }, } @@ -1190,11 +1189,11 @@ func TestTick(t *testing.T) { ID: "id2task1", Slot: 1, DesiredState: api.TaskStateShutdown, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateShutdown, }, ServiceID: "id2", - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "name2", }, } @@ -1265,8 +1264,8 @@ func TestTickHistoryCleanup(t *testing.T) { // Create a service. service1 := &api.Service{ ID: "id1", - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "name1", }, Mode: &api.ServiceSpec_Replicated{ @@ -1274,11 +1273,11 @@ func TestTickHistoryCleanup(t *testing.T) { Replicas: 1, }, }, - Task: api.TaskSpec{ + Task: &api.TaskSpec{ Restart: &api.RestartPolicy{ // Turn off restart to get an accurate count on tasks. Condition: api.RestartOnNone, - Delay: gogotypes.DurationProto(0), + Delay: durationpb.New(0), }, }, }, @@ -1308,11 +1307,11 @@ func TestTickHistoryCleanup(t *testing.T) { ID: "id1task3", Slot: 1, DesiredState: desiredState, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: actualState, }, ServiceID: "id1", - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "name1", }, } diff --git a/manager/orchestrator/testutils/testutils.go b/manager/orchestrator/testutils/testutils.go index 88c253866f..82a59f6f0c 100644 --- a/manager/orchestrator/testutils/testutils.go +++ b/manager/orchestrator/testutils/testutils.go @@ -39,7 +39,7 @@ func WatchTaskCreate(t *testing.T, watch chan events.Event) *api.Task { if _, ok := event.(api.EventUpdateTask); ok { assert.FailNow(t, "got EventUpdateTask when expecting EventCreateTask", fmt.Sprint(event)) } - case <-time.After(3 * time.Second): + case <-time.After(10 * time.Second): FatalStack(t, "no task creation") } } diff --git a/manager/orchestrator/update/updater.go b/manager/orchestrator/update/updater.go index 5edffcdab2..1c473c270e 100644 --- a/manager/orchestrator/update/updater.go +++ b/manager/orchestrator/update/updater.go @@ -9,7 +9,6 @@ import ( "time" "github.com/docker/go-events" - gogotypes "github.com/gogo/protobuf/types" "github.com/moby/swarmkit/v2/api" "github.com/moby/swarmkit/v2/api/defaults" "github.com/moby/swarmkit/v2/log" @@ -160,13 +159,13 @@ func (u *Updater) Run(ctx context.Context, slots []orchestrator.Slot) { ) if service.UpdateStatus != nil && service.UpdateStatus.State == api.UpdateStatus_ROLLBACK_STARTED { - monitoringPeriod, _ = gogotypes.DurationFromProto(defaults.Service.Rollback.Monitor) + monitoringPeriod = defaults.Service.Rollback.Monitor.AsDuration() updateConfig = service.Spec.Rollback if updateConfig == nil { updateConfig = defaults.Service.Rollback } } else { - monitoringPeriod, _ = gogotypes.DurationFromProto(defaults.Service.Update.Monitor) + monitoringPeriod = defaults.Service.Update.Monitor.AsDuration() updateConfig = service.Spec.Update if updateConfig == nil { updateConfig = defaults.Service.Update @@ -175,10 +174,7 @@ func (u *Updater) Run(ctx context.Context, slots []orchestrator.Slot) { parallelism := int(updateConfig.Parallelism) if updateConfig.Monitor != nil { - newMonitoringPeriod, err := gogotypes.DurationFromProto(updateConfig.Monitor) - if err == nil { - monitoringPeriod = newMonitoringPeriod - } + monitoringPeriod = updateConfig.Monitor.AsDuration() } if parallelism == 0 { @@ -205,7 +201,7 @@ func (u *Updater) Run(ctx context.Context, slots []orchestrator.Slot) { failedTaskWatch, cancelWatch = state.Watch( u.store.WatchQueue(), api.EventUpdateTask{ - Task: &api.Task{ServiceID: service.ID, Status: api.TaskStatus{State: api.TaskStateRunning}}, + Task: &api.Task{ServiceID: service.ID, Status: &api.TaskStatus{State: api.TaskStateRunning}}, Checks: []api.TaskCheckFunc{api.TaskCheckServiceID, state.TaskCheckStateGreaterThan}, }, ) @@ -282,8 +278,9 @@ slotsLoop: if !stopped { // if a delay is set we need to monitor for a period longer than the delay // otherwise we will leave the monitorLoop before the task is done delaying - if updateConfig.Delay >= monitoringPeriod { - monitoringPeriod = updateConfig.Delay + 1*time.Second + updateDelay := updateConfig.Delay.AsDuration() + if updateDelay >= monitoringPeriod { + monitoringPeriod = updateDelay + 1*time.Second } // Keep watching for task failures for one more monitoringPeriod, // before declaring the update complete. @@ -354,9 +351,9 @@ func (u *Updater) worker(ctx context.Context, queue <-chan orchestrator.Slot, up } } - if updateConfig.Delay != 0 { + if updateConfig.Delay.AsDuration() != 0 { select { - case <-time.After(updateConfig.Delay): + case <-time.After(updateConfig.Delay.AsDuration()): case <-u.stopChan: return } @@ -610,7 +607,7 @@ func (u *Updater) rollbackUpdate(ctx context.Context, serviceID, message string) if service.PreviousSpec == nil { return errors.New("cannot roll back service because no previous spec is available") } - service.Spec = *service.PreviousSpec + service.Spec = service.PreviousSpec service.SpecVersion = service.PreviousSpecVersion.Copy() service.PreviousSpec = nil service.PreviousSpecVersion = nil diff --git a/manager/orchestrator/update/updater_test.go b/manager/orchestrator/update/updater_test.go index 6d16cb5fe4..2939cde468 100644 --- a/manager/orchestrator/update/updater_test.go +++ b/manager/orchestrator/update/updater_test.go @@ -4,9 +4,9 @@ import ( "context" "testing" "time" - - gogotypes "github.com/gogo/protobuf/types" "github.com/moby/swarmkit/v2/api" + "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/types/known/durationpb" "github.com/moby/swarmkit/v2/manager/orchestrator" "github.com/moby/swarmkit/v2/manager/orchestrator/restart" "github.com/moby/swarmkit/v2/manager/state" @@ -52,7 +52,7 @@ func getRunningServiceTasks(t *testing.T, s *store.MemoryStore, service *api.Ser running := []*api.Task{} for _, task := range tasks { - if task.Status.State == api.TaskStateRunning { + if task.GetStatus().GetState() == api.TaskStateRunning { running = append(running, task) } } @@ -71,11 +71,14 @@ func TestUpdater(t *testing.T) { go func() { for e := range watch { task := e.(api.EventUpdateTask).Task - if task.Status.State == task.DesiredState { + if task.GetStatus().GetState() == task.DesiredState { continue } err := s.Update(func(tx store.Tx) error { task = store.GetTask(tx, task.ID) + if task.Status == nil { + task.Status = &api.TaskStatus{} + } task.Status.State = task.DesiredState return store.UpdateTask(tx, task) }) @@ -86,8 +89,8 @@ func TestUpdater(t *testing.T) { instances := 3 cluster := &api.Cluster{ // test cluster configuration propagation to task creation. - Spec: api.ClusterSpec{ - Annotations: api.Annotations{ + Spec: &api.ClusterSpec{ + Annotations: &api.Annotations{ Name: store.DefaultClusterName, }, }, @@ -95,8 +98,8 @@ func TestUpdater(t *testing.T) { service := &api.Service{ ID: "id1", - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "name1", }, Mode: &api.ServiceSpec_Replicated{ @@ -104,7 +107,7 @@ func TestUpdater(t *testing.T) { Replicas: uint64(instances), }, }, - Task: api.TaskSpec{ + Task: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{ Image: "v:1", @@ -113,7 +116,7 @@ func TestUpdater(t *testing.T) { }, Update: &api.UpdateConfig{ // avoid having Run block for a long time to watch for failures - Monitor: gogotypes.DurationProto(50 * time.Millisecond), + Monitor: durationpb.New(50 * time.Millisecond), }, }, } @@ -146,16 +149,19 @@ func TestUpdater(t *testing.T) { for _, slot := range updatedTasks { for _, task := range slot { assert.Equal(t, "v:2", task.Spec.GetContainer().Image) - assert.Equal(t, service.Spec.Task.LogDriver, task.LogDriver) // pick up from task + assert.True(t, proto.Equal(service.Spec.Task.LogDriver, task.LogDriver)) // pick up from task } } // Update the spec again to force an update. service.Spec.Task.GetContainer().Image = "v:3" + if cluster.Spec.TaskDefaults == nil { + cluster.Spec.TaskDefaults = &api.TaskDefaults{} + } cluster.Spec.TaskDefaults.LogDriver = &api.Driver{Name: "clusterlogdriver"} // make cluster default logdriver. service.Spec.Update = &api.UpdateConfig{ Parallelism: 1, - Monitor: gogotypes.DurationProto(50 * time.Millisecond), + Monitor: durationpb.New(50 * time.Millisecond), } updater = NewUpdater(s, restart.NewSupervisor(s), cluster, service) updater.Run(ctx, getRunnableSlotSlice(t, s, service)) @@ -163,7 +169,7 @@ func TestUpdater(t *testing.T) { for _, slot := range updatedTasks { for _, task := range slot { assert.Equal(t, "v:3", task.Spec.GetContainer().Image) - assert.Equal(t, service.Spec.Task.LogDriver, task.LogDriver) // still pick up from task + assert.True(t, proto.Equal(service.Spec.Task.LogDriver, task.LogDriver)) // still pick up from task } } @@ -171,8 +177,8 @@ func TestUpdater(t *testing.T) { service.Spec.Task.LogDriver = nil // use cluster default now. service.Spec.Update = &api.UpdateConfig{ Parallelism: 1, - Delay: 10 * time.Millisecond, - Monitor: gogotypes.DurationProto(50 * time.Millisecond), + Delay: durationpb.New(10 * time.Millisecond), + Monitor: durationpb.New(50 * time.Millisecond), } updater = NewUpdater(s, restart.NewSupervisor(s), cluster, service) updater.Run(ctx, getRunnableSlotSlice(t, s, service)) @@ -180,16 +186,16 @@ func TestUpdater(t *testing.T) { for _, slot := range updatedTasks { for _, task := range slot { assert.Equal(t, "v:4", task.Spec.GetContainer().Image) - assert.Equal(t, cluster.Spec.TaskDefaults.LogDriver, task.LogDriver) // pick up from cluster + assert.True(t, proto.Equal(cluster.Spec.TaskDefaults.LogDriver, task.LogDriver)) // pick up from cluster } } service.Spec.Task.GetContainer().Image = "v:5" service.Spec.Update = &api.UpdateConfig{ Parallelism: 1, - Delay: 10 * time.Millisecond, + Delay: durationpb.New(10 * time.Millisecond), Order: api.UpdateConfig_START_FIRST, - Monitor: gogotypes.DurationProto(50 * time.Millisecond), + Monitor: durationpb.New(50 * time.Millisecond), } updater = NewUpdater(s, restart.NewSupervisor(s), cluster, service) updater.Run(ctx, getRunnableSlotSlice(t, s, service)) @@ -264,11 +270,14 @@ func TestUpdaterPlacement(t *testing.T) { go func() { for e := range watch { task := e.(api.EventUpdateTask).Task - if task.Status.State == task.DesiredState { + if task.GetStatus().GetState() == task.DesiredState { continue } err := s.Update(func(tx store.Tx) error { task = store.GetTask(tx, task.ID) + if task.Status == nil { + task.Status = &api.TaskStatus{} + } task.Status.State = task.DesiredState return store.UpdateTask(tx, task) }) @@ -279,8 +288,8 @@ func TestUpdaterPlacement(t *testing.T) { instances := 3 cluster := &api.Cluster{ // test cluster configuration propagation to task creation. - Spec: api.ClusterSpec{ - Annotations: api.Annotations{ + Spec: &api.ClusterSpec{ + Annotations: &api.Annotations{ Name: store.DefaultClusterName, }, }, @@ -289,8 +298,8 @@ func TestUpdaterPlacement(t *testing.T) { service := &api.Service{ ID: "id1", SpecVersion: &api.Version{Index: 1}, - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "name1", }, Mode: &api.ServiceSpec_Replicated{ @@ -298,7 +307,7 @@ func TestUpdaterPlacement(t *testing.T) { Replicas: uint64(instances), }, }, - Task: api.TaskSpec{ + Task: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{ Image: "v:1", @@ -307,7 +316,7 @@ func TestUpdaterPlacement(t *testing.T) { }, Update: &api.UpdateConfig{ // avoid having Run block for a long time to watch for failures - Monitor: gogotypes.DurationProto(50 * time.Millisecond), + Monitor: durationpb.New(50 * time.Millisecond), }, }, } @@ -396,8 +405,8 @@ func TestUpdaterFailureAction(t *testing.T) { instances := 3 cluster := &api.Cluster{ - Spec: api.ClusterSpec{ - Annotations: api.Annotations{ + Spec: &api.ClusterSpec{ + Annotations: &api.Annotations{ Name: store.DefaultClusterName, }, }, @@ -405,8 +414,8 @@ func TestUpdaterFailureAction(t *testing.T) { service := &api.Service{ ID: "id1", - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "name1", }, Mode: &api.ServiceSpec_Replicated{ @@ -414,7 +423,7 @@ func TestUpdaterFailureAction(t *testing.T) { Replicas: uint64(instances), }, }, - Task: api.TaskSpec{ + Task: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{ Image: "v:1", @@ -424,8 +433,8 @@ func TestUpdaterFailureAction(t *testing.T) { Update: &api.UpdateConfig{ FailureAction: api.UpdateConfig_PAUSE, Parallelism: 1, - Delay: 500 * time.Millisecond, - Monitor: gogotypes.DurationProto(500 * time.Millisecond), + Delay: durationpb.New(500 * time.Millisecond), + Monitor: durationpb.New(500 * time.Millisecond), }, }, } @@ -547,11 +556,11 @@ func TestUpdaterTaskTimeout(t *testing.T) { var instances uint64 = 3 service := &api.Service{ ID: "id1", - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "name1", }, - Task: api.TaskSpec{ + Task: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{ Image: "v:1", @@ -565,7 +574,7 @@ func TestUpdaterTaskTimeout(t *testing.T) { }, Update: &api.UpdateConfig{ // avoid having Run block for a long time to watch for failures - Monitor: gogotypes.DurationProto(50 * time.Millisecond), + Monitor: durationpb.New(50 * time.Millisecond), }, }, } @@ -641,15 +650,15 @@ func TestUpdaterOrder(t *testing.T) { instances := 3 service := &api.Service{ ID: "id1", - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "name1", }, - Task: api.TaskSpec{ + Task: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{ Image: "v:1", - StopGracePeriod: gogotypes.DurationProto(time.Hour), + StopGracePeriod: durationpb.New(time.Hour), }, }, }, @@ -687,8 +696,8 @@ func TestUpdaterOrder(t *testing.T) { service.Spec.Update = &api.UpdateConfig{ Parallelism: 1, Order: api.UpdateConfig_START_FIRST, - Delay: 10 * time.Millisecond, - Monitor: gogotypes.DurationProto(50 * time.Millisecond), + Delay: durationpb.New(10 * time.Millisecond), + Monitor: durationpb.New(50 * time.Millisecond), } updater := NewUpdater(s, restart.NewSupervisor(s), nil, service) updater.Run(ctx, getRunnableSlotSlice(t, s, service)) diff --git a/manager/orchestrator/volumeenforcer/volume_enforcer_test.go b/manager/orchestrator/volumeenforcer/volume_enforcer_test.go index 9d4e126ece..8acfa469a1 100644 --- a/manager/orchestrator/volumeenforcer/volume_enforcer_test.go +++ b/manager/orchestrator/volumeenforcer/volume_enforcer_test.go @@ -32,15 +32,15 @@ var _ = Describe("VolumeEnforcer", func() { // change things in the future n = &api.Node{ ID: "node", - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, } v = &api.Volume{ ID: "volumeID", - Spec: api.VolumeSpec{ - Annotations: api.Annotations{ + Spec: &api.VolumeSpec{ + Annotations: &api.Annotations{ Name: "volume", }, Driver: &api.Driver{ @@ -62,7 +62,7 @@ var _ = Describe("VolumeEnforcer", func() { t = &api.Task{ ID: "task", NodeID: "node", - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateRunning, }, DesiredState: api.TaskStateRunning, diff --git a/manager/resourceapi/allocator.go b/manager/resourceapi/allocator.go index fac5dee567..08153155af 100644 --- a/manager/resourceapi/allocator.go +++ b/manager/resourceapi/allocator.go @@ -60,7 +60,7 @@ func (ra *ResourceAllocator) AttachNetwork(ctx context.Context, request *api.Att t := &api.Task{ ID: identity.NewID(), NodeID: nodeInfo.NodeID, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Runtime: &api.TaskSpec_Attachment{ Attachment: &api.NetworkAttachmentSpec{ ContainerID: request.ContainerID, @@ -73,7 +73,7 @@ func (ra *ResourceAllocator) AttachNetwork(ctx context.Context, request *api.Att }, }, }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateNew, Timestamp: ptypes.MustTimestampProto(time.Now()), Message: "created", diff --git a/manager/role_manager_test.go b/manager/role_manager_test.go index 267ca28385..099d7c54d9 100644 --- a/manager/role_manager_test.go +++ b/manager/role_manager_test.go @@ -34,7 +34,7 @@ func TestRoleManagerRemovesDemotedNodesAndAddsPromotedNodes(t *testing.T) { return store.CreateNode(tx, &api.Node{ Role: api.NodeRoleManager, ID: node.SecurityConfig.ClientTLSCreds.NodeID(), - Spec: api.NodeSpec{ + Spec: &api.NodeSpec{ DesiredRole: api.NodeRoleManager, Membership: api.NodeMembershipAccepted, Availability: api.NodeAvailabilityActive, @@ -127,7 +127,7 @@ func TestRoleManagerRemovesDemotedNodesOnStartup(t *testing.T) { return store.CreateNode(tx, &api.Node{ Role: api.NodeRoleManager, ID: node.SecurityConfig.ClientTLSCreds.NodeID(), - Spec: api.NodeSpec{ + Spec: &api.NodeSpec{ DesiredRole: desired, Membership: api.NodeMembershipAccepted, Availability: api.NodeAvailabilityActive, @@ -184,7 +184,7 @@ func TestRoleManagerRemovesDeletedNodes(t *testing.T) { return store.CreateNode(tx, &api.Node{ Role: api.NodeRoleManager, ID: node.SecurityConfig.ClientTLSCreds.NodeID(), - Spec: api.NodeSpec{ + Spec: &api.NodeSpec{ DesiredRole: api.NodeRoleManager, Membership: api.NodeMembershipAccepted, Availability: api.NodeAvailabilityActive, @@ -250,7 +250,7 @@ func TestRoleManagerRemovesDeletedNodesOnStartup(t *testing.T) { return store.CreateNode(tx, &api.Node{ Role: api.NodeRoleManager, ID: node.SecurityConfig.ClientTLSCreds.NodeID(), - Spec: api.NodeSpec{ + Spec: &api.NodeSpec{ DesiredRole: api.NodeRoleManager, Membership: api.NodeMembershipAccepted, Availability: api.NodeAvailabilityActive, diff --git a/manager/scheduler/constraint_test.go b/manager/scheduler/constraint_test.go index fc795b11b1..b9517a6de6 100644 --- a/manager/scheduler/constraint_test.go +++ b/manager/scheduler/constraint_test.go @@ -17,11 +17,11 @@ func setupEnv() { task1 = &api.Task{ ID: "id1", DesiredState: api.TaskStateRunning, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "name1", }, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{ Command: []string{"sh", "-c", "sleep 5"}, @@ -30,7 +30,7 @@ func setupEnv() { }, }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateAssigned, }, } @@ -38,8 +38,8 @@ func setupEnv() { ni = &NodeInfo{ Node: &api.Node{ ID: "nodeid-1", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Labels: make(map[string]string), }, DesiredRole: api.NodeRoleWorker, @@ -49,7 +49,7 @@ func setupEnv() { Labels: make(map[string]string), }, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, Addr: "186.17.9.41", }, diff --git a/manager/scheduler/filter.go b/manager/scheduler/filter.go index abfcb8178d..61360a70a0 100644 --- a/manager/scheduler/filter.go +++ b/manager/scheduler/filter.go @@ -38,8 +38,8 @@ func (f *ReadyFilter) SetTask(_ *api.Task) bool { // Check returns true if the task can be scheduled into the given node. func (f *ReadyFilter) Check(n *NodeInfo) bool { - return n.Status.State == api.NodeStatus_READY && - n.Spec.Availability == api.NodeAvailabilityActive + return n.GetStatus().GetState() == api.NodeStatus_READY && + n.GetSpec().GetAvailability() == api.NodeAvailabilityActive } // Explain returns an explanation of a failure. @@ -58,7 +58,7 @@ type ResourceFilter struct { // SetTask returns true when the filter is enabled for a given task. func (f *ResourceFilter) SetTask(t *api.Task) bool { - r := t.Spec.Resources + r := t.GetSpec().GetResources() if r == nil || r.Reservations == nil { return false } @@ -105,7 +105,7 @@ type PluginFilter struct { t *api.Task } -func referencesVolumePlugin(mount api.Mount) bool { +func referencesVolumePlugin(mount *api.Mount) bool { return mount.Type == api.MountTypeVolume && mount.VolumeOptions != nil && mount.VolumeOptions.DriverConfig != nil && @@ -116,7 +116,7 @@ func referencesVolumePlugin(mount api.Mount) bool { // SetTask returns true when the filter is enabled for a given task. func (f *PluginFilter) SetTask(t *api.Task) bool { - c := t.Spec.GetContainer() + c := t.GetSpec().GetContainer() var volumeTemplates bool if c != nil { @@ -128,7 +128,7 @@ func (f *PluginFilter) SetTask(t *api.Task) bool { } } - if (c != nil && volumeTemplates) || len(t.Networks) > 0 || t.Spec.LogDriver != nil { + if (c != nil && volumeTemplates) || len(t.Networks) > 0 || t.GetSpec().GetLogDriver() != nil { f.t = t return true } @@ -149,7 +149,7 @@ func (f *PluginFilter) Check(n *NodeInfo) bool { nodePlugins := n.Description.Engine.Plugins // Check if all volume plugins required by task are installed on node - container := f.t.Spec.GetContainer() + container := f.t.GetSpec().GetContainer() if container != nil { for _, mount := range container.Mounts { if referencesVolumePlugin(mount) { @@ -172,10 +172,10 @@ func (f *PluginFilter) Check(n *NodeInfo) bool { // It's possible that the LogDriver object does not carry a name, just some // configuration options. In that case, the plugin filter shouldn't fail to // schedule the task - if f.t.Spec.LogDriver != nil && f.t.Spec.LogDriver.Name != "none" && f.t.Spec.LogDriver.Name != "" { + if f.t.GetSpec().GetLogDriver() != nil && f.t.GetSpec().GetLogDriver().GetName() != "none" && f.t.GetSpec().GetLogDriver().GetName() != "" { // If there are no log driver types in the list at all, most likely this is // an older daemon that did not report this information. In this case don't filter - if typeFound, exists := f.pluginExistsOnNode("Log", f.t.Spec.LogDriver.Name, nodePlugins); !exists && typeFound { + if typeFound, exists := f.pluginExistsOnNode("Log", f.t.GetSpec().GetLogDriver().GetName(), nodePlugins); !exists && typeFound { return false } } @@ -183,7 +183,7 @@ func (f *PluginFilter) Check(n *NodeInfo) bool { } // pluginExistsOnNode returns true if the (pluginName, pluginType) pair is present in nodePlugins -func (f *PluginFilter) pluginExistsOnNode(pluginType string, pluginName string, nodePlugins []api.PluginDescription) (bool, bool) { +func (f *PluginFilter) pluginExistsOnNode(pluginType string, pluginName string, nodePlugins []*api.PluginDescription) (bool, bool) { var typeFound bool for _, np := range nodePlugins { @@ -222,11 +222,11 @@ type ConstraintFilter struct { // SetTask returns true when the filter is enable for a given task. func (f *ConstraintFilter) SetTask(t *api.Task) bool { - if t.Spec.Placement == nil || len(t.Spec.Placement.Constraints) == 0 { + if t.GetSpec().GetPlacement() == nil || len(t.GetSpec().GetPlacement().GetConstraints()) == 0 { return false } - constraints, err := constraint.Parse(t.Spec.Placement.Constraints) + constraints, err := constraint.Parse(t.GetSpec().GetPlacement().GetConstraints()) if err != nil { // constraints have been validated at controlapi // if in any case it finds an error here, treat this task @@ -257,7 +257,7 @@ type PlatformFilter struct { // SetTask returns true when the filter is enabled for a given task. func (f *PlatformFilter) SetTask(t *api.Task) bool { - placement := t.Spec.Placement + placement := t.GetSpec().GetPlacement() if placement != nil { // copy the platform information f.supportedPlatforms = placement.Platforms @@ -279,7 +279,7 @@ func (f *PlatformFilter) Check(n *NodeInfo) bool { if n.Description != nil { if nodePlatform := n.Description.Platform; nodePlatform != nil { for _, p := range f.supportedPlatforms { - if f.platformEqual(*p, *nodePlatform) { + if f.platformEqual(p, nodePlatform) { return true } } @@ -288,24 +288,29 @@ func (f *PlatformFilter) Check(n *NodeInfo) bool { return false } -func (f *PlatformFilter) platformEqual(imgPlatform, nodePlatform api.Platform) bool { +func (f *PlatformFilter) platformEqual(imgPlatform, nodePlatform *api.Platform) bool { + // Work with copies of string fields to avoid modifying the originals + imgArch := imgPlatform.Architecture + imgOS := imgPlatform.OS + nodeArch := nodePlatform.Architecture + nodeOS := nodePlatform.OS // normalize "x86_64" architectures to "amd64" - if imgPlatform.Architecture == "x86_64" { - imgPlatform.Architecture = "amd64" + if imgArch == "x86_64" { + imgArch = "amd64" } - if nodePlatform.Architecture == "x86_64" { - nodePlatform.Architecture = "amd64" + if nodeArch == "x86_64" { + nodeArch = "amd64" } // normalize "aarch64" architectures to "arm64" - if imgPlatform.Architecture == "aarch64" { - imgPlatform.Architecture = "arm64" + if imgArch == "aarch64" { + imgArch = "arm64" } - if nodePlatform.Architecture == "aarch64" { - nodePlatform.Architecture = "arm64" + if nodeArch == "aarch64" { + nodeArch = "arm64" } - if (imgPlatform.Architecture == "" || imgPlatform.Architecture == nodePlatform.Architecture) && (imgPlatform.OS == "" || imgPlatform.OS == nodePlatform.OS) { + if (imgArch == "" || imgArch == nodeArch) && (imgOS == "" || imgOS == nodeOS) { return true } return false @@ -367,7 +372,7 @@ type MaxReplicasFilter struct { // SetTask returns true when max replicas per node filter > 0 for a given task. func (f *MaxReplicasFilter) SetTask(t *api.Task) bool { - if t.Spec.Placement != nil && t.Spec.Placement.MaxReplicas > 0 { + if t.GetSpec().GetPlacement() != nil && t.GetSpec().GetPlacement().GetMaxReplicas() > 0 { f.t = t return true } @@ -377,7 +382,7 @@ func (f *MaxReplicasFilter) SetTask(t *api.Task) bool { // Check returns true if there is less active (assigned or pre-assigned) tasks for this service on current node than set to MaxReplicas limit func (f *MaxReplicasFilter) Check(n *NodeInfo) bool { - return uint64(n.ActiveTasksCountByService[f.t.ServiceID]) < f.t.Spec.Placement.MaxReplicas + return uint64(n.ActiveTasksCountByService[f.t.ServiceID]) < f.t.GetSpec().GetPlacement().GetMaxReplicas() } // Explain returns an explanation of a failure. @@ -411,7 +416,7 @@ func (f *VolumesFilter) SetTask(t *api.Task) bool { return false } - c := t.Spec.GetContainer() + c := t.GetSpec().GetContainer() if c == nil { return false } @@ -421,7 +426,7 @@ func (f *VolumesFilter) SetTask(t *api.Task) bool { for _, mount := range c.Mounts { if mount.Type == api.MountTypeCluster { hasCSI = true - f.requestedVolumes = append(f.requestedVolumes, &mount) + f.requestedVolumes = append(f.requestedVolumes, mount) } } return hasCSI diff --git a/manager/scheduler/nodeinfo.go b/manager/scheduler/nodeinfo.go index a328bae34d..d2c9f2df82 100644 --- a/manager/scheduler/nodeinfo.go +++ b/manager/scheduler/nodeinfo.go @@ -17,11 +17,11 @@ type hostPortSpec struct { // versionedService defines a tuple that contains a service ID and a spec // version, so that failures can be tracked per spec version. Note that if the -// task predates spec versioning, specVersion will contain the zero value, and +// task predates spec versioning, specVersionIndex will contain zero, and // this will still work correctly. type versionedService struct { - serviceID string - specVersion api.Version + serviceID string + specVersionIndex uint64 } // NodeInfo contains a node and some additional metadata. @@ -153,9 +153,9 @@ func (nodeInfo *NodeInfo) addTask(t *api.Task) bool { return true } -func taskReservations(spec api.TaskSpec) (reservations api.Resources) { - if spec.Resources != nil && spec.Resources.Reservations != nil { - reservations = *spec.Resources.Reservations +func taskReservations(spec *api.TaskSpec) (reservations api.Resources) { + if spec.GetResources() != nil && spec.GetResources().Reservations != nil { + reservations = *spec.GetResources().Reservations } return } @@ -184,7 +184,7 @@ func (nodeInfo *NodeInfo) taskFailed(ctx context.Context, t *api.Task) { versionedService := versionedService{serviceID: t.ServiceID} if t.SpecVersion != nil { - versionedService.specVersion = *t.SpecVersion + versionedService.specVersionIndex = t.SpecVersion.GetIndex() } for _, timestamp := range nodeInfo.recentFailures[versionedService] { @@ -206,7 +206,7 @@ func (nodeInfo *NodeInfo) taskFailed(ctx context.Context, t *api.Task) { func (nodeInfo *NodeInfo) countRecentFailures(now time.Time, t *api.Task) int { versionedService := versionedService{serviceID: t.ServiceID} if t.SpecVersion != nil { - versionedService.specVersion = *t.SpecVersion + versionedService.specVersionIndex = t.SpecVersion.GetIndex() } recentFailureCount := len(nodeInfo.recentFailures[versionedService]) diff --git a/manager/scheduler/nodeinfo_test.go b/manager/scheduler/nodeinfo_test.go index 5494d4c81c..0c25118fe2 100644 --- a/manager/scheduler/nodeinfo_test.go +++ b/manager/scheduler/nodeinfo_test.go @@ -51,7 +51,7 @@ func TestRemoveTask(t *testing.T) { task1 := &api.Task{ ID: "task1", - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Resources: &api.ResourceRequirements{Reservations: taskRes}, }, AssignedGenericResources: append( @@ -135,7 +135,7 @@ func TestAddTask(t *testing.T) { task3 := &api.Task{ ID: "task3", - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Resources: &api.ResourceRequirements{Reservations: taskRes}, }, } diff --git a/manager/scheduler/nodeset_test.go b/manager/scheduler/nodeset_test.go index b5ed4ba2b8..62212eecf5 100644 --- a/manager/scheduler/nodeset_test.go +++ b/manager/scheduler/nodeset_test.go @@ -15,8 +15,8 @@ func TestTreeTaskCountConsistency(t *testing.T) { { Node: &api.Node{ ID: "node1", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Labels: map[string]string{"datacenter": "dc1", "rack": "r1"}, }, }, @@ -26,8 +26,8 @@ func TestTreeTaskCountConsistency(t *testing.T) { { Node: &api.Node{ ID: "node2", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Labels: map[string]string{"datacenter": "dc1", "rack": "r2"}, }, }, @@ -37,8 +37,8 @@ func TestTreeTaskCountConsistency(t *testing.T) { { Node: &api.Node{ ID: "node3", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Labels: map[string]string{"datacenter": "dc2", "rack": "r2"}, }, }, @@ -48,8 +48,8 @@ func TestTreeTaskCountConsistency(t *testing.T) { { Node: &api.Node{ ID: "node4", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Labels: map[string]string{}, // no label }, }, @@ -59,8 +59,8 @@ func TestTreeTaskCountConsistency(t *testing.T) { { Node: &api.Node{ ID: "node5", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Labels: map[string]string{}, // no label }, }, diff --git a/manager/scheduler/scheduler.go b/manager/scheduler/scheduler.go index 135deff74c..dc548d5105 100644 --- a/manager/scheduler/scheduler.go +++ b/manager/scheduler/scheduler.go @@ -89,14 +89,14 @@ func (s *Scheduler) setupTasksList(tx store.ReadTx) error { for _, t := range tasks { // Ignore all tasks that have not reached PENDING // state and tasks that no longer consume resources. - if t.Status.State < api.TaskStatePending || t.Status.State > api.TaskStateRunning { + if t.GetStatus().GetState() < api.TaskStatePending || t.GetStatus().GetState() > api.TaskStateRunning { continue } // Also ignore tasks that have not yet been assigned but desired state // is beyond TaskStateCompleted. This can happen if you update, delete // or scale down a service before its tasks were assigned. - if t.Status.State == api.TaskStatePending && t.DesiredState > api.TaskStateCompleted { + if t.GetStatus().GetState() == api.TaskStatePending && t.DesiredState > api.TaskStateCompleted { continue } @@ -106,7 +106,7 @@ func (s *Scheduler) setupTasksList(tx store.ReadTx) error { continue } // preassigned tasks need to validate resource requirement on corresponding node - if t.Status.State == api.TaskStatePending { + if t.GetStatus().GetState() == api.TaskStatePending { s.preassignedTasks[t.ID] = struct{}{} s.pendingPreassignedTasks[t.ID] = t continue @@ -128,7 +128,6 @@ func (s *Scheduler) setupTasksList(tx store.ReadTx) error { func (s *Scheduler) Run(pctx context.Context) error { ctx := log.WithModule(pctx, "scheduler") defer close(s.doneChan) - s.pipeline.AddFilter(&VolumesFilter{vs: s.volumes}) updates, cancel, err := store.ViewAndWatch(s.store, s.setupTasksList) @@ -254,7 +253,7 @@ func (s *Scheduler) enqueue(t *api.Task) { func (s *Scheduler) createTask(_ context.Context, t *api.Task) bool { // Ignore all tasks that have not reached PENDING // state, and tasks that no longer consume resources. - if t.Status.State < api.TaskStatePending || t.Status.State > api.TaskStateRunning { + if t.GetStatus().GetState() < api.TaskStatePending || t.GetStatus().GetState() > api.TaskStateRunning { return false } @@ -265,7 +264,7 @@ func (s *Scheduler) createTask(_ context.Context, t *api.Task) bool { return true } - if t.Status.State == api.TaskStatePending { + if t.GetStatus().GetState() == api.TaskStatePending { s.preassignedTasks[t.ID] = struct{}{} s.pendingPreassignedTasks[t.ID] = t // preassigned tasks do not contribute to running tasks count @@ -283,7 +282,7 @@ func (s *Scheduler) createTask(_ context.Context, t *api.Task) bool { func (s *Scheduler) updateTask(ctx context.Context, t *api.Task) bool { // Ignore all tasks that have not reached PENDING // state. - if t.Status.State < api.TaskStatePending { + if t.GetStatus().GetState() < api.TaskStatePending { return false } @@ -291,13 +290,13 @@ func (s *Scheduler) updateTask(ctx context.Context, t *api.Task) bool { // Ignore all tasks that have not reached Pending // state, and tasks that no longer consume resources. - if t.Status.State > api.TaskStateRunning { + if t.GetStatus().GetState() > api.TaskStateRunning { if oldTask == nil { return false } - if t.Status.State != oldTask.Status.State && - (t.Status.State == api.TaskStateFailed || t.Status.State == api.TaskStateRejected) { + if t.GetStatus().GetState() != oldTask.GetStatus().GetState() && + (t.GetStatus().GetState() == api.TaskStateFailed || t.GetStatus().GetState() == api.TaskStateRejected) { // Keep track of task failures, so other nodes can be preferred // for scheduling this service if it looks like the service is // failing in a loop on this node. However, skip this for @@ -327,7 +326,7 @@ func (s *Scheduler) updateTask(ctx context.Context, t *api.Task) bool { return true } - if t.Status.State == api.TaskStatePending { + if t.GetStatus().GetState() == api.TaskStatePending { if oldTask != nil { s.deleteTask(oldTask) } @@ -408,7 +407,7 @@ func (s *Scheduler) processPreassignedTasks(ctx context.Context) { successful, failed := s.applySchedulingDecisions(ctx, schedulingDecisions) for _, decision := range successful { - if decision.new.Status.State == api.TaskStateAssigned { + if decision.new.GetStatus().GetState() == api.TaskStateAssigned { delete(s.pendingPreassignedTasks, decision.old.ID) } } @@ -428,8 +427,8 @@ func (s *Scheduler) processPreassignedTasks(ctx context.Context) { // tick attempts to schedule the queue. func (s *Scheduler) tick(ctx context.Context) { type commonSpecKey struct { - serviceID string - specVersion api.Version + serviceID string + specVersionIndex uint64 } tasksByCommonSpec := make(map[commonSpecKey]map[string]*api.Task) var oneOffTasks []*api.Task @@ -445,8 +444,8 @@ func (s *Scheduler) tick(ctx context.Context) { // Group tasks with common specs if t.SpecVersion != nil { taskGroupKey := commonSpecKey{ - serviceID: t.ServiceID, - specVersion: *t.SpecVersion, + serviceID: t.ServiceID, + specVersionIndex: t.SpecVersion.GetIndex(), } if tasksByCommonSpec[taskGroupKey] == nil { @@ -467,7 +466,6 @@ func (s *Scheduler) tick(ctx context.Context) { for _, t := range oneOffTasks { s.scheduleTaskGroup(ctx, map[string]*api.Task{t.ID: t}, schedulingDecisions) } - _, failed := s.applySchedulingDecisions(ctx, schedulingDecisions) for _, decision := range failed { s.allTasks[decision.old.ID] = decision.old @@ -523,14 +521,14 @@ func (s *Scheduler) applySchedulingDecisions(ctx context.Context, schedulingDeci continue } - if t.Status.State == decision.new.Status.State && - t.Status.Message == decision.new.Status.Message && - t.Status.Err == decision.new.Status.Err { + if t.GetStatus().GetState() == decision.new.GetStatus().GetState() && + t.GetStatus().GetMessage() == decision.new.GetStatus().GetMessage() && + t.GetStatus().GetErr() == decision.new.GetStatus().GetErr() { // No changes, ignore continue } - if t.Status.State >= api.TaskStateAssigned { + if t.GetStatus().GetState() >= api.TaskStateAssigned { nodeInfo, err := s.nodeSet.nodeInfo(decision.new.NodeID) if err != nil { failed = append(failed, decision) @@ -575,10 +573,10 @@ func (s *Scheduler) applySchedulingDecisions(ctx context.Context, schedulingDeci // be set to Drain before it can be deleted. it stops // us from having to worry about any other field when // attempting to use the Volume. - if v.Spec.Availability != api.VolumeAvailabilityActive { + if v.GetSpec().GetAvailability() != api.VolumeAvailabilityActive { log.G(ctx).Debugf( "scheduler failed to update task %s because volume %s has availability %s", - taskID, v.ID, v.Spec.Availability.String(), + taskID, v.ID, v.GetSpec().GetAvailability().String(), ) failed = append(failed, decision) continue taskLoop @@ -650,6 +648,13 @@ func (s *Scheduler) taskFitNode(_ context.Context, t *api.Task, nodeID string) * return nil } newT := *t + // Create a NEW Status to avoid modifying the shared pointer + if t.Status != nil { + statusCopy := *t.Status + newT.Status = &statusCopy + } else { + newT.Status = &api.TaskStatus{} + } s.pipeline.SetTask(t) if !s.pipeline.Process(&nodeInfo) { // this node cannot accommodate this task @@ -676,7 +681,7 @@ func (s *Scheduler) taskFitNode(_ context.Context, t *api.Task, nodeID string) * newT.Volumes = attachments - newT.Status = api.TaskStatus{ + newT.Status = &api.TaskStatus{ State: api.TaskStateAssigned, Timestamp: ptypes.MustTimestampProto(time.Now()), Message: "scheduler confirmed task can run on preassigned node", @@ -735,8 +740,8 @@ func (s *Scheduler) scheduleTaskGroup(ctx context.Context, taskGroup map[string] } var prefs []*api.PlacementPreference - if t.Spec.Placement != nil { - prefs = t.Spec.Placement.Preferences + if t.GetSpec().GetPlacement() != nil { + prefs = t.GetSpec().GetPlacement().GetPreferences() } tree := s.nodeSet.tree(t.ServiceID, prefs, len(taskGroup), s.pipeline.Process, nodeLess) @@ -872,7 +877,7 @@ func (s *Scheduler) scheduleNTasksOnNodes(ctx context.Context, n int, taskGroup newT.Volumes = attachments newT.NodeID = node.ID s.volumes.reserveTaskVolumes(&newT) - newT.Status = api.TaskStatus{ + newT.Status = &api.TaskStatus{ State: api.TaskStateAssigned, Timestamp: ptypes.MustTimestampProto(time.Now()), Message: "scheduler assigned task to node", @@ -940,6 +945,14 @@ func (s *Scheduler) noSuitableNode(ctx context.Context, taskGroup map[string]*ap log.G(ctx).WithField("task.id", t.ID).Debug("no suitable node available for task") newT := *t + // Create a NEW Status object to avoid modifying the shared pointer + // that the store and the event may hold. + if t.Status != nil { + statusCopy := *t.Status + newT.Status = &statusCopy + } else { + newT.Status = &api.TaskStatus{} + } newT.Status.Timestamp = ptypes.MustTimestampProto(time.Now()) sv := service.SpecVersion tv := newT.SpecVersion @@ -947,7 +960,7 @@ func (s *Scheduler) noSuitableNode(ctx context.Context, taskGroup map[string]*ap log.G(ctx).WithField("task.id", t.ID).Debug( "task belongs to old revision of service", ) - if t.Status.State == api.TaskStatePending && t.DesiredState >= api.TaskStateShutdown { + if t.GetStatus().GetState() == api.TaskStatePending && t.DesiredState >= api.TaskStateShutdown { log.G(ctx).WithField("task.id", t.ID).Debug( "task is desired shutdown, scheduler will go ahead and do so", ) diff --git a/manager/scheduler/scheduler_ginkgo_test.go b/manager/scheduler/scheduler_ginkgo_test.go index aee3bb9613..1db0f1fc26 100644 --- a/manager/scheduler/scheduler_ginkgo_test.go +++ b/manager/scheduler/scheduler_ginkgo_test.go @@ -8,6 +8,7 @@ import ( . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" "github.com/onsi/gomega/types" + "google.golang.org/protobuf/proto" "github.com/moby/swarmkit/v2/api" "github.com/moby/swarmkit/v2/manager/orchestrator/testutils" @@ -109,7 +110,7 @@ var _ = Describe("Scheduler", func() { }, }, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, } @@ -120,14 +121,14 @@ var _ = Describe("Scheduler", func() { // task and not retry it. service = &api.Service{ ID: "service1", - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "service", }, - Task: api.TaskSpec{ + Task: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{ - Mounts: []api.Mount{ + Mounts: []*api.Mount{ { Type: api.MountTypeCluster, Source: "volume1", @@ -145,7 +146,7 @@ var _ = Describe("Scheduler", func() { ID: "task1", ServiceID: service.ID, DesiredState: api.TaskStateRunning, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStatePending, }, Spec: service.Spec.Task, @@ -169,16 +170,20 @@ var _ = Describe("Scheduler", func() { // Ensure that the task state has advanced to assigned WithTransform( func(t *api.Task) api.TaskState { - return t.Status.State + return t.GetStatus().GetState() }, Equal(api.TaskStateAssigned), ), // Ensure that the task has the assigned volumes WithTransform( - func(t *api.Task) []*api.VolumeAttachment { - return t.Volumes + func(t *api.Task) bool { + vols := t.Volumes + if len(vols) != 1 { + return false + } + return proto.Equal(vols[0], attachment) }, - ConsistOf(attachment), + BeTrue(), ), WithTransform( func(t *api.Task) string { @@ -200,8 +205,8 @@ var _ = Describe("Scheduler", func() { It("should still choose a volume for the task", func() { volume := &api.Volume{ ID: "volumeID1", - Spec: api.VolumeSpec{ - Annotations: api.Annotations{ + Spec: &api.VolumeSpec{ + Annotations: &api.Annotations{ Name: "volume1", }, Driver: &api.Driver{ @@ -262,7 +267,7 @@ var _ = Describe("Scheduler", func() { Consistently(pollStore, 10*time.Second).Should( WithTransform( func(t *api.Task) api.TaskState { - return t.Status.State + return t.GetStatus().GetState() }, Equal(api.TaskStatePending), ), @@ -273,8 +278,8 @@ var _ = Describe("Scheduler", func() { It("should choose volumes for tasks", func() { volume := &api.Volume{ ID: "volumeID1", - Spec: api.VolumeSpec{ - Annotations: api.Annotations{ + Spec: &api.VolumeSpec{ + Annotations: &api.Annotations{ Name: "volume1", }, Driver: &api.Driver{ @@ -335,18 +340,19 @@ var _ = Describe("Scheduler", func() { // test case more readable. havePendingPublish := func() types.GomegaMatcher { return WithTransform( - func(v *api.Volume) []*api.VolumePublishStatus { + func(v *api.Volume) bool { if v == nil { - return nil + return false } - return v.PublishStatus - }, - ConsistOf( - &api.VolumePublishStatus{ + if len(v.PublishStatus) != 1 { + return false + } + return proto.Equal(v.PublishStatus[0], &api.VolumePublishStatus{ NodeID: node.ID, State: api.VolumePublishStatus_PENDING_PUBLISH, - }, - ), + }) + }, + BeTrue(), ) } Eventually(pollVolume).Should(havePendingPublish()) @@ -377,8 +383,8 @@ var _ = Describe("Scheduler", func() { cannedNode := func(i int) *api.Node { return &api.Node{ ID: fmt.Sprintf("nodeID%d", i), - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: fmt.Sprintf("node%d", i), }, }, @@ -391,7 +397,7 @@ var _ = Describe("Scheduler", func() { }, }, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, } @@ -404,8 +410,8 @@ var _ = Describe("Scheduler", func() { volumes = append(volumes, &api.Volume{ ID: "volumeID1", - Spec: api.VolumeSpec{ - Annotations: api.Annotations{ + Spec: &api.VolumeSpec{ + Annotations: &api.Annotations{ Name: "volume1", }, Group: "group1", @@ -423,8 +429,8 @@ var _ = Describe("Scheduler", func() { }, &api.Volume{ ID: "volumeID2", - Spec: api.VolumeSpec{ - Annotations: api.Annotations{ + Spec: &api.VolumeSpec{ + Annotations: &api.Annotations{ Name: "volume2", }, Group: "group2", @@ -442,8 +448,8 @@ var _ = Describe("Scheduler", func() { }, &api.Volume{ ID: "volumeID3", - Spec: api.VolumeSpec{ - Annotations: api.Annotations{ + Spec: &api.VolumeSpec{ + Annotations: &api.Annotations{ Name: "volume3", }, Group: "group2", @@ -465,14 +471,14 @@ var _ = Describe("Scheduler", func() { &api.Task{ ID: "runningTask", NodeID: "nodeID0", - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateRunning, }, DesiredState: api.TaskStateRunning, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{ - Mounts: []api.Mount{ + Mounts: []*api.Mount{ { Type: api.MountTypeCluster, Source: "volume1", @@ -502,14 +508,14 @@ var _ = Describe("Scheduler", func() { &api.Task{ ID: "shutdownTask", NodeID: "nodeID1", - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateShutdown, }, DesiredState: api.TaskStateShutdown, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{ - Mounts: []api.Mount{ + Mounts: []*api.Mount{ { Type: api.MountTypeCluster, Source: "volume1", @@ -530,14 +536,14 @@ var _ = Describe("Scheduler", func() { &api.Task{ ID: "pendingID", NodeID: "nodeID2", - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStatePending, }, DesiredState: api.TaskStateRunning, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{ - Mounts: []api.Mount{ + Mounts: []*api.Mount{ { Type: api.MountTypeCluster, Source: "group:group2", diff --git a/manager/scheduler/scheduler_test.go b/manager/scheduler/scheduler_test.go index 27053c01cd..d5fcec4cf5 100644 --- a/manager/scheduler/scheduler_test.go +++ b/manager/scheduler/scheduler_test.go @@ -24,34 +24,34 @@ func TestScheduler(t *testing.T) { initialNodeSet := []*api.Node{ { ID: "id1", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "name1", }, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, }, { ID: "id2", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "name2", }, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, }, { ID: "id3", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "name2", }, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, }, @@ -61,11 +61,11 @@ func TestScheduler(t *testing.T) { { ID: "id1", DesiredState: api.TaskStateRunning, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "name1", }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateAssigned, }, NodeID: initialNodeSet[0].ID, @@ -73,20 +73,20 @@ func TestScheduler(t *testing.T) { { ID: "id2", DesiredState: api.TaskStateRunning, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "name2", }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStatePending, }, }, { ID: "id3", DesiredState: api.TaskStateRunning, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "name2", }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStatePending, }, }, @@ -151,10 +151,10 @@ func TestScheduler(t *testing.T) { t4 := &api.Task{ ID: "id4", DesiredState: api.TaskStateRunning, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "name4", }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStatePending, }, } @@ -174,10 +174,10 @@ func TestScheduler(t *testing.T) { t4 := &api.Task{ ID: "id4", DesiredState: api.TaskStateRunning, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "name4", }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStatePending, }, } @@ -194,12 +194,12 @@ func TestScheduler(t *testing.T) { // be assigned to it. node := &api.Node{ ID: "removednode", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "removednode", }, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_DOWN, }, } @@ -210,10 +210,10 @@ func TestScheduler(t *testing.T) { task := &api.Task{ ID: "removednode", DesiredState: api.TaskStateRunning, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "removednode", }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStatePending, }, } @@ -230,12 +230,12 @@ func TestScheduler(t *testing.T) { // assignment. n4 := &api.Node{ ID: "id4", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "name4", }, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, } @@ -245,10 +245,10 @@ func TestScheduler(t *testing.T) { t5 := &api.Task{ ID: "id5", DesiredState: api.TaskStateRunning, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "name5", }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStatePending, }, } @@ -265,12 +265,12 @@ func TestScheduler(t *testing.T) { // assignment. n5 := &api.Node{ ID: "id5", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "name5", }, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_DOWN, }, } @@ -280,10 +280,10 @@ func TestScheduler(t *testing.T) { t6 := &api.Task{ ID: "id6", DesiredState: api.TaskStateRunning, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "name6", }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStatePending, }, } @@ -299,12 +299,12 @@ func TestScheduler(t *testing.T) { // Update node id5 to put it in the READY state. n5 := &api.Node{ ID: "id5", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "name5", }, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, } @@ -315,10 +315,10 @@ func TestScheduler(t *testing.T) { t7 := &api.Task{ ID: "id7", DesiredState: api.TaskStateRunning, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "name7", }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStatePending, }, } @@ -335,12 +335,12 @@ func TestScheduler(t *testing.T) { // unassigned task should NOT be assigned to it. n6 := &api.Node{ ID: "id6", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "name6", }, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, } @@ -352,10 +352,10 @@ func TestScheduler(t *testing.T) { t8 := &api.Task{ ID: "id8", DesiredState: api.TaskStateRunning, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "name8", }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStatePending, }, } @@ -373,31 +373,31 @@ func testHA(t *testing.T, useSpecVersion bool) { initialNodeSet := []*api.Node{ { ID: "id1", - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, }, { ID: "id2", - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, }, { ID: "id3", - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, }, { ID: "id4", - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, }, { ID: "id5", - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, }, @@ -406,14 +406,14 @@ func testHA(t *testing.T, useSpecVersion bool) { taskTemplate1 := &api.Task{ DesiredState: api.TaskStateRunning, ServiceID: "service1", - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{ Image: "v:1", }, }, }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStatePending, }, } @@ -421,14 +421,14 @@ func testHA(t *testing.T, useSpecVersion bool) { taskTemplate2 := &api.Task{ DesiredState: api.TaskStateRunning, ServiceID: "service2", - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{ Image: "v:2", }, }, }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStatePending, }, } @@ -657,11 +657,11 @@ func testPreferences(t *testing.T, useSpecVersion bool) { initialNodeSet := []*api.Node{ { ID: "id1", - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Labels: map[string]string{ "az": "az1", }, @@ -670,11 +670,11 @@ func testPreferences(t *testing.T, useSpecVersion bool) { }, { ID: "id2", - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Labels: map[string]string{ "az": "az2", }, @@ -683,11 +683,11 @@ func testPreferences(t *testing.T, useSpecVersion bool) { }, { ID: "id3", - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Labels: map[string]string{ "az": "az2", }, @@ -696,11 +696,11 @@ func testPreferences(t *testing.T, useSpecVersion bool) { }, { ID: "id4", - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Labels: map[string]string{ "az": "az2", }, @@ -709,11 +709,11 @@ func testPreferences(t *testing.T, useSpecVersion bool) { }, { ID: "id5", - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Labels: map[string]string{ "az": "az2", }, @@ -725,7 +725,7 @@ func testPreferences(t *testing.T, useSpecVersion bool) { taskTemplate1 := &api.Task{ DesiredState: api.TaskStateRunning, ServiceID: "service1", - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{ Image: "v:1", @@ -743,7 +743,7 @@ func testPreferences(t *testing.T, useSpecVersion bool) { }, }, }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStatePending, }, } @@ -810,11 +810,11 @@ func testMultiplePreferences(t *testing.T, useSpecVersion bool) { initialNodeSet := []*api.Node{ { ID: "id0", - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Labels: map[string]string{ "az": "az1", "rack": "rack1", @@ -833,11 +833,11 @@ func testMultiplePreferences(t *testing.T, useSpecVersion bool) { }, { ID: "id1", - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Labels: map[string]string{ "az": "az1", "rack": "rack1", @@ -856,11 +856,11 @@ func testMultiplePreferences(t *testing.T, useSpecVersion bool) { }, { ID: "id2", - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Labels: map[string]string{ "az": "az2", "rack": "rack1", @@ -879,11 +879,11 @@ func testMultiplePreferences(t *testing.T, useSpecVersion bool) { }, { ID: "id3", - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Labels: map[string]string{ "az": "az2", "rack": "rack1", @@ -902,11 +902,11 @@ func testMultiplePreferences(t *testing.T, useSpecVersion bool) { }, { ID: "id4", - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Labels: map[string]string{ "az": "az2", "rack": "rack1", @@ -925,11 +925,11 @@ func testMultiplePreferences(t *testing.T, useSpecVersion bool) { }, { ID: "id5", - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Labels: map[string]string{ "az": "az2", "rack": "rack2", @@ -948,11 +948,11 @@ func testMultiplePreferences(t *testing.T, useSpecVersion bool) { }, { ID: "id6", - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Labels: map[string]string{ "az": "az2", "rack": "rack2", @@ -974,7 +974,7 @@ func testMultiplePreferences(t *testing.T, useSpecVersion bool) { taskTemplate1 := &api.Task{ DesiredState: api.TaskStateRunning, ServiceID: "service1", - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{ Image: "v:1", @@ -1007,7 +1007,7 @@ func testMultiplePreferences(t *testing.T, useSpecVersion bool) { }, }, }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStatePending, }, } @@ -1117,11 +1117,11 @@ func TestMultiplePreferencesScaleUp(t *testing.T) { initialNodeSet := []*api.Node{ { ID: "id11", - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Labels: map[string]string{ "az": "dc1", "rack": "r1", @@ -1131,11 +1131,11 @@ func TestMultiplePreferencesScaleUp(t *testing.T) { }, { ID: "id12", - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Labels: map[string]string{ "az": "dc1", "rack": "r2", @@ -1145,11 +1145,11 @@ func TestMultiplePreferencesScaleUp(t *testing.T) { }, { ID: "id21", - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Labels: map[string]string{ "az": "dc2", "rack": "r1", @@ -1166,7 +1166,7 @@ func TestMultiplePreferencesScaleUp(t *testing.T) { // group, a necessary precondition for the scheduler // infinite-loop bug. SpecVersion: &api.Version{Index: 1}, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{ Image: "v:1", @@ -1191,7 +1191,7 @@ func TestMultiplePreferencesScaleUp(t *testing.T) { }, }, }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStatePending, }, } @@ -1266,10 +1266,10 @@ func TestSchedulerNoReadyNodes(t *testing.T) { ID: "id1", ServiceID: "serviceID1", DesiredState: api.TaskStateRunning, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "name1", }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStatePending, }, } @@ -1304,12 +1304,12 @@ func TestSchedulerNoReadyNodes(t *testing.T) { // node. node := &api.Node{ ID: "newnode", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "newnode", }, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, } @@ -1328,10 +1328,10 @@ func TestSchedulerFaultyNode(t *testing.T) { replicatedTaskTemplate := &api.Task{ ServiceID: "service1", DesiredState: api.TaskStateRunning, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "name1", }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStatePending, }, } @@ -1340,34 +1340,34 @@ func TestSchedulerFaultyNode(t *testing.T) { ServiceID: "service2", NodeID: "id1", DesiredState: api.TaskStateRunning, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "name2", }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStatePending, }, } node1 := &api.Node{ ID: "id1", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "id1", }, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, } node2 := &api.Node{ ID: "id2", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "id2", }, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, } @@ -1492,34 +1492,34 @@ func TestSchedulerFaultyNodeSpecVersion(t *testing.T) { ServiceID: "service1", SpecVersion: &api.Version{Index: 1}, DesiredState: api.TaskStateRunning, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "name1", }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStatePending, }, } node1 := &api.Node{ ID: "id1", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "id1", }, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, } node2 := &api.Node{ ID: "id2", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "id2", }, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, } @@ -1601,10 +1601,10 @@ func TestSchedulerFaultyNodeSpecVersion(t *testing.T) { expectedNode1Spec2Failures = i - 11 expectedNode2Spec2Failures = 5 } - assert.Len(t, node1Info.recentFailures[versionedService{serviceID: "service1", specVersion: api.Version{Index: 1}}], expectedNode1Spec1Failures) - assert.Len(t, node1Info.recentFailures[versionedService{serviceID: "service1", specVersion: api.Version{Index: 2}}], expectedNode1Spec2Failures) - assert.Len(t, node2Info.recentFailures[versionedService{serviceID: "service1", specVersion: api.Version{Index: 1}}], expectedNode2Spec1Failures) - assert.Len(t, node2Info.recentFailures[versionedService{serviceID: "service1", specVersion: api.Version{Index: 2}}], expectedNode2Spec2Failures) + assert.Len(t, node1Info.recentFailures[versionedService{serviceID: "service1", specVersionIndex: 1}], expectedNode1Spec1Failures) + assert.Len(t, node1Info.recentFailures[versionedService{serviceID: "service1", specVersionIndex: 2}], expectedNode1Spec2Failures) + assert.Len(t, node2Info.recentFailures[versionedService{serviceID: "service1", specVersionIndex: 1}], expectedNode2Spec1Failures) + assert.Len(t, node2Info.recentFailures[versionedService{serviceID: "service1", specVersionIndex: 2}], expectedNode2Spec2Failures) err = s.Update(func(tx store.Tx) error { newTask := store.GetTask(tx, newTask.ID) @@ -1622,12 +1622,12 @@ func TestSchedulerResourceConstraint(t *testing.T) { // Create a ready node without enough memory to run the task. underprovisionedNode := &api.Node{ ID: "underprovisioned", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "underprovisioned", }, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, Description: &api.NodeDescription{ @@ -1645,12 +1645,12 @@ func TestSchedulerResourceConstraint(t *testing.T) { // Non-ready nodes that satisfy the constraints but shouldn't be used nonready1 := &api.Node{ ID: "nonready1", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "nonready1", }, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_UNKNOWN, }, Description: &api.NodeDescription{ @@ -1666,12 +1666,12 @@ func TestSchedulerResourceConstraint(t *testing.T) { } nonready2 := &api.Node{ ID: "nonready2", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "nonready2", }, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_UNKNOWN, }, Description: &api.NodeDescription{ @@ -1690,7 +1690,7 @@ func TestSchedulerResourceConstraint(t *testing.T) { ID: "id1", ServiceID: "serviceID1", DesiredState: api.TaskStateRunning, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{}, }, @@ -1704,10 +1704,10 @@ func TestSchedulerResourceConstraint(t *testing.T) { }, }, }, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "name1", }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStatePending, }, } @@ -1749,8 +1749,8 @@ func TestSchedulerResourceConstraint(t *testing.T) { // assigned to this node. node := &api.Node{ ID: "bignode", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "bignode", }, }, @@ -1764,7 +1764,7 @@ func TestSchedulerResourceConstraint(t *testing.T) { ), }, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, } @@ -1784,12 +1784,12 @@ func TestSchedulerResourceConstraintHA(t *testing.T) { ctx := context.Background() node1 := &api.Node{ ID: "id1", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "id1", }, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, Description: &api.NodeDescription{ @@ -1803,12 +1803,12 @@ func TestSchedulerResourceConstraintHA(t *testing.T) { } node2 := &api.Node{ ID: "id2", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "id2", }, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, Description: &api.NodeDescription{ @@ -1823,7 +1823,7 @@ func TestSchedulerResourceConstraintHA(t *testing.T) { taskTemplate := &api.Task{ DesiredState: api.TaskStateRunning, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{}, }, @@ -1836,10 +1836,10 @@ func TestSchedulerResourceConstraintHA(t *testing.T) { }, }, }, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "name1", }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStatePending, }, } @@ -1924,12 +1924,12 @@ func TestSchedulerResourceConstraintDeadTask(t *testing.T) { // Create a ready node without enough memory to run the task. node := &api.Node{ ID: "id1", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "node", }, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, Description: &api.NodeDescription{ @@ -1947,7 +1947,7 @@ func TestSchedulerResourceConstraintDeadTask(t *testing.T) { DesiredState: api.TaskStateRunning, ID: "id1", ServiceID: "serviceID1", - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Resources: &api.ResourceRequirements{ Reservations: &api.Resources{ MemoryBytes: 8e8, @@ -1957,10 +1957,10 @@ func TestSchedulerResourceConstraintDeadTask(t *testing.T) { }, }, }, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "big", }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStatePending, }, } @@ -2030,12 +2030,12 @@ func TestSchedulerPreexistingDeadTask(t *testing.T) { // Create a ready node without enough memory to run two tasks at once. node := &api.Node{ ID: "id1", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "node", }, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, Description: &api.NodeDescription{ @@ -2053,7 +2053,7 @@ func TestSchedulerPreexistingDeadTask(t *testing.T) { DesiredState: api.TaskStateRunning, ID: "id1", NodeID: "id1", - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Resources: &api.ResourceRequirements{ Reservations: &api.Resources{ MemoryBytes: 8e8, @@ -2063,10 +2063,10 @@ func TestSchedulerPreexistingDeadTask(t *testing.T) { }, }, }, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "big", }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStateShutdown, }, } @@ -2117,13 +2117,13 @@ func TestSchedulerCompatiblePlatform(t *testing.T) { ID: "id1", ServiceID: "serviceID1", DesiredState: api.TaskStateRunning, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "name1", }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStatePending, }, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Placement: &api.Placement{ Platforms: []*api.Platform{ { @@ -2140,13 +2140,13 @@ func TestSchedulerCompatiblePlatform(t *testing.T) { ID: "id2", ServiceID: "serviceID1", DesiredState: api.TaskStateRunning, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "name2", }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStatePending, }, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Placement: &api.Placement{ Platforms: []*api.Platform{ { @@ -2163,10 +2163,10 @@ func TestSchedulerCompatiblePlatform(t *testing.T) { ID: "id3", ServiceID: "serviceID1", DesiredState: api.TaskStateRunning, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "name3", }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStatePending, }, } @@ -2176,13 +2176,13 @@ func TestSchedulerCompatiblePlatform(t *testing.T) { ID: "id4", ServiceID: "serviceID1", DesiredState: api.TaskStateRunning, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "name4", }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStatePending, }, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Placement: &api.Placement{ Platforms: []*api.Platform{ { @@ -2199,13 +2199,13 @@ func TestSchedulerCompatiblePlatform(t *testing.T) { ID: "id5", ServiceID: "serviceID1", DesiredState: api.TaskStateRunning, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "name5", }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStatePending, }, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Placement: &api.Placement{ Platforms: []*api.Platform{ { @@ -2223,12 +2223,12 @@ func TestSchedulerCompatiblePlatform(t *testing.T) { node1 := &api.Node{ ID: "node1", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "node1", }, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, Description: &api.NodeDescription{ @@ -2241,12 +2241,12 @@ func TestSchedulerCompatiblePlatform(t *testing.T) { node2 := &api.Node{ ID: "node2", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "node2", }, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, Description: &api.NodeDescription{ @@ -2261,12 +2261,12 @@ func TestSchedulerCompatiblePlatform(t *testing.T) { // with a platform constraint node3 := &api.Node{ ID: "node3", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "node3", }, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, Description: &api.NodeDescription{}, @@ -2349,13 +2349,13 @@ func TestSchedulerUnassignedMap(t *testing.T) { ID: "id1", ServiceID: "serviceID1", DesiredState: api.TaskStateRunning, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "name1", }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStatePending, }, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Placement: &api.Placement{ Platforms: []*api.Platform{ { @@ -2369,12 +2369,12 @@ func TestSchedulerUnassignedMap(t *testing.T) { node1 := &api.Node{ ID: "node1", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "node1", }, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, Description: &api.NodeDescription{ @@ -2426,23 +2426,23 @@ func TestPreassignedTasks(t *testing.T) { initialNodeSet := []*api.Node{ { ID: "node1", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "name1", }, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, }, { ID: "node2", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "name2", }, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, }, @@ -2452,21 +2452,21 @@ func TestPreassignedTasks(t *testing.T) { { ID: "task1", DesiredState: api.TaskStateRunning, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "name1", }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStatePending, }, }, { ID: "task2", DesiredState: api.TaskStateRunning, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "name2", }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStatePending, }, NodeID: initialNodeSet[0].ID, @@ -2474,10 +2474,10 @@ func TestPreassignedTasks(t *testing.T) { { ID: "task3", DesiredState: api.TaskStateRunning, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "name2", }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStatePending, }, NodeID: initialNodeSet[0].ID, @@ -2535,12 +2535,12 @@ func TestIgnoreTasks(t *testing.T) { initialNodeSet := []*api.Node{ { ID: "node1", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "name1", }, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, }, @@ -2551,21 +2551,21 @@ func TestIgnoreTasks(t *testing.T) { { ID: "task1", DesiredState: api.TaskStateRunning, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "name1", }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStatePending, }, }, { ID: "task2", DesiredState: api.TaskStateShutdown, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "name2", }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStatePending, }, NodeID: initialNodeSet[0].ID, @@ -2573,10 +2573,10 @@ func TestIgnoreTasks(t *testing.T) { { ID: "task3", DesiredState: api.TaskStateRemove, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "name2", }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStatePending, }, NodeID: initialNodeSet[0].ID, @@ -2633,12 +2633,12 @@ func TestUnscheduleableTask(t *testing.T) { ctx := context.Background() node := &api.Node{ ID: "nodeid1", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "node", }, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, Description: &api.NodeDescription{}, @@ -2651,7 +2651,7 @@ func TestUnscheduleableTask(t *testing.T) { SpecVersion: &api.Version{ Index: 0, }, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{}, }, @@ -2659,10 +2659,10 @@ func TestUnscheduleableTask(t *testing.T) { MaxReplicas: 1, }, }, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "servicename1", }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStatePending, }, } @@ -2674,7 +2674,7 @@ func TestUnscheduleableTask(t *testing.T) { SpecVersion: &api.Version{ Index: 0, }, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{}, }, @@ -2682,10 +2682,10 @@ func TestUnscheduleableTask(t *testing.T) { MaxReplicas: 1, }, }, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "servicename1", }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStatePending, }, } @@ -2726,10 +2726,10 @@ watchAttempt: select { case event := <-watch: if task, ok := event.(api.EventUpdateTask); ok { - if task.Task.Status.State < api.TaskStateAssigned { + if task.Task.GetStatus().GetState() < api.TaskStateAssigned { failed = task.Task.Copy() - } else if task.Task.Status.State >= api.TaskStateAssigned && - task.Task.Status.State <= api.TaskStateRunning && + } else if task.Task.GetStatus().GetState() >= api.TaskStateAssigned && + task.Task.GetStatus().GetState() <= api.TaskStateRunning && task.Task.NodeID != "" { assigned = task.Task.Copy() } @@ -2765,7 +2765,7 @@ watchAttempt: SpecVersion: &api.Version{ Index: 1, }, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{}, }, @@ -2773,10 +2773,10 @@ watchAttempt: MaxReplicas: 1, }, }, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "servicename1", }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStatePending, }, } @@ -2816,12 +2816,12 @@ watchShutdown: case event := <-watch: if task, ok := event.(api.EventUpdateTask); ok { if task.Task.ID == failed.ID { - if task.Task.Status.State >= api.TaskStateShutdown { + if task.Task.GetStatus().GetState() >= api.TaskStateShutdown { break watchShutdown } } if task.Task.ID == task1Update.ID { - if task.Task.Status.State == api.TaskStateAssigned { + if task.Task.GetStatus().GetState() == api.TaskStateAssigned { t.Logf("updated task assigned") } } @@ -2837,7 +2837,7 @@ func watchAssignmentFailure(t *testing.T, watch chan events.Event) *api.Task { select { case event := <-watch: if task, ok := event.(api.EventUpdateTask); ok { - if task.Task.Status.State < api.TaskStateAssigned { + if task.Task.GetStatus().GetState() < api.TaskStateAssigned { return task.Task } } @@ -2853,8 +2853,8 @@ func watchAssignment(t *testing.T, watch chan events.Event) *api.Task { select { case event := <-watch: if task, ok := event.(api.EventUpdateTask); ok { - if task.Task.Status.State >= api.TaskStateAssigned && - task.Task.Status.State <= api.TaskStateRunning && + if task.Task.GetStatus().GetState() >= api.TaskStateAssigned && + task.Task.GetStatus().GetState() <= api.TaskStateRunning && task.Task.NodeID != "" { return task.Task } @@ -2871,14 +2871,14 @@ func TestSchedulerPluginConstraint(t *testing.T) { // Node1: vol plugin1 n1 := &api.Node{ ID: "node1_ID", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "node1", }, }, Description: &api.NodeDescription{ Engine: &api.EngineDescription{ - Plugins: []api.PluginDescription{ + Plugins: []*api.PluginDescription{ { Type: "Volume", Name: "plugin1", @@ -2890,7 +2890,7 @@ func TestSchedulerPluginConstraint(t *testing.T) { }, }, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, } @@ -2898,14 +2898,14 @@ func TestSchedulerPluginConstraint(t *testing.T) { // Node2: vol plugin1, vol plugin2 n2 := &api.Node{ ID: "node2_ID", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "node2", }, }, Description: &api.NodeDescription{ Engine: &api.EngineDescription{ - Plugins: []api.PluginDescription{ + Plugins: []*api.PluginDescription{ { Type: "Volume", Name: "plugin1", @@ -2921,7 +2921,7 @@ func TestSchedulerPluginConstraint(t *testing.T) { }, }, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, } @@ -2929,14 +2929,14 @@ func TestSchedulerPluginConstraint(t *testing.T) { // Node3: vol plugin1, network plugin1 n3 := &api.Node{ ID: "node3_ID", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "node3", }, }, Description: &api.NodeDescription{ Engine: &api.EngineDescription{ - Plugins: []api.PluginDescription{ + Plugins: []*api.PluginDescription{ { Type: "Volume", Name: "plugin1", @@ -2952,7 +2952,7 @@ func TestSchedulerPluginConstraint(t *testing.T) { }, }, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, } @@ -2960,14 +2960,14 @@ func TestSchedulerPluginConstraint(t *testing.T) { // Node4: log plugin1 n4 := &api.Node{ ID: "node4_ID", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "node4", }, }, Description: &api.NodeDescription{ Engine: &api.EngineDescription{ - Plugins: []api.PluginDescription{ + Plugins: []*api.PluginDescription{ { Type: "Log", Name: "plugin1", @@ -2975,7 +2975,7 @@ func TestSchedulerPluginConstraint(t *testing.T) { }, }, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, } @@ -2993,10 +2993,10 @@ func TestSchedulerPluginConstraint(t *testing.T) { ID: "task0_ID", ServiceID: "serviceID1", DesiredState: api.TaskStateRunning, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{ - Mounts: []api.Mount{ + Mounts: []*api.Mount{ { Source: "/src", Target: "/foo", @@ -3006,10 +3006,10 @@ func TestSchedulerPluginConstraint(t *testing.T) { }, }, }, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "task0", }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStatePending, }, } @@ -3019,10 +3019,10 @@ func TestSchedulerPluginConstraint(t *testing.T) { ID: "task1_ID", ServiceID: "serviceID1", DesiredState: api.TaskStateRunning, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{ - Mounts: []api.Mount{ + Mounts: []*api.Mount{ { Source: "testVol1", Target: "/foo", @@ -3033,10 +3033,10 @@ func TestSchedulerPluginConstraint(t *testing.T) { }, }, }, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "task1", }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStatePending, }, } @@ -3046,10 +3046,10 @@ func TestSchedulerPluginConstraint(t *testing.T) { ID: "task2_ID", ServiceID: "serviceID1", DesiredState: api.TaskStateRunning, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{ - Mounts: []api.Mount{ + Mounts: []*api.Mount{ { Source: "testVol1", Target: "/foo", @@ -3066,10 +3066,10 @@ func TestSchedulerPluginConstraint(t *testing.T) { }, }, }, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "task2", }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStatePending, }, } @@ -3083,8 +3083,8 @@ func TestSchedulerPluginConstraint(t *testing.T) { { Network: &api.Network{ ID: "testNwID1", - Spec: api.NetworkSpec{ - Annotations: api.Annotations{ + Spec: &api.NetworkSpec{ + Annotations: &api.Annotations{ Name: "testVol1", }, }, @@ -3094,10 +3094,10 @@ func TestSchedulerPluginConstraint(t *testing.T) { }, }, }, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{ - Mounts: []api.Mount{ + Mounts: []*api.Mount{ { Source: "testVol1", Target: "/foo", @@ -3108,10 +3108,10 @@ func TestSchedulerPluginConstraint(t *testing.T) { }, }, }, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "task2", }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStatePending, }, } @@ -3120,16 +3120,16 @@ func TestSchedulerPluginConstraint(t *testing.T) { ID: "task4_ID", ServiceID: "serviceID1", DesiredState: api.TaskStateRunning, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{}, }, LogDriver: &api.Driver{Name: "plugin1"}, }, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "task4", }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStatePending, }, } @@ -3138,16 +3138,16 @@ func TestSchedulerPluginConstraint(t *testing.T) { ID: "task5_ID", ServiceID: "serviceID1", DesiredState: api.TaskStateRunning, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{}, }, LogDriver: &api.Driver{Name: "plugin1"}, }, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "task5", }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStatePending, }, } @@ -3157,16 +3157,16 @@ func TestSchedulerPluginConstraint(t *testing.T) { ID: "task6_ID", ServiceID: "serviceID1", DesiredState: api.TaskStateRunning, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{}, }, LogDriver: &api.Driver{Name: "none"}, }, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "task6", }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStatePending, }, } @@ -3176,7 +3176,7 @@ func TestSchedulerPluginConstraint(t *testing.T) { ID: "task7_ID", ServiceID: "serviceID1", DesiredState: api.TaskStateRunning, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{}, }, @@ -3186,10 +3186,10 @@ func TestSchedulerPluginConstraint(t *testing.T) { }, }, }, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "task7", }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStatePending, }, } @@ -3397,13 +3397,13 @@ func benchScheduler(b *testing.B, nodes, tasks int, networkConstraints bool) { for i := 0; i < nodes; i++ { n := &api.Node{ ID: identity.NewID(), - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "name" + strconv.Itoa(i), Labels: make(map[string]string), }, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, Description: &api.NodeDescription{ @@ -3412,7 +3412,7 @@ func benchScheduler(b *testing.B, nodes, tasks int, networkConstraints bool) { } // Give every third node a special network if i%3 == 0 { - n.Description.Engine.Plugins = []api.PluginDescription{ + n.Description.Engine.Plugins = []*api.PluginDescription{ { Name: "network", Type: "Network", @@ -3430,10 +3430,10 @@ func benchScheduler(b *testing.B, nodes, tasks int, networkConstraints bool) { t := &api.Task{ ID: id, DesiredState: api.TaskStateRunning, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: id, }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStatePending, }, } @@ -3471,23 +3471,23 @@ func TestSchedulerHostPort(t *testing.T) { ctx := context.Background() node1 := &api.Node{ ID: "nodeid1", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "node1", }, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, } node2 := &api.Node{ ID: "nodeid2", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "node2", }, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, } @@ -3496,15 +3496,15 @@ func TestSchedulerHostPort(t *testing.T) { ID: "id1", ServiceID: "serviceID1", DesiredState: api.TaskStateRunning, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{}, }, }, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "name1", }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStatePending, }, Endpoint: &api.Endpoint{ @@ -3521,15 +3521,15 @@ func TestSchedulerHostPort(t *testing.T) { ID: "id2", ServiceID: "serviceID1", DesiredState: api.TaskStateRunning, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{}, }, }, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "name2", }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStatePending, }, Endpoint: &api.Endpoint{ @@ -3546,15 +3546,15 @@ func TestSchedulerHostPort(t *testing.T) { ID: "id3", ServiceID: "serviceID1", DesiredState: api.TaskStateRunning, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{}, }, }, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "name3", }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStatePending, }, Endpoint: &api.Endpoint{ @@ -3632,23 +3632,23 @@ func TestSchedulerMaxReplicas(t *testing.T) { ctx := context.Background() node1 := &api.Node{ ID: "nodeid1", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "node1", }, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, } node2 := &api.Node{ ID: "nodeid2", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "node2", }, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, } @@ -3656,7 +3656,7 @@ func TestSchedulerMaxReplicas(t *testing.T) { ID: "id1", ServiceID: "serviceID1", DesiredState: api.TaskStateRunning, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{}, }, @@ -3664,10 +3664,10 @@ func TestSchedulerMaxReplicas(t *testing.T) { MaxReplicas: 1, }, }, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "name1", }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStatePending, }, } @@ -3675,7 +3675,7 @@ func TestSchedulerMaxReplicas(t *testing.T) { ID: "id2", ServiceID: "serviceID1", DesiredState: api.TaskStateRunning, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{}, }, @@ -3683,10 +3683,10 @@ func TestSchedulerMaxReplicas(t *testing.T) { MaxReplicas: 1, }, }, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "name2", }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStatePending, }, } @@ -3694,7 +3694,7 @@ func TestSchedulerMaxReplicas(t *testing.T) { ID: "id3", ServiceID: "serviceID1", DesiredState: api.TaskStateRunning, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{}, }, @@ -3702,10 +3702,10 @@ func TestSchedulerMaxReplicas(t *testing.T) { MaxReplicas: 1, }, }, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "name3", }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStatePending, }, } @@ -3766,12 +3766,12 @@ func TestSchedulerMaxReplicas(t *testing.T) { // Add third node to get task 3 scheduled node3 := &api.Node{ ID: "nodeid3", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "node3", }, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: api.NodeStatus_READY, }, } @@ -3786,7 +3786,7 @@ func TestSchedulerMaxReplicas(t *testing.T) { ID: "id4", ServiceID: "serviceID1", DesiredState: api.TaskStateRunning, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{}, }, @@ -3795,10 +3795,10 @@ func TestSchedulerMaxReplicas(t *testing.T) { MaxReplicas: 3, }, }, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "name4", }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStatePending, }, } @@ -3806,7 +3806,7 @@ func TestSchedulerMaxReplicas(t *testing.T) { ID: "id5", ServiceID: "serviceID1", DesiredState: api.TaskStateRunning, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{}, }, @@ -3815,10 +3815,10 @@ func TestSchedulerMaxReplicas(t *testing.T) { MaxReplicas: 3, }, }, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "name5", }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStatePending, }, } @@ -3826,7 +3826,7 @@ func TestSchedulerMaxReplicas(t *testing.T) { ID: "id6", ServiceID: "serviceID1", DesiredState: api.TaskStateRunning, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{}, }, @@ -3835,10 +3835,10 @@ func TestSchedulerMaxReplicas(t *testing.T) { MaxReplicas: 3, }, }, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "name6", }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStatePending, }, } @@ -3846,7 +3846,7 @@ func TestSchedulerMaxReplicas(t *testing.T) { ID: "id7", ServiceID: "serviceID1", DesiredState: api.TaskStateRunning, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{}, }, @@ -3855,10 +3855,10 @@ func TestSchedulerMaxReplicas(t *testing.T) { MaxReplicas: 3, }, }, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "name7", }, - Status: api.TaskStatus{ + Status: &api.TaskStatus{ State: api.TaskStatePending, }, } diff --git a/manager/scheduler/volumes.go b/manager/scheduler/volumes.go index b9d34fe4cd..ebd2c60af2 100644 --- a/manager/scheduler/volumes.go +++ b/manager/scheduler/volumes.go @@ -71,12 +71,12 @@ func (vs *volumeSet) addOrUpdateVolume(v *api.Volume) { info.volume = v } - if set, ok := vs.byGroup[v.Spec.Group]; ok { + if set, ok := vs.byGroup[v.GetSpec().GetGroup()]; ok { set[v.ID] = struct{}{} } else { - vs.byGroup[v.Spec.Group] = map[string]struct{}{v.ID: {}} + vs.byGroup[v.GetSpec().GetGroup()] = map[string]struct{}{v.ID: {}} } - vs.byName[v.Spec.Annotations.Name] = v.ID + vs.byName[v.GetSpec().GetAnnotations().GetName()] = v.ID } //nolint:unused // only used in tests. @@ -84,10 +84,10 @@ func (vs *volumeSet) removeVolume(volumeID string) { if info, ok := vs.volumes[volumeID]; ok { // if the volume exists in the set, look up its group ID and remove it // from the byGroup mapping as well - group := info.volume.Spec.Group + group := info.volume.GetSpec().GetGroup() delete(vs.byGroup[group], volumeID) delete(vs.volumes, volumeID) - delete(vs.byName, info.volume.Spec.Annotations.Name) + delete(vs.byName, info.volume.GetSpec().GetAnnotations().GetName()) } } @@ -115,7 +115,7 @@ func (vs *volumeSet) chooseTaskVolumes(task *api.Task, nodeInfo *NodeInfo) ([]*a } for _, mount := range task.Spec.GetContainer().Mounts { if mount.Type == api.MountTypeCluster { - candidate := vs.isVolumeAvailableOnNode(&mount, nodeInfo) + candidate := vs.isVolumeAvailableOnNode(mount, nodeInfo) if candidate == "" { // TODO(dperny): return structured error types, instead of // error strings @@ -258,7 +258,7 @@ func (vs *volumeSet) checkVolume(id string, info *NodeInfo, readOnly bool) bool vi := vs.volumes[id] // first, check if the volume's availability is even Active. If not. no // reason to bother with anything further. - if vi.volume != nil && vi.volume.Spec.Availability != api.VolumeAvailabilityActive { + if vi.volume != nil && vi.volume.GetSpec().GetAvailability() != api.VolumeAvailabilityActive { return false } @@ -266,7 +266,7 @@ func (vs *volumeSet) checkVolume(id string, info *NodeInfo, readOnly bool) bool var top *api.Topology // get the topology for this volume's driver on this node for _, info := range info.Description.CSIInfo { - if info.PluginName == vi.volume.Spec.Driver.Name { + if info.PluginName == vi.volume.GetSpec().GetDriver().GetName() { top = info.AccessibleTopology break } @@ -276,7 +276,7 @@ func (vs *volumeSet) checkVolume(id string, info *NodeInfo, readOnly bool) bool // availability on a node depends on its accessible topology, how it's // already being used, and how this task intends to use it. - if vi.volume.Spec.AccessMode.Scope == api.VolumeScopeSingleNode { + if vi.volume.GetSpec().GetAccessMode().GetScope() == api.VolumeScopeSingleNode { // if the volume is not in use on this node already, then it can't // be used here. for _, usage := range vi.tasks { @@ -288,7 +288,7 @@ func (vs *volumeSet) checkVolume(id string, info *NodeInfo, readOnly bool) bool // even if the volume is currently on this node, or it has multi-node // access, the volume sharing needs to be compatible. - switch vi.volume.Spec.AccessMode.Sharing { + switch vi.volume.GetSpec().GetAccessMode().GetSharing() { case api.VolumeSharingNone: // if the volume sharing is none, then the volume cannot be // used by another task diff --git a/manager/scheduler/volumes_test.go b/manager/scheduler/volumes_test.go index feabd46773..1cfd4c26fe 100644 --- a/manager/scheduler/volumes_test.go +++ b/manager/scheduler/volumes_test.go @@ -6,6 +6,7 @@ import ( . "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo/extensions/table" . "github.com/onsi/gomega" + "google.golang.org/protobuf/proto" "github.com/moby/swarmkit/v2/api" "github.com/moby/swarmkit/v2/manager/state/store" @@ -16,8 +17,8 @@ import ( func cannedVolume(id int) *api.Volume { return &api.Volume{ ID: fmt.Sprintf("volumeID%d", id), - Spec: api.VolumeSpec{ - Annotations: api.Annotations{ + Spec: &api.VolumeSpec{ + Annotations: &api.Annotations{ Name: fmt.Sprintf("volume%d", id), }, Group: "group", @@ -124,10 +125,10 @@ var _ = Describe("volumeSet", func() { Target: "/srv/www", }, }, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{ - Mounts: []api.Mount{ + Mounts: []*api.Mount{ { Type: api.MountTypeCluster, Source: v1.Spec.Group, @@ -216,7 +217,7 @@ var _ = Describe("volumeSet", func() { v := &api.Volume{ ID: "someVolume", - Spec: api.VolumeSpec{ + Spec: &api.VolumeSpec{ AccessMode: c.AccessMode, Driver: &api.Driver{ Name: "somePlugin", @@ -366,8 +367,8 @@ var _ = Describe("volumeSet", func() { volumes = []*api.Volume{ { ID: "volume1", - Spec: api.VolumeSpec{ - Annotations: api.Annotations{ + Spec: &api.VolumeSpec{ + Annotations: &api.Annotations{ Name: "volumeName1", }, Driver: &api.Driver{ @@ -384,8 +385,8 @@ var _ = Describe("volumeSet", func() { }, { ID: "volume2", - Spec: api.VolumeSpec{ - Annotations: api.Annotations{ + Spec: &api.VolumeSpec{ + Annotations: &api.Annotations{ Name: "volumeName2", }, Driver: &api.Driver{ @@ -399,8 +400,8 @@ var _ = Describe("volumeSet", func() { }, { ID: "volume3", - Spec: api.VolumeSpec{ - Annotations: api.Annotations{ + Spec: &api.VolumeSpec{ + Annotations: &api.Annotations{ Name: "volumeName3", }, Driver: &api.Driver{ @@ -418,8 +419,8 @@ var _ = Describe("volumeSet", func() { }, { ID: "volume4", - Spec: api.VolumeSpec{ - Annotations: api.Annotations{ + Spec: &api.VolumeSpec{ + Annotations: &api.Annotations{ Name: "volumeName4", }, Driver: &api.Driver{ @@ -478,7 +479,7 @@ var _ = Describe("volumeSet", func() { vs.addOrUpdateVolume(v2) v3 := cannedVolume(3) vs.addOrUpdateVolume(v3) - mounts := []api.Mount{ + mounts := []*api.Mount{ { Type: api.MountTypeCluster, Source: "group:volumeGroup", @@ -501,7 +502,7 @@ var _ = Describe("volumeSet", func() { task := &api.Task{ ID: "taskID1", - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{ Mounts: mounts, @@ -519,11 +520,22 @@ var _ = Describe("volumeSet", func() { attachments, err := vs.chooseTaskVolumes(task, node) Expect(err).ToNot(HaveOccurred()) - Expect(attachments).To(ConsistOf( - &api.VolumeAttachment{ID: v1.ID, Source: mounts[0].Source, Target: mounts[0].Target}, - &api.VolumeAttachment{ID: v2.ID, Source: mounts[1].Source, Target: mounts[1].Target}, - &api.VolumeAttachment{ID: v3.ID, Source: mounts[3].Source, Target: mounts[3].Target}, - )) + Expect(attachments).To(HaveLen(3)) + expected := []*api.VolumeAttachment{ + {ID: v1.ID, Source: mounts[0].Source, Target: mounts[0].Target}, + {ID: v2.ID, Source: mounts[1].Source, Target: mounts[1].Target}, + {ID: v3.ID, Source: mounts[3].Source, Target: mounts[3].Target}, + } + for _, exp := range expected { + found := false + for _, att := range attachments { + if proto.Equal(exp, att) { + found = true + break + } + } + Expect(found).To(BeTrue(), "expected attachment %v not found", exp) + } }) }) @@ -564,10 +576,10 @@ var _ = Describe("volumeSet", func() { tasks = append(tasks, &api.Task{ ID: fmt.Sprintf("task%d", i), NodeID: nodes[i].ID, - Spec: api.TaskSpec{ + Spec: &api.TaskSpec{ Runtime: &api.TaskSpec_Container{ Container: &api.ContainerSpec{ - Mounts: []api.Mount{ + Mounts: []*api.Mount{ { Type: api.MountTypeCluster, Source: volumes[i].Spec.Annotations.Name, @@ -664,10 +676,11 @@ var _ = Describe("volumeSet", func() { for _, v := range freshVolumes { switch v.ID { case volumes[0].ID: - Expect(v.PublishStatus).To(ConsistOf(&api.VolumePublishStatus{ + Expect(v.PublishStatus).To(HaveLen(1)) + Expect(proto.Equal(v.PublishStatus[0], &api.VolumePublishStatus{ State: api.VolumePublishStatus_PENDING_NODE_UNPUBLISH, NodeID: nodes[0].ID, - })) + })).To(BeTrue()) case allVolume.ID: for _, status := range v.PublishStatus { if status.NodeID == nodes[0].ID { diff --git a/manager/state/raft/membership/cluster.go b/manager/state/raft/membership/cluster.go index 8a7057b5a9..23adb83b98 100644 --- a/manager/state/raft/membership/cluster.go +++ b/manager/state/raft/membership/cluster.go @@ -4,7 +4,7 @@ import ( "errors" "sync" - "github.com/gogo/protobuf/proto" + "google.golang.org/protobuf/proto" "github.com/moby/swarmkit/v2/api" "github.com/moby/swarmkit/v2/watch" "go.etcd.io/raft/v3/raftpb" diff --git a/manager/state/raft/membership/cluster_test.go b/manager/state/raft/membership/cluster_test.go index 312dbc5106..65e7c251d1 100644 --- a/manager/state/raft/membership/cluster_test.go +++ b/manager/state/raft/membership/cluster_test.go @@ -18,6 +18,7 @@ import ( "github.com/moby/swarmkit/v2/manager/state/raft/membership" raftutils "github.com/moby/swarmkit/v2/manager/state/raft/testutils" "github.com/moby/swarmkit/v2/testutils" + "google.golang.org/protobuf/proto" "github.com/stretchr/testify/assert" "go.etcd.io/raft/v3/raftpb" ) @@ -195,22 +196,22 @@ func TestValidateConfigurationChange(t *testing.T) { cls := newTestCluster(members, removed) m := &api.RaftMember{RaftID: 1} - existingMember, err := m.Marshal() + existingMember, err := proto.Marshal(m) assert.NoError(t, err) assert.NotNil(t, existingMember) m = &api.RaftMember{RaftID: 7} - newMember, err := m.Marshal() + newMember, err := proto.Marshal(m) assert.NoError(t, err) assert.NotNil(t, newMember) m = &api.RaftMember{RaftID: 4} - removedMember, err := m.Marshal() + removedMember, err := proto.Marshal(m) assert.NoError(t, err) assert.NotNil(t, removedMember) n := &api.Node{} - node, err := n.Marshal() + node, err := proto.Marshal(n) assert.NoError(t, err) assert.NotNil(t, node) diff --git a/manager/state/raft/raft.go b/manager/state/raft/raft.go index 6dfac5f2c2..2a3659b3c8 100644 --- a/manager/state/raft/raft.go +++ b/manager/state/raft/raft.go @@ -16,7 +16,6 @@ import ( "code.cloudfoundry.org/clock" "github.com/docker/go-events" "github.com/docker/go-metrics" - "github.com/gogo/protobuf/proto" "github.com/moby/swarmkit/v2/api" "github.com/moby/swarmkit/v2/ca" "github.com/moby/swarmkit/v2/log" @@ -38,6 +37,7 @@ import ( "google.golang.org/grpc/credentials" "google.golang.org/grpc/peer" "google.golang.org/grpc/status" + "google.golang.org/protobuf/proto" ) var ( @@ -828,8 +828,8 @@ func (n *Node) getCurrentRaftConfig() api.RaftConfig { raftConfig := DefaultRaftConfig() n.memoryStore.View(func(readTx store.ReadTx) { clusters, err := store.FindClusters(readTx, store.ByName(store.DefaultClusterName)) - if err == nil && len(clusters) == 1 { - raftConfig = clusters[0].Spec.Raft + if err == nil && len(clusters) == 1 && clusters[0].Spec.GetRaft() != nil { + raftConfig = *clusters[0].Spec.Raft } }) return raftConfig @@ -1077,7 +1077,7 @@ func (n *Node) addMember(ctx context.Context, addr string, raftID uint64, nodeID Addr: addr, } - meta, err := node.Marshal() + meta, err := proto.Marshal(&node) if err != nil { return err } @@ -1104,7 +1104,7 @@ func (n *Node) updateNodeBlocking(ctx context.Context, id uint64, addr string) e Addr: addr, } - meta, err := node.Marshal() + meta, err := proto.Marshal(&node) if err != nil { return err } @@ -1593,7 +1593,7 @@ func (n *Node) ProposeValue(ctx context.Context, storeAction []api.StoreAction, defer metrics.StartTimer(proposeLatencyTimer)() ctx, cancel := n.WithContext(ctx) defer cancel() - _, err := n.processInternalRaftRequest(ctx, &api.InternalRaftRequest{Action: storeAction}, cb) + _, err := n.processInternalRaftRequest(ctx, &api.InternalRaftRequest{Action: refStoreActions(storeAction)}, cb) return err } @@ -1650,7 +1650,7 @@ func (n *Node) ChangesBetween(from, to api.Version) ([]state.Change, error) { } if r.Action != nil { - changes = append(changes, state.Change{StoreActions: r.Action, Version: api.Version{Index: pb.Index}}) + changes = append(changes, state.Change{StoreActions: derefStoreActions(r.Action), Version: api.Version{Index: pb.Index}}) } } @@ -1690,7 +1690,7 @@ func (n *Node) GetMemberlist() map[uint64]*api.RaftMember { RaftID: member.RaftID, NodeID: member.NodeID, Addr: member.Addr, - Status: api.RaftMemberStatus{ + Status: &api.RaftMemberStatus{ Leader: leader, Reachability: reachability, }, @@ -1807,7 +1807,7 @@ func (n *Node) processInternalRaftRequest(ctx context.Context, r *api.InternalRa return nil, ErrLostLeadership } - data, err := r.Marshal() + data, err := proto.Marshal(r) if err != nil { n.wait.cancel(r.ID) return nil, err @@ -1929,7 +1929,7 @@ func (n *Node) processEntry(ctx context.Context, entry raftpb.Entry) error { // TODO(anshul) This call is likely redundant, remove after consideration. n.wait.cancelAll() - err := n.memoryStore.ApplyStoreActions(r.Action) + err := n.memoryStore.ApplyStoreActions(derefStoreActions(r.Action)) if err != nil { log.G(ctx).WithError(err).Error("failed to apply actions from raft") } @@ -1943,7 +1943,7 @@ func (n *Node) processConfChange(ctx context.Context, entry raftpb.Entry) { cc raftpb.ConfChange ) - if err := proto.Unmarshal(entry.Data, &cc); err != nil { + if err := cc.Unmarshal(entry.Data); err != nil { n.wait.trigger(cc.ID, err) } @@ -2070,7 +2070,7 @@ func createConfigChangeEnts(ids []uint64, self uint64, term, index uint64) []raf } if !found { node := &api.RaftMember{RaftID: self} - meta, err := node.Marshal() + meta, err := proto.Marshal(node) if err != nil { log.L.WithError(err).Panic("marshal member should never fail") } @@ -2156,3 +2156,23 @@ func stackDump() { buf = buf[:stackSize] _, _ = os.Stderr.Write(buf) } + +// derefStoreActions converts []*api.StoreAction to []api.StoreAction. +func derefStoreActions(actions []*api.StoreAction) []api.StoreAction { + result := make([]api.StoreAction, len(actions)) + for i, a := range actions { + if a != nil { + result[i] = *a + } + } + return result +} + +// refStoreActions converts []api.StoreAction to []*api.StoreAction. +func refStoreActions(actions []api.StoreAction) []*api.StoreAction { + result := make([]*api.StoreAction, len(actions)) + for i := range actions { + result[i] = &actions[i] + } + return result +} diff --git a/manager/state/raft/raft_test.go b/manager/state/raft/raft_test.go index feb965469e..358db2908e 100644 --- a/manager/state/raft/raft_test.go +++ b/manager/state/raft/raft_test.go @@ -8,7 +8,6 @@ import ( "math/rand" "net" "os" - "reflect" "strconv" "testing" "time" @@ -18,6 +17,7 @@ import ( "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" "google.golang.org/grpc/status" + "google.golang.org/protobuf/proto" "code.cloudfoundry.org/clock/fakeclock" "github.com/moby/swarmkit/v2/api" @@ -487,6 +487,51 @@ func TestRaftNewNodeGetsData(t *testing.T) { } } + +// changesEqual compares two slices of state.Change using proto.Equal for +// proto message fields, since reflect.DeepEqual fails for proto messages. +// Note: Meta is stripped from store objects before comparison because it is +// set by ApplyStoreActions AFTER the raft log entry is written; ChangesBetween +// returns the log entry content which does not include Meta. +func changesEqual(t *testing.T, expected, actual []state.Change) bool { + t.Helper() + if len(expected) != len(actual) { + return false + } + for i := range expected { + if expected[i].Version.Index != actual[i].Version.Index { + t.Errorf("change[%d] version mismatch: expected %d, got %d", i, expected[i].Version.Index, actual[i].Version.Index) + return false + } + if len(expected[i].StoreActions) != len(actual[i].StoreActions) { + t.Errorf("change[%d] StoreActions length mismatch: expected %d, got %d", i, len(expected[i].StoreActions), len(actual[i].StoreActions)) + return false + } + for j := range expected[i].StoreActions { + e := expected[i].StoreActions[j].GetNode() + a := actual[i].StoreActions[j].GetNode() + if e == nil || a == nil { + if e != nil || a != nil { + t.Errorf("change[%d] StoreAction[%d] node nil mismatch", i, j) + return false + } + continue + } + // Compare node IDs + if e.ID != a.ID { + t.Errorf("change[%d] StoreAction[%d] node ID mismatch: %q != %q", i, j, e.ID, a.ID) + return false + } + // Compare spec + if !proto.Equal(e.GetSpec(), a.GetSpec()) { + t.Errorf("change[%d] StoreAction[%d] node spec mismatch", i, j) + return false + } + } + } + return true +} + func TestChangesBetween(t *testing.T) { t.Parallel() @@ -538,17 +583,17 @@ func TestChangesBetween(t *testing.T) { changes, err = node.ChangesBetween(*startVersion, versionAdd(startVersion, 1)) assert.NoError(t, err) require.Len(t, changes, 1) - assert.Equal(t, expectedChanges(*startVersion, values[:1]), changes) + assert.True(t, changesEqual(t, expectedChanges(*startVersion, values[:1]), changes)) changes, err = node.ChangesBetween(*startVersion, versionAdd(startVersion, 10)) assert.NoError(t, err) require.Len(t, changes, 10) - assert.Equal(t, expectedChanges(*startVersion, values), changes) + assert.True(t, changesEqual(t, expectedChanges(*startVersion, values), changes)) changes, err = node.ChangesBetween(versionAdd(startVersion, 2), versionAdd(startVersion, 6)) assert.NoError(t, err) require.Len(t, changes, 4) - assert.Equal(t, expectedChanges(versionAdd(startVersion, 2), values[2:6]), changes) + assert.True(t, changesEqual(t, expectedChanges(versionAdd(startVersion, 2), values[2:6]), changes)) // Unsatisfiable requests _, err = node.ChangesBetween(versionAdd(startVersion, -1), versionAdd(startVersion, 11)) @@ -645,7 +690,7 @@ func testRaftRestartCluster(t *testing.T, stagger bool) { for i, nodeID := range []string{"id1", "id2"} { n := store.GetNode(tx, nodeID) - if !reflect.DeepEqual(n, values[i]) { + if !proto.Equal(n, values[i]) { err = fmt.Errorf("node %s did not match expected value", nodeID) return } @@ -758,7 +803,7 @@ func TestRaftForceNewCluster(t *testing.T) { for i, nodeID := range []string{"id1", "id2"} { n := store.GetNode(tx, nodeID) - if !reflect.DeepEqual(n, values[i]) { + if !proto.Equal(n, values[i]) { err = fmt.Errorf("node %s did not match expected value", nodeID) return } @@ -927,7 +972,7 @@ func TestStress(t *testing.T) { // since cluster is stable, final value must be in the raft store find := false for _, value := range values { - if reflect.DeepEqual(value, val) { + if proto.Equal(value, val) { find = true break } @@ -979,7 +1024,7 @@ func TestStreamRaftMessage(t *testing.T) { assert.NoError(t, err) _, err = stream.CloseAndRecv() - errStr := fmt.Sprintf("grpc: received message larger than max (%d vs. %d)", raftMsg.Size(), transport.GRPCMaxMsgSize) + errStr := fmt.Sprintf("grpc: received message larger than max (%d vs. %d)", proto.Size(raftMsg), transport.GRPCMaxMsgSize) s, _ := status.FromError(err) assert.Equal(t, codes.ResourceExhausted, s.Code()) assert.Equal(t, errStr, s.Message()) diff --git a/manager/state/raft/storage.go b/manager/state/raft/storage.go index a89e481ab5..69bd3526ea 100644 --- a/manager/state/raft/storage.go +++ b/manager/state/raft/storage.go @@ -14,6 +14,7 @@ import ( "github.com/pkg/errors" "go.etcd.io/raft/v3" "go.etcd.io/raft/v3/raftpb" + "google.golang.org/protobuf/proto" ) var ( @@ -68,7 +69,7 @@ func (n *Node) loadAndStart(ctx context.Context, forceNewCluster bool) error { // Read logs to fully catch up store var raftNode api.RaftMember - if err := raftNode.Unmarshal(waldata.Metadata); err != nil { + if err := proto.Unmarshal(waldata.Metadata, &raftNode); err != nil { return errors.Wrap(err, "failed to unmarshal WAL metadata") } n.Config.ID = raftNode.RaftID @@ -172,7 +173,7 @@ func (n *Node) newRaftLogs(nodeID string) (raft.Peer, error) { NodeID: nodeID, Addr: n.opts.Addr, } - metadata, err := raftNode.Marshal() + metadata, err := proto.Marshal(raftNode) if err != nil { return raft.Peer{}, errors.Wrap(err, "error marshalling raft node") } @@ -184,7 +185,7 @@ func (n *Node) newRaftLogs(nodeID string) (raft.Peer, error) { } func (n *Node) triggerSnapshot(ctx context.Context, raftConfig api.RaftConfig) { - snapshot := api.Snapshot{Version: api.Snapshot_V0} + snapshot := api.Snapshot{Version: api.Snapshot_V0, Membership: &api.ClusterSnapshot{}} for _, member := range n.cluster.Members() { snapshot.Membership.Members = append(snapshot.Membership.Members, &api.RaftMember{ @@ -212,14 +213,14 @@ func (n *Node) triggerSnapshot(ctx context.Context, raftConfig api.RaftConfig) { var storeSnapshot *api.StoreSnapshot storeSnapshot, err = n.memoryStore.Save(tx) - snapshot.Store = *storeSnapshot + snapshot.Store = storeSnapshot }) if err != nil { log.G(ctx).WithError(err).Error("failed to read snapshot from store") return } - d, err := snapshot.Marshal() + d, err := proto.Marshal(&snapshot) if err != nil { log.G(ctx).WithError(err).Error("failed to marshal snapshot") return @@ -250,16 +251,28 @@ func (n *Node) triggerSnapshot(ctx context.Context, raftConfig api.RaftConfig) { func (n *Node) clusterSnapshot(data []byte) (api.ClusterSnapshot, error) { var snapshot api.Snapshot - if err := snapshot.Unmarshal(data); err != nil { - return snapshot.Membership, err + if err := proto.Unmarshal(data, &snapshot); err != nil { + if snapshot.Membership != nil { + return *snapshot.Membership, err + } + return api.ClusterSnapshot{}, err } if snapshot.Version != api.Snapshot_V0 { - return snapshot.Membership, fmt.Errorf("unrecognized snapshot version %d", snapshot.Version) + if snapshot.Membership != nil { + return *snapshot.Membership, fmt.Errorf("unrecognized snapshot version %d", snapshot.Version) + } + return api.ClusterSnapshot{}, fmt.Errorf("unrecognized snapshot version %d", snapshot.Version) } - if err := n.memoryStore.Restore(&snapshot.Store); err != nil { - return snapshot.Membership, err + if err := n.memoryStore.Restore(snapshot.Store); err != nil { + if snapshot.Membership != nil { + return *snapshot.Membership, err + } + return api.ClusterSnapshot{}, err } - return snapshot.Membership, nil + if snapshot.Membership != nil { + return *snapshot.Membership, nil + } + return api.ClusterSnapshot{}, nil } diff --git a/manager/state/raft/storage/snapwrap_test.go b/manager/state/raft/storage/snapwrap_test.go index b53f08876c..9d0dd367de 100644 --- a/manager/state/raft/storage/snapwrap_test.go +++ b/manager/state/raft/storage/snapwrap_test.go @@ -10,6 +10,7 @@ import ( "github.com/moby/swarmkit/v2/manager/encryption" "github.com/stretchr/testify/require" "go.etcd.io/raft/v3/raftpb" + "google.golang.org/protobuf/proto" ) var _ SnapFactory = snapCryptor{} @@ -41,10 +42,10 @@ func getSnapshotFile(t *testing.T, tempdir string) string { func TestSnapshotterLoadNotEncryptedSnapshot(t *testing.T) { tempdir := t.TempDir() ogSnap := OriginalSnap.New(tempdir) - r := api.MaybeEncryptedRecord{ + r := &api.MaybeEncryptedRecord{ Data: fakeSnapshotData.Data, } - data, err := r.Marshal() + data, err := proto.Marshal(r) require.NoError(t, err) emptyEncryptionFakeData := fakeSnapshotData @@ -64,11 +65,11 @@ func TestSnapshotterLoadNotEncryptedSnapshot(t *testing.T) { func TestSnapshotterLoadNoDecrypter(t *testing.T) { tempdir := t.TempDir() ogSnap := OriginalSnap.New(tempdir) - r := api.MaybeEncryptedRecord{ + r := &api.MaybeEncryptedRecord{ Data: fakeSnapshotData.Data, Algorithm: meowCrypter{}.Algorithm(), } - data, err := r.Marshal() + data, err := proto.Marshal(r) require.NoError(t, err) emptyEncryptionFakeData := fakeSnapshotData @@ -89,11 +90,11 @@ func TestSnapshotterLoadDecryptingFail(t *testing.T) { crypter := &meowCrypter{} ogSnap := OriginalSnap.New(tempdir) - r := api.MaybeEncryptedRecord{ + r := &api.MaybeEncryptedRecord{ Data: fakeSnapshotData.Data, Algorithm: crypter.Algorithm(), } - data, err := r.Marshal() + data, err := proto.Marshal(r) require.NoError(t, err) emptyEncryptionFakeData := fakeSnapshotData @@ -121,8 +122,8 @@ func TestSnapshotterSavesSnapshotWithEncryption(t *testing.T) { readSnap, err := ogSnap.Load() require.NoError(t, err) - r := api.MaybeEncryptedRecord{} - require.NoError(t, r.Unmarshal(readSnap.Data)) + r := &api.MaybeEncryptedRecord{} + require.NoError(t, proto.Unmarshal(readSnap.Data, r)) require.NotEqual(t, fakeSnapshotData.Data, r.Data) require.Equal(t, fakeSnapshotData.Metadata, readSnap.Metadata) } diff --git a/manager/state/raft/storage/walwrap_test.go b/manager/state/raft/storage/walwrap_test.go index 215279070b..b0bbd1d5bd 100644 --- a/manager/state/raft/storage/walwrap_test.go +++ b/manager/state/raft/storage/walwrap_test.go @@ -14,6 +14,7 @@ import ( "github.com/stretchr/testify/require" "go.etcd.io/etcd/server/v3/storage/wal/walpb" "go.etcd.io/raft/v3/raftpb" + "google.golang.org/protobuf/proto" ) var _ WALFactory = walCryptor{} @@ -63,8 +64,8 @@ func TestReadAllWrappedNoEncryption(t *testing.T) { metadata, entries, snapshot := makeWALData(1, 1, &confState) wrappedEntries := make([]raftpb.Entry, len(entries)) for i, entry := range entries { - r := api.MaybeEncryptedRecord{Data: entry.Data} - data, err := r.Marshal() + r := &api.MaybeEncryptedRecord{Data: entry.Data} + data, err := proto.Marshal(r) require.NoError(t, err) entry.Data = data wrappedEntries[i] = entry @@ -89,8 +90,8 @@ func TestReadAllWrappedNoEncryption(t *testing.T) { func TestReadAllNoSupportedDecrypter(t *testing.T) { metadata, entries, snapshot := makeWALData(1, 1, &confState) for i, entry := range entries { - r := api.MaybeEncryptedRecord{Data: entry.Data, Algorithm: api.MaybeEncryptedRecord_Algorithm(-3)} - data, err := r.Marshal() + r := &api.MaybeEncryptedRecord{Data: entry.Data, Algorithm: api.MaybeEncryptedRecord_Algorithm(-3)} + data, err := proto.Marshal(r) require.NoError(t, err) entries[i].Data = data } @@ -115,8 +116,8 @@ func TestReadAllEntryIncorrectlyEncrypted(t *testing.T) { // metadata is correctly encryptd, but entries are not meow-encryptd for i, entry := range entries { - r := api.MaybeEncryptedRecord{Data: entry.Data, Algorithm: crypter.Algorithm()} - data, err := r.Marshal() + r := &api.MaybeEncryptedRecord{Data: entry.Data, Algorithm: crypter.Algorithm()} + data, err := proto.Marshal(r) require.NoError(t, err) entries[i].Data = data } @@ -151,8 +152,8 @@ func TestSave(t *testing.T) { require.Equal(t, metadata, meta) require.Equal(t, state, state) for _, ent := range ents { - var encrypted api.MaybeEncryptedRecord - require.NoError(t, encrypted.Unmarshal(ent.Data)) + encrypted := &api.MaybeEncryptedRecord{} + require.NoError(t, proto.Unmarshal(ent.Data, encrypted)) require.Equal(t, crypter.Algorithm(), encrypted.Algorithm) require.True(t, bytes.HasSuffix(encrypted.Data, []byte("🐱"))) diff --git a/manager/state/raft/storage_test.go b/manager/state/raft/storage_test.go index cb5c731a36..3773ac723b 100644 --- a/manager/state/raft/storage_test.go +++ b/manager/state/raft/storage_test.go @@ -483,8 +483,8 @@ func proposeLargeValue(t *testing.T, raftNode *raftutils.TestNode, time time.Dur } node := &api.Node{ ID: nodeIDStr, - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: nodeIDStr, Labels: map[string]string{ "largestring": string(a), diff --git a/manager/state/raft/swarm-root-ca.crt b/manager/state/raft/swarm-root-ca.crt new file mode 100644 index 0000000000..d394fbc720 --- /dev/null +++ b/manager/state/raft/swarm-root-ca.crt @@ -0,0 +1,10 @@ +-----BEGIN CERTIFICATE----- +MIIBdTCCARqgAwIBAgIUKM6X6yOsiueZVKJtV/TsTI8nHvUwCgYIKoZIzj0EAwIw +GDEWMBQGA1UEAxMNc3dhcm0tdGVzdC1DQTAeFw0yNjA2MDUxOTExMDBaFw00NjA1 +MzExOTExMDBaMBgxFjAUBgNVBAMTDXN3YXJtLXRlc3QtQ0EwWTATBgcqhkjOPQIB +BggqhkjOPQMBBwNCAASUiDoavd4/PkXx9/cQeccx3sL0dmOt4puA2oJsWlTHCROF +V9foyLiblHTibj8RFAfqSjB0w/fajCDLB1mxXaOmo0IwQDAOBgNVHQ8BAf8EBAMC +AQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQURddGrOEbx0j6YnsHDkGJ0+rD +2UAwCgYIKoZIzj0EAwIDSQAwRgIhAKAk4LfMZuZvD9aE79pZZc2UsFt1GIl7q62z +nAbW856cAiEAzbvJMugoZMzjjfUHgLdytpD0ohsPdud9G3Qmeza8w3k= +-----END CERTIFICATE----- diff --git a/manager/state/raft/testutils/testutils.go b/manager/state/raft/testutils/testutils.go index e94732bb35..a6d4400524 100644 --- a/manager/state/raft/testutils/testutils.go +++ b/manager/state/raft/testutils/testutils.go @@ -4,11 +4,12 @@ import ( "context" "net" "os" - "reflect" "sync" "testing" "time" + "google.golang.org/protobuf/proto" + "code.cloudfoundry.org/clock/fakeclock" "github.com/docker/go-events" "github.com/moby/swarmkit/v2/api" @@ -371,11 +372,11 @@ func NewInitNode(t *testing.T, tc *cautils.TestCA, raftConfig *api.RaftConfig, o assert.NoError(t, n.MemoryStore().Update(func(tx store.Tx) error { return store.CreateCluster(tx, &api.Cluster{ ID: identity.NewID(), - Spec: api.ClusterSpec{ - Annotations: api.Annotations{ + Spec: &api.ClusterSpec{ + Annotations: &api.Annotations{ Name: store.DefaultClusterName, }, - Raft: *raftConfig, + Raft: raftConfig, }, }) })) @@ -543,8 +544,8 @@ func ProposeValue(t *testing.T, raftNode *TestNode, time time.Duration, nodeID . } node := &api.Node{ ID: nodeIDStr, - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: nodeIDStr, }, }, @@ -587,7 +588,7 @@ func CheckValue(t *testing.T, clockSource *fakeclock.FakeClock, raftNode *TestNo err = errors.Errorf("expected 1 node, got %d nodes", len(allNodes)) return } - if !reflect.DeepEqual(allNodes[0], createdNode) { + if !proto.Equal(allNodes[0], createdNode) { err = errors.New("node did not match expected value") } }) @@ -634,7 +635,7 @@ func CheckValuesOnNodes(t *testing.T, clockSource *fakeclock.FakeClock, checkNod err = errors.Errorf("node %s not found on %d (iteration %d)", id, checkNodeID, iteration) return } - if !reflect.DeepEqual(values[i], n) { + if !proto.Equal(values[i], n) { err = errors.Errorf("node %s did not match expected value on %d (iteration %d)", id, checkNodeID, iteration) return } diff --git a/manager/state/raft/transport/peer.go b/manager/state/raft/transport/peer.go index 7b5efe1565..df92a077fd 100644 --- a/manager/state/raft/transport/peer.go +++ b/manager/state/raft/transport/peer.go @@ -8,6 +8,7 @@ import ( "google.golang.org/grpc" "google.golang.org/grpc/codes" + "google.golang.org/protobuf/proto" "github.com/moby/swarmkit/v2/api" "github.com/moby/swarmkit/v2/log" @@ -140,7 +141,7 @@ func (p *peer) resolveAddr(ctx context.Context, id uint64) (string, error) { // Returns the raft message struct size (not including the payload size) for the given raftpb.Message. // The payload is typically the snapshot or append entries. func raftMessageStructSize(m *raftpb.Message) int { - return (&api.ProcessRaftMessageRequest{Message: m}).Size() - len(m.Snapshot.Data) + return int(proto.Size(&api.ProcessRaftMessageRequest{Message: m})) - len(m.Snapshot.Data) } // Returns the max allowable payload based on MaxRaftMsgSize and @@ -196,7 +197,7 @@ func splitSnapshotData(_ context.Context, m *raftpb.Message) []api.StreamRaftMes // and size larger than MaxRaftMsgSize. func needsSplitting(m *raftpb.Message) bool { raftMsg := api.ProcessRaftMessageRequest{Message: m} - return m.Type == raftpb.MsgSnap && raftMsg.Size() > GRPCMaxMsgSize + return m.Type == raftpb.MsgSnap && int(proto.Size(&raftMsg)) > GRPCMaxMsgSize } func (p *peer) sendProcessMessage(ctx context.Context, m raftpb.Message) error { diff --git a/manager/state/store/clusters.go b/manager/state/store/clusters.go index 5b7234684a..4ef9d5e11e 100644 --- a/manager/state/store/clusters.go +++ b/manager/state/store/clusters.go @@ -71,7 +71,7 @@ func init() { // Returns ErrExist if the ID is already taken. func CreateCluster(tx Tx, c *api.Cluster) error { // Ensure the name is not already in use. - if tx.lookup(tableCluster, indexName, strings.ToLower(c.Spec.Annotations.Name)) != nil { + if tx.lookup(tableCluster, indexName, strings.ToLower(c.GetSpec().GetAnnotations().GetName())) != nil { return ErrNameConflict } @@ -82,7 +82,7 @@ func CreateCluster(tx Tx, c *api.Cluster) error { // Returns ErrNotExist if the cluster doesn't exist. func UpdateCluster(tx Tx, c *api.Cluster) error { // Ensure the name is either not in use or already used by this same Cluster. - if existing := tx.lookup(tableCluster, indexName, strings.ToLower(c.Spec.Annotations.Name)); existing != nil { + if existing := tx.lookup(tableCluster, indexName, strings.ToLower(c.GetSpec().GetAnnotations().GetName())); existing != nil { if existing.GetID() != c.ID { return ErrNameConflict } diff --git a/manager/state/store/configs.go b/manager/state/store/configs.go index 7c81835b1c..fae2aa6915 100644 --- a/manager/state/store/configs.go +++ b/manager/state/store/configs.go @@ -65,7 +65,7 @@ func init() { // Returns ErrExist if the ID is already taken. func CreateConfig(tx Tx, c *api.Config) error { // Ensure the name is not already in use. - if tx.lookup(tableConfig, indexName, strings.ToLower(c.Spec.Annotations.Name)) != nil { + if tx.lookup(tableConfig, indexName, strings.ToLower(c.GetSpec().GetAnnotations().GetName())) != nil { return ErrNameConflict } @@ -76,7 +76,7 @@ func CreateConfig(tx Tx, c *api.Config) error { // Returns ErrNotExist if the config doesn't exist. func UpdateConfig(tx Tx, c *api.Config) error { // Ensure the name is either not in use or already used by this same Config. - if existing := tx.lookup(tableConfig, indexName, strings.ToLower(c.Spec.Annotations.Name)); existing != nil { + if existing := tx.lookup(tableConfig, indexName, strings.ToLower(c.GetSpec().GetAnnotations().GetName())); existing != nil { if existing.GetID() != c.ID { return ErrNameConflict } diff --git a/manager/state/store/memory.go b/manager/state/store/memory.go index 7508fd6b53..57e5d33eae 100644 --- a/manager/state/store/memory.go +++ b/manager/state/store/memory.go @@ -13,8 +13,9 @@ import ( "github.com/docker/go-events" "github.com/docker/go-metrics" - gogotypes "github.com/gogo/protobuf/types" memdb "github.com/hashicorp/go-memdb" + "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/types/known/timestamppb" "github.com/moby/swarmkit/v2/api" "github.com/moby/swarmkit/v2/manager/state" "github.com/moby/swarmkit/v2/watch" @@ -251,11 +252,18 @@ type tx struct { // changelistBetweenVersions returns the changes after "from" up to and // including "to". -func (s *MemoryStore) changelistBetweenVersions(from, to api.Version) ([]api.Event, error) { +func (s *MemoryStore) changelistBetweenVersions(from, to *api.Version) ([]api.Event, error) { if s.proposer == nil { return nil, errors.New("store does not support versioning") } - changes, err := s.proposer.ChangesBetween(from, to) + var fromV, toV api.Version + if from != nil { + fromV = *from + } + if to != nil { + toV = *to + } + changes, err := s.proposer.ChangesBetween(fromV, toV) if err != nil { return nil, err } @@ -430,7 +438,7 @@ func (batch *Batch) Update(cb func(Tx) error) error { if err != nil { return err } - batch.transactionSizeEstimate += sa.Size() + batch.transactionSizeEstimate += int(proto.Size(&sa)) batch.changelistLen++ } @@ -590,7 +598,11 @@ func (tx *tx) create(table string, o api.StoreObject) error { cp := o.CopyStoreObject() meta := cp.GetMeta() - if err := touchMeta(&meta, tx.curVersion); err != nil { + if meta == nil { + meta = &api.Meta{} + cp.SetMeta(meta) + } + if err := touchMeta(meta, tx.curVersion); err != nil { return err } cp.SetMeta(meta) @@ -612,15 +624,19 @@ func (tx *tx) update(table string, o api.StoreObject) error { } meta := o.GetMeta() + if meta == nil { + meta = &api.Meta{} + } if tx.curVersion != nil { - if oldN.GetMeta().Version != meta.Version { + oldMeta := oldN.GetMeta() + if oldMeta.GetVersion().GetIndex() != meta.GetVersion().GetIndex() { return ErrSequenceConflict } } cp := o.CopyStoreObject() - if err := touchMeta(&meta, tx.curVersion); err != nil { + if err := touchMeta(meta, tx.curVersion); err != nil { return err } cp.SetMeta(meta) @@ -954,7 +970,7 @@ func WatchFrom(store *MemoryStore, version *api.Version, specifiers ...api.Event return nil, nil, errors.New("could not get current version from store") } - changelist, err := store.changelistBetweenVersions(*version, *curVersion) + changelist, err := store.changelistBetweenVersions(version, curVersion) if err != nil { cancelWatch() return nil, nil, err @@ -1002,12 +1018,9 @@ func touchMeta(meta *api.Meta, version *api.Version) error { return nil } - now, err := gogotypes.TimestampProto(time.Now()) - if err != nil { - return err - } + now := timestamppb.Now() - meta.Version = *version + meta.Version = version // Updated CreatedAt if not defined if meta.CreatedAt == nil { diff --git a/manager/state/store/memory_test.go b/manager/state/store/memory_test.go index 8635bd8161..3b1e297018 100644 --- a/manager/state/store/memory_test.go +++ b/manager/state/store/memory_test.go @@ -20,24 +20,24 @@ var ( clusterSet = []*api.Cluster{ { ID: "id1", - Spec: api.ClusterSpec{ - Annotations: api.Annotations{ + Spec: &api.ClusterSpec{ + Annotations: &api.Annotations{ Name: "name1", }, }, }, { ID: "id2", - Spec: api.ClusterSpec{ - Annotations: api.Annotations{ + Spec: &api.ClusterSpec{ + Annotations: &api.Annotations{ Name: "name2", }, }, }, { ID: "id3", - Spec: api.ClusterSpec{ - Annotations: api.Annotations{ + Spec: &api.ClusterSpec{ + Annotations: &api.Annotations{ Name: "name3", }, }, @@ -46,8 +46,8 @@ var ( altClusterSet = []*api.Cluster{ { ID: "alt-id1", - Spec: api.ClusterSpec{ - Annotations: api.Annotations{ + Spec: &api.ClusterSpec{ + Annotations: &api.Annotations{ Name: "alt-name1", }, }, @@ -57,7 +57,7 @@ var ( nodeSet = []*api.Node{ { ID: "id1", - Spec: api.NodeSpec{ + Spec: &api.NodeSpec{ Membership: api.NodeMembershipPending, }, Description: &api.NodeDescription{ @@ -67,7 +67,7 @@ var ( }, { ID: "id2", - Spec: api.NodeSpec{ + Spec: &api.NodeSpec{ Membership: api.NodeMembershipAccepted, }, Description: &api.NodeDescription{ @@ -77,7 +77,7 @@ var ( }, { ID: "id3", - Spec: api.NodeSpec{ + Spec: &api.NodeSpec{ Membership: api.NodeMembershipAccepted, }, Description: &api.NodeDescription{ @@ -90,7 +90,7 @@ var ( altNodeSet = []*api.Node{ { ID: "alt-id1", - Spec: api.NodeSpec{ + Spec: &api.NodeSpec{ Membership: api.NodeMembershipPending, }, Description: &api.NodeDescription{ @@ -103,16 +103,16 @@ var ( serviceSet = []*api.Service{ { ID: "id1", - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "name1", }, }, }, { ID: "id2", - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "name2", }, Mode: &api.ServiceSpec_Global{ @@ -122,8 +122,8 @@ var ( }, { ID: "id3", - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "name3", }, }, @@ -132,8 +132,8 @@ var ( altServiceSet = []*api.Service{ { ID: "alt-id1", - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "alt-name1", }, }, @@ -143,10 +143,10 @@ var ( taskSet = []*api.Task{ { ID: "id1", - Annotations: api.Annotations{ + Annotations: &api.Annotations{ Name: "name1", }, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "name1", }, DesiredState: api.TaskStateRunning, @@ -154,10 +154,10 @@ var ( }, { ID: "id2", - Annotations: api.Annotations{ + Annotations: &api.Annotations{ Name: "name2.1", }, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "name2", }, DesiredState: api.TaskStateRunning, @@ -165,10 +165,10 @@ var ( }, { ID: "id3", - Annotations: api.Annotations{ + Annotations: &api.Annotations{ Name: "name2.2", }, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "name2", }, DesiredState: api.TaskStateShutdown, @@ -177,10 +177,10 @@ var ( altTaskSet = []*api.Task{ { ID: "alt-id1", - Annotations: api.Annotations{ + Annotations: &api.Annotations{ Name: "alt-name1", }, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "alt-name1", }, DesiredState: api.TaskStateRunning, @@ -191,24 +191,24 @@ var ( networkSet = []*api.Network{ { ID: "id1", - Spec: api.NetworkSpec{ - Annotations: api.Annotations{ + Spec: &api.NetworkSpec{ + Annotations: &api.Annotations{ Name: "name1", }, }, }, { ID: "id2", - Spec: api.NetworkSpec{ - Annotations: api.Annotations{ + Spec: &api.NetworkSpec{ + Annotations: &api.Annotations{ Name: "name2", }, }, }, { ID: "id3", - Spec: api.NetworkSpec{ - Annotations: api.Annotations{ + Spec: &api.NetworkSpec{ + Annotations: &api.Annotations{ Name: "name3", }, }, @@ -217,8 +217,8 @@ var ( altNetworkSet = []*api.Network{ { ID: "alt-id1", - Spec: api.NetworkSpec{ - Annotations: api.Annotations{ + Spec: &api.NetworkSpec{ + Annotations: &api.Annotations{ Name: "alt-name1", }, }, @@ -228,24 +228,24 @@ var ( configSet = []*api.Config{ { ID: "id1", - Spec: api.ConfigSpec{ - Annotations: api.Annotations{ + Spec: &api.ConfigSpec{ + Annotations: &api.Annotations{ Name: "name1", }, }, }, { ID: "id2", - Spec: api.ConfigSpec{ - Annotations: api.Annotations{ + Spec: &api.ConfigSpec{ + Annotations: &api.Annotations{ Name: "name2", }, }, }, { ID: "id3", - Spec: api.ConfigSpec{ - Annotations: api.Annotations{ + Spec: &api.ConfigSpec{ + Annotations: &api.Annotations{ Name: "name3", }, }, @@ -254,8 +254,8 @@ var ( altConfigSet = []*api.Config{ { ID: "alt-id1", - Spec: api.ConfigSpec{ - Annotations: api.Annotations{ + Spec: &api.ConfigSpec{ + Annotations: &api.Annotations{ Name: "alt-name1", }, }, @@ -265,24 +265,24 @@ var ( secretSet = []*api.Secret{ { ID: "id1", - Spec: api.SecretSpec{ - Annotations: api.Annotations{ + Spec: &api.SecretSpec{ + Annotations: &api.Annotations{ Name: "name1", }, }, }, { ID: "id2", - Spec: api.SecretSpec{ - Annotations: api.Annotations{ + Spec: &api.SecretSpec{ + Annotations: &api.Annotations{ Name: "name2", }, }, }, { ID: "id3", - Spec: api.SecretSpec{ - Annotations: api.Annotations{ + Spec: &api.SecretSpec{ + Annotations: &api.Annotations{ Name: "name3", }, }, @@ -291,8 +291,8 @@ var ( altSecretSet = []*api.Secret{ { ID: "alt-id1", - Spec: api.SecretSpec{ - Annotations: api.Annotations{ + Spec: &api.SecretSpec{ + Annotations: &api.Annotations{ Name: "alt-name1", }, }, @@ -302,19 +302,19 @@ var ( extensionSet = []*api.Extension{ { ID: "id1", - Annotations: api.Annotations{ + Annotations: &api.Annotations{ Name: "name1", }, }, { ID: "id2", - Annotations: api.Annotations{ + Annotations: &api.Annotations{ Name: "name2", }, }, { ID: "id3", - Annotations: api.Annotations{ + Annotations: &api.Annotations{ Name: "name3", }, }, @@ -322,7 +322,7 @@ var ( altExtensionSet = []*api.Extension{ { ID: "alt-id1", - Annotations: api.Annotations{ + Annotations: &api.Annotations{ Name: "alt-name1", }, }, @@ -331,21 +331,21 @@ var ( resourceSet = []*api.Resource{ { ID: "id1", - Annotations: api.Annotations{ + Annotations: &api.Annotations{ Name: "name1", }, Kind: "name1", // corresponds to extension id1 }, { ID: "id2", - Annotations: api.Annotations{ + Annotations: &api.Annotations{ Name: "name2", }, Kind: "name2", // corresponds to extension id2 }, { ID: "id3", - Annotations: api.Annotations{ + Annotations: &api.Annotations{ Name: "name3", }, Kind: "name3", // corresponds to extension id3 @@ -354,7 +354,7 @@ var ( altResourceSet = []*api.Resource{ { ID: "alt-id1", - Annotations: api.Annotations{ + Annotations: &api.Annotations{ Name: "alt-name1", }, Kind: "alt-name1", // corresponds to extension alt-id1 @@ -363,8 +363,8 @@ var ( volumeSet = []*api.Volume{ { ID: "id1", - Spec: api.VolumeSpec{ - Annotations: api.Annotations{ + Spec: &api.VolumeSpec{ + Annotations: &api.Annotations{ Name: "name1", }, Driver: &api.Driver{ @@ -374,8 +374,8 @@ var ( }, { ID: "id2", - Spec: api.VolumeSpec{ - Annotations: api.Annotations{ + Spec: &api.VolumeSpec{ + Annotations: &api.Annotations{ Name: "name2", }, Driver: &api.Driver{ @@ -385,8 +385,8 @@ var ( }, { ID: "id3", - Spec: api.VolumeSpec{ - Annotations: api.Annotations{ + Spec: &api.VolumeSpec{ + Annotations: &api.Annotations{ Name: "name3", }, Driver: &api.Driver{ @@ -398,8 +398,8 @@ var ( altVolumeSet = []*api.Volume{ { ID: "alt-id1", - Spec: api.VolumeSpec{ - Annotations: api.Annotations{ + Spec: &api.VolumeSpec{ + Annotations: &api.Annotations{ Name: "alt-name1", }, Driver: &api.Driver{ @@ -583,8 +583,8 @@ func TestStoreService(t *testing.T) { assert.Equal(t, CreateService(tx, &api.Service{ ID: "id1", - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "name4", }, }, @@ -593,8 +593,8 @@ func TestStoreService(t *testing.T) { assert.Equal(t, CreateService(tx, &api.Service{ ID: "id4", - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "name1", }, }, @@ -603,8 +603,8 @@ func TestStoreService(t *testing.T) { assert.Equal(t, CreateService(tx, &api.Service{ ID: "id4", - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "NAME1", }, }, @@ -825,10 +825,10 @@ func TestStoreTask(t *testing.T) { // Update. update := &api.Task{ ID: "id3", - Annotations: api.Annotations{ + Annotations: &api.Annotations{ Name: "name3", }, - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "name3", }, } @@ -940,8 +940,8 @@ func TestStoreSnapshot(t *testing.T) { // Create node createNode := &api.Node{ ID: "id4", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "name4", }, }, @@ -963,8 +963,8 @@ func TestStoreSnapshot(t *testing.T) { // Update node updateNode := &api.Node{ ID: "id3", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "name3", }, }, @@ -1000,8 +1000,8 @@ func TestStoreSnapshot(t *testing.T) { // Create service createService := &api.Service{ ID: "id4", - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "name4", }, }, @@ -1054,7 +1054,7 @@ func TestStoreSnapshot(t *testing.T) { // Create task createTask := &api.Task{ ID: "id4", - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "name4", }, } @@ -1075,7 +1075,7 @@ func TestStoreSnapshot(t *testing.T) { // Update task updateTask := &api.Task{ ID: "id3", - ServiceAnnotations: api.Annotations{ + ServiceAnnotations: &api.Annotations{ Name: "name3", }, } @@ -1121,12 +1121,18 @@ func TestCustomIndex(t *testing.T) { for _, n := range allNodes { switch n.ID { case "id2": - n.Spec.Annotations.Indices = []api.IndexEntry{ + if n.Spec.Annotations == nil { + n.Spec.Annotations = &api.Annotations{} + } + n.Spec.Annotations.Indices = []*api.IndexEntry{ {Key: "nodesbefore", Val: "id1"}, } assert.NoError(t, UpdateNode(tx, n)) case "id3": - n.Spec.Annotations.Indices = []api.IndexEntry{ + if n.Spec.Annotations == nil { + n.Spec.Annotations = &api.Annotations{} + } + n.Spec.Annotations.Indices = []*api.IndexEntry{ {Key: "nodesbefore", Val: "id1"}, {Key: "nodesbefore", Val: "id2"}, } @@ -1218,8 +1224,8 @@ func TestVersion(t *testing.T) { // Create one node n := &api.Node{ ID: "id1", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "name1", }, }, @@ -1282,8 +1288,8 @@ func TestTimestamps(t *testing.T) { // Create one node n := &api.Node{ ID: "id1", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "name1", }, }, @@ -1333,8 +1339,8 @@ func TestBatch(t *testing.T) { for i := 0; i != 2*MaxChangesPerTransaction+5; i++ { n := &api.Node{ ID: "id" + strconv.Itoa(i), - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "name" + strconv.Itoa(i), }, }, @@ -1394,8 +1400,8 @@ func TestBatchFailure(t *testing.T) { for i := 0; ; i++ { n := &api.Node{ ID: "id" + strconv.Itoa(i), - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "name" + strconv.Itoa(i), }, }, @@ -1450,7 +1456,7 @@ func TestStoreSaveRestore(t *testing.T) { // updated on restore), as well as one extraneous object (which should be deleted // on restore). We also want to bump the version on all the ones that will be // updated just to make sure that restoration works. - version := api.Version{Index: 100} + version := &api.Version{Index: 100} c := clusterSet[0].Copy() c.Meta.Version = version n := nodeSet[0].Copy() @@ -1803,8 +1809,8 @@ func TestWatchFrom(t *testing.T) { err := s.Batch(func(batch *Batch) error { node := &api.Node{ ID: "id" + strconv.Itoa(i), - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "name" + strconv.Itoa(i), }, }, @@ -1812,8 +1818,8 @@ func TestWatchFrom(t *testing.T) { service := &api.Service{ ID: "id" + strconv.Itoa(i), - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "name" + strconv.Itoa(i), }, }, @@ -1893,8 +1899,8 @@ func TestWatchFrom(t *testing.T) { assert.NoError(t, s.Update(func(tx Tx) error { node := &api.Node{ ID: "newnode", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "newnode", }, }, @@ -1902,8 +1908,8 @@ func TestWatchFrom(t *testing.T) { service := &api.Service{ ID: "newservice", - Spec: api.ServiceSpec{ - Annotations: api.Annotations{ + Spec: &api.ServiceSpec{ + Annotations: &api.Annotations{ Name: "newservice", }, }, @@ -1955,8 +1961,8 @@ func TestWatchFrom(t *testing.T) { assert.NoError(t, s.Update(func(tx Tx) error { node := &api.Node{ ID: "newnode2", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "newnode2", }, }, @@ -2012,8 +2018,8 @@ func setupNodes(b *testing.B, n int) (*MemoryStore, []string) { for i := 0; i < n; i++ { _ = CreateNode(tx1, &api.Node{ ID: nodeIDs[i], - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: "name" + strconv.Itoa(i), }, }, @@ -2036,8 +2042,8 @@ func BenchmarkUpdateNode(b *testing.B) { for i := 0; i < b.N; i++ { _ = UpdateNode(tx1, &api.Node{ ID: nodeIDs[i%benchmarkNumNodes], - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: nodeIDs[i%benchmarkNumNodes] + "_" + strconv.Itoa(i), }, }, @@ -2054,8 +2060,8 @@ func BenchmarkUpdateNodeTransaction(b *testing.B) { _ = s.Update(func(tx1 Tx) error { _ = UpdateNode(tx1, &api.Node{ ID: nodeIDs[i%benchmarkNumNodes], - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: nodeIDs[i%benchmarkNumNodes] + "_" + strconv.Itoa(i), }, }, @@ -2122,8 +2128,8 @@ func BenchmarkNodeConcurrency(b *testing.B) { _ = s.Update(func(tx1 Tx) error { _ = UpdateNode(tx1, &api.Node{ ID: nodeIDs[i%benchmarkNumNodes], - Spec: api.NodeSpec{ - Annotations: api.Annotations{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ Name: nodeIDs[i%benchmarkNumNodes] + "_" + strconv.Itoa(c) + "_" + strconv.Itoa(i), }, }, diff --git a/manager/state/store/networks.go b/manager/state/store/networks.go index c9ef4a4ccb..b6fc6ae446 100644 --- a/manager/state/store/networks.go +++ b/manager/state/store/networks.go @@ -65,7 +65,7 @@ func init() { // Returns ErrExist if the ID is already taken. func CreateNetwork(tx Tx, n *api.Network) error { // Ensure the name is not already in use. - if tx.lookup(tableNetwork, indexName, strings.ToLower(n.Spec.Annotations.Name)) != nil { + if tx.lookup(tableNetwork, indexName, strings.ToLower(n.GetSpec().GetAnnotations().GetName())) != nil { return ErrNameConflict } @@ -76,7 +76,7 @@ func CreateNetwork(tx Tx, n *api.Network) error { // Returns ErrNotExist if the network doesn't exist. func UpdateNetwork(tx Tx, n *api.Network) error { // Ensure the name is either not in use or already used by this same Network. - if existing := tx.lookup(tableNetwork, indexName, strings.ToLower(n.Spec.Annotations.Name)); existing != nil { + if existing := tx.lookup(tableNetwork, indexName, strings.ToLower(n.GetSpec().GetAnnotations().GetName())); existing != nil { if existing.GetID() != n.ID { return ErrNameConflict } diff --git a/manager/state/store/nodes.go b/manager/state/store/nodes.go index 0dcdfb4e62..f9f9de66df 100644 --- a/manager/state/store/nodes.go +++ b/manager/state/store/nodes.go @@ -162,5 +162,5 @@ func (ni nodeIndexerByMembership) FromObject(obj interface{}) (bool, []byte, err n := obj.(*api.Node) // Add the null character as a terminator - return true, []byte(strconv.FormatInt(int64(n.Spec.Membership), 10) + "\x00"), nil + return true, []byte(strconv.FormatInt(int64(n.GetSpec().GetMembership()), 10) + "\x00"), nil } diff --git a/manager/state/store/secrets.go b/manager/state/store/secrets.go index fc2fae60c5..408765b493 100644 --- a/manager/state/store/secrets.go +++ b/manager/state/store/secrets.go @@ -65,7 +65,7 @@ func init() { // Returns ErrExist if the ID is already taken. func CreateSecret(tx Tx, s *api.Secret) error { // Ensure the name is not already in use. - if tx.lookup(tableSecret, indexName, strings.ToLower(s.Spec.Annotations.Name)) != nil { + if tx.lookup(tableSecret, indexName, strings.ToLower(s.GetSpec().GetAnnotations().GetName())) != nil { return ErrNameConflict } @@ -76,7 +76,7 @@ func CreateSecret(tx Tx, s *api.Secret) error { // Returns ErrNotExist if the secret doesn't exist. func UpdateSecret(tx Tx, s *api.Secret) error { // Ensure the name is either not in use or already used by this same Secret. - if existing := tx.lookup(tableSecret, indexName, strings.ToLower(s.Spec.Annotations.Name)); existing != nil { + if existing := tx.lookup(tableSecret, indexName, strings.ToLower(s.GetSpec().GetAnnotations().GetName())); existing != nil { if existing.GetID() != s.ID { return ErrNameConflict } diff --git a/manager/state/store/services.go b/manager/state/store/services.go index 1393ea1495..760de82171 100644 --- a/manager/state/store/services.go +++ b/manager/state/store/services.go @@ -86,7 +86,7 @@ func init() { // Returns ErrExist if the ID is already taken. func CreateService(tx Tx, s *api.Service) error { // Ensure the name is not already in use. - if tx.lookup(tableService, indexName, strings.ToLower(s.Spec.Annotations.Name)) != nil { + if tx.lookup(tableService, indexName, strings.ToLower(s.GetSpec().GetAnnotations().GetName())) != nil { return ErrNameConflict } @@ -97,7 +97,7 @@ func CreateService(tx Tx, s *api.Service) error { // Returns ErrNotExist if the service doesn't exist. func UpdateService(tx Tx, s *api.Service) error { // Ensure the name is either not in use or already used by this same Service. - if existing := tx.lookup(tableService, indexName, strings.ToLower(s.Spec.Annotations.Name)); existing != nil { + if existing := tx.lookup(tableService, indexName, strings.ToLower(s.GetSpec().GetAnnotations().GetName())); existing != nil { if existing.GetID() != s.ID { return ErrNameConflict } @@ -150,7 +150,7 @@ func (si serviceIndexerByRuntime) FromArgs(args ...interface{}) ([]byte, error) func (si serviceIndexerByRuntime) FromObject(obj interface{}) (bool, []byte, error) { s := obj.(*api.Service) - r, err := naming.Runtime(s.Spec.Task) + r, err := naming.Runtime(s.GetSpec().GetTask()) if err != nil { return false, nil, nil } @@ -172,10 +172,10 @@ func (si serviceIndexerByNetwork) FromObject(obj interface{}) (bool, [][]byte, e var networkIDs [][]byte - specNetworks := s.Spec.Task.Networks + specNetworks := s.Spec.GetTask().GetNetworks() if len(specNetworks) == 0 { - specNetworks = s.Spec.Networks + specNetworks = s.Spec.GetNetworks() } for _, na := range specNetworks { @@ -195,7 +195,7 @@ func (si serviceIndexerBySecret) FromArgs(args ...interface{}) ([]byte, error) { func (si serviceIndexerBySecret) FromObject(obj interface{}) (bool, [][]byte, error) { s := obj.(*api.Service) - container := s.Spec.Task.GetContainer() + container := s.GetSpec().GetTask().GetContainer() if container == nil { return false, nil, nil } @@ -222,7 +222,7 @@ func (si serviceIndexerByConfig) FromObject(obj interface{}) (bool, [][]byte, er panic("unexpected type passed to FromObject") } - container := s.Spec.Task.GetContainer() + container := s.GetSpec().GetTask().GetContainer() if container == nil { return false, nil, nil } diff --git a/manager/state/store/tasks.go b/manager/state/store/tasks.go index 9cbda03990..e40d1b8239 100644 --- a/manager/state/store/tasks.go +++ b/manager/state/store/tasks.go @@ -263,7 +263,7 @@ func (ti taskIndexerByNetwork) FromObject(obj interface{}) (bool, [][]byte, erro var networkIDs [][]byte - for _, na := range t.Spec.Networks { + for _, na := range t.GetSpec().GetNetworks() { // Add the null character as a terminator networkIDs = append(networkIDs, []byte(na.Target+"\x00")) } @@ -352,5 +352,5 @@ func (ts taskIndexerByTaskState) FromObject(obj interface{}) (bool, []byte, erro t := obj.(*api.Task) // Add the null character as a terminator - return true, []byte(strconv.FormatInt(int64(t.Status.State), 10) + "\x00"), nil + return true, []byte(strconv.FormatInt(int64(t.GetStatus().GetState()), 10) + "\x00"), nil } diff --git a/manager/state/store/volumes.go b/manager/state/store/volumes.go index 8dc6ee71c1..052cddcda5 100644 --- a/manager/state/store/volumes.go +++ b/manager/state/store/volumes.go @@ -70,7 +70,7 @@ func init() { } func CreateVolume(tx Tx, v *api.Volume) error { - if tx.lookup(tableVolume, indexName, strings.ToLower(v.Spec.Annotations.Name)) != nil { + if tx.lookup(tableVolume, indexName, strings.ToLower(v.GetSpec().GetAnnotations().GetName())) != nil { return ErrNameConflict } @@ -79,7 +79,7 @@ func CreateVolume(tx Tx, v *api.Volume) error { func UpdateVolume(tx Tx, v *api.Volume) error { // ensure the name is either not in use, or is in use by this volume. - if existing := tx.lookup(tableVolume, indexName, strings.ToLower(v.Spec.Annotations.Name)); existing != nil { + if existing := tx.lookup(tableVolume, indexName, strings.ToLower(v.GetSpec().GetAnnotations().GetName())); existing != nil { if existing.GetID() != v.ID { return ErrNameConflict } @@ -127,7 +127,7 @@ func (vi volumeIndexerByGroup) FromArgs(args ...interface{}) ([]byte, error) { func (vi volumeIndexerByGroup) FromObject(obj interface{}) (bool, []byte, error) { v := obj.(*api.Volume) - val := v.Spec.Group + "\x00" + val := v.GetSpec().GetGroup() + "\x00" return true, []byte(val), nil } @@ -141,9 +141,9 @@ func (vi volumeIndexerByDriver) FromObject(obj interface{}) (bool, []byte, error v := obj.(*api.Volume) // this should never happen -- existence of the volume driver is checked // at the controlapi level. However, guard against the unforeseen. - if v.Spec.Driver == nil { + if v.GetSpec().GetDriver() == nil { return false, nil, nil } - val := v.Spec.Driver.Name + "\x00" + val := v.GetSpec().GetDriver().GetName() + "\x00" return true, []byte(val), nil } diff --git a/manager/watchapi/server_test.go b/manager/watchapi/server_test.go index 3cb3a562c8..2c05b144c0 100644 --- a/manager/watchapi/server_test.go +++ b/manager/watchapi/server_test.go @@ -85,10 +85,10 @@ func newTestServer(t *testing.T) *testServer { func createNode(t *testing.T, ts *testServer, id string, role api.NodeRole, membership api.NodeSpec_Membership, state api.NodeStatus_State) *api.Node { node := &api.Node{ ID: id, - Spec: api.NodeSpec{ + Spec: &api.NodeSpec{ Membership: membership, }, - Status: api.NodeStatus{ + Status: &api.NodeStatus{ State: state, }, Role: role, diff --git a/manager/watchapi/watch_test.go b/manager/watchapi/watch_test.go index 79aba858a9..d9bd368edc 100644 --- a/manager/watchapi/watch_test.go +++ b/manager/watchapi/watch_test.go @@ -8,6 +8,7 @@ import ( "github.com/moby/swarmkit/v2/manager/state/store" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "google.golang.org/protobuf/proto" ) func TestWatch(t *testing.T) { @@ -30,7 +31,7 @@ func TestWatch(t *testing.T) { // Should receive an initial message that indicates the watch is ready msg, err := watch.Recv() assert.NoError(t, err) - assert.Equal(t, &api.WatchMessage{}, msg) + assert.True(t, proto.Equal(&api.WatchMessage{}, msg), "expected empty WatchMessage") createNode(t, ts, "id1", api.NodeRoleManager, api.NodeMembershipAccepted, api.NodeStatus_READY) msg, err = watch.Recv() @@ -82,7 +83,7 @@ func TestWatch(t *testing.T) { // Should receive an initial message that indicates the watch is ready msg, err = watch.Recv() assert.NoError(t, err) - assert.Equal(t, &api.WatchMessage{}, msg) + assert.True(t, proto.Equal(&api.WatchMessage{}, msg), "expected empty WatchMessage") createNode(t, ts, "id2", api.NodeRoleManager, api.NodeMembershipAccepted, api.NodeStatus_READY) msg, err = watch.Recv() @@ -97,9 +98,9 @@ func TestWatch(t *testing.T) { // Shouldn't be seen either - no hostname node := &api.Node{ ID: "id4", - Spec: api.NodeSpec{ - Annotations: api.Annotations{ - Indices: []api.IndexEntry{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ + Indices: []*api.IndexEntry{ {Key: "myindex", Val: "myval"}, }, }, @@ -117,9 +118,9 @@ func TestWatch(t *testing.T) { Description: &api.NodeDescription{ Hostname: "west-40", }, - Spec: api.NodeSpec{ - Annotations: api.Annotations{ - Indices: []api.IndexEntry{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ + Indices: []*api.IndexEntry{ {Key: "myindex", Val: "myval"}, }, }, @@ -137,9 +138,9 @@ func TestWatch(t *testing.T) { Description: &api.NodeDescription{ Hostname: "east-95", }, - Spec: api.NodeSpec{ - Annotations: api.Annotations{ - Indices: []api.IndexEntry{ + Spec: &api.NodeSpec{ + Annotations: &api.Annotations{ + Indices: []*api.IndexEntry{ {Key: "myindex", Val: "myval"}, }, }, @@ -180,7 +181,7 @@ func TestWatchMultipleActions(t *testing.T) { // Should receive an initial message that indicates the watch is ready msg, err := watch.Recv() assert.NoError(t, err) - assert.Equal(t, &api.WatchMessage{}, msg) + assert.True(t, proto.Equal(&api.WatchMessage{}, msg), "expected empty WatchMessage") createNode(t, ts, "id1", api.NodeRoleManager, api.NodeMembershipAccepted, api.NodeStatus_READY) msg, err = watch.Recv() @@ -233,7 +234,7 @@ func TestWatchIncludeOldObject(t *testing.T) { // Should receive an initial message that indicates the watch is ready msg, err := watch.Recv() assert.NoError(t, err) - assert.Equal(t, &api.WatchMessage{}, msg) + assert.True(t, proto.Equal(&api.WatchMessage{}, msg), "expected empty WatchMessage") createNode(t, ts, "id1", api.NodeRoleManager, api.NodeMembershipAccepted, api.NodeStatus_READY) @@ -275,14 +276,14 @@ func TestWatchResumeFrom(t *testing.T) { Action: api.WatchActionKindCreate, }, }, - ResumeFrom: &node2.Meta.Version, + ResumeFrom: node2.Meta.Version, }) assert.NoError(t, err) // Should receive an initial message that indicates the watch is ready msg, err := watch.Recv() assert.NoError(t, err) - assert.Equal(t, &api.WatchMessage{}, msg) + assert.True(t, proto.Equal(&api.WatchMessage{}, msg), "expected empty WatchMessage") msg, err = watch.Recv() assert.NoError(t, err) diff --git a/node/node.go b/node/node.go index eda5266a73..8d160ad8af 100644 --- a/node/node.go +++ b/node/node.go @@ -384,16 +384,16 @@ func (n *Node) run(ctx context.Context) (err error) { // role, we continue renewing with exponential backoff. // 2) If the server is sending us IssuanceStateRotate, renew the cert as // requested by the CA. - desiredRoleChanged := lastNodeDesiredRole.observe(nodeChanges.Node.Spec.DesiredRole) + desiredRoleChanged := lastNodeDesiredRole.observe(nodeChanges.Node.GetSpec().GetDesiredRole()) if desiredRoleChanged { - switch nodeChanges.Node.Spec.DesiredRole { + switch nodeChanges.Node.GetSpec().GetDesiredRole() { case api.NodeRoleManager: renewer.SetExpectedRole(ca.ManagerRole) case api.NodeRoleWorker: renewer.SetExpectedRole(ca.WorkerRole) } } - if desiredRoleChanged || nodeChanges.Node.Certificate.Status.State == api.IssuanceStateRotate { + if desiredRoleChanged || nodeChanges.Node.GetCertificate().GetStatus().GetState() == api.IssuanceStateRotate { renewer.Renew() } } @@ -770,11 +770,11 @@ func (n *Node) IsStateDirty() (bool, error) { // Remotes returns a list of known peers known to node. func (n *Node) Remotes() []api.Peer { weights := n.remotes.Weights() - remotes := make([]api.Peer, 0, len(weights)) - for p := range weights { - remotes = append(remotes, p) + peers := make([]api.Peer, 0, len(weights)) + for pk := range weights { + peers = append(peers, remotes.FromPeerKey(pk)) } - return remotes + return peers } // Given a cluster ID, returns whether the cluster ID indicates that the cluster @@ -1237,10 +1237,11 @@ func (s *persistentRemotes) Remove(peers ...api.Peer) { func (s *persistentRemotes) save() error { weights := s.Weights() - remotes := make([]api.Peer, 0, len(weights)) - for r := range weights { - remotes = append(remotes, r) + peers := make([]api.Peer, 0, len(weights)) + for pk := range weights { + peers = append(peers, remotes.FromPeerKey(pk)) } + remotes := peers sort.Sort(sortablePeers(remotes)) if reflect.DeepEqual(remotes, s.lastSavedState) { return nil diff --git a/node/node_test.go b/node/node_test.go index cdf9e8d680..0da926e51a 100644 --- a/node/node_test.go +++ b/node/node_test.go @@ -227,6 +227,9 @@ func TestLoadSecurityConfigDownloadAllCerts(t *testing.T) { require.Len(t, clusters, 1) newCluster := clusters[0].Copy() + if newCluster.Spec.EncryptionConfig == nil { + newCluster.Spec.EncryptionConfig = &api.EncryptionConfig{} + } newCluster.Spec.EncryptionConfig.AutoLockManagers = true newCluster.UnlockKeys = []*api.EncryptionKey{{ Subsystem: ca.ManagerRole, @@ -555,7 +558,7 @@ func TestCertRenewals(t *testing.T) { // ignored when DesiredRole has not changed. node.notifyNodeChange <- &agent.NodeChanges{ Node: &api.Node{ - Spec: api.NodeSpec{ + Spec: &api.NodeSpec{ DesiredRole: api.NodeRoleManager, }, Role: api.NodeRoleWorker, @@ -574,7 +577,7 @@ func TestCertRenewals(t *testing.T) { // the current role, a cert renewal should be triggered. node.notifyNodeChange <- &agent.NodeChanges{ Node: &api.Node{ - Spec: api.NodeSpec{ + Spec: &api.NodeSpec{ DesiredRole: api.NodeRoleWorker, }, Role: api.NodeRoleWorker, diff --git a/proto-name-fix b/proto-name-fix new file mode 100755 index 0000000000000000000000000000000000000000..82956a1b8de9d310257cfb4db4fb9a27d15b2d43 GIT binary patch literal 9397886 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 hCa_--MZ1bIR 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%0AaSrSM=N=xZur-z$qVk3=u-xHMM%bH_Ie`RbL& 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%0AjYow*tM?q+Rr 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%0AgWQaa?B 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�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�r@~(x9{B!AZC3>0Henz%ahm898%5MQy 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ˆZ!_#9I8&Lg#f(h6+9DtPbYL&4G@cpj;RKPI4~ zT4=MjvQ#{>l6*JqPs=}MT^x&Cjm)wV(b@2FYymx&M+{@NVjaXVRujX>BZje>7>0TO zyNbo;?^M0G*lg@z%YUNzm|a8WHE1Yu7wuGAiC_P?ce-%aNoQo6=&LV ztos#PZ7Nu{E;12XJ(OD-8%zJxwT)N$$%%h-cN=!N_irou3TIU8m2WRHu{`npKLR^G zqlc#RF1SnG+zjmPxe~GE@OEhV95U-XvbPJ_ z%bJ;bEaz#{*ynsoKkK5Oci|B&*wFdd&=sSsnLT+qt=-V%BF^x-n_ATiu&3j)DUdx+ zV@q$x)(4j4gAhlcjdR#u-N>UiCSmhpN6T)Dn7t0U@aoIZ`;hs-rIWo6E1|=7WK_J2 z`ohkojzz; zejCMIy1*aThp)9(Tjn}Ar7RYREM&KjL=hT|y z7f>_7*pB%-Um)){@)k0f`pMBs?!#lWKk={M>sx#2K}RkJZQ1)6^me7_i#c1q-idE> zA6;R!YtJ=ve<=6m(-9u|3TW#cEAcTGSKg8Q#|HzxTyY5>GVd42C;6Z)iy!3uKCbKiG3-KdkhGZ_?i{ct-6;zzHAnCkn0> zLyzQ@+~33+77|;N4%EQ+D6~|@^{3IXgUuD;D1C6|Zz4#4I(Kj*Z5dczZO2h>(7fpH zF8VRo9iQ`9T|W~{-0og?>gbQqb>zWRuK!4IU`*;$<6Fh=VXVszKGSjbN_d(bEAuCP zXRpEs^1;Jzp5+XeL&!s9Wi_(08d*ub*+f46pd9RI#Xg0Du04d#a=G|~;=;Oa0YXN5*b|KHrcg{Fm!FO~1!{(e&EEAl~ zqGr(v){61zJ>iw&Dbh(5mrAEU@gVI3{h!jG{hsY-_0nG#ZD|iHezA#16WJ5AXSE%_ zjeIbl2F^8#Z(v&=q^9M+uqKg-%%3%Qj(b!1(>UGn<1^zu;*`vTT31(U9)^EHqq5Z% z|2Zr^h5w`PUEs@{iBGPH5Zer%&Ymz3Y@_(pzM}jKd}&|iQ#3C-BU(wU&dC$`4SrDB z8_*Tk%EPy%*~>=$uMLKmqXQm+zii`kIiEI93hq|?X^QT#j#JR*=JLIQ@Ax^0kDAzo z;bmMqwUlcvFVlOQ>}OAHGS_Whrt7Y3)u*dZPfxRd+VP<&hbcNJhrHa}@aeyDYKT5$ z@57uccwdKK7dRW*=|&I0-}H5^ckygw#niCjg~$QvFyfce|Jk1rGIj_2Px*@Hp;g(X z)_OrGIoi}-=(v$1vKgiGXG1U4 zvEqJ-&sr0_ls&=Z(H4WtR|OL{qLcg<91yQ7L#KkL%v@*B@1*r0Ja2e#_Za4}SM#_7 zel$5{uc~&l>}QQpW9x6Pa=s^hs^2X7l}&AIRb*BS+=|aY<~eq1OzrYq4Lo`v+b2#R z(u-~r{y6qeoc2DbKDTYZrt&9ZcK}1lBF1?aFpXme8e4V{=f!(u(_rqkW9tRb1=^pQ z9L9gOry32{MqYf=K_cae2H8a!PeLXL+$nZ4fQ?D`VA%i56*e*f$7FalClS?)|ZDn zYpLtkRuS&J3tgpJ-z&qNv-m#SN@y>Ebn6ew*Ad)1&`<0Ci#bUzzYDypW)8E^p=P6_ zVOMn41``M12VNaqc=jaY{C9VJO-}xR8Q;f}`2+C<;1uI%XN)n%)`^XGHa)M)$-@#H zeE8b!a|G>m*VrUqW@&u98)Zype2gi+fc0X0_PB2C6`xAlR}L+#bYbb_68)<)UQ<5- zKH}Z)w*orvMo-AkMNhy_R)=isR?Zt|tu;vZtI_vtlfNZB&+gZb?a6Q3!8m2lc&{7Y zKFB|s`Ip9rBTF|E3)pVkFLO1v>>&KIg8Rst;rOjK;~(E1EFG|Zw#mo$#GirJa%_@S+Hd|b|`ZDhV% z`M!UYb$1Pa;1Nc#E z%p8Ne1+N0uP;<~4`^{(nx$C+Y7Ju?P8=QC7yovhzE9~{|q_#)D^=?A9SP?930Vgfb zKUcmUH+zHnpMN15(R_NC&j-!L$GswQoQN-+sO4~xVXhw1D z!|cc2#u@ZyUj!HMjc*C`{ zIrwbD;4R|nf8bB>6%P@A`;OKNIr_r^*5{(b@1~Cy4@vR6MxFTyJ*u|yQt+)3der&L zjBmVTn&4jnJr+Zc)zG8zkjo32)?J01^gH{2*q6~#$v&X^>+QH#yzlQ%$NTpGp~}iw zHG=$wtqpmhE!5;~CdMv2?LdbrK@K(lf_?tvFElXkdgyo#u-5M^_7Zi$o3j1Z_&&}} zI;8ttpN9@yrT3c0hO|c`&NH-sVQa%R$@cY}V5U#`kQCoXFHl@yU%P5Y7hC&k)Shy= z=r3y~{z=wCx>laXrd&>BiI3|scpYa-obY$IoQ|E_{)dXU&i-NP=yQK4T2isT;?mrw z$}cr?9*gS}L|=o4n|xRF!Ls`unSa>MlleKaR66089_U;974Dfn99ypl_zJdK|9-Y! zv2E+MBBRFgj*;C?e(XzXk8y_htn#$Soc8E^_JRk4#;^ZL_q{c??)t3WyN-IQjKj3| zS=&zBuIuP-kMMat@5q<)5%=9^Y`x_lxHp<>IrepGLfZEB_x0{X zeAZO3&Sx#OUVpsLfyr0woWNB)dxiTf&qS#yT~$%j{pYym+TXGVTKR3(#Ib>{;+bt+v*n7d%d}4=x3s|umCOEtcPK_x22UnmWF~Z% zkezRQf9UMkkBp-{thkMAu)k7&*edcFeb$EGNo%~FPhe@jW!xJXOx(o17ClSbKKOJD zU0F8P81}f$wa1uTk3aD2BhIsW?%&{xU*)&axt-YYIi7itYsa`3K@R^tc_D_UA``_^ zM<~VwA9&7V)4K9*w26PF;%Q64y$X1#_+b-xR|hZE9+i3UQswxFm)1h-Rq)b!=v_6F z<`y)s)3decZSC5lMvQa=e973Qz{s2$sc2ApY?Bq2iR@ev0BLvAF`teIN=8}JVNIVr9UTI zPJUM5&K&e0)od!T%6=Inuhhf=nd>R}-sRK4UzZO|SEcp!+k5-g)&aA3`P4g~18(hn z*1&rkfqR){^+1m^1&PG_Ty{xy)NW{Q%?D zr|>QYy(zvcJ6kn34Glu?9q9GQygkYhoMzt3*x8Ake3Cf?>SRkbsbu~h3h=O+B$6WjgRR%xOTI6wd_o4o29e#UMG|AQ?zF5~*&3U1gD zmX&cz@&kR1xCVNNRdA}pDhQ!3tTtzg!!uN$s{qM;57dpef%5=PT{a520+?MZZs~5jben-lFF+Lk$S@8t>tbt(_IFt_z z4}w3c3oIRN5ql|v%*nv(ZCmD^WZttiPhb{hZt~BxGv|uSZF?PFjJ@L9`8D3X!F|{A z8(-5w-o4H9uHF-mD0JSrop(yycW$#~`5xXWMAE^kUTiixM+7HpDCNGqF1(U^)zI<#(5}Mxb<}bk8#K&Lyk7_p7nh3dIXQ;C;ce@Var)pl-NY7zhwZ9b%ti)FZ3+PX{a~}Bo zmfsKZCw=#ed<$u6MIW!A6Ce} z6!6=zC~&TD!}yS74!E+bu;8Xp5oH*qV8+yrJgRlZWWF<|rNV(eUpU(856^YRS3@3swAKnq zr$~*>=9O2I7nASU)vk=#?7|HhAwAOa{7XLrD_-m`?Ysjyi|l=cyt}PAnXOyKnRvz; zY|w;imq->XCZK+%p>wvgzVpDPPGE5qAIOpJsjWvZO?hhn$CvkXj$gKp9Gb)e@Jai7 z^-k8Mw$pw1IAZvz>(IHoiz`Z77LL4G&vZkl3)$;&jz0Bl8MW`^7ok33Pk_%{&iWJ| zlfPnTq_?rk=rOyZ9=+VZY_SScG3?1otwn>{iaeHf?s?L7W*GtoOC< z>PPSHNA?Z@e-_ez?r1A?p8W!D-=nym@5}8u1}|6N;$P}}M)cv`V;2?PT*&*kzBlzu z8GWxJ|D@Vy_dSMtqph6QQPkq=6m3KMQS=DOdK;JQ`Z&ADtFVB_kNAAn`Tn%?8Rk>t z@GO_*&8d=1Z$}rJ$G8Pk!M6<`U&pUp-H)79WLF0ywSF2(Z^7 zBTRp*Eo(?9iVrxl!l#@UQr#xjaejpZD;cof=jX=x1je14%#OQXSOmzK&Ld_Kp$Z1_PZeQ4a?KKk(4kAgPU z{xS4UweM|vC3LFyMQhC-I>qN{=rqo~4BD3OQ*En`&obt-jq#tQ?QUprKm4MF&*ike zjc46)kEHFRPTPf^w$X)5+XuO)GlgHF?PY0gFL!^dj*oEqiK?&{pO3TGQnY!L&m+$F z!+aicz8`cx_dB2e?0jm!uW-waj|g8Yz&9hi;K9lRcWF9_ziIlqp%>(GIxR$W9ucxk zG}GYF%w5tMxP}gPaxS&o<{~q|4aL{YwK>#zOK-;yP044Ne*F?O8KEW|`t5~6YQm9o zy}BY}Sg1Yw(cN#V7L@7RGJSjb2)f4w>oLgo#J1LK}zlg@cYzSz7umt zS*KnjXSf|YB0lqE9k6%n^qKua@QQiBAO5?i2HwIv4WFpvvkrb@cpx=^e2(sq4RVva z7E$$SHS9q3Q;qm6!^(tp5(3v(+cm-@*Oaoe@~l>JJ+?WlAUIXp{a>4Jm0t0d_Ouh@pq6N2S1a- zt8alJ-8pS7$#>%I3p@0Wbi+QXjz@R;|?&y4j2pR6Y*LUn#`9oD)|Z7gEHR^R2+ z9pm%1%dJyy1O}gY?7jM@hA{8Pd_z_Zf!;qtPV8W7aBJVkt&0cIa}d;f+2^+REN$t$ zFUcY01OA>I(%)ZtVwG|mF9b4A;|Xb zoa9gZZlXW&R+*n%SbyU8clpg8;0t&7sdZx|&SS&mGS+i966a=Y5nv-7XwAb9_WmcZ z-SeG-Uh($GjecaL-`Hme#8Ykl?4BNK5_im~NX!SeMZ){_Tuw?3z6D=yNNz+e}R!g98um{`w$tEv8l&`Jz6gH%YcE#s9v7KDzPQcP|`q zv*gbX`e>n#utyiw9x~~oo5?NDWTxCLa{-} zrY7|CN?T7qO1+AHvcvIV6gvHM4WNH$zn0gwkUw1h8TnJtBc7CxKx5XQtH1yA^XLlr zBBaBA#_{R9_s;LObp?0K)ejYtr=mUPww)^7;J1u3;u(u{BF*2ekFnC!a8K38XrFC- zP8a4Q*Ose3Gv{4j(=gba)zn3P#CDGim9BjZ8LIIvL>A`E$<+B3$G|UBTO)cGHtZ~X z%a!P|wN`?CmL|_$eRR#T_UXM4I)T=uy*5=V&4+zpb(gnBXHf$c{yy4j*f;u-`lm+w zg1gVbCj*8D*PHKA?9DlP<~DMo;hm95*tK^B6Qc|HJ<&=GQzap)f7 zn>n5HICN&Do*T=Vk>|=7BQk0+Z7rU2OK8!M+*ZM3H1Jy~yu&t%u;*5^87Cete|_g{ zZ0l<5_gefR&-Sf#$D#MC-(z3Ptl+*4p1DRU;qhtnb@k==T53vxAAc?UkiSRyL~AR; z4}&W%eH_0+_}afdUhYE9q+)!RO2zFqWIyWUgN8PU&h+YOEq@&A-s0K z=i)~T1LrYwvO@n;7~cxr3bx*N1=sHZ*Po`r^;^L8XTUWbrt)`w5Ilbb9gN$UW&4hR z<(t6qIdHk{;p>3oYe_gh?MuP&N321~?ZHH5K`=4$Tt%rDF2z1%2EKRYwF-vRd^NDk z0CppQU2|Th4Lj(lN%fbJF;QS=)2{8~nMiKS1pY(|2FGjhxpTg)aQr94CJc_(2Duh2 zoi+eJRQ}v?!=F>}O2rpdTTk{+4r3Y3SaOEtw&s}eW{`u+-h0NaH8=59^3yWO=hV7e zJYUH37WK)s?wc5UfU(rk|D|gJv+#@ zS2YIeM&W~{o?dH!^G&RaK6JN2>bD{{c2%Ie1ubf*N%vk>koXdz=QIL+x=b za>s>#_&*#ty8I&7XJ8wH7b=%1PMlh? zRONyg{gv>tZ>L@>dGPqhiT#Mz!((-xM^LstW7D|W!8N1TC}$Tv)NT8S zO*1>^nYys~J)Q6w(ad*EJ=pvn@%(vCJy_ja9F=w)8vB@lk24-K7I2|6KbTOQM83`-etyXbFRV70Yi?ejO(WiQ zd?)D81nao^L+PQve_gSbcI2#brbHK3Fe9Y+iDGAe3EU!A@*SAP(1Cxc+z7_%%WXJ) zBli@y^|P--_xvsRL2m@U%*#L6@A!mLu}JyV6_*w*{L~$*WE5?r``2CkOV{T#K0o7= zj^zh06yp$_#+BH7LNShN&Ms7Z1^@Jb`rNbX8~tP;ea_y?n8Np>tMRdLo}_qC;Qco3 zRqyG>=cI9D6v!`U*RVgFY2D-tTBiQ6bU$qNJ$k2*XM|sM;BGVcRbs_@n=OBpJGf7KrfqJx-ReP}@N5`5$fQk$2EVau;iKFBfA<6QhZOW9AXdsPn1 z+_S(sfCp!R^}1()ncu+9ISb6tdxqwNuPYb$)giYs&9O zl~em{2J54B{3h#Y+GmY^S!S)Feo=CL?E1YadKZt@S_BwVJ8+1@OY6`lrRO#=hJbv! z@JyX=K`ij3&bNr_yl%$X4s0@j>0#o&8H~MwwW~oMh^D>I|0~a%@iSl1=49ricXdsF z^-2BJ;SJd~PdLihMVG2Yq+9~a^UwIXrcN$(ufIPum2<3n^4V>IzLja0fhRa4+QyZq|E35od5O#r|~1r+N9F@g?->zq4|m_CopZ4D9ngQ*N%w z=9Qd}a2~pz(QhBmHIiqBf8&&oXT?)|jN2VY8RPIVjw0^snxAo?C!4&D2F6jtI0_g? z1LJVv>Vn**@38Ubrt*)JzYuFBKMR@R)+av4ULWNwiq_+;4g2K#iX#u2(Nog=O1tD& z+GHsfY46+mQ6_#Ra4W9!k&qpt#Uk=E+tFRzde4vJ=d$U}$t_T9`zmsK!S}xu&dAoe zs$t)N^@@!?mEup*T{5tDR9nA<@u@C#3|mZjc|X>^Qu<%d`e$NWEW_s{KC=Cx`KIR8 z_J^+N?W@lSH)FfT^E1K~8fPF?m%27N&XjD{7>7AyeBC3HUHIl2e?@=#w8s5)-(9|#(k(UbGtPLTf5MOYmo~vCy=(MG+IOFG#?L$M_*3|$@o#p?%o_=QcpE43d^`L(fHf2kLSne-8_B|o|f+Z6gWGI$bxQ{~N*U#GnMrJRMK zd==4vp;71Di%jf@t=JJA&@g^r@0pHRal zj{G7&KP(@M=(s|#Z%Wa}dd6kbvAwr!Klv5nOGby4Z3oP!xHybmcgTaoF8l|i7sepI zd=xuvu37ICy*!%iGes}zXPncI_WOG2BiGPJDjp==*AKstyq=vA4Almv>72BQ;$Qk* zLoJWl1v#PbW(Pxx$Jq0;V=zJG6XQWne0{gvve)-)&cl%iiR9Md>iYh9F+(-A-&Ah zLaa>T?Kt5S&vwA0Ut%0}**T@Lsao&MoehjdI#NSMuA?8N=*Z1MI{CR2Z+gW`Pv}_b z{;2f%&cjb*=8k`6p7Q${r#shMnX72u#J(9v2Xk)DnQr1QMZ_z;wEr&88vf4s>lwe= ztY`haIvs0v!OHkVs1Q7QYi$2DYjft%j~^KM*k8VQ*P=*k!Fc~CYjG|BtdL8_C&F6H z)jW(mw0(xhY12DqS3mz7XMFB{NBKWKj9%Vlul`a4qZGaDPPW~jUTU1Sz4YSxo2Q%l zFDZX>y)zR$$ z*OpP&$6e=>sxN}>A=t_XD&7^F9ZYDv;!E*%_#HLV)~HtyzN=?eq!vqdKU+@GIoj?L(y&G-vtlQ)xd+$^0%x(aX+uX{}JfTtV0nn=8y zn)RKGkD5zQD(}0W&eE3|HuGsC=bw14{PM1DHGw%O?k@hatN@;Zy`o&D<$PZNukYfV zB-JMAx;&@#Eb-P&*jJtCL!CTh_`G<9aLB_e3X^cL`TS%jXUN6V*FJ0Wg8c))mt=W2f7qPspnV=P{o$p*VWk(m!W zbB!T0j|?bJ`s0`Mh4#C^9dOH~uU_pR5k3j$HD~BG4qhc?hjUJqc<+F7z6<(bJ^sne zIm4c_TvvVk|S5)F$2y2oZ-#={omrl z)8WJCiSyh|oM-WpSCjtz#l(5W66d*xIL|#<)=l`XPTqs>>J4ngH{d&pDcs}4Y2I|= zG`jv>Pn_l+Cr+dLuMt<60nGBz^XiE!yg^LlvCO7*-%~Ef!=LV5^~kI1XAr}gPcjQ^e8|F1T#nzl6WX~(yce8Wb}1)GS4F}h=uA9avZw=`-$q?- z7jL$4j@$>!C)>X1Ah*+&Lz&?SG$}dsvS`M`#}6m>898+u9G~3-&b(C1S$eMf&()^~ ziZ?7}tz+n{k~8vuyZV^mZRV!Fk%6&%U#V=>bL@YL<(H$sr}T&o$?>FYnwX>G-|oU1 zew7|?2veuqTYuU38>Rw3XiRvUO^kA?mEGD6?k)s(M=v?Hehm0CJ#%{NXe;-`xt!eA zTQ5yZoJUqFUttDoF&11N#F>)9<;CD~5A*ABaCxkQ%WpWitm~6JxIEUuW!--RT+U^^ zr(1ShS24#P@NY4(vTuUVWe;E5yYP`?>vI{;sLW}toD*`QD<`M54?SiuI;?yo2B+~K z%trT2k2kjCf3xF_kM1sU@HstRHWz#}@iO?P(bK20rvdq$fv!-3FRppK_$}vLur8_v zsrZO|8`9kap6_-IuZ*4FVePcXD(UZl4@rmc>JRP3Dc#8UK7`Bk*)<$}g8W98PZcNE z+}8i6R(fRBP@8A}>@OXDHIy249-MUXagp(d^ygR9`b^T(=QUnvK(cpJQopzL;y|*0 z56(IL?(+2O&3~Rgfd204>*84r;0*iJLic5|_mcJAKn$pvYt3B4_uo=QZFc$ay!yH; zKZ-S0;3WOwWsMa$Y8@2!|2OUpq{Ajk$c>BcZJ$dD$j@ycAvNkSF$CVf3IB54|I~9=1R6ugL2VPP%&ZyQMZQ{k>;B z&ZXr)iQmX4935oGJY+u<$uF$9k!s{A|EboF6Rn^N z%?>8o2cX}TM!!zcugS-T7pu)6{wM8Ucw`4L7wAHCO1Ule^YYhYr(L|297$}g(6WbWd*^Y!v-W33O&zApoxgb-nS@T* z4nH&JJHv0(C-p{l>YW(Zf5-UU`MP6U6?Wq-HVw#E)5v^}dFCn^>f-5H529M>t;`Q2Qs9P+6Su9coe+y=UAsIh*4DI*B?dhtn`DnfMsIU^3^CN zpwDgeoo{9JlvC?J0>3x0XY^0Or}H{^Ij|wVy=Ssz?HwV1lg4z_WBbUtyy+FL@1V|a zK6yXm&?mRnvBy1|+I5#(dkzr0Y70=S8M)L*{H_G~a~L_)mtkEDbIwP}&HN^ByX3R% zbz-a?tJ= zTero^U@wz(@mb{52>ASdU|KGj#k+09k|F$=$|bSu$z|-EpNyB;dgIrC#aH>uBKQ6p zY#IxlWGnscC$@Sk?F7lK*y8lB{2sIC96VA!VvO1>ap+HbGFy0m$3q3gx>b7u`X)C* z?^p4D26?=SF~0rho*Qh1{)=aBVm#yd`*Uq-@4^_K8_geZ-B)(Kb#X58-PC7+Ut7dA zEb7uIe@FE&3?D~tKUHn^UhcBSbG88b%$&K>*@KCRd=@C)+HLQ3pRMcY@X;FfbIMP6 zxoTBBvinQAE?ahFF!4pcPv-t_Xmf*}`Rqq|<~zG1*H~);j7#mxKWA(>M>kn{v(3kq zyKvsAIpOjb+aHqJPa!>c6SyWk_wr`(dGZv_eDobxuW)#_UgJ{T1J&7+KfvUJ@Yw-g zbn>oh{Alg<3)g4lf&bU7SL->sJUFA15vPRX=eGHr_mW-sY?|h9@cR&w&>IO*4`d?>*$M*JlP${ zIg!sEM(r(-PgCzGcTDy=|1UZ`5b!lE22i7V_x_ z<=X8obn^5y)*Z-#dh-9L@wt#T-()@GfgvV0Ol|*&wm-6H#LeP0YI}cL+e5gw!y44; zj=8%Gn}_%AWBfUd zVgAcn#n09EU(xrCciVk0_Viuv%xf(7o@U?2eZWio4RYG7XI{tXFW*0?XPWx;wD~-3 z-v1%<`6l;1s7++9X>$~x-Zo#OO}!@=X+MJtBX>W;w?3rJ7U){z1V8$<`KG7M-#cyI z{hxg^`<%Jo>uGZ@wwIczS;TQ=zO;E`49Y&zOoSeyl&NtK9X6;dF&ONM?QG;gpL3IL>y7y3x`|b$ZV4jh7Mf6+ec1b z1~r!r4}QYd10%Dw7Rv3(WIfdYxvw(M{zF5D7D8}z>VlEz7M*M znkl!F=lXfhFTNvuZtR`mo>pYU(V#hBF%F;Wn5FnkW=}1AzOy=*7!Gd9H!D3^HO-{= zM!0T|IRjY{+`Z)r+247gslcuMF4_RMI^n6x+cmoF4C&eAZNL+bUd~=!&e4nw#?Cog zUK)8Po7ioZ1A~nIXNh@a<(3JlHDBq-6U7f~e{xDb%3mIPA`8681}}2L-P?1+=byWb zoW`kPogt+fJNvCXbFSKUE01%$vf(@5-YvPBg`7K!u9ijY{RlDlspuzN#M^Zat?YBr zi)u)zUcbitF0v$YCG>UWw6NReHq&O7X|t1gE8kRkWF|i5y!$5aMX$8wPJ2G^$40Sf z&SU2*Zsp*7_x23tkZEv#t_KcD+}~cs{mEg~n-=ctpY#=1-i|hV3{vt|vQx1@^u|5& z(Ff1sM~R?^N)GGZCe|rN9mooF-3oNwxx|uV;A9im+kvlmj(D}~=>qTr{+H7IdA=6? zTKr#oU7HUyu9K`i06s}B>wG!oA&-K-Ro7R#M}L0f>QOfT>AudEp{CY3dVuh%OLzr7 z#lTnT(65s7sQ8Ft&062C{Z?r?KHVs=FJK(Xv3u+~YUhx@ELca-YqGc=1y|+s?_hnj zo2=>>Ltq;xh*fN^%ZJacD!V99+_RI)yLXS(f3hy%^;l} zTf^MWQm3`?UG|*OHa5YjPUhatJf$n@`&r9pV6YOIvVeK(UiQO~=qA1y)~epYJDqSnKP5#tId0fLC)?VDpkk&onYl*hQ%QJfhrA^)KRf2Hlm%G!CD{ly06YqP?7 z@7(6>a6Eg-?hf!uF&OFfFY!!#WMydvx@tE(yBqqe!tdG9q-W$0%i6g+xlh?%qX)k3 z*jU!h_^9f4`>~tE?_0jnxAraWt>Ul2*jkr|qQv&UM=q(>&%5VN^tK+nRBT|ypNS3N z*I0cwF@W>L0M0We#k0mZF#zr35}xb2HwG}qv(M`Ub?6iWSm}uYoM-;G;yavSVgO@% zr+H!k(|oBIz>19EzU%#ZR((qR>k={+R`=eV60=>B6_%MSayi)hvZ} zI?&sPGB)`bgjf0$-RM*6qUXwKQ=g4I5B*NiJ<*NoQ?DTApnMm_9JC(--r(fP+HrFm zr|j;-`)Wp?4Vw2=L&zRzQ@6vE#xb9RBFBJ&3aD|POPY~ zaRT}kPQI#mT0it9I;+OEXu;PQ;GD`@>vN&+vTwa6kpD~hgN6Yw=*GZWxov`V zK6OgVS))ScSVqm!xqPn}XI-eU#)rxm&bgWOAqD{M>RoW5AAN$endE_N(0=^eibHd< z8&3bW$XXLLzJVd3jnLV@^IJIWj$NNFzX=+kNa2NbL={Y&?7-$x~8!t8NXXxw`N0#ewoy7Xb?| zEmo{84+nXEGd^2lhy8F&eCgA)cM+cC){8iYzt4M~pwXw0WwNu|(3@@tm*bAUq%;0B z=SFN~`9TD;^PBJ`Ul&Xi<8PAhK|Toa-Z(Na0A9&%PTv(pCPy^egx zw$&bd?ZNhQF9TVy0>7BrjZ?oxbCX`Y1AlrSdJXYy)2?dU+WGl*+o}(o*o9CoKNL* z=w2zGY9ncjfzQI7GU6XDF2=#xdp$BbNiXm~@BVK;cmcicQG5>iWZ(CVX5Y7|&s1s0 zJ*HFBM0JVs8NZ*n+9sR3=;< z&OQ>x6df8&ya0Z>@N%EII|(MYE~C)9y3X4dhP_jyKC9M?a;(!_#IwdIQnMxr?9^qydCY- zC2;%>$GA7bm)W`eR*$}2gg>Z`IV&e)%fjND^-LY}!atpu@678g&+WjTKMP${^0^#aLw1PhdK9#G zjQVR`yrUXQeGcuFIkb0>dr>RUTEZOEW}`#b-0#`Jp5Zoh*=c+>(q=n)yy}sw-37Ee zl6qIl5vir!vrfB=+3<^E?kOHn;*8bXZVUN@YFBloOuNwP|D|1xRkbBdn|wy8xvRWy z#o{#95sY;*up?e!U{Ie1gL3Z8@r>2TrG`LAeh2Yt+4xb(C-{fXAspHctw z>EFv=MyK&J$vq$ZOmdJ|75jT1*?k56VQ)L4^M1dbx!vo`?VRK<_PXY?(&Rt%-+z*c zPk*Z=pT6<~Y=6GJe^-7Z*^J69v2z?hfsD6(_=;`WzWmZR{){glTyIH^+15FKLVkgF z9jctMdh0d0=NX{*!0%G$8R+bm%#T-ww|xRWKMVN@?`enU82$r(ZNTRsKho>+x1&QC zfBQ*z{|wef`U3dZ4i9*T^91YA7t;CTCitUtfU{}5QO|9IrnAAvvlcbt;F02$$KZo{ zzIzsR5w8d)b|P0@ANpAM-VDcwu6l88F1Z#wr@LSG}`i{igw+Ao8rc2j3(zm?n5 z!sofE#EGaQ@wBJiakP8ShqSvWt=-ww5>VSNPO6WE@I&<>KlyZDF!6tB-yQctbS={+ zpVKq{KX2~>CS`Hu|G#~i8y7(#iVHeDGawf=Xhd*=>-2OZpyDNwL=)U)h8_fiH`eTW zfn*wH5OheSl?{m`JHt(Fq6tedI-6t}1h3@6B{91(8@lJhMNGnw?1olk{-1BX?>qfY zGk|9I_n+tK=bg9Ss#B-VId$sPsZ&+|ds+xz;W`yNOK=b33rRwUcd?7K=E7o)(M!{y z$0c`NeAPVYs55$Mo$+O+L+3GkyNmI~rSn$!CmTy^E2DjRJD;@*SifCrY@$Z$d34ib zPamkD&tMZ-^vO2-Kdp>QW(_gQ_(s39*MM|ScmBrZikFEZU&wkZ6OtRP zeT%=j{`9x7r}OZqb0+y4ifK^Hx81+IKJ>heSIdWv%_4ZRr|tf3pUE%%c#xQd1N`)V z2hVor|5l!9=l^{?f9L%FTb}PY|Np1+{58+F`MLelyMOzR%WXYr&KNl_oEdToeR*Au zeU!p3@{Ni&a}e{&KV5pl#Arlr3760E6^^f9t-4P0EaqtF8OI;Uc?*`i@7cDAyt?gs zE`E#^(x2mnR{{O~6!RH-6PkY@Yv)aCu}BbHk9;$((jN{_{;GR$*eIGdJ{y ze2H@y@BEf8F;LHxmC#zfKkQ4$&*pFOCFCnpx_k(FD)vs_wNB-4v3*#Yo4mqaQPn59 z&crv?M4M;USo61GYg@$nzW`nAHab2YN7s7Oly6;5zDnl!C(v=<$w_zPcK#?oA+-4k zwDHcl{s8guzy1Hk1(`o=PZT=&K~w1%ysdZbf1yXj?Y9fqP?Aw zpl|h@i=*$q#imcu2eb#;g|BfgfGr$59^D%|E?Z~v-YVm-{mSOW#Mo)?@xN`<7z%#a z?y;6qvu9a-sg3=jZQHR8;rkcVF2-5Gu3~?+O((~<-Rx>iyR7l)HsVJjR^V~$-i<2b-Q(-Ff3!K@BOAYD z>@mhq$*f>U`b}n!UtnVpJ`L|n+zb7sBR@1=F_OfbnzlAhvSl|I!kc8CIg>JU>@CCf*(GTj7N7w(Vd!Cj6+m zbhc>rEafDtHQ?WYu3p=3QiJBLtW_jT90|DQiDvY(C~ebT6$3ABpGAHv@WcZ%4`xm& z{dNLhv+UE>0pZLO8qP7hek_^WnB;zdR$W$i=T-xC>LnRx}9 zGP;s^A?q8&t&g zBL7!&wqR(mVrT~>S|5lvKXX5GVAf0MCuYC6TTV~6Y_gF)&-z6R_oKf1dB+zxw0X_rg+qat-oK4ma`<|jND;*ktgLFf~7Mq6mlAZxZnD$$=AA5DMXy2m^$fi~Q z*`)l)vaf$eeoOwkpW1g3{heSVOSNvD=8l@LY`#tD$k)T9Pra>c)jrB;EyaSKRh+LM zH!vn7w&4RzUBFtUWEc1^=CtWr!J$oaZ1_j4+b0-bc!g7MwOj8(`)-MHr`{Q)kD=ae zz^jrRTI^fI-~K9fiJsC?_#v7lH}^|!(EaH_@#cR-Zd`duVo!SaUv5KQ7>6&9qi4<} zGyWWzi5i&+7@6@yXX#PNUMu}r{XZJ2bY!7F^A^Pe1U5c-ALrp93stN?q@i8Ovd<>l zpoMIn5c9^F$XtLqvX@`p|K-=|O@`XP)4Tlr6ZLuXyK?BtULVOG@`3EVc!SHQJ8ao| z2YQQ7A3}2@ACBz(O6kbnUq}y$5032pg7hx}!GOJ{u)`76ywu5`~4wD$5HexsAlNqo_klU~zCL4zpuFkqlbs>|Vb#ZWHXN=P6XVXX@3ja1!PPUUr zc2-zdmmAsn!LXC{$lrVT+1vPI?>EcZQz_PZWt*(E296i~6^|mHg7~U&NbfdZZ97YA zy^4h!!832}?5k9!-tz5i&*SdLA;ivO58;dI+<|=~yJ*RYiV2)6-B43#CDvMn-E~O! z45W^(kyf)GJt8=5Phn@_&#FSV`B{U-huEAR8E?LvGdOpRac%A_9yP!nVdC=e-*LB` zU~B-F*}h{hJ!)`y_35qP@+!Dst2NYsON27mTn&@@u||QsfA(7L_u!|p(#O)p{T&+S z?g#FS_A%!%UpIpIp=iGz=P}PfHe$C$GJ$++i~g@ZT$yQ&_3d$AOa=DgPqAm)q6O?T z`Re9c&TaPo6eCeX{B139%Wd0zo7)caByZb;KIvs-|GdN>23sr3@K41;gR#f=y-^4M zYPiEO#++3)p<)3vXB7`$Eymw+Gxw|*8!pg&kLRQ4bMdBao{9O`-F^cyN`B3U%sH{q ze&(E5@mh9Y1$IUsV%O7Cu<5YHUj6pxlLw+!reh9qjGWneumb%>dD+v4u$fAk)2D7m zFHQ+(6kDnLr#t2_zsA-&5XI)J(7jLvhsR*6v`)l_^3d9s-(u`}+_GML3mfM;ALso6 z%WgCGHQ+aB#h>!Wdrq*%&D;^#hh}i*_SxZP`Osb39N;_iq-4ho>INT;acYC`--t}z z39j=0RAV#AZ{>$(i}*ehe=NFcy6qpsMn9J`G~&U;d8}IsRvUGsv1#S6!l%2Nxz?^b ziSv4tvG`8nN-9~)A2AgF zsEpbu-+mLgw;>;jHxmrmwVYKtJw^Sohnik)yUl9efm|4wjp1|7q3>M|-_5)O9teIO z@H?QlfelSH-!O2Qzog(}6?dV?7n!Qd?{TknDu(Zy_2pvvruT;&?M7~1EC%NkeKU0* zPx7YT!CqusP5oN$$lYz>Oe-*lGe5O-|2yxJLw!?yZM3i2wzKHZ@Z+|4^WPyKJ!FD1 z&G23_!N%v6I`2R-v4ynUex*6nxukph?Ps9B^qF+oZ-~L$?VP{dS?4$UEBP7pS6#4& z{z|Pv2dqZM8)?VVfk|7|&bHUC%Yuo}yc4UcM_CivRzb_v^ogfDc^YXmd0r=v{N8PR zPmvEjb~t&jjf?%^3o~j!m+5n|ZqJA6ikuSUr)wM^(fQ1VXl7C}8=F zUnqe8M}DCI{vY{;0xdq{7gDRsa0yTqw?iBszN_9P)Jr>GoK5^vR54%tFZnk7Cf-v% zgAU}X8sE~K<6W!rM>BsL2_2EoR^+CVbkVemZ(XDC=V7l_Fvj9Pv*~&tcXW+Ap%@-R zSG6(CJ+W!cGs4#V=g^xe^oO^;wkPm0VE>zT54Sq!{;l!HLGLTN+b#dXB7UvN2K`27 zYK~9Cw~`QP)Dht+J(b1>rFKeRYfkU2Col|p^V`atS2ls$uf4FZ*WCYu+GLkQi$G2I z;U)ZPt-N{Ftepg^!Ve4AM|mo~3IFiCHRyms_&66|nU8ZaP5phpvUv&mSn?#^2Ea*u zXoO`oEbArjQu4}AqP0dh??~(z#dmg~ciYN{J7nxtyDELQE#<{iZCDLIT)9s}lMrd& z5RY8hN1j~SUjdI=pkXUCj6ypji#%zkxy!Rn{fD}CgLkfcmIIT+*ItKXeQs7^rlb!n|-^o#dK#&+e~=NQ@niy9)*aRGq7uI z*rQKTXPN4x9`#$F)|wr?eCP_`^0zbl2`6?yD6{G<>0^V)lT+K7WoTG%_ zOzVPwXywer3Z7}6_(I=W^WTh{$fH;0{`c=a`L~RijivlLut{Yjs9&|gH}xy|*kpfP z`%UpK|F9oB^-=h>p`T^=HA}V$cChvvy+T^+3@fundKP-?yc;u)&4BKt`St#w_=g{H zB)k-#AK>>O{h#+%Xd^mpbLsg2_jNxrvG-Ya zhL5{7?^nIDwS))nck^y!qA{FFVQU@doWRhr0@Lq59-VvAaXd7%!=;bE zW)<$N2fps0Z=YguJ}WZATuZVn`&WMNlx*Lj&}&NA+@rhyJV*YZ)w8;<4_dWqZi3Ca zNH#0=idM^^m387|TIK4cpR-Q?Gk!nix0ByjKV$CGTww(-#V207`K;;43FG<7&tf0& z?Hlg*O?K?#(?c8|gZ5qwpbglR*N(~hxWDwF?c;X+mG*i~cKt48_9c!?Y{S=D(lR9R z)$_8p=@r0n*K0mfdF%Ydy`J)Ay_6pft-R}p(1SaE+!&R}G1*IM!(hs4{ljwp-1^@% z<+J{gO8jRf+^wZ^BEKJoR^Il6&re+M;N$uZPK>twY43Sps|pwXN5$_w;CvMPs)RqaCrWehd;1Ld+2^}t&+bjZbB))(XZ)&TEh=jHc1DlaJszZAjj;SX zU+rgY3CxXMwI3Uc{xv^9zup%Q%#Wa(wzAgrHGISMLD`Ez){p%2XmwtS-dzGL_3eGYT1Q{r2dud~ z>kE}0H0f=uXDMB=nX!If-n)T1Vngyas;(+4NL|JAf5sYEz*@a0fG()z{W{(&@d??! zE~oBPVE$tIv(5s$k*Bxr?ck(36sP$pb=$Tj?c=>m?W6tm{gfWW=Jd~x@~-qkp0UDv zZJaL4+xV&nx40G97zl@Vvu|Q^treUn+q;r`1iUy^qA!}d8uy$jZ5Qk8zu+gm>0O`t zy!h{|PqB`4lKdZn2i~)r#s6A(a}Zp%ao04qZn@DhW*>)5C(-XY`VGF}&d1?3bA?JFS$%@{a-cI|suxass^s7TyN-pEpDOXx(_LpFbuyRt(y9Vpjs{Nk!q4t4d2gXze$uqP zE{@fgfV=ReY&V>K!rhGl4)Yfs@0wmf`PcZpYO!CB^dPoI2kT49UyToG8}miqvdUy&;N;{I*5OMFtYq0B zUy^>EEMAyz?{fryjoo>)!ON2p+SC40cyk4IvY-9O>)Bf_A0>AoZOI3>`eEUu#@R;h zhr5KfYF}%$u>JP`{hcIKZ85C)PqY9+RXrui`aLWKajbY@=<;bZRwG(UpVs_ zHy>xK{}=h5{axdp16?m1ZL|sws~*J*{hIUw&T@CtPpa=SY#bNPWmaY<`IjQMZvOPK zoO;KFGgr9z$FT>I{66u!kF~`IP9;2<@4whu#5;L?tiQRmUL;ymUoquN0+yZ`bmW%G ze&Nx9+pXqkVYs;l{alakXb%L(u(tl>Ggfft0p`~Q-wY;8g2XHEjrhbdQTDX2N2ga7 z`V8-N*WoL`_cOoBLnh9lj^FkK$1{)vAz&d2M1bm4DcrwD% zR~SfEgQwar{7iXpBQ9WN3FUo*HQxaz`i@twy#Ft!9S!_a$k}5&UA-t<;B2R#4uuCN z*#nFrJ>u2PS_yV`F?E&^vkq@$%bEF!(TVo@gy3tPAsP%n%$P7CIg~?t-!oR zw6ArLl@Y%u;xE&Fvk>%=uD$TzvD2}iOF93!7<)C1{F(DW1~7+WjQ#p$tZOk}SDqBM zb?YGf0l=+0-gTw$Nb}Ad?BNi$soj1X9}9kX-`#lHJtJ)$wZqeP*Ise=i(Y5eptJka z@}WV#<{CF^kF2%gwfLu5Cn!j!>#XMd`zy^IFh64d&4R!HbIwjBczNID=dy9J_n5sF zw-Ur?@9rYLgmVQMXTr(t10$mghfhk5CdQ64{>FW&@Xf!u{%b`;XR@cC^@ZsswvYM4 z0eoHiv5m2>o7t(aIn7N9H`HO~|vAdf!2h?8R z1Ng?C`=Dza>lw}aCqiH5CGX>3Z?P)g7R~oFk9oZ*lH?w-X5E!o$GzCnW%9|o<#o12 zCvtg&-`;DwR(acYDPyCzZPyi8;~rPL5_Y@RB5T6C==LyY`4r77Bj)4)J^{54KWV0o zHfqjbRX56^pf40pISSlAT4KJzM} z@1coSv(75YZDW(p&897B(FaHU3Z z@I8JB=wSL=0e!}acNizRE1<4H@#fi-bM50djs1~bZ%)(p4(7~J^47rH)%2JAg#H^%^j*`Z zBaF4unXUA5`VX?`+A$8kjH5QKo%g=TMqeNM`Gcc7z)yPZN1SPs>WeS8ZzbuINC!V? zo!h_P1b^@T)8cyWVMR`ml`W|lG02>|T)a@@xSwBuUyxrOzx?FSnTIOR8sc|K;%6l` z<4=;GL1};F|6ooZ^vZ{;gZ@=`Vw3i^e~pDOaLdNOF$S!deVBVr8SmP*vtFz-p~0;d z+-kwCO};W{BfqQG$%5#;e`Veq$9Hbm?VP`PMYx$Ytrb;eflLaSHviv{-<(3W&Hp#& zH+%DY{}*lR!C5weXsJI}e(m!IvhiKMm66OE_HC!=x9S7LC#(c-HV%%o-HU zT)_Huh;h-hV^F}{r=|a^&kG3t?f`dI3KuUv_=4js7RqD0xwbYp9@Wkj$boA2w^dZU0So=whD*c$8DY~Fu7y1--&mQAdy&mk3VkC@d5KE!Q{EEZORDk`6~x)*mi>_}b4O~U zd5)cw^@r>NuYDezTzn2OpZD@}C^Ywl{klhMnZG4cuCrrme{9WP2OVO>|M|I7AyR*F zLOgCmC&c0xC1wruH$<>!y9G6eRcEa^e*_wnU6IG z#)d7SFEhTQC;v_9=*45e`!)Z|hI-M(g*|3z=8xA>eiv!qx6_YU{mwJERFM9b(tvBt ze|J#U*LFKFdh;h~F6{M}xiV9QUa^QVdH<=byt!%rO`45oR(`_3*ZFR_@?2!} zLDrw9wX$?^yg8(PWLfiHz~;f0ZeFDElK!Q5YvE9;{>4-2*bJ`jJYvPiCVoZz((!*; zjtnqH*?J|s`Ma^~9xnQe$$NtS(uPdb0DFnkcV`2;k-oc)vo02K&(fj~3dWak&(fm4 zmO1;)rGX3M_rQ=`3BRZVqYM}`Puu@(yF10WtnuR5aQc1Uc=NwGG;;e_F8`{;znaSv zCG2~g=;7Z%%6s`2znR!JNB4^6F1*Kb{Fn3*V%E4L40`z)3y)U2GG^l^+;#)|h=+Gx zcz5NPXx@VDq@%4b!C!saDYTic-L1(S=C5#XFKkxwu7Hn=im)I*}^>qG!!%JPO_MAgo zmKG*cQ^J{x+28Nv*%do@aiX0&*E<-G_A~EJm1W_4g>pM6CpwA#^J&K}4=ud(&y^4Q zH*q7w;pf85Kk&e)0)|&UTzSZ)r}|R}UA5`5p1ctrH|NmPoTtQ`#e05$+c)B-f1Q;$ z`lPKNeC$6dX*nkmA|@?`K36`ImO4jc#T#klM&t3jf1)p`PqTkWw#zKe`gjG|@l!rR z`KXmXrg%Z=%kDJp5>#5$xrb49cCY2B>!k8Z%PF7RhO9oDbWD9pwCD#dM=p=Vr)S67OjYHL+vU9+2B{2%`E z;@?``I@RqzhjR2Eei?IKL6ote#u*DHF&5N1V?plyfo9AMpPTsR6B@JJIh>;poqfOa z9lp1Dc<$C;Wb|RyKis<8l_}c~Et*zSUT3wsvg(zW$IN`Xr@UIkb?kbUeuy1a%9%HQ zpLHc=R#=?1V$NM)?j~J*m{>vOF|_()gRyt-aptU}=$|GXe_R~9IdpJp<^$H$nEPfb z4i-A{V9ULqxQ9rgzo8DA$KrX3nz^%%<$b?=Cz4@TFFv2JZH9^1 z%OPUF7RfHBPySDF)<$vj{t6vx_m%9J{8MP(n>^&|a~DQ%l?x+llf45B@A#PAPwp9C z(HEDFWzLQ+5U&0k7DF$8!z90x#+gL3)_tjb7XH2&=;$i+bqakgS&m3&@9K|^NWC0` z#)Zg4kM!d+mnj{+z3fNOd7|#~S~sT0+{2~!CUBKr@a`uUzPa-Msf^psto*N`Y_9wZ z5BQ!5gQJz=OkwnhpBUCi%OImeJ7{J>(0--{bS|-=Euzc?T?wi>0{>K^fB|V|Csro``CoRjr(+j5+c{T8tpT4}c>bHO(J2P5$HDE-a{ zreqXfqcwWwAk#-^oM6w7{Kl=!-9^*XV2y2oL}2xaRnlQvuO#o4Iz!UxcN0D(}YrKf@Rlp-dUE|LYis)-h%+W=vtN`fwF? zLkIp1?W;?jgATHE&bWW$&(B4#V;|{kfV$2n~=|C z4QnErd(N~1hczeD`dsNlWydVygk@`KUOfrFp4L(;`uRHFf);D>xdctTRp4+LdmggB zSlc)CI(5CqPve&Bi@m7?J&Z5*+d1|`w|q|Toqyfm@96#e{~!Eqc>47G{Wa@+AD6#x zQRd_D_w#4q?+=B;N8#^Pl{SBwkN&m%l|0{+!{4_TKFwX z1*|b{URQo|?XQsL!A+MZCM|XClAgBxBM!ZD{VQ&L6Y-H&wM~*gtlRbwJ}$m~bV^`F zWm0=zEY`ebtAs79$JpV`Z%sQx`_Xf`b@eEZ9euj*esrGd$i>0McW8Xj>BqM(pB}%V z;WL!K`}F1gqR~QwUxT+DE`CC0R3GkkyO^xyr8cM~pa-tvhbte(=4PJiZA%Y+{r2?uSO?GWJ#~if?PvJ@-Wk3h>HYg@ z`qM6}X(7xV(Ka2ef6(_hyECM z3V2`onDD}8eK9W)It9GXp8{TY|M+w7{E{CwgiRt_!RS1z$msA0^+iH|W9C!=?6H{S zo4J-`TDH}!ratCd%*?a!0Wi<{DD$Ikej0yQcD_ASdnflrG7GSYimh8ZSwEZ}BQ9F+ z3&Pxc9hhqF*-HifVRIvMeDBY~eyXB=?Nik{l+K*i*otpyR|FqdHYP;>D)<>4t#0zKM}`Z>?g;+b%HZNG><)%KliSj^Be-V;Dft`vsdQY z_W~Br<$uPg#uo6KfE~)(FKei~YNFSc*XOLEPT0r!CB$8rHPi|CA+R;Iwub+4i^0jP zfrdAaZpBZp@9FzZY`It-Y5MIUROdZux%6$h)chgGmuw_Z#kSEqC#wKPuK2d`c_*Os{+P-Pl$jKRS z+oF45D@jxQkoFTQpT1X@<>OoQcfZF*=9_ZWw=Qp%J#6ya+OJvpz4bl#b+ZP)sT$fY za%ih{B|q>}zr+85{VxBiISYn$MA7cwh>zF$V-@iSigPe=M3hO53}4Lv#lVgrXYy~myp1AfN>^GG8B1wR z7(8$9rkxWnqa%L# zv!ff%N*yh=^4`*!0cqywv8xxxWnxY&ZA66E$%(h z83QGW)y|%4_l&N@mt0$J$}!2To4)lF>AyckdRK0G1>+-ay$yK@;16lDEcQn0+#>(R zWnHeW>{(|%d(>^7^i0?KsW&}f_H6}@MD^7RPDZZVX zlddxg)*-*TvwS@|F&(vaZX>a<_fV(qYcjE)__L~XCm#B{nmJq={XOIS6WY5wUSp5$ zX=xf0og>fI}v7Soqp8GyAFFA78Rg{%GcQ4sy&ag3Sp7iUONB+DqDMrs@AI-qVn-Ts* zVnN@qnM1|G+;N3J%#V&XaS5`2&}->Yj63-4w9ed$Zi_zmS>nP18|%qG>A7>5Z!vyj z%T_bzwrOJPILq_rtzWvDdDyO5+wU-I)oxwrlkR$a-RBzGu)O6}Hb&Vp_HVmobq1Ye z=rs=vjgKZTYb@L0>j%iP|M&-Q)N+4kn{$riP}W}cUX2|3Sq~>B=tX^#9`d%u8?)X6 zch!sRJg0i8Pqv?Q=$CJH<=T>WhOqq5^|#0u}hF3Sw&Oc5Kd%}*0&;N0*2E8<5@ zpW}Xa=?yQuyNtb)g;xeV@ku)E2lI1aGQOhs%iX@bRdBI&&>y6QGrh)x<=9haec6R+ z_ZxT2e%^tVyM9@eQ~tyQy_f%XPI>j=7UJ`K__r!~>fP901Btc5*9VWr$+pwnLUTg- z%JnWj>0P?rYj3&q&&B5=&QJ9AL$^H-<>2F%x5w9Pyt~GonzNB%^$&FZaK_sm$V{X^ zx&u6H*tQMZy3SW#rx?rdg=WrepV`M+1-#m|7}?@%HMLVe{F=M0(AkOn$4?l$wQ6V7 zzJrYM=T-8CpotqF;?4ib2H+sy!=XbP{WHdRAlp60ntoMWdv?tHd6Uk9oj`o4+Yg*I zjVoJ$-%dFb&%=7e3D#=$&RL~NeJdT{OQz6A>_Z7{e8us_JJwVbl2tfXwtYWDo+F)pq@@8tSoe?@(t zqP`bSQ(p)>&-yWE7BTl4>m6U6zW$rP$@X>c`0C1^9p94e@5NTIb1h>_iOyGMURJ{S z209-{v>U1z^0ARjiZksskKZeMm9_`ar-nxKksdn7vA>&z1A3v&Gro7%pA%1^dKSS~ zBd^4x3|9X`KDz6_LiH~+bMYUjeq6hPd*B9ds?5EZgA$vF!PWe2q61I+^5~CO zvTv4q>AU+3{j4;xsDStk))hMd{F}?+OzLIB+FSZIh z=hE*lT5)2P&c*sOPxbraux0c?-GR6{ukK&)nFUF|gLpRj)8JQ#b25F8I-~4yDgj;{ z<3$X=3^weRn%}a9jhxgIyQOm?YlyKk`Dp_jfK~ zmTNzq37+iT-r(K;SHk;;Q^3396!3EWGZpOF*W6a^u36|?9b33!#?R%{nM<=9bH2A|?2L~}tTAVR3{HF{Kg%n{FJA8OsW<;ju6_0MZrF~! zh`tnzkOSjP_Ts;vqWr*9ls}XsAJ)0ZTzq)qej~3|=55AY=}WE8$wu_@R(QS7`6<6g z_T2t`R}MV_;vpAKG|Y!&cOtntXHr-t{-Q^0!+ zetY$g)*?8^!mO#dxN1BRzR?_ft29>`GS=)}=;!H=!vAHbzWq)=bm?(j4n6X3JF$v- z{=wqDT`w(7zjkP`!Gn8l|I4MX#=_*^p9ZEg4y|xuqNly|Ey|&Xbg{%{idU2}hTiaK@Hy=eah zPrdEfw44XfEsu}o&|f;#D?{Iya%vgE*WN9Yx&CdJzoT>Dt3Bse^#aqO(I;J)@Zpah zon6IPBEOC8Kg{kslrGnwTc6#YtiN9EF>4s6Pxv=Ry8A>={V~v~*OjNLGt}qpBZ@~4 zVJ8~93O~;d<|Fd;)@x1$?_8TKOIOXOIfsV%Qup|bohUu(^&z%}ddiYluH5z(<s0t{J`Jqzdtl|_=k@nA5?@!p zY4OvO@YB~q`#7|3$Ip`o{T46GTP;4^2_N>u2l<-Xm`AtL7baPGJM-X+?nl!;QCCmu z&h;N_kC%K<^bf@ay5APV1I>SJ+Pgk?_l|1!-JO?b{Zu{MpOwdpu*qy#J>~Cyr|oAN zzs@~Hd33Mg?MdZx<}a>{BAZ4=Cn2MfPw6zf&DuAud%}u0J}8=Cn`z$Q(gOqXl=`j0 z|ZL{%Ob0XMKb6KQCVBH$1C>XEhF9!-bdTFYqhReS4Wc}RP$7D|{ZxA2mlI1?L z50ZPP3OBGWxRw1SX<$9dSgbSQ>iB=@Rr^RUI$C$uh} z^$P_zZf2i%yP=)hr?&Q#UHMUZORpQJId%TdrFVpzH!Lhzz4mz3-l`$~)y3!s<@ffF znlbfzCXHEtbkdj|{MwJ=Q~2&8^c1+Qr~x;4J5KeuxUKos>OE_I^`oO}e)SH&4~{+t zjy4|l9)2%um)@$^=g_&rp|kuvqVosDf{Z02WKe_iVY^gH@R{yO2r-rghDWrOgGg^iCy za_?%nKFo%zg(RUh!ZdSWEQyyu9;UViz!rElVQoLD9Om1ZucxZx_rEXRi>-e#Uv zX~`GUH{ruqAR4;y%k2}ieq#;3fHiFWKb-k>ioP7g7Cluxeg4k2At+~Hxqbkx8_8!9 zKtJ{uJl@SY5hiU?DeZpyLZv8pu3r(W#`l>;Rdg^YZ-WPP968-g=ana1kN1oa<<>02Hb8h|Z z(UF~pkG^IV?3_Dv$)08BZaF&YH@`SKH+B5zn^xglZ!LUt^_vTeR*&}edFxQ1Xv{O? z0vQ*E%DhgVHx|CW`gQs-=YhR-AW$&oz`~-pl<$MW9Z%1046g35tQSjZo7!$MKT#iV zBcA@;?)GKv3)z@0PW#@@Qg**Iv9 zKupUU#nY`!;CAQR?anuFGT-87C)ZP6unpeu`<5l>KAu zM+VQ^%M&H+-+R!;n>(dGVeXZGfOp!p%UXDLqMCNxm(z}+PCItf4&f#_@mF=@xoj4F zSp9k+davRQ-~39(RPI5UQ1M&e{5AZqw8hpC^3-lFaPll7eHQnaXm5$e5%K;N&SoQT zr^@)8_Ex}ittA1gQ)PS(eUvVq+4C5G_nMMR-`x9Igmb{b85vzx(+ke)b8xQj1?QR^ zoYz|N8!~pu_M;C8*X;Vf)3=dbwXYgEYvK$u(NMoO+$aRdNy$Pg~p8^>6~bEjCJJ65{((aH*ta&SC%V2Cr!WZxR3L?k(ny$ z*t$N@S;;eqj@XL4^hjH7Wxi8FY!fg_!EL7MBkxFX>|!2tz`;%D&>tA{U>NV{!#qYsA5 z@o$bF4Q<|KY_8x8v}(1H_Hh>M_)+Lzos~8U{X2?0#k5QHkK`V^P|8o+3UY8LNVZpi z19>l^tlPFa=o+)g@3iScwUP2yxNSUWm7ht?H2G7+(k{qQr?r#_@TxNbj9O$=xL9r?EV(6nPl=U}gv(jJv5C9lSb zH1?~?DF0^l2W&}Xa7&uL`Du-7S7hJE>;2| z5&D4odUqOoft6P3>;?AXRO;x)C}T%0<8Ku!yA8h zoYF+Y8^7UAg(ps_j{9b3I=qpdFudVBAj2E#6mOI+-stIbWTWg1vSHVsl?}UoTQ=PK zPbnKY^?PMQej|;KKJ=##--LxOE8mPRgPzi5vN4U%h%wQJ{z0dXx6lQbxp~k9;(>nh zBmG9az|L{|*DQ3q>_+$f@AVEo|2O^1_JHf>iI@v|Op0=JjzosCZx!W_AO2oW( zPL>7Yd)lxKE%xJ;@Jki=l3_h-{mHJ{Kr(S9ZDQ<~|IF^!laEQ)2#)(FdF|Y8neq8e z?q5GK;1k*Ld8U;~$FOa+?!^Aun02}0S(c#-=C{y?TTI;QkVFaJN>~FlGDH3pNPH`6`hjHoc7Hq zmvh;7qVK7TX)n(&agL94cm?x$oAx&t+SiwJmx5x+CXL~)((vZNS9h&yBu%oHzLoRN zh*Mg?yZ_UiKc;k(_c9Y__8ry}j^Au$9>{?a0LIrnFb)9YOT2gTTgGpWzUkbx<3;BD zvA<00TD4ed*awO=wd!vswg7s&;a9-7Deo_r7SejC5v@%u-8(>mL+ze%KtdwUps zZXwOvo)l%~DWB7x9pEyB_n-5dt#q~L*jUq^yC@$f&0BsKqsO# zKGE8jzATwxJWNHAd-Tw?D$iWvKF%$%W&UJ;?5XG}K33vuv&-3YOxH*Bgy5nJz5KAx z^UU(o_)*Xs+$V14yU(z1$E2ZW-eKH*J?uB>2hd*!tS@h#YAxQw`C{|7F>Xq4%pp$Z zb$nMpO7%_5DGMh*&AM|*nUxF``;tnl!jJU|duY~$`<1V+_hr^l7k-%C!h0=sRXFDi zz{YpCOQ6gAJZS7W$ne4<5tCo&9Tbcp{?fpw>Ug$C03$s4tJH) zFJ%*X^|v`c#@t7qjTiHwpGtOJmcTw(7U5h@wNYn!wW6;yx8^STF{Q^pSXLV-o~L<~ zbfeN4pG}%qRdve$KuNkS_+VHCF4(_3Td+Ev%WLn#cefr>Mi1k9-y& zv=+WzoZkkX#(%~F<1c=MGa>(4_?Bc~<);#rjMtYqycTc&6PZ}y;iY)$?QiKN)X7+a zABQ!ua3(qPAx^xX@zN3pCr)5vX; z_J0|BmbG&q=k5Ekef?MQyo~47JQ;sA*I$M_YR|p?U(B4>PyX#Ex|r|z5^YiX3NYIm z3OVb%D2czs=p)Y3Un$t`SiJ}tcKw0@aQ@jY`18lr}SF^`MYapkC z(Q=gy13r0Syz9WwI9-Ad(%>GRU~o@i^QAoa?^9m!0Kd{S$&~RQ*)nzP@9nn84shgV zw-34T+AOZFvE?&+=CiTmkhOYrKn-PBH%in`u=k}bWBzj-o;TixZ%6(67t5R57uffw ztbvzR@_UBH8+yDX{Gd@_2YYU?H3R5s$((GtAhvxPn##v`y<@@Mx12&P${Q1d&l&79MiG z>-^gi>Nm0oPb2Jc`w=$utf%fS_d^5Zi8J_gUT7d`>`dhHE~jiO`J?n-?GcL7e~ZOX> zRf$We)0PeUyl&y`j03wh2AF)<2c_hb+*g20sY6>Yjuq7Bg%ieiV|}wYu?Bx~8)ugr zU5vo#=^blShv*a{o?CMneK$JI)_G<;mi)T&9AeiyAIHxld8%GlXU6INyc=EBa+%p< z;D^@{#vgp)%akw1xehwpQ2LNKhI#Tg3J29Iz2W+aCt_EWhVxCivRm>K^1Y6zx+uZg z@Ec~HWCiD?*`GyR#60@>^x2m6qV%M2b76RGLbWBueO9TyR`W*I#ccZ6_JZ37z2k#$ zN;B39k5FoGB8BWKHq;%LMXUe#Vs>0)tTsH-xHhrs{KTvQ;nAwI7X0o4PsYte+3oqw zCBWj`z9&Nu&0;P%^Vo@ktR3gtZ$;=h?|nqs_?GPYQ3*0|s`aDC%z8z3y_PjXbi@?J zroJfug7kCq%|<>9Q>BlVoa^Au~CTF)_iw-{ei=yJhZ5WOZbn=?Hw zVvaY3-yE&WS;3vJSb?4S+ymzunBUN1&VcHZXyfjx8~=iSKzF90t76mbw%cnr8n1tU z)~U~f?X^AoK6ZO{sXh2}dTY<71=~MTdv;mCPihf6K*s*6yL_K zs@J2LZ+*3Q9AgfS|LK`O+UKWb=PN13M%{UJH@c{jxRN#OcSavST(K-c+X8(HDz?Z5xpp6xF@ zf7HN&HlnG?!<|gkPM+AbukR_l`+FwO8u<^ovtwox>uvmBMQlWgU~)GTftc^b8r{w-Y zoO9f`%qy?%oc@ITGrgRjCi&@%2JH2zzv2GvXkL%|x6^{ldFwhWxpiGIF_SY%XL7Ga zYt;Flu@l_3l(L7aq|lag=_cEM%^LJP>;mk`H0xT(Be5eR5>t@J^aR$A&$YI+&SRWr z9FDET9+^mNB08Eon|9V8uYIcC`pT1&&|B?G(ecp1x!Zl*Qr1t2Ey|?oSi7bl*>YZy zxLk07R|34!<)2TM{Fw2op8F=UeR14Flr44o-vMyY{XPfgaKG)+aOO}Qx)0nn4{YNn zUs(q~trhi~JJy_G*B&^FdmQ@W*D5&NhnSmmj4|io>SNz!?3nh?vd{Y-_9H*<;-`AA z791a7y?zQbxPkuzMd{rB>dq_Is0q~23Gxy|KyVa(9nX`YLIr}FczUSCv+I7i9D|yMommZt;;^&iJ2cPSI zB3tyV!x7;#6MPm}ncvT_GKcQt4BZNB{3v{(J$77OcyqlOPlhKt;H~aW{0=y|xE#6< zd}e}61vo9hH#UPk2H>SwDdE%_4QGDQ`IWtY%p1_~$7*Z$Kx;rl|BW{7zXYCr{-)@5(ffSLa`sxfrUJES7|H#^U#Cfcbk>zxRp7Z8KZ_X4-9U+ zpYs$tZiPmaJM^GzSO*8nx8BCNh`47X4<8uw7$b&aOBOn@UU?h8 z2wa!`9l$&YyfpOIT}wJAJ0GhOM=UNAAiRNxv>XI$9nl=@q$2CR{r=MNynbW%Z z*|rz5`mglAT-}-V^L>&2!&b#;%W zYwTDr^X*R7{zG=G*RHA?{F!g`k}r01By)%I4KOibyQ*&Xqrc)$8r!cS*sNzYd1ND~ zU!~06&hwG`z{baKKCz0t&1;BvP`+6W_07brn|mL6lm}0{+*FJV_l$b;R4W9A;F=H=#;@P_O ztR07VJ?kVkEGJf$`JMX0EeoD<8m^*atRXX=-{F(Hb{Qie>ti7zTmR(`i zZr;y0K5Iu#pKV?XCKt|P z(!A>hcVXLk*G`Y4??$jzXPu8f9DNf_g_~=KaX%e)cr=dPz*@NI7p>?2V7PNTHgxot zk#hV~<0GWCLd&px7C*hj?5m2DcCCu=9^t*U44()0#K!d9-*R~1 z#UlhB3($`X0v9J{73e%mYfB`kaooRg33YK+&U_zjiO@#onI>*P>;6sfM=}kMX_Mcq zOZ0bPZ69+ItbYKO@`KM2E6jQzd%t~l{v!*bMJMIIll=e4cb$1tdxxyFg@ ztYkcLX&oa5)X+N5njqSECv#}`@6as8dO!-<{XX9& z=g{tYXjej-=?hKcO<(v|r_5f;tmRudKgr?;I_vHk{xzngmFZ-4O@Ubg&q*Yr)IbI><`9Wrcq zx?`AGv+YN_XK_zsBpxO1&oc-<^V{6zyGJD}Gt6wD!a|HVm8?C&5SVI!K!LJOs%yADFa*j5>wwF%I7ao#$oqR^N zStoY)@IM0nZv4(KXou@xbH~@wm-N&ZW%!J?jXCzx652HafBR%;R)KBJc>=^D20Py! zWlfhqTDG#{tMFBAlJ81;JnS~vu@}N)DgALPeQz6c_&oN0?}ILH&?ldzo%`7DeHSoa z4Ot27lEEF=+gnouI^Td+&kf@~QFu0bQQyR<{!<$Yec|%rvwfXwhf}xGeP<;`Jv{fJ zLSKGEo-c3b5XwInJZpE+hg0@ebObs}%ba|RMkGdEkS$+Y+IxAe>vVM0?a_T6!clk$ zAK|s(jR&3_1?|E2@cvbePph4Wm?M0jZ(Bol+g{}?l0w?Il{~~ZPG3s<_`mZy;B26M zXKGjJ1wHXfa))-FuW0AFIqh1@UEMZadbVpVI^Rndw|qY357MsZtip!k{`rTa;FI^} z15d`lcND+m@#x+@)(+a%r@L*MD?McDWzE-@_pbak8?2V!Y#7+`n>RwQJ{{vXnqMF7 zw=M5KFiGJ{HIs9zse?!AO_*pA{4z{M7boklu@Vtk( zJGNo2ua9Z>4S8qnz8iivil5xcZI>UBXt*F-zLc{}dn>PYze~IO`1&*m$Emb?D(xNv zAFm(r>eGe%@=9KPx@WtK;A`Q=a>~BJ9=>&)dzYkNKC|$()&Cc5UEHrHuJe3_y|&fQ zc+p#1{frwQr>%uWwDBu>tM?IeyPthT_8u&|jrj%Ego~iXR{Aw@sng9m;7IInY=uLN z&jrNS$(NBr&h5Qe;mr^I(OyqOk8Qyxu}OR7>WRBgu^yy-YaRGl+NOjvcXC%ccfap! zwelOJ>olLf5r0kUV(d=rj{(rP1G^!OU17tw_b*fdU$ENBnCoLtaE9DY?4E|Vi3?CU zmDhLE4(hsEF))HTlJN!G!K-_E=+F3&#G?P!HR2<)v(o#zH8eVy~Z z#(6e6>EChQS3A#dIq9pM_kZT8JK85({SuQ4A2s@N8G2f@|LL#0rb}1;nApi&yk>w` zx4vfovAbWoKYRL(&SoE@Xz|aKb@lai=ohbjCx4sx$J{L=d+b_hwgDY}C%Vk`_vCRV zqt-y>+sNOzm~%?Rt7p*7cQRfXn!@+B==(NkIh?YU3xlhxEdS~UX_sg$yD<%4yfl`- zvDJffigSXzIRDZ!)@aOe@gJRYAC$(mV#c*)=o!t;-7`W)VgD2}9xP)#2rwQ5(I55k zzKObi(S{iJf7f!q(ptu1lWv`rsN-H^$yR`Iz|K1&Q8z4`*ALyidF7{XM@IyqR~<-V)rZe>^plrKO4G*83PvJ zTUpERVSbXgzK*;U@f6>C$OGg2um8K}T!R1+Gk5q`Xz88v7@Ldx>MOCm_c$`-(l=@3 zBRl_2As5Mi!Jf9XCTFiV*?e^7i1b6@;?D8Ds&*rDy|r7myJ;_Sa))Gtey6-%cxv|r zwD%HzL-`4|>o2&?Y0s}b_EZt{^se4d#5a5}rfC<&6Wmqq~G}!}wqG2mVhz!5U7# zsmU7r$D)yJ0>$B1a3*CRboI6Ud=1Y4cO-t;sr?EXihN=2X3wA3$~vQe`Q+q=V7PfJ zaVjjPaxkhZ4FCjatqt41y z2IIyr6I(;yt)oBEmnD;_C+M>e!V~)c8uHBGdn;+tfm4$@*K;d4F2**vvtM4rf!nlK zq~P$O^Qjk}D|WR7yi>PYnJVyRouN5}FFPEZkxYYAih2hT-)3y`+u2XbdiA=?(b2bZ zUfX3|tLpidnrZX@JES*he)L=Jf&u?;Dc{ZE%#XeQ4|Fz^jSNWkcaWI3UXE6>TbCtra$`hoD`tDE0Krzrl@lzZr66N`Jf%AwP5g+C^J8gnMr-7Z!- zbh^<^|1xnsoV7MW>Gb(2ZhDQKzgX#v50#`3r0!>_Cnf%Fsz_|Z=k;Cc{yA&oKU0i^ z^y>^O)1-6z=2pFou5Vso<3+sgHPlnPxvz~^^QFLhPq1dtHgs?v>Bo3~LTO_~J7UF< z?_$e;_&xa320d$5PEOuAY-&>b(Mw5tjdSB(qwk3?i{VRZti`zt`3>qz((^04@&ruv zmA3c0rmqE8_9(1u;zwJKSfeh5W?$X>5N%ma+SB~L#qXQ^v_7vm?@Dw@8hfb{U6PLS zM3@YOjHKqdwxz^)u)a?Kf{Z#&7(JzJ|&#F$xXk*PJcz| z(Qsy}n?Bv<(T|m0L7WTeEvAo+N>sA`_(P>nL_X|vh`@C_`eCfCh#+| zM;z!HaGRJj9v$G^B>A#7c&w^;8y!OnY>zWm7)(+1W zsm~(^|Jg`e&;zms7g<_owa0L+=NY@_ig@#2@f)3~Gxen}n?6AwiH}TNNc^J@-@MNP zF0zl$$k?eq?$g4~U7@voU|uQx)e0R2b2jVV?t2O6Nb1Zv?LF`Z{mJx%cysI6c(boC zf3!W0+3`b?+aB-W*z^7F%>iUeG;qhu2AAGu{Lk)Tru|1s;zefOTr#}U+$Uaoi`^gU zusciHlcl~<%K!FwRlKo;xqRvEoD(_lb4k^aXZd$FGB@u}-`Ec>ml;}l?E^QyC2x%U zCS@zG!^alfIqCScy^%}8Pu8=3U0;ap#Qie(wwhxDt;DQQq#=TBM!p8sE1S5Cv1l^= z^*|thOc#A@7JYLL}86vYbEHzIu%L(uo1tc%BgPYm%q7?Y{CfGAJ81j~F$b z_pG%AjRQW7NyxNxF7awc&f1Wt_U)DB?<2dd$R|F^%Pnv%=Gj7<&3Y^HI6P#>8On!L zB_CDG0Cc4tt83H5j@w}lVBkM08vq&femiYB*S@MF9vgqxAM)sD#1FI%z_zFhm%jpC zL;|<{cjd%0t#>7e&(@1N1OG8Y~QMTomc|!iH#yg;R}!NnKbVQM}vQU z^=NR_!J{<`C#|kOe#cYs<8?cO;cxAk^uV)67cI9|XX~|PhRbXn8`kYZ7jFC}_4j)I zD17zW_KT>04K{R$`t7zvj%n?Al45fUdZwvei-D{2!c?vTdnM)E-QcyU-yy#8ktZf) zegoWSKzqI1yCOU`_E4*NDf%Z>=E{!!%@O}@{@dqaWY>rGs|OKIP4c*zenW#;2s(^2(*RuYDcvYzp5 z+yZ;9(Lq}`ROOl2#A}H+>cFn*n!~TQf3mWx>qtp>Y$E+Ea#j{dbQFAovw!mvci{(5 zwOw1@q8M0gsfwWWudT#tgoBHo{=*B-97grta&o=rI`v))><#ft6CJC$516w6I@*He zv+>_!m^ap7S1gEHiP=NL+Kanl4s?3MD%knP@nw&1=vUaV-^$;4 z06e6Rw70jncK?!kjZL{d&)AgfoI8kuf4g{34f?lm;^I9q{C={Px@gZq+EbLb^yx9a z@RN-XjXBo-C*S6p&;9e!dd}*2{8;Uilkz4t4EF_h#?a}t#1`p{pLrj4P4~t=3lGIV zE3GYNpYby12k;%*p}Quio_6Y~4=#P$<->Z;8z`g==pg*W!~{cwe}o1q(-tGXgLbyC z{sA41>SFHWoBg#t+b(E2I%T(6qhB$LI94+k8OeFOcYVM0RH?l9LigJydgXBX;_SPQF z1K!=C_Q)55Ei%JykIpx5a`DFI{eO*j4Kc*rYi(kPXTwk7j?OV{j(OTFI-36Gk^AwE zyqjJ z+v$JM1EN)RY_f@+ETvo;7$wUqO}u|=gI!j!4P}%qqih~!iMvkzH)Vx~7nf4jmP|iy z8JS2wK|d$PsTCPZ_dO?>juBUm{QZh^I?@f(l5M7s1r@>lwNH-9 zW8DGU;y__xgZ5(0`LOHC)+yjae^Cs5$5Jb^AKSQHHgce{IX!4n`HWw1=h3R0k_XP4 zRDQ4)oG-@a#J+9AcHFOVZ)rI5jh~YTdC{G)irq@lhSn+Mkxcy{oY@UcY`>~vhdDC` z8|=S+f__8y2b(xg+X_FqXrQk_YoQVLq?SEYdQ33tw~~kF4_om6@GK>t;>JV+|3&dV z5zfOD{(({PJu&`oV}8@d`fH5)R%D+&w3BkYm&C^ z(gKsqC3mxba9KI}XxD~ap~U`ZIMY;^-;g_gtOu5@!^s2Q9jl9y9pKQh&R^aU^Bdhg z#lfqIeG0wlMe1A;>x)eAtU;%1U!Lk2icDq4E!%dhdBh%b!oX?)XUiIu_{;O2vBuNh zFOb)(>+j@Dv3HQWeb(@Y-w72a78G!=d99T!LDyGc2lvJ9Uq>I8&r0-LPam(PkEcIC zpQG2-eNfP?*NA67uY(u@L+3Kv1~l|93zrY=WxxL+?DrD`viI?5zT3W?b2+fHW_NY% z+F)HqOriWF{$%?D>|2gm3F17HZOD1LFMEUP>^+o!_QPXrOxwnB?!s|=%CZrriPo}1 z@qwqo(X~Hqe_=L0;t$A|*G_WhPFJgZK{(@{M<^T0wKeoSPQO@y?b3u_u-LK^KN-wf z74+|a>nC4;mDxI&-#~uM1G@snhvhGCv5LE4c+cBA@Pw7@c*>Xj^LbY0nr{E4?O%24 z{9W-i_g*us@TR{XHsq$^$Yi~BX(E3AzG*EtjJnC1JL;yHVXG5eIX#X&Ix}u{KBlMT z>rA45W?KHvH}RV%kfR8;X=GUGy%EmX@z?L`AF&3G_s93$7~w1%|1ElQj>?emjsB^l zZi)am_Zhyr@FqhG=jp#cJWYCZ5zlSlQbL*Q!`5#9{clYRkmi;z176Gn&- zbzv{6%EEdDn8IT_PnEwuZtV^>y)`YrDLgGmxq8w@@Z7+2GSAm|&f$50=STUjvMQ%C z^}{Z@cf+ue_tp;^ac|sd-=fgIX-iIn&kpbs4zKbQ4zKYP4zKeR4%b`0-G!mIru7Sj zrxi{ebyMM8qi!0_b2QKEd0x+R9?y9^m-AfC^97zS@ccQ?pY!}9&p-0~zbLP|Rj=w) zeX2|KsE)!5F1dH~1()7?{RN-AcishK?=8Gw4DT279DT3#w+`Q}IOl8pZ)svRT<`Pm zo?5bR+O(4JG>w&!<5Tup*V(dM!c%e-;VIt7c#8M+JVombJPoaRiq;2siq?hTbtV}7 z$a5w*!e{LV-17-s^{u}apZ|;Us#|mr4TQJa{u)2EIW#PE?=1TA`eDQG-H+^sdEdeR zmVRzObrlFxaNV6|g{(xpOf~~gd=1}0uQp;w#4ir(PUJ1$W9?A=+dHQ`j;-(k<7x%| zk`K^{UVZ6;KQZ8(?0FbV`zE#5%5O@Q- z;Z^kt??Ml}&>7%`fEVh9H?3EA*L0R)e^mGf9zH~yhx!-q`EzXI&hNZmk!RY_$!`Q?Icj(c&J)N|ezT_}6%Ox? zlg|F*47O8dDSGZ5Z2h}$os{Xv+*7_eAG))or9Wrh4BH3}yW_r!w}s0G%p>E}Yq2-j zg~5IR^lWKj7&c%Wes3x6-ZqMh~_8@Z}0O8g_R7s30h;n5=KT!PJ70S;lw3ON3X zyCnp}`zIO)p>Zw`>fpiC%=a5+6T#}<*_Tetp4?h@~F)``1cG@frI7oX)z)}QN7K6+swx$L4~^6^jRC6|xS zPk#NHf@D0u@SeqI72Q*RZl8M|y|C{+%P#77&*Pu$f6wyqXWjGlYX;ntE06K~Fz_mY z7Xe-rc$0v4E$}7-Zwm0H0`EHDT@Sn)fHw_zHv;b_;N5%@ydxKfn?E3yy4XL|#FjEg zUa?^NrxR6y;@ldb|zdzJ=9Ja zs;#usA$UQQPDjw%c4~){b8-Qronmd9BbU72-`acU?6Y%%sD0=CXY%>%?6Ys{xvpnD z>silQE8n?)m+$^C=l&Oc_eVJQ|HgNJq;vmH-+ks08T{|az8|{4x&MXi`&A!s?k~%} z|I~Qr{_WZKn~R6C z_pdhh#}#im?2+ROE1GS2jf?p2hwb;HzWX6tF5|4NzH-jB-?z49-w)aRA7?$7eZSe} z|2XTB?E9f{rkrB=){*nE&zb)HK)k_>cV*%Y%KhrBitOnswPI^uTY2ApeC~(HD_B&# z?~#X#S3RP9gRR70){cl|o{fpjet3*E+kN&XzPi@Oc?+8{PqsE#{<7|k=3dWOVtEdX z?m0G`9hBd|(ZaYu@p*#N&i^*gYy9Yx%XY+Pps92(S6ro z{8ta)pII+q>k#<6{RdkHnf^nH9HY+fzDF7wBIyT2!%ZFG4&=5gcK^rDr<;ln`THxW&CqZ~#e1s<+au{)MZ+c!4cz-v(eQO> zaA0)Lvf+5^L9u8!(G>Ugk;?h*utS55zuiBw@z3rbrN&l(f8~3_zqBI#G2uVDBBMv# zD-r%9E7C5E?pZb*FaE!I%f&y_CmT5kf4e_sk7pWXjUjjaa%n)ir5W7@!cYjm{-|LXKU zgMT&n+c3Ik*>Jr0Zydls)93uoApAdZd^@_Y{^kL(`4WWW(s5WyA5(GO&K_Xw{X^A+xrId(qy;B1+)9|qbTE`&;E{k!|u$J3Gd3n6jRMZrST`Z`kpLltZu9zRVS0I8o)$%lSRiOBtf~fN0`(7QN21Z#&Nn zz1%bOau#fTlZ)Qv1N4$dX>EDK8+-a&%6r-)Yqhy9{d!k1s6jkfogHI2(d^*C`91T1 zGQ@*>MJK-!uJ`A^PWtMt*0}?>w9CJTvrj&(P1=(9by+{eNH{sa@Bjhad3KKV}H}PYg+a zrH}qf2Zzc(0{xYS{sKc|rH_95*=zV)Cqk7moBnLrx}S^w?|bMU7s##yFHv4D`Jdpu zocbTE_R(MM&|m#WpugJC|E!_0+DE_r>`~{LO@B7*6QSyy^xx&BKbTGbH-@4=G!*?c zKKg4M`fL6O^w-$+-_Tg&qu+jZoAb=3KO6RmP)$zyXL;!lXVX7#DEbSAqW?x8{Wm)F z-}pzM|3bYo8X|G<1~xBibS%%*?LQ1p)+ivBtu{dErg zb$+Je(Xsq+mZ$EntpX@}a&Z+;|uysFY{rA#8Dx3b7C@*LIFS6+mF+a!nbjIh2 z9wwIbhJUQ*M1K=Js7dSG_#S<5m2qcjO?toRZoy|DGp!W{nj z7ri`y2CpBmiSoSp)$)H%ln+6FWH9}=%uoFYprMu zSr@*=Z#On_3)gzKlxJ7*yNBN^f;Q}1I1BazoVy(yyuSQQFa6NqrT->}{wbCfyo@8l zQOt26#|#e3^XK{pCz^)fPxOC=Kc6@Qe@fp4e}2vU%>f$$4PO2X&+sPl6K3jejx7zF6D-NBHy4XW-AKcfp^}X7OiR7JpV`_%jOrjDkO- z;163(TchC5sNDS7J_LUr{2$@Z!ZYya`gg&f3$pn0U>1L_$nd8a{uINXV)#=Ge~RG` zKQn)s`t|S-{CVVmgg+OZfj^;l!JnTn$8W&?SdV1!rx*Xtsb3NJ6NzvXbHJYn{NXb5 zH;y$SZk_hkvga9d5AnN!{6<-8zbiyj}QMzq{hz2$~rrFPBou7JrH|Vsb?&& zCGx4_@rCcIyz3aR`N!Y&kNw6ix#8W)b1X^x8@%(|YclUJ_OCsW9y?M_zIlyxJWl?J zRbw3rB(C}?HLKNPtq|+vXJ1V4eI@twUIk~?*Jj-StGAgkA@7)~cl>!gbI3G)9MYI@ zDAXHe4u6QTU;QrTxAtSuTpH#tl1n?@tP#2ry*|kp`}54D@Q#CP?a|kH@7opDp}hgU zZ?V=Y`Q6~rNq#~x-q~em38(VSKxrgEsr1zTL|>H@V7tyyNIz_^*?Do++EW z1j81B1^n4T8-goSr2#v4Xe~hE={1)>c-D~E%U!EdA+2vuH zdC52ZJ~LjCW-R#z?=@@UUGKeSOnHvy`UA{ouku`{3s&wf_g)XbXZKa!>(G~W&+=TK zI`I*WJseVQ!HGLY#?wpBi~phF-1zTq84>^OO~d2AnR8D3*X6_Fugxlqzj|pw{OHB` z@$RBL*7FE6w~n>#3xaWS9nu$Rjwi9N1bUDg^#SwjRh~`K zvqI0a=m*WS6wl23r%|3~)_C*m6`o-*m>cDJ7X6TU#^ly-(725$ig=!}{+H*UijH?q4eOs-@exsv(hN*0hSS;!s>tii~)cbtbUH|yA6XU6s1x}$R< z^r3;hUUgj_VP9o(>85ZLSb^46cW}* ziK6AYSHv38I%5M4wv33pQHQP4y%Nh_yNCD3l%tyyfKeJ=`9=c$ZHn6Sq?Yo#XyvL$ z+@pl=>t%bvrD$cjDYwX(+oLnB&7l%by!W1g?tlLftN_B?Z{f7T@S-bh(j{WN72&&;!;=iATn_GryM7v{0h zMVBuaVVyszhnx{1a z#1j|q7M=-r=!{(l-nj9tC05?S;yZ``l=*S`-MfwZC6rh4`%Ig$Eo?oeIRak=hUNnt zpnqJ8O(=xtlUZ}A8oqsHMpHb0ycNI3vRWUVVe?S;bzNI*9cMwMd6UV(x;I+emyfI; zc4Yk|vgZDtd)sTD;QpS69hpCgths;py@}f8+`s!_NABD!R#9cs6}TB>ro1G)k=V4u&`?t@BzZkFSW2m|;OjW&D!qRq^RFo{m>W zg2$EryKsCUuIGy<2F>$Zr-#ftx6Np=--F(x=-Jn)}gLkEQSMt%jmrRdP{?+l|h!DIE8u^?v z-LA{B4f;DBdS74vQ=vnrn#seYjT>0+X>$-86v76Du|av*pnPmlLHsw*7Lv0)jGXOr z$k`rF&i077Re9A<6Q9TDsOEeJb{2c5obqu$T6-7|uhlAU`(&7-kYfbLD2_247jlf} zKu+Iqzp>uDC2f)WALh_J0nGy##W9BCLXPnqi948IRy_`wz^NSf({%4A!R2~zx(?jt zf@2N1&H?9Z!TlO&sD_p*>}sW%XQcT?r&rkd@h9+)`a{Y~vhyWz z3eq-&Xd}Y36?yR!cjVJ16nyU0OA9~u+N@!p`*ry_pR2i(H8yXmHkuKS#AzwNzpz3`NSdSH0;Fm2OIvbmbu#N4t=0?gILce>;e=NaFO(RXzt zqW5+1PLes)vl)k7lhA_gR47bzhEbN1|I2(px^Od|*3I zb$gIC_{Nj_8ll}K&#hd3J$fcPJAYPHI!QlIzrXnPPnG=z>&Sg?awL5L_l^X|_qL;7 zFZ2B?LDrM9%3nUhIS;+m?-1uH=h^tCsAI}wR_?xdwG|wsvs=MO>o#>&x&4srwFtz6 zKN@{eFMZbK|5Nn2>qj)8=MA*`qSvnbHm#Dst3N5$WH{>Rqv~b@{I&Z_wl0bvUVTW> zS3KanufCl0)!YA4A4BUZCGkUl$lTM0=IXTazUz<==a|+i@%GJZerNLWwMK;2ebc&& zy_8i)KKHVx_so#rgtJ914eH6dp*W~PLFNl>~uZ6yc=<`2YvuY3fr_VS*-Z}pAV+B_- z4;)>8`VrO&<9y(gtM)7oSXUZeQZBl_aYuVmOxK^I?9-uhcAj8AkdvViJGTVr3wW-- zC!g~+)}6!W!*98~5FQl%%XzV3r)t+dce?+|f>XoR#ryjocgqg*ye0b4n1K-)J|v6* zeZXF)Sc9VznRQ)E8#2zWd(xxrMvtt6v}|VW73qok?)~Jx>$l|Y{^iu4X_S2_WwU-w z*R1Fs;kaaltxLt|gwdq|y|(8GxaGO{9sOVipDMLW%Wc@X;F zM+2X>F*z0*(BV$%Ll^YaIPHw;fR_hueSDR7dwKUY^#2n4=V?|^-}LB3eb?O|J$#9E zQQtb3zgAIio%rjN^J?g`eG%TN4OsSld{=NyyKU2J&7bY-rLXuZ{Wsn@-p;p8oTHp0 zC06>@4_N7w=uiS3vZxD*bEALew)v;gA(x-)-o{P<)BGJB{bkceyEMAroAzvEuJ$C8 z1FiN%b#-xXWm;`YoHpec?P8pE+LL3=RxFM^C)O03`a10gu_%4Bg!(;~_99Mu zF^sxX9*Bcd*tX-VWl?NL5f9ziQyQ;=9^kb}GKUw{026Jo^v-%r)=Tov&r=^!-wJMK zpZdVgpxLKBFtAVkII~ZEz|0K^diJT;d>j{d(ddmIsNBAnU7Tz_2%Zl7!2|lvy|&oT zN!Mqh?{@=b4W{qb|4;O_58(99=vzMKO?Y#FP5)|{b@v;nYugN8r>R{U z(+uw#qLX81;?J8mW%K6+2alwWKlXZ4ne}WV*o@F9@w{l~R@ONzd8HtR&D#Aa`@Pz9 z+UqX7;w%3Nr+jz5;o0)*d0#mXy$!!|%9D9|UKu>@D>LSlnMtk<&?|Or8rfq9?>faRhJ+g7M?N5!b+=))P{{3le`ZK4jn}nv3!Jal1{)MgI~XzLk_s-wwYZxbwe1osF~lsw(dnDv$TP`sHm; z6p#MR^{mle5OVBJcH3(4=YM|;dro=z<6RFWaWObeqknKIecLPWt!72ipZuKrzFj{r zJe?U^Q~7_HpB-QMIdfWd-~D^(g6wNQK2Kca)_)s!|MPa=^B-T7UEa@q*B2ILKmW_( z?CbGUv#;lsXJ7l_Ti2WcKm1PZ#acT*`yH2dogZz;F2C^0+1GtXv#(#cH~TtEKIlcq z@IajLv^|}h!&AHQ_rHmb*z&aH|)ru04&L_98Ritdz0T@R&%v z%?kBaFb=@_fa#7>`Ww#P023moH%D0mNps#BFT)2frO(A#>v`^@ZLTAxzm;S4u;}6c zPM_K=zfiW{i-%ip%AI=iE7}kjAAfx;WxdKUN0Sv^T1WXROKo{2xIv6MJ^m_z07gBP?_WfM7cU7>5%2%g9RKbG!;A0gHXo~X6QxfXvytQkB} z>yPU>bv?w`?L-d4KV8$7OytnD_+v$_SP4fE{2v~~pKLn*@EhB%XpJzJKf{c_l#v(Z z$H9;IJ@XjBXVQfg@dDPq*8V3YT<5b!(o_!CIPcvGK3&+iqxk$i%)hr~8rr!AJla`@ zXdupjZyg_)Oi=`1}OuP~4}{=tj`!24iaJ z`5cVJ^mf2Atv{&s$W(`P)>?|W@c5jA#}P*sXX39Hp91hHX3e&<#b-!7z%3VEbIyXl zt1nu0xT`NWe`n?3uf3jGMqgZdp47f(rd`!qjiH?{P-Y$LgG%SL?~!5#bqOmbp4W2@ z603c72)G|`;HEtMoPbV-IM8n+tGCnd5`1p?-RS>PSN|m!_s?6N^jPJUax_t2O#Q+C zD&g>c@2x-H@6G##(LE&`L%r|TH_f^7>bJ{3>1Q+ih=g;@6CS0@MFOK=)U{s@?);AzLsLcSew|i2LW(&`C}DhS2!w% ztvXzmOSkGuY~A7lkl^NO+tEByRZ z*aKINt7(6q{e#~>$!;IUI{fW`zeCIC_T7(DPL}RE{eprl`DEJ13h^Hwqm;w6m*NjT zMk$A`4S)RhU=;k}fZqf5#LI6NzqqO28ULV^dN9zQ;yZZ#lYQ_qR9J!kP+|NB>B*!E zEAbyHjsGA$as9t+zkz)e@CWaL?k%)uUcccB+_N12u&y0@i+@_jiIy#x- z2>$I>^xj>ob@m`yvUO*jLrb?)&t3VvTX^H&2HtH$!1LRaCt2%y7-i+s*IS%2y#CB! z`kj4$kII*K?MQyPS9AC(Ab5b?n+c!)vEaSpB+f;~sSEg5~_V_QBo{ zEEC`I@>}*uZFZPL?VGVj(A@zKv~HSk%D}bbD#Xy!^I2!u<%QOfzK(K|^Z`S}!|RBL zPvpFcc0zl%1V!WNf?0}_$p&k$0=Hj%lY@KKeqcslGWf18B=60#dY2&UI%3aN>_b^u z{M7wnjs@h{$+Eqvzw znw63J;v4fH$cL`t!YA(!v;-fpd1}*kiPe5s`-5!5&Kz7>_`vj4&u(f%k90kCRVDig zu?`sfNj^oMS4;HSP1TgOo^pFAcgMzI59pcRopw**1FuE%THSAVL@Qf~6CB!0*^Fn; zD_)h~+8GVER`N~7#HSoT)y83Am^m_xqvqOM_=f*FT62Q zw%=NDpI{!btYs~u*4$qRU$t+C_GD21QvFR`>$mP{FRwMDBIcXDpJAQ+B68br0@oW< z*X;GmKf->s#pB5}WpA1Y`<*IBHo|q{hDiGBtmz!2uB+b~A%-g0Is&w>9q8@q0>%@` zb4+0Gg5X(O$C}sY2?qUR^inw%$yzIo9ZV|*#RwyN09_vY&_eA2#8^V)su*Xp|4)*7 z8z>CK*%SE%?EzG;J%DP}R#{`}-(*d5ewTz;>rXLUtwTeunCj&KEbL0M!GVRXv0=@K z1zlL}AGcv)50b=62f=EvVO=X&{LTfdoVvG|dQlFq+M!w3vWWvYTmcSC9UQ7$94?7< zEO6+xX4*Jh0S;9;a9C>NFiAM@I~NWEur3AGA_rEv3+uAjeiv3`h7IddV3p^9waA8b zj$rXS7p(G8=!ED+##^8_akG_v`7kFVb`M^di9{frmo>R70@%|kSt=GG>ek9iF!j6{Nv|`7T*XN-1 z4x85h5PW{;qIH0;vw-z^2i6=H*7VrzF0A%hHZ0nq`#Hs*xRm>zRP1zGWN&*SMj2VRn|egBr=+^qL;-c{(?O(o%gTd z{Z$&P8$UTl+qqlss~yGPxG&)Q?gGA3op#%Z=X-4%_L65UdNpxw`-WY`-_EQLR<)@j ze$4}s_`~>-+6!*J>ILTsoXuWw8+~#45CJcceU)`gt}jcR93p~X{3m?3ScMtCg54MlSJ#(; zSKkM`KH%Y-*7j+gP}y(gb8Pj&8+HbG&!Jbj7OyC$a=H!iQ@wCAnnk^F;-R{zzXpCk`K4!t9JeHuaE84k0nFk zHy?be*)z!S16`|PPYL0)0Gyryr)#*rmgl>{sdOATjSa+e@#`lVgarMvPG{N68v1gPtJqqivc$m-gCQ16|PF+6Zmin4jUo5breSssCbYPtdaWQcP{KVxqMUT7!!lpGfko zgB-vezv|!oP1cOGY0u!%NV${1rG>Ix9`68`1@LaI!R46&-+CK7ZUh(R8nhB4X{{bX z4ln%qCwTXdKK^~$;oo<2@XwA1Wa3K+`ecDA% zA6d`U2hnr+lOe^kI7?5qlP^I`{O&H=pEdX_u0I{(`GP|BS+w$6-S$cQNC|JZzDNgL zI^6od9(=uH(E(^FztLJIolqSUT(#TyM~@X3yLl>hUt}*jk{Khi@40;JJZ9Gke>`dl zeQqzjAUvFqH)kp}n}9S0xh8$Je$Z9WDqn~y<s zsI&N}=i+0~;iLFKoB3D;arc*B>EB$B9@#qK(7^MIeL2HDxBfe{KATH_jXlfsS4FSt zehs{vfS%^A`!>u80=G+*iy_*V6a$dCqg<<`zU;LGw1e`}Zgt@Y#zdTIQ)L!*B^J>?JC z`2ZPtJ&Bx{r+9o7doGu>PmYzaw^fisIAz)gM@JlenB%Nyg1(npB6JaXbjZyvS%2Jd>EnS8$te@s6bxenluerl}d?QqC~Z_SPs zyYL+zz9jgxsYyo;3lMr~mEDV+{gNdR;r)`ob#eg>+pyZ`x3`xzvr2Q#Vr7jWGOBdsqpM z+FQ8t>d1>Be2%^NHk!ZuAU5#9lPw!6i32u_2vb*rrmoCCi@Nd(rMiqL)1H{XTuQ^Nln9O9%Z+{H%0s|3 z;(p+6aC7js$FA9Lg1I?$8m}Opt9I8NucNa$G~Tq$MLBRh?7{Juo;E2!Ou8I9mvHv8 zm3=r~6)^kB93x(NdgN&OZS*6Un`(60@oA(>#-`Ff1c@D2VJoVL3u+!}2Qix@v8hsY zQnt2@Z!Gk6B05)%f8zD=8u9U3tPjN=aD2SdV%s+@wiFwsfnDgTZdcouKD{a#w+uC zxA8lL?y?VidK>jBc@ulu<5R67)|}+~s*P1~mARL(unENN6Af0nVFb8WS?PM-lfHkE zcN4^1tc)|Ml}ys#rxUM zoH3Yr-PoKS;?2Qx3tE#m*z$V6cte>f%BaPUSnbG4<4wxZuPBTxQQuHDS^OR5$ZQil z@XGA#IbLzW@9)E z|D5*Xo87kUJ?z9S2mBkKy~W1$MrgxKUz2`ADYj_4HENdnoD(^ehlo!wFH@K8HX%t} z=i4lMo6#@(9XE!0w}VTrc+4@zxV^c-Plm{Gqt17rL(jtF4(t!}#M23Q@f6pJgOUT$ z8vth`cX&Mv-bR(Tfh`c;%Kdh6M@FV@j~T$#_VF|H*w^AiCTGieM`KwH_MW6Q4h_kM zNLg0=v_kk_IM5atewM;d$Hq_MEV;B+l_ zis3Q3)qzb&HU!Js@R4dpvY#`)XY^do^mU4%S@-u{MEUqI6FDTG4rrABK9Qr%3N5YY zT6X!40Cj+~ZIf&IWUou{1DZxy#{<|D3%w>sNjkPUF$}(=rybX0I~pp>N+o+>s;r58 zqqakKK9Bo*o%{LDeYFp=*AFZ&p6I@KqHFO)@Xd3F zCv6T-^jth?b9ka_mnWU*$r?u&1Vi#x87&Tsy$%dr3x?!to;xrkTlamzkX+qs!H_%$ z;!Nn{oAk+Z@m{#e2X}D}IXLR^LC|M*Hp&=ka$gcV~Ahg-X#<)Lq~mzEW3)mT-K_qt~hbC#bp z8o!IS{3v#~ZgFGZF7ZIVig-X8o z1iWd3H^lE|rl!#zGCr2VN2%v5d$SUGMDyh{RhoUb4U8*n7|#p=d#_*vPi<`pvU6py z1~^;rr&X5P0*$vDe~Gh^m)Z`|K>3x>Al&OYR}wcb;i$Df^o1mTe>vw4&J|YR`I6ri z(BH_mrSJVZTYjbFqfFrFq)lssJt>7#bhM=hd_*aG03LAcT`t)Z_hfBqcWgk1Qx@I2qa=V|)XE%d2{e?K(V&?j1J6&&oe!UsF)S3ijF z-$eT|pV-zU%5DKS;k?)Bzl#phBYQs?x);Kme1|vP@aAIR91Ruh+yTrkE3b72u=ZQ5 z^A*VJRUEh=kaw`))V&*aScM1ok0_vDAL@OMI-SDz*yr%!CHAA((l?k7e%rj8oR@#$ z*v0W3j(_I(Hiz&vxiOAEF{9J=&yx5PuQS)o_0Md7C^Md%P#vN^_V)+l^3hV(l$ooo z*)u0t=r3|oze|3pY;0w4_RRT#$jk)wR(16|&jW*cZ0aEOB!SLf`(y5L?!ZNqhaFVJ7~P*`IxQBvSSo>jr!! zWX&M2h&jzgvD;=v;!S~bdkGfLYklAF)}1AYff)|ys~9|n$V?=$!V%wmz>%c&~+Q{`+FZ6F_zJcAQ$-a+K&cr3L6Q4QF zy@<&vVk~x}@{R(mE28`$+TOG$$AY}2%VGy9=M#)g>pA%i>EElb;_z?f5d52J#w#=Q zC5Xp~zOC>zYDH#xY25CkaffKEo))_{luhFjXnfR1f7AEM|4Hg;m6N;Hgr69NUrqQ>$~mpX9?)*3 zONi^pU#SYOxG#)v#vFm2^TT&LdS};d>4wIh6xZ<9dBqCv{V)1a_?s#0Lxb|hsgv&S zDs;O+ZT9F;JVpCd3akadc!*rQMcAbtCl{}uT)Z8l)|$Cqvdd~G%#z`Cy)KMy~_i<7IDe-6*LYW$^c_&~mo*8eHV&fhUQIT?Nr*jmR{{UYhu zT5Q!rzWQwE17zZl?)-otwn+RIuS?*y=DZRA`bIHyn=xVLlvhGiB|K4_$;R918)I7| z18XSQ_tp*goAx!dy`VaGkxkpKlFy8b%}1|&xl9{X&yN4cV45EE(4_eV+4?h>o+S7W z=nuZR+CBA^60~#bBh}NkDi1_s%*x?Yo^B~|OINov9(82DYujuZtYUY(*1lHXYAfZr z<*brFO*xDgW|gyqcFD^x^|=z*w(cyW;eB*uYzjk@|AGbJpUB9v02$Ro%lyt9cwFqkBjM<=<@^oE-?YD(c!V2MNZo`#e>1)S{(BcTKQW8zD`@NRFYG=_ zaOY-pRB@L7!&&Ws_*jnqci_8EwiuJdU+=(YmMv?hJ~o^j6YFH{3&jPCsT->UvuFMC z!`5%=XgBKcG3E2ihUgqbx4zG~Wyx?W9-u8T_xVma1S-FHKqs8Oj$$ug53n|3(5y*t zw8N>xU#~FhCFa_{>iARSM+Zms4kPFG^vL%Q#AFoz?P!4RJBVf9#cz0#xB>b<5B*D_ zznpuDuVQ~@vIhx$=vgLqcmsI9)xSAXNMGVE`YhN+-TyRgg<`jgTe~)*0=@0Hi8=$F zA=Vc%-(&YygYqz{ zY+ja9Hx|H0T~Ac57P(v|w}&!1#82+0`2O~1ks)W5z54uY98AnOeD{3~*kV1;!;Uv$ zlT+B_25hq0jcpb=h&Q?Q(8gVOU(S9SMyJpteftrvlb?6=ft-|1)-CR$-_ngtA4bP} zti0G_?AkH-`zo?F?a$Iky8X`n&3myY;=5Zfzt6b(fbDiX+*L(0*xgU3M^^VVr zE;91UHP^jujP4hj^}RuSHH!Z52kiq^}8K= zWT_0+==a*z%PXCAa8%!%_VQep*CQio*FPP=Pi+OZIzSvp@fi6MY8!^c*LlC>ZQl2P zFI>I%vgym@@4=YI#2d{uFL%c4Z2Btt^!-~E+3WngoIro^>tFNej`-`AzuqT*mv0-< zbFU6``pRv0%Jr|uGR#-r>0i2Sf~`xgzr4%&-qlCZ|Jz@l8qjZ}KY!`dAJ6rGe25R9 zQGa-TCjFU9o9(SXA@w$Q2UY`T!t35btevy$6c$HfheIenDDNFC%KcmBE zc<$=w+tu&42K3bSIX>pFY{|EFD|KW`K z$n#wKnBmvBx8Yar=Po@TE0k?+C2Q#2)0apA#$4@tEBH#iw$YOKO8Ez zDNA3;D>?_+cd&+x@OA6*kB-lHc>wrJMZYX*- z`s~XHw><2Y?8{M=M;qYRkD9+Ec<+h=cayR zSKRMR{q|hD`ZN^2pYh@QV;{bcUw z%qO?AGI~+$7V_8X*gGUpZ08;YEIaoo;N%_!$SqQyMSyl&W2w5YF_LoJp)ee zk=Iuge)h8IgT)Hzm>Mf zU4P-{GWB@>$-0X%QMszp4@)os-YmtKN|v{#vYZ8vu#c`5xi;tOhT zS94rL-B|-~$!puyLf&u)T1{LKdLLjt*@fKS&wb?)lt9xC{Q14K#hv&{AM)jH&_)l8 ztE(K%^G;09Uf)k+R{_PqtzaxktgX_zFg9+Er>{f*Qg-Dq^E`}iNn9aUzV`a_MV}{L ztv)+_-_FutS&F{9Vh7SO#R5|Fy*o=8bJUnG{nn?+NpW#iEL8K^h3n(ss`!fcn=Zv4 z=+i!vZ_QGlCJ%m1o^Ea2AI*zB%Nn|ctd(+%I`dbQp?9Oaqj~dgp18`5TIDZC@~l~d z%BI{r=Ab`B89OMqnEBo8^%5(f+@qBFoK?7C>hXJCoSHYR_0?i4cKwnieRBiDTALUj ztD}A}?>yFfy8rPG;v@IfoZg&`H}M;2k?t1%Ejq&9HrpJ$BEshn{f{e`BQcO0XpdhE zzIOHAeV%=-`Pd!ILGYHX7*f|X@}(kHOzZY-Wgdd;_qV}W{a)6dPfKsT_-^Q@&v9B~ zx$f9&Zg}SehHbd+^_4GPR|4&eZ|%D-P+<5GrR+j-)dV;Z3@uVKT%Ej}|)YWVA z$eWXFd6)5sv1SZVv5oC^UeV<2S>t z$0m#-ET^H-dLcX*HrF~d^+V(l=UL01<68IIv1iv(uD+eBd&G5R;})S~{m7+3zgm30z7>mqK| zjZXFO{!!lj*nsV^_q58`XZso-?*%8OysISou~Yeu@v_tQ&;C?@BWT)O4r^k za&*nL=f~NDLGjbM7s}?1&BRY{K;MX&cA{@x=v&WHWPvWQKSsI}{-@Bzqn}3~k(JtC zcP@J;{Odv=yP>a#nBP(2gmtt5!>~b;xnhFCkG0v4--`XeZr|kC_3vxDe?=f#*2G#C zC8Mdwk~i|#JHrZm{s_0zzHPzQC6JYcz6U6?6noiV<;NPaYkAnZwdmGe!07;v z-U-PrDZYx_lgM3qK%Z@vog<<;#F|vDeZ=mDD5sG!uCc-!c91i(Bb?W|5c~M-;st%$ zW4NE##}@QkdAL2;$Lp~JqH9Y_B)%n|{4EDwF>vazgVT8?{p)}yNqD0DGL;KMeD|@1 z4o_4kyTSEZj%TTdN2$ZlQHQ4n?6of7!?K=H>+V;aSiDwVwsIdd&Zc(Ad#zYa7yL?L zd-{Nt7_fPB``SaAx98eG_u93&xvyOt?4?WXuZ8_3|Hjzf*J-t|2n99ik-e4eh*vu8+u+_`C<<;S+{smUk`aCMFG~{Lng{I zFElnfv@^~4yky)&nJM@zeNb-H3Ik*KAV1-Kyzi|y8iO!*(lM@t>dGEWb=+?AXW|UF>fW@yOi;H&2v4*IP?O_$Pd$gpg;Xq-qL3H+Q4-`Ii}C? zdrN=Y;f?_vvVG+?)&TjO#u5vaqZB-}1ADypBsqG->DtIU{df3*-@+O$nP)?lRayAg zFFrGdIX9Q(?QGEb!qCoU&Jm4GkO$)RlPgEu`Qp>&ov?Y=yi?%nw~bpad@E_!p5nW@ z3$=#6o1-!G`wipkUuw2w+_~BcZg>zrFgJQboux8z!F21DU2Ys159k;2 zl3Xuyb!ucJz5f5Re4DI-rBD8^eBZTvKkAXMWV=W68Hio9=CBXzsf*t68Z&;3?Jvci zhN!bmR&d!tWKlZGIyAA6IpFwF4O`moSHIWJWp(wU5aHtmkRu1sjTc3yKZv$l^ zCx^eGUgea8;ZFi}ot`n}WCMqs(XAMDwP@R`68LUZw5tZIr*aEgWpU7XOa?wKDl^ z`_O6W_B8tC?3YqT9B%1T)IZgqX3prDXU&r)=0RJn$~%)!SMSuXR@pu0+fsh(+Z47g zh%ZxBloSQJmo>QvBugybfBE`^_<=EQovAo+c~@C zRp}n(73v;7rC@A_4&7VK89mCtu)b_yYypP)@OJ-asI$HHw#z?!WWzJ9$B-oU@O8?N zFWtwvG77(=^nIe%@pFMmK2TiwGu5m?{2*ujmh9SzUCAHUnD}ww@W1--zxv?O2iM-m z(Rr`ESFBliVu~|g+QZymV(G*~PHFy))@d~{bYcqK_*mL&x=#7#V=jqRkQ=^<*cI`S zQ(1Nk-Pbrw);&*dzGG{{DfPISdj3XaP-vX3LD3?!R4~CW0n}v8>e3GX3zMQ>SES-M_QN_el@F5ylIw zc^}V-ZwGs?3Exk=2YkPO7Wh6lg!~JSW%z3Fylt3`C$hBXzu0_LzgT!OxAGnHRX)kr z92|#Q&u#AbZ25Q2Ar44fwuks&_YJllNFSsN(%mWKQWUPbGN!rW_4tn3+cco{tD@({ zlEkLIF!}W6)D7e^@?J~yO4bVt_a-zCj2KzevL1KGh%~>&)rY_N5ppLcsJZk>-upDU zCyJxFxk-vS?!^~=#-7-*|nni(%Afwk$7;FU53Wi<`cs?!I)WT$V!LCfE)VE z8kR3uiPD%?r%n73_yc1SbBK{%PyK}lJvWgD>hLRzS6j|Cyt?>Z@ahsDug)8SS5t^1 zY3*sv`Ez-7*O_=lUrxMw5}FOKxE|ouI1jI?a`S4}ACXt9X#WTFYKyH`uS^=OSJ5!> zMe2s+@ABWr`(4u2654U6ycbH^iPNK}2Pn^C&kt8l_SjEBwjK4AtvRwu>Y<|xyUs=z zzHo;37d^`Q0vtu2n7$jERNZZRIb#pqxa9ecU6egM-fXY8JdD`ho6WxUmN%oftS!He zd7*`;YFdM*DmDpDEq=`beB`64K&*wL5bxl(;txscx5i_XTTWb)`ZdDrmHyL% z=mb1Yq0bsq5&iZ!Wzo)SSg&94YQ?D;@5$JxP#~6C0{+;Ljw={X*i3voP#G^gSMmMw zmyd1_4!|$ECkP%Pjxa|aM}B;+=7Rmr$78Qzr;mN>ocJ-mpZeiQ{MdJf>)EcUSAIO! zOaJKDcSgiN$-7_q+mFXy`_{SfSE+ZeT|u7fchBS9k@3X6qs-op9oVTPYsJcE`_W=@ zNwmgtbJ(o0EZz`?k;GFUSMHhY_h|Up z3GI5G!k*f(9ebWm*}nn@o|t*P=+uX>PbqL#9;WnHwr(AMJN;cVt{|JIoL{3S_^a{- ze*U{to40x9i^&JB*PNO=C&o@epF3W~HC5#J|BqqcHBZAHxMSFhVgWvMigR$@pnfw=P{J7&=nw$Dh9{o4#i~SMg z@zWn>%VQ6=?48QvPUJCx@xK&x!(C$zdF(3b{6y>@a>!%M+sNZHXOKtUS<2(4_aKkR z5c2ra8RX%PZ%?J2K0Pvfe7mbERMtHwRMvBSsH}4lvTb0mYAbNC4L?F-Od1!~7;z~v zhxx=nlGq{F20hMrYsbwI*5a|p=geG^_~Z4&-F7k#Q4~05DKV^hQ%qc_u=h#mkS%j!Lxz^Eq9s?^)W4&YuR6J5_}34g zv$$k=fLsURUHGBu7jH#BuUj=fR>K$>;&P@@X!-EGRWvqW` z`fYB1ZT&~H+slON&n9cny^JGjTq;5=s_FKCSvSqwmR>_1p<-!E!C8FC)+!_bc~Ls)g$lkoB>b4X*wA&Yon+?w3T`$9;loKcqAUE4c6JKL-+g2lwH$1E)V|- z+hoh#=7;xL(?o08kI~kS&4l$T|bRsy$6wg+6B zTfcTVgzec4>@$7ydG9yZf5m*W<88i~@BL<){mtL=P1AI1+2>eqsp&GythdxOgEg7( z6`G>fG6ufpiI-8%s_Sl?T;phn zWB8YM3m?_R)XmnOGnH|v%D5T5bNIIQTVJ!wVDH1*JbcInzt|5SdoTFXlLf?y7h>!8 zN5{vWVNG!9OeHjQ-H>hTN4jO)P*LW-FME@Ry;0p-Fd}lF`#t@jLErZuK<0ew+EsF` z&M5ES>U~#7uD5k$>f3zN?fvGUE${Js(=-L0geI52xpeYpS>Jxu=$CRC&-BgnS>M<= zYRt}CXGFsZ?B2uhDqp-JPQ8!$Rmxc*|L2nZ6ZhS}AKooO20h52d+|bKkk`AK7;*=G zL^pC!ncjM<^$(;A-SE@!2*2SdF!Y}0db}%G_!hZf#RLocG5||{g9Gb1&PUJ}UbD8)dg{X?%NH$Qa&_dzqQJ1F^U;S6==~kekj*`sY2*dUl^CSK==@2HM?`v=KSlonLBi7H8g=zujpZYCjKrC;xbS z2$_qI$~&yj&mOxG9g>6En-1_ujJDD-=3u3eu^IOsjqRk}Yl0`_jk5k*;9w(b+Gwmd zjPKgSnCZ7w#*sG0KH2l}r0t8S{_DC9zR?F?rnORPv7_xL`sXRvy*5f42%l=POC{Vh zcA7TE)-!voI+Lq7)OB|5K*+;W^`%-J{$;ICaf$eonLm=i->LtA^;kYW;vCxOqb66V zaA^m)^?%b^RtMhw>zFgj^@(ZhD@E+Aaje?J%sLbr7q{`Y^UsU$k5`Yu)-DSy+ehxJ z#+5(yKK52)Yze>i5I*$5si&GYO${{N_bTv)S;Jau*VER~?$-XwTDDH(OzW}Z;@v+o zM@Q#<*0K~auA*Vq@m6r!-)yPKGU?(ut!XsSRTyNPM&-b&qjF0f2KV(m|%S7jceUE(`k7jr$6 zcP7)%*Za5Y{a*x3TU^@_Sk|HMz`>^Bp4~=|_|Crm^6q@S&wKWD)9xVGDyN7(*H?g{ zScPP@fct05vxN>WpHkWX;Lu3>q;hL?Z;yTNTIang-GfHxpZAb+kC^*e!#i8N)aH=C zahxqQcyRK`wHtbfIV8yq z?Z77FD(7tRD<%&^akC`3lXic`juQz-FJ7rpp`Df3QSw%L&q22)FPT64S#-M}Td^1( zc7n%9`1fo};86b<>IV0o{Y-#y(a7#$x*zu3e?{Y^k=?R)iq8rE@Tr1XXN&V>%R0E9 z`boav!Ge?bZn&77dFj(WU`pPy4aczc%5haYAzl`mK1t!yr+8;EeUfAJNrvG|sf{>b zzKiVke)mJZJ6n9ZN96CMzQu|d*M60{aq*J6**)S7{^?Y5p3b(Mi)o)(KkQ&3Hm4Aq zGbK>idgNqi*`p3!>eFj|v2VNs+{`$ZvliG#SzpVvQ>+E{kZ-+K1|J5sM@eL)@tsog zuv{869w8oQ#`bKRukmWFvz*l~&{vavAML>H0&f!^t_qp_?}N?_F;?8v}Gmq>yq2AVXqGQQs1@P%hZ+V&37Vc#Vv26yrQu6 zFYWL{>y2y!jvJfqX79TrE3NpEl>vAVHgmv|o2+!itoLHaq%UKwiR30?DSX>anW~?% zWzz8l^vkq%MmPBg`>_Z6u?Ic8lb{}}&(sY*iqk2EJ%@L7Egz?uwoqf2Dc-H%zAKBY z_Kjzv$Hb4T@=W~LrLSSKHLqupwMR6rrY*R_p>Yd()x9XP=Lmcfj>D;s#@FFJ#egf} z#}wz?6l+Zr$J*1zyYOLWh<C#+{~X_EJZLytqZ$|*#C$AC}WGUzNI5S1{s-o9_XjBA?I_} zw<=HH%C5+VHuu2G-9tw_B!9N`2l!6z`+{$OW9__`{(S=dh|t%bjIJGFz3Ccs(JQkE z@{-@B__WR)*iPl!NM8H#x1Pc_VS5fvKDBm3CGQT{XT|m%*|@L;s~DIUhXbugFC@SJ zWKC<2Iah4zcgIAULjz+H9sHJ^?eXcI#*Sjoc=)+Vx`!@NzH4VyXI)(+E|NaV*a>sq z&RUa6>ILm4j;t^i@&lBUCKj%|25=|$EnZSD>y;lx90|8PmD!$ zv=P(Vj*s0GD6?}r85^NauQ)}2Y&&bZ^UdBV^!4#+Itv-Ig|?>|!%Y#pNj^ZENnGZ7 zbYv^>l5XO!`;cGH4Vn`~9g?oMQ7@Y+%039qi3V#=IsE-3_FDJyH0H)QNq2K_ppN&j zPE8m3rkGuVZ^dKz;MLT3#cG$pZ>@17JnX!P;7*m5Xo&7fKEN0&wxgYx?fdv%Yvd%s z#nf-gnn2s`eycnMeWxl@)L8jixlB7Dpe)?OEX#Y>mRrVg35A!O>XS5B^c z^p4*?kRSEf!|=49J`cJwFT~!h(p%Ry?PqAhzDKg17{_ zS+vSJJ{|ZWc+-i_054WVyHG^CkVI#sBZ?2(@$ihk{OW1+7#pQ_p=U)!nPT86$(dNx zFnC|EcVfZ&y;6k`(At<>emsXC(73#j zZ^BDUq5Ek|d7>kU)97Ww05y#6K(j{uX2Ar-N;r6V^&C8aSIdV{t{Wc_zZ4%4zl4MM zbse}?!lMCx!IuKQfoIG6;aL^sx;%T1x&zO+A6hEEUwl$KlN~FtpEd z;0yBvfHjHlk)`2Dvm-y*4#}?xo;**vm4+t`z&SHNdKoW&mE#!4QH~ytZVppVhTA#O ze@*^vVt91V)s$~}{@n2a>Lc|dGvC~uUoW|CMVG=CR>UtZu81GOK9tBFG7jEBu22ts zx9-ujXY}LjakjjjCtf!BbeVnCM@Q1X=U$!S`O}z}S6CVEyqG*B#`Z<4{2bK-`4`n6 zvgi6`>P2;*$tiVw>#Icvu_t$btH8-4>&h+pz4qE(CF3J622QrE(>Ee>9CP4x?}wVJ zf7PeT(7~C(XvY(R6+BtHE^u<(I`Z)zul1DSVUPK~lJDIz8YqK4)y%7ys}wwWVqH@x zuvEUH{JU|Kr|Wv?2~zF@l&fdri;Is1z5~Aj9=U3zeqcf!NcX5|N9f6lAXa(C!TP>r%%5jbe7*6SzXrQ{dVV| zZ~vE{e{6mpaCJ*EML)Byz4CSHQlC?o4p5g4s4jW+!hPS>&lC6n)SCm;lU`4~G1pGL zIgqp746UDi9{oJv=;wiVsGog~ejaf2^Q^vi^wayT^fT*QFE2%c|JqmA&&W%C@2%_a zhLSRV$*crw%bL?!Y|54`C z9MSLh-Ftr{v{Z5QSYO^9V2y}p1BJ7CF17YV8H=+XEsJ%qFX)0Fz(>j&64s@_>-+M3 z;^$)IdVum)&<+%k(EoL6Pc*6d-V<(TWW>9}0)7%r){k84T z2z_R32^_>Hi}_Oc7RNjAEt2FocI^c}XpaI{?@Bh(p}U-Kv6cseHR}#11H@USuRm+M zU%7XU!0ZfSa?qLY(5Yv0gdgQg&VR2QM`V?Uk15_7oj{h7q2##|*oiju;RaD~RC6;CU zhkE=6{jPV~f4eR@>!&+)>1lFY69tjQXIZ}la-<7009mY=c>IM|r`LRRvL24Y;aXFcBGz)m@^z3_+8kMNFPmcq|c`om^kah0RT6F+A3_$l!U z-gZ<)_f!N%%@nTECCNm3^d0obrrnMu%Vw0q%Vzd+AQt?E3jAw*Q(9~tYH;+R5jvlS zPT7x;<9Bvu>4EKcidNY#J*z%dFw=%B8_={n=7a0SLAI=8wB1)|aQM(M8aaD-A%6Jn zum9S$N5|;9c=^?Vtx@i*=yK<4tx^uEH6_+_o+}S$Jk`y4!nQ_)i!;`I3|!pu*BgDv z^jFjuao5ID?zG^n)!J8-ul~C|hrymFra0YChPyB`{R=nGOg4Rj3s>u6kHsGN^l^!y zFT1^Q>8UDk%eLDMx1BiG;cKq-&6b=6J$^b|c+<{x;pL{~zsWB%JalNurQh#FUQZ2k z;SH9T@;P(KYnY)gvtEZ+A6i(Kt_3-{deMQr2s&i%f#=bQA9`RYKSFxx{<-?`F8R4p z`Z(upbmIXR{+ak`=*_gp9ao^A=%vLh;KMSQJ$j;*I!2c+A?i?j6<`5JugILGCM zV=KiA-#Xr3^x~woQ?NhsNB$W6xT4U7pIg6f_QIyFX zJ&ZVIyX#51^vuOZ=4cOgy%&G4693>)V(+D)ATkcTFkbIEhA&;AAJhr_=si34Z1txnwL zCn^g&{u>|vTzM`r>mOw5OMibT-d}5#Nl%y$787maWr{XX@n-q*RgN#OwoZPS?%!f! zFt#sWXPXXqu z2tUmwtk+z^i|w(Z0BcRX#eOupo>0I%Lgv!Qhqog5SbV4ZtAo}z;`m`+AIJOKvhu%+nt}i~S_-71!nIF&oe>R?t;MsznFtQj^3|SIB=PW{N#|tYe(L9+_zRE7n~965r|``Z^|C zR~*}1VAJ#lxrFFn`UQ_}$cDJ`m}}Vij# z;T!yk+n}|rB=h=ZSePt@OJ|I-3x!^&w0yC!bhzG zW5=Y6cB;XE*R1?>DbpK5A5HTA>?7tPtMr$sOEaZ_uo80zZ9G%I5JVclD?VZ3hB!6 z7Wq(&dDDlr>2mx{><{??S$3G5ja^z#F(9A2eOzq!&nE~m~3~2W4jdtJO}xBpL=b1 zg=53@UNbg)3uRc8@#G2ilR=%W$VX#axmUuyL_uL3Uc@vnDFM6$cx@5?ZiauRo`!mx zHCK8T`89dg<0~}hxGH4k66{A0bUptL>2iMWljx$m-jdptYUbcE|0wpzkNP*;@7Z;J z0Xn$@oiz8BVm}y*EM_krUDqwe$20wXWHgKV4j#I{@bgysNyf@eo5uIhHDfz#GC#w& zCCrQ7x_m;PbZKkJX?uR6#>pwCSbJMp<6}30gVwg($9T5paTpz-?0@(cHj#5Bx{~5~ z6*`#&ZWB5qe@Sx+tntBCtsSVolH~T*^_ezD>jNgPa@Pv5=iyXH$9P|D=h?hpL%p2C zA^A`30DsC;xwd{fYkfL8_Z)la$VU0s%QW)||H$ptc_-brz^)^zlk0&$RD0$3ZxYOH zwGw%;+y7;7Ih!fR-CxADul9a?nek@&*6AemS$xs@m*HZ%dfd6KRm-Pmrsojf10fD(qhJETi_4<;7gRx zuXmn_=IsaW0RAMtauZ- z5z1LnZo7O)FK^s7LNQtI{V%yZbLvLWsT)stc;#)s*ZcD6bMdPVel5VRb%pXSc`zC_ zd|CjXo^kjTcKFnlgHK_HPkJ_qI8tz9B)$edHCTC$Ziag&;L}CWP5D5qC53&wocxin z;Zp;Aa`T$i7AHppC%)s>ytIO$py^-aImQ0AwhuNZqiVQe5Cq3+?kq@&no$x3nO z4@0l)xNLNaGE=}@flsdS;$PDz+rpaViZg4UW#ve_`1P=EzWN;U16jMj)%ccMoN{@8 ztjZm$ag#?h4$-S~<(5_V%l>3&3hvw|dU!91&wMuYOv*uz@UDwyXzGi@f68;|`qzQJ zrQLV2WtZv4NH1iIua(>!`>@HQ^RE1+`q~4@Og?`nK3t1Kdown&6n`;=-zFX&19q^# zU}i>_T>r?gOWAR{Qb&h6z{7>FJQ;6(g#6?XvXotJ#7~#+u0H7C`fdBU@+-CO;{$xR z3VxOFo#ZAv!J6lr=M(==@J=20+xm~sfP9~ZpT(@Jp5$2sI#mbSxTk%#hJux$H@i>p zI{AC58wYdo*Vmsz@4Bzd$4a- z74}c{)Qz9tLj1hc_@2R~Zv6Zz6Eg^!@xM|}%-})np8QC~xW#LoU3!Q4^ignw4!w#~ zY=>UPTJEd1Qctv4Aw#dZ29~a?9eNv~SMg4K;4FXLr8DZ#IVk?@>raw9P39%4}bo<$ens>WO8GMACgHJ9KA9z*MnqYU1=4&GGX3B4w<-P2lE_! zI~Y6A{#-7cZ}9M#?hj<4)p$8pG{-PuXFd#&(=9z z`{)Z{A0I>}d#%v4V*LJ)!y~noYv7T~AK4rKw>xP2GrXa%nS(d7Z|6CD`BzWf@z$TX ziGOAKe~e%4+0M8u`D3@%Ayd_R#TBdU@#HLhw)vIOXPZ~HK6`nEoihEfAmymMRm=(S z>THVVDfp8!w#I#Lzswt3dm7s%S-SFkH!;Y`Y2*h^UVEdumwoMf?)XaIC(l%N?b{xG zJ7)AP6W_>XkHW~^m92bVbM4a&#YMUprg+f$437BZeU+bp7o^> zGuCeUva|(W8&*XhG=(k4|2AJvw!L5G@a2adol{@Y zVx2Inc#4@b;nvUpSN8idXt!~5{5VHu*EzWP?YE21AKSj}9`Hl5+xjUE9)A0J%+$wB ze}sPf#uZP6Vs!=VdxD;Z(U+z|E8R4L_#Sd4XSMe_+RzaF_!YDTrp=*m(0RIlMkD^) z^Njt;*HznT$|CNNRTjP>_IseLTV;nRs}Vm(Whu^pEt;`_vVN$t##-@4;5XuLHiCl- z@Bi}lF5p#FXa4^_m)y7r3KlC$ZYWS}t3MUUpv_4Ff}({MX6%&CBq1PBv})~C8Po*B zMNJ(!;xrv-4Hp4V97l)RD*tJRfQlDv2X&^Mna&L7k_#bT8tYh&8uI^q*WUYNpOX_r zXF7SF^W>bp_ged1@B6Ozw%+xw=lggcZT`-ApUxrlzE9s3<1p6}0rHrwlpX8ynK;I# z+BNq5CB!oxrJo|;E^ab0jZHOcuumQzE>_WvaBUVpB?**hO?dJe4r zmApy}6CI77yj=3T0+`Ve4@*x;f6HIiys*y3?{1h9{@j)J*#Rcjfq(GldouXSiL*V; zdyO6G@Vv`Ukqmj@#yeAM#?Vx95&tsW5@KH)_+JbiXV+NaT_b``yRg?T;Oqs(6nC?S zU_-!~Ufd=>C8xCu`z?y>OvOa8{}q3c&F9)_Y4bBB*X;S)iEKE8e${wi;62&;nf+n^ z)2bsU+HMP0M0Sj=jC_ENt9>R7T1#L*;eh;fB3O*w>IC@!8hWWD}W^=zm2tZO4x#)g`8m?zJ*?%qzZDnp z-Rtsi`r2c$1Lto%@-u}m_`_?@%xVrrwrbw<*#JHcf{*RMnn2#l#{ct7d^mFO*g;!& zWu6y0<+JL4puU-j^Ho{N_W9_eh2&i?CboDzz7w&|_#As3IiL6D_Z@wyJMfogkMXg< z@K$O-Jw2XtU#6UCy*8}Y3O7xBd5ie0+~@0EbxF&XRn!N%X5{dud9<5)mi6?FzEIh< z_#55KzvJ+_&L+C(G5B~Y?<)*MB=@$`-%Xs~^f+zi(dMSIib%CJvPX8xTg;=&g=6$) zG%ymM{S0Ctf!0UPJlR|nWR5H}>l&PSudgi>lFcLgf6XYAbx4^=I;5i z&)_n1pXU_EjL!kL#4c5vt%GZw*R#iDG5dBdWk1{)>drCudg$xTsiEXs`0lZ)P*VHI z)K=d=S^L7)n@;3S8_t-wa(4KQ*oAL0-``{mvXyS^QyzHXs<()h$X?a;HGRqjx7Q(W z?6Y%nbpH(cxCwjdZT$BhVh~aAGwOYK;FG|Ge9=4JhMz~CY0HiI(Bg@{qxU|*y!a>L z!f!#x2iO-TS_@|7%RL6n`Plm_eaD`i!d_e1JmxpB>i0_EL^k{+@>V}SOFTGun*>5^595d(6jR`kC z>4`78c@QlDBj+yDd{P`ixf#wGGE=k6-|iyKuX9fHHKOCS50^Oww?>diSuj) z{lp)!^A*6Nl~0HN`h1AC@|6 zU5cejKIr-y{0vt!nRGSSthd$9FcVAHdEnPdM`dhF6TGk7R-?yvhh*5BaQ zT*iI~yX+8pRyNyF) zH<t7u-u^C`{ZAchxau0VA;~~$PIYLuR?$Ko-Hr@t@m(WyqC%6kHSBnR8~wCota}M zMx3IzeKuNxcZj}A;a~BnVlcaSM-Du;!RmNcdvv9@%x`#8zc)C%xq-P|Lp$XIoMm_^ zGtO(jL$V{_^#4iaon`vZY5jn6@@!pa=hxeE&pF=>`$9PdoYj?lPO)L=v9tktI5Om$ z!0(kIq5o|e0x!g|6^#r*2WhUpuX7#2t>B6SpOGQltE@qWpc{siA?4X+$jP1QGDNXW z)uLZdymJ?^G|7Zb8U31{_@bO8xk?uxcxEq+enZMn@SBSjr zW?ec!9j|X9lZNG4(`3VRFZPvn&tsixCGXmEb>ukjnwzp?3Q~5A3v-d`N;1y1h&Fr zL3;Ug_e2~*KG-sBV6CSDc(Ub3^fvlTJ)3TGX2Dr08@hiLJbXKPXbrsEgdW;R&Pcg< zcT}XmKQGch6aJl>t_QCb|K6UV2Z>7=`x#vp=iXHz+qRLekKx+}kS#i|v=e`!c%1e0 zZ=k(u3B80YE13AA@o)RFd#2#uPQky;A6d{;fPb_SS^PQtqR-*qz6?JLSKmax90ym& z;S-SG^_d=D?sJYWr~6&#(qqg4`Qfk9-{bJ?oAcp$=591FqV;dyg`VhG zjls+<>?YM9>1KYa-#5|Yk{!c=?Qvkc3D|DJ?voFl!x(>oO(&mjKWCH5ccflH%AZrd z!*1Ztg~pS7ozHezxkfLV-@vQilN^68?|u1mBk-^CTCbHJaA4B2g5xoGtiYm{yDu-? zed&lucOVe%hL&b-L%&t{lY(<4@KJYtTF+v}yoUUvuStH)$Ho}m+P*Oa&GAcv*28tO zT^EOvpOK!M2R}@;;}d3HGX9%)FfY+V^55eR<`GY2j=~$_l@C_gew64RpIK2B-8jdI zEq?igds`_xGeyE0RYHwTm(275O7EWK;~9*TopS;8(5vD<07f-a4S6Xepi*J{PcV=Z>q4 zaj9?N%Dr|O*IeFr$LGqhY~w?QkmF^1-6O^5mzN$la%JEedh0o^=^d~A8oA=e4ZxK> ze{DQ@<%@~`{bRapIm3}Fry);{e46!~z3_gfJo!8@WRoY#_qxxVw>oehynFVIdk%`u zKv~Q@moBS92UH>xjIWI!TO(e9X3CAMAugx9N#Tds@g~KNw@yDPf5-4aE%tYuc^8CE z9jwXeyYfh*#AE#Mi|8iZXm}SpN$)gv3V1%S9UOAa9@kZdALZk#ot~>i{v^f&oAI+0 z_w%L=>YEC{Ac~3cO8D(AwKKy)l{eSD7iGn zj7PcX?c;%wcX`LPEOT7EL;0IeYFvERxKvkVJh1tJErh>RIfB|-*#D|U{(xX(JTtj3 zo9RA{4_Lk9OXtTi;fW6KdHJgo_{3xXLSCY4_Za=fc<*)i%&WiL^D-in2A`MF-^4hZ zfp051$+@izhn|NXDR$6T-Kpe+8v#u8ald{SZ*a*t9g12cv%OnmVvw6iO(Co(gK}CBhhCU zxZF+q4akZYv3c^)E82V3fqd%PimbU9S>Lo!b!w8`(iOLJu8n!WT?^3EhXSU9pJg8_ z@4BJL=p?h}vkTd-+F#O1FFNr9?O|2?K-Yici66Y^#1C}e-CMMhz8*s#bzhIH-Uv?7 zmH+))=!5(fE)vT_>_bAHLI2K;$T|A#zTVbHk1?jl&_~0N_xLK)k30J4o9Lr!&_~ti zqvO1b8Z)jwI^vDNJfD&C@Vtp31e%_AV+ij_AL;DsVC!SO12D-45Ilkfp*apeZ_}ZM z3&Nd~MnyWG3xqr24aGM)(G!f#=%id=yl|8??N}rC!1;>~&Q-rZjvns1jW{-TtZH3~ z{_%zI0yL3MilfI|-SN;gkM3aZ4ALEoq37ea?)VLBh9=g`@09M?OGgTHwO-En|5NuwtibL+MY-NCh8T#M3gjQ2$IY~D9Iq-nqoHaaBl>WKFo zl@H;i;l!C&U{_2=cMrd$B2rInxeDSU$5x3KhJ*VNt^0O|dT@IZU_LJk5b`8DQM_!cHI$nYIuVU=1(LMdjMXXIYWAD6KV;{!YhqwME zV{h<|z0Mi?bm%k(I^E1TG^X1bGdf@EGYPKMP_ss~aBUVZ-gRvx&-MHZdU+l=MYo7P z-e~H=Rv!st0LO}(J>C4gign2&61O6=O0Su zZh%*wr>}PUYG7Seb*nT_+R zK3tC<9LEoK^M7p|+wZ&X4c5TC_8mOC0G<^tT)q%b1Ux)3)P9kb8TL{?@~ppQV85K~ zoy@$dPqJSwiXPLxxFB;x`TxSH?3tzSz^}{^bJiDlVSaC_vn~%Oh6kAwzHnS}m3a^c z7C-C92Xn2~PDt;zgEk=LE@I(xp3m2~4_W8>_YyRN7 zwgq_!{!1oOGeP4cC!!9X6FjoJ^*;bF-p0CZ33<1EZ2Dq&qL^!X-rYZ>HJfkpOtIE} zIcsh)e!5^FH`csga;b z?_l7@*ZZXY{OiyubADgP`-hs}-6lVJAYV!`;?8pBkmfkLw7oeu5@dcTzqq-x zeX=u0WIt+dYaVu%hmxuR8D-Aj`xDl7`CSp4R$_BRkynCOh9@BiGkE&$n~`d2H>C2Ijn;V$EqsE=1A2f<0M)oMwJ|-`fsP3;wsD zk>LND7k=&y1^-a}D0e{eqtbz^0=Ue4hmW6l1b$%5G5F1C)1rqfdL>96J6KToh%{AQS&1!N2OZ3CBAahw8T_ zGGLcHb!i~E`Y1YhgP}og1`T9u2U>r?d)uNLi!do?X)4dSy7e8deApFJgJcq6O zlx5|Ie|_nIt*gG|zanRza^&OXabQ$zMl!XC^>p{QD^ulb`#Cqx=yK>SJ?=+;N|sv= zpKE`^fBy&`h0h20+t!2kd3anW1oKcpZGXxXkSD*YxMb+5H}zNmn@jf!Uk9Rxt$+&fYkXji_p$tws_V$!dJitkv6HIES73~J4nHV%J0*h; zF9)ZZy8*@Pvf#8GoT?x3;oacW{XLP~#~}EW?-3m9k7)f$GG{yQ@MZAfB8La{9zC~~ z+LN|ywQ=_n?Ot?X%!L;(#QuEAjFUQ-@S@i(cq2KxZ=A+*S;1l+S?JMPD?(6qx zY8~-0_mP+Wu?_o*`IPg#TR%=RTd`j8XWIMpJnt&zqvyRfVpT(4ZCv@Cxqq|PsipD_ z)`jgcr{@7*sIlgSl0(*~0CsP_pZt2a&nHuTrsofy>EJJ0y`Q1rYfJT&4&O=gs80po z)!^Q{Kgq;5u-l~bO-#!8D9Qz}YaqF>|BM`%thNTSTs#ofdtEyNSw5uwn1LTRUvz1f z+CD%2z5C7qe7U)y&%5s%Wycy^dcHhF|C!_Y;VJrl!qazVzU9jXe*^L_Cc788C;8{b z)THl+s@3D-^WGEg*s{oG$98LS;c#=*nAiX1$YgiCpO&8IB;EI?=K!}m^t{pg?o-fn z<;U>T4bXL{+FHL);UGH<^DOT zw)X3XX#X2ed+9n0z3a;B^!^6&{RK}r)!$%T9r_gGyD8OQ`uKkAfiE4Nbo^X5MEjkd z_Mc>Yf12uV@c91fQ;hHORDbE?TjPQ6RO35)i1w>I?K8($Y+-BgLBF1|-s+T${fB|k zp~waKp$L1VdSn;4`TEK~Q=ET7E_M@jKTX_>yr_;+*1hoPnEH!*;9^;dHtuhywduk#_j&O{CZyoeM*5f$fwZ?yi&@#QUIJxRM$1NX<_ z-(6Ew-k9>m$R#oRwkEQ7OR$IVAzXS!@j+ZU>Eh$#`cJceMYlh=y&b~74;lM@yZ9go zpYRc%7=FdJryjwO_P0A$cYJ>+dJj8IdRreu@5!H#-tKt*ujbq6)0}Vb|0Mf-`$O~R z|1~~dWxqt4yct6NsJ@l_mQ4Bcaq}%To{V}AIxj{x61AoF{bs7pp#DsF31`EZ+9t#Y zqyuzrl8>_@mQ1BSV8bQh3eMN@pVeS$fk#;r^7>g7$cyMa&P^iLQ;wXthQ4Fi=#_WW zo-k{|_-SX7*Pyx&s!LWaImS9ybWeIeQRjS*?`pim8}{ieQiVT1qH?M9Bev1-RA$-qCj*|g;MRp5hoBx4xO z7}DtFz0Mn_r6^0`*;1HiE43eJcDe%6y0iN7xaPMr;<{Tb!x zhhH$(-IlNE#g8i9XbE1`)6MTg)L1+e%x%hFal;)tS1{MgZ7TQqSLHL_SAwC{)qIcB zU$s@Rs*e91&_`nP`OcsBH%oVvqh~)4oU_<#u`WnG4Eo7kvGfl4o9isA zso%<3C3VP(r`&4VwJkKI-pX5*pbzYTRo&))o}t(C;81G@%KbMnxSRo6WfTMtVLUT;wsfml*FZEB7$x${s!h zf8^!lH+6E>Yy;QbG5-fSI`*7B{V|t+%$Vz0-@luWp`mB|IiB$!%ou+`Mtw9>OKybK zdk=F!waq2_a^bOUoE<4$!G#zd9e50-B^?m7YDjmI6*t#V}V<*Pt=(UFh z6M8tFNk5anljZ%K6U_U=pX~jiy?;5x`@b{9`>#Gj^JhRF$Do%_=K)*3Rr&CSpL!(K zmcO?LTHE%`IAh|fFF@L@9@Y2PF&*ky7_aZYg zd0c1axjbHot{0E%+E6^coAv91BedS(TlEWI5nl(y*VN$|;Ag9;(6ZM%4&qb0&mQ1e zzr|Us%z+AcUc6s{z8I`?-1@DyUEm$-cmAQj`8Gb^=40fA!)G6;?hJgEEx%UzB;98H zdVt@4%AV<;@OhfgkNN!9-_YLJtyb$n_ElF#$Fk?1yq7W5Qn1bse?QsR44yaDepsco z;Z1Jt40AcTm38ytG33rrV}a+7==m6Ste?6#mFJbyPyOBvwEqXrrC-`#m0Y8Jd`|t6 z9NIV0-mKweYd_I$|6R9zVAi1aYfjbvBD?(!Zu`8!?N<%a9y}bWw9YVi_!GDN@WJgD z57FL?|1$giSGny+4YXgTbz<<84Q8>h zLnr!ws`AG3!->3l(aGTbBIiA|W9;{M>2wMG4ne1Q_hq{XE82{n4o2n~+0#*Dl7Pd+NJpd}W{DN&OyW|E@kU>hD{5 z&Odq7Yv#GC%09^!YxK7!6fw4nk4A;9BR!eyrwv>P9_c^x%mQ9KIQ~6a3baNAyhH z?<)H0Cf80VJ*RHM()_v!>+_cyTHa7y*{A!<7gqM|K4(s$`M#X*=UrugzuEJ>&VF{q z^_6{l&YNrQuUN(RqB(^f`O7A(8+%n@&gdH_>|(r+j;=8GZ8Y49>mRi(O@CQR_@VoE-j`RLZ z`{TZeqVIq{m<&CO*stz~Rw2GeCs>O@z){41i{HNUtwlwGi#>j#eT;foYQtXpMI*5# z1i!_+Y6zV8X-S(sH|sW5_SG;q<(F$NDF?8mZP|p<8A~SA@T_$r^iVPXi{VA)gyB#1 zqkfH^x9)hP&^w}dZ~k-rOc;>qPhtaM-e0Dn!a}+#{!{R^Zj{bfN(+1?IQO24ak9v z{-PN;2%S?ip_o3_XV`=Rc&kP<#TO5bzLR(Gop~;JmO__hGnP)+=Fp|qLze)&z5+Nx zj!fdL@I~3@flUM9Vp&sV-?pNq6Q;l)v8h&{+G{VC=HxcUDfv(bAIzG(bOO1heeGkI zFXODfsP;gN3-$S!w=w1r^nO@;PF^I>g!)QCHOLX_QNX9ziv0DToSe6-Z)Ci1Hb>yT5ztNcOzmp`cI^?f~bmi#X{XUT+k zz<*e{ldt!MlppQPf{-5=|n!+kz&Zp1DpVdvMg=b0~y|ffPV0afjv96)2 za2L91!;EDUUd+G2=!q5c?E5Pptn3?kfvumuIlr>+i7EE?Rh#+#dHef~i}`-ZoWdvm z#{T^+blxw^Zkq69!3`7M`RunQJUQd$3Gb9Gop3S#E&mOV_+Je@l=IPd-q?j-us>+^ z-Vfe(9ie{L_q$&A`IbKtI+BBmUvBhw6!|ZmZJ|Tm@BPEsyQFI;-+7&D_IJyp&rSS# zz~7S%UV{w|-(M!%64{m9#oA<1fSgUIzLI_2Z|v=~XA3KnTbyU3XR@c#DhZos3$r|1 zTA6$>t=|#$v!$+$H&7$+W&DtTcJw5mn?Knjz0cu~`$zYzH0Mp6o!Vc{89B*Vot4b_ zK}Ez*oaqoTi9FT_t1bJy2F{aAde3YKnwsQe!ZWFN(@`Bt?jXNkc(?&PYyb~CSUlK!!lP$}p15U}^~C5| z75w)-@!6tKa&-|oL&%_akYP2Phw1t~FYqpVpV^dfjD9&cDE#i{P8ygx`F@1Ho}#ZK z^z{^d{TqGlqpwch&%VOsp+%vx$B1?1`-orXSg&;k6tBv^U-HWR>^_I*>FX%9=a1g$ zjF+b&>l#Ld-=Wrv!54YK zUVQBUmh*%!e3fnZC|&H0*iOyL_^7KQ?c?W=TRJyV{N|l+6bCu~r42g}-YywoMJAr( zi%g#Ak8B5q7}vG~>vnPls=%w(HM)VJl6I9re^VvxLOf&3uz4rMq0kp>@)X#la=V@lcPQ}z;D;vye2*q zzqz~?2j19X#t&|@@mq`Vcl}^~Q+~s%tTz^oclb?vC0u^v`PgEc-*_MVcHxN&7KF-X z`zBAj03JsNQ!`I_?RV`pxvYGDfwdJ~Q*1f?UTE(>ntP$WR=zb|u!#PL&ZB11Z|{0Y z_%QskGYh|v^VZ2b#4Cnp$omzqh;M`k&9zF6zus3CBi3$U(b*{QO|3g_n{SS|^Gtm6 zR~om&HyU%SzM^cmc;`WQrv={GGdFSw9x$nSfhW*COJ*|U$CF7Z#B67gN`QoXZZ?Ut|#JUw@S6g#!kA1BX-O&LriU-KU zH}>k=@PuifpWa^aJ+)m%+x?@h-a3A(-A{O4a|b*8}$D!9`nIo!0C)xShFT^RRuN^@?Qo<8vcDKfXHh)<0Ym$$#t4 zH}YAl$Uk7ch8}2od9oEbe6cU`iy8h%E@RU?%|(9{^Plr%d#}M3=qUAv_oEy3qZ{_4 z8#)4a@6|r_t48>mx-{R}kE^zw$Tj{)&@?02V+edf?(_d$2b#p6$29eMMaYa(Aj&iyjyjHX{g_b%&< zrehPW$nlGOkvA{%NAjRu7xd19?pjx24Z8Px_+p*VJ>4c?ywE*9uE1^sy=fcqLGOI% zUFh@mR6_5l*&~;qM(1v7nG8ke&t#6(=r+;XrtvQv`o6^f4s^%2*&}J`jDqt@!WG03 z{i>Xz@ga=;SY_LfFPlBG z1NHdoky|UsD_DPC=neeQ%c}WZfp46{9?@l1PLq+T#45E$s5OG=? zNIvh={K`MiGVG-lfx&MPadCqJ_US+MasVh&c?u> ztalB+5Z=6v{nbxet7Fs|8PpGRF8;-eUMR%p2a- zKK!n|%W6WaWt-sFTrM7!Zo_vUt3Gw!i0p%Q>=dorDtDy|x!Z}nP~YmaU9y=u>%K=k zzaM?}fcO#{=N{~u_;cbTdtBfDh;eadQv5mU@nDOq9v zM+AdD(t!!yD}KL+I3xDoYa8!ig_!pccUS~%&0en?fJ^Vbni%9d-rKQ9d7wExj}eP( zvGRJV_}|$AyyR0HLncZW=Jc(<{{`moIxFw+vy9J&tu1^BzS}Oh9*zRvbMQ_3Gwc<^ z4&LS1!Gf#*aci~ei+JVaQTXF1bnVz|C6_N{-BQoZfNsF4S{B+{dKT|l0WGkBrsX@d zI0h|NLW|?*$gUZohq|nSrY>@M0=_^~wJ)#dr8BKXbA5S-=l0!uf0s4vaNUUfrgrp8 z2l`e1YXbY^7<~_??{56R$;@Sq!|;ISAhw6u2R9x10keG8ek;G{EoA*MeB;_XR-B04 zE;{A5ejXaJcJh<>g9{?<^wol|wF8;B47^`;$5QfBa}3_&^)}wugLlzpB{H(|j%6nj zjdtGIOUTG-=uyZ2jy0-j894kRcvp@^;-kjB*jM*tXmxaRaCP)?{x=6# zoBAA8x#m0!e2B1o%4+oI$oKjeEyM3wUQ`iTIk_^@u{AH!wKG4`{dhq{_TYZB1fqx#Le-@A%6@2buH*j#b+$FYUJaPG(rO}j?q9iHtw@eICvSvPX?g5npp?6UG& zi3^lz|B0T{^%&ouKX|hF_pIT+&*#7SyvOHveBR}=3)nQjT7XS?NV_?6?y-p#k=Bbi z@4F=rA1WVPp&-%;Y)2i~I)Uv)V0-bsIZelat+2rAm5oYW#_*((8=DS|$UnRR*p30) zabUQr_|O(?%GOQ?Ha(~7f=zL}chRw1f$^8X^9w$&@;S`s6+ZG4cOu`G-dXiVHNIJd zxv~VF+F@Dyq%VI-+cuutj-5D(aU5MSX$ET^?C-aFKS$2g?jMFC_;$${*A$yL$h9bX zSG+8pMLg%oI%`DuMe5>6X6_(nlV)$?C%?zKq0w3BV`E=RX94>TZ16{cZ3D1L-mHW^ zRV!|ou`ZuEO5g28&u>wVO4W)BXYAlP<>U!&RpF^hg`-9+=Qjm&oJ8?EnOZSqM5_SeXkQT+BGx@MN)-{A3Derw-Nc?f=l7Cvl! z#eJL6`L=GhbD9=2zBFCjFf;tQA9!pnbg}gCe+mxSTIk_H`_(=LJQnc8fakUhc&6L% zJf%8#*nZ@k%navdfoI*-y5I`e$& z}1Z)&95C3mTdm%pI8sap_61=do#KS`P!LRk?eXf zg#1QVOHVf8ztfg_imjic?KQNO&X6r}40$hFXm5;aj_q*z8`KwazMFR(r%&ai8C^iX z)%az#%jLW4Y}f$r%WwS)*5cc4pzbPg%^DqgsGYg9et~7ynhViiiZh$FIba+K94%k7 zdVTOnl;1gSjETNAmM+Hhh@SZd&y2C3X;}b|!AI-ol50m_-L%!UHmlIVxE0MIZX+PG1iU?lXeH ze8&fJpI<@UOW9hw-nfX^lWXQ4mB-U8T z$(P)}MRn!wfzPJEV^iR;c{MU}$b@@oRmTzzC z**v3X-Fq6R+s?hVLAs%a_}X>gl(VYp8qQC})po)I6M<3qx4>gNwcw)QM|s+sNB@D% z(OzCrCOXA_ z)bD+wZOb{({WiP(4&aI-J2cO#o&Kwx{^L&ny6(G$oOP%FYNvmGoBpev{`qbCucrUC z-_rATtX})$)5bB;>U~V(IM0PEl$3AU0zW$ADl_Bax$WOHaIQAvnw+}7&y4G$)NjMH zEf+Jcm08B+ysz4MpWxE_qv6}b!mY!mq zm(d^nL&u+6Z6y;7?q?ulYRt91?ciQ`FL$1U?msVfo-5aLe}*iwLgWdt7MY2|E5MEV z4u(FjzTI{$A;$D|bN!}N|IV}V5uwjl@@$>^4xX*J9{5LuZYnCOo1ol(i?vAA3}-Fl zelN}BH;{`vwj?-rdL?sRymtT_UGLD^mKnzaTh5js+p2?B@5|7*oNJP8H_{g0w0DZG zeZz*Gv9X85>Wv}SBu~p%0ME6=HIQqPC+*yq3~FbN$ad6ojG417Sy%b6KGI)h&&kX= zDj8NvJ?}?>tsQ+R*d*_z12zDgWSL;oHNiFm*rZbgn{$$UE%e!D&R{Q#d^ z_`TY}?*Yc(#V_=FUAj{^j$NtqpwVOCQS)dhT&qnzIEXX0O1`sJHAp5&ABs2BkE=gi zy`i=V+Sbw5&;q@ljTRb*OABhE8d_)^u0HOB7Dwr;lfDi);}AW3#7#5~#RlAQ=vlqL z6Q1$5!S{RRInE{i`Zdr18D9^b*Mg%2w9#2~iY@3Y3L}#pdd=6fd~cT?ni--_FLiD4 zSG_d*>K{Yzjp^;K<62^)o)7dC;j?JW(dUBULj1=<{KrE4$3pzaLj1=<{KrE4$HEy_ zQfsWSo%}~1#nDHx;bS5TO)Mo{2My-`^!f1lEHF*>z$E_8oHO1rB`b&K;di-rDjxoF z79N)FQyfxwsCVY!Qs!X`^H8+cHO<3ejJ4k3VbMoC?45_}9NO25hsgmG?G-O_X|HF! z^1{qX+FY2yKb)EV%DNHObnVmCduqi8eAoQY8i-df|MF_qDqY*4e84sk4umtU5ihUldBpcP+BY zf93y%zWZ83d@n4rdTR^~3tP7WGdT^L>d18vJmNXS*YsJ(-genkF8pII!^WTw!LByT z)CT!fNbE#yI^gwP#0?~i+rNmtMNG$)T|wHK7|s{*7mWO}m|wvj7Y<_&8NWbh#|K*{ zKh>8e%Lefqbo0u(Or9=con3rWU*ph+vB-Z>okp!)dTI3cUj=7VHBaraX>F#(qNcWk zBV(HbTOb3be&%e*R0Yl3zbarnb+a-V=U&v`Vz`^*n%&8e{E4^p&2FO)i?Q(LAjO zR^(5d`Q?>e3HrD#+gz;=@jU$?1M7&hZTl#Xe6n;HGilX6FT|d7Vy?VXb4GGddzaW# z>cC^qg_c>TfQLSsxj#sDc;G2NO?aZR{~OA~3yU~6QD>{oy&&wfh#~qLUe~zrjUt*q zZD%PCJ~Dj4!}$Nm-(Qaez5wBVN4K{{n?50hpr%hhA zHjF8=&A)ltd{Ag`oDN%-_qICl{ty|R`Ra7;EsEeP1lKUJonE!70=LS z*vIh9-VghmL#Kgj*{Ck=Ua-gX+u}z*Yxrin_$JGknmu@UHd~u?UNiWA)0nMImiPRzr_FcmHcu7Lz1X~` zc!>AR^|V=;txcBq%%lzRJbe3M;qB(k#4EznvRu2w)Av{1F?eOb^@DkOqNmO5Y;Cf@ zGmbXKb|VMN?B8o9H?0u8NKEl1a`W7nqI+h*s1GyN_Zo9eJnv;{6u#G(pB~Q}$J*X_ zA7?B0l8I7Zvf&KkFML#^Tk>`yGG;w_JG-sbdpELH(`BtOzG6S?sJljQFm+tq^)l(N z_^A9yXH_V9A?;qI-7(s|OuH#QyInc8@4H6dYuafYNH(){TGu4TgWcOnd`0W6G3+1J zU3-B#`icQ+PizS}LY3Gnc09z6`#t&<=JZVLp{dvdmlAiIgib-`N-nCNajYDDj13Vl zwa5jup58-W$B2g$>)E7Ok2%xS2)0~S+zp^>pe%b5Z zbHM0!?Zp&4xvfjz>ucU-a-$tx)|hYNHPM}UX?AzC(I4K<-iX3G*FNU`VAsD^%Q=CC z=#l7izP+*m^lY@>O8UMJtv}?qGcI!m3}ZIyS-{xIJ2rjb_-@X7*;kjc5oCWT);Sy) zjm_i2=J1vH=`s&L-Ae4<^))mb6d$nd5Kto3d+>k6B6 zZcL0k0qMYaX-?RErV;rc-3pF3FN$ugZN*>&l*T2bRr&ye;sI@CHm6d z#Ck_r54U}Z*cxq@@SI|_>+-SRvDN2>$Y&nMp00+R@OakdYRDn0p+EWHvL6-S!`|H_ zdsnv7XGCY&FQ#vQYqXhh5F4#gjn{^A!hg;<(B)4RH(VNyYaZuwemDF0G^SeCh-Hr| zj`FB#U-P{<0DTyPa+?lnKVZZ7u*BD^HXH=cW*eRc!Nd0yJYQT}X2WydQ1Glyv{TP&l6+C=T!85hO;pgI^ z;8~s6I+&l&&44Gm2K=CJTzHna@U)E&tETKAc-GkPJSKSfo`Pp<$l>Rbq2Sq;o-euZAdBM2`$6#BZo{)q@bEna&%%(y&!t1bV{)-F`T6xscy0rp zO9$XN*M%o^b~ujC83fO5HasoGG7;Pct!m)b5*g({f{5rpf)ScE1;@U%s1uSt~dC z)Rps2KfiEcZ1WA-&)8G-gZ`TFCF|iT#UEy|ra*kB#_9W~slG=J**BXgKNiME-F~oj z(Ra!R7|?OfSbI*RpNHIjLODbB^KYloPlMY}+q5D3dGQqe$TpCkm3^>-y;=A82lRgN zqnuGe+^U3pN!b*#5idYj@2V*eca90|Rs11#Hh%nxg762I_cvd8FZkm**B7{aQ-5=Q z249-G>9U_jS;ii3XD!~?$rvP}|W2F7p> z*8Ft^T~}-uwgaclNOwICcmQ`j2A6S)M=Jp0o4w3&>6L=I1M(RY98) za7Vqyi0rGDMOJT!*k}THW8<--$05gw1ztrQ!sH&0$KD>tIDij)hFgd&w-8%yA-3E? zY`KNlatpEL7GldS#FiB|i;W6K?D(iJEW3Vlf%P!&z~1wPH|1Loe}K-Z3V;K~8a?Tb z)z0O%$Li#LJ7Zn$jP+&5UN!k0#5pt19}vEYu^ZknbIOV7l{)cB!P0i!Kx{IKTxn;# ziBe#OH%yF;Yl%`_4<%!axkYg?V)4tURkoj+C^zB{ln{H!hmOLR>{i>(47NUS2X)0| za|&nRQ*qRF8~d9-pw9}%`{9|KDZX$a`*Lhwi5T6jaq?8FMmM}(Il6I+v4eTW;@lhY zu5v#bz){VIE{^P)$u^Gc?=C+~aB%c&7Jd-E?lZhFu)kU7mkh#}6QeFB_GWMaz9thF z(Hx0R0w3T?`J0A^8RHVgV9a%U{dE{I7xtjq{G)Mm?|(AxDDf71toEKr?{|0HQJu*L z-48kA7XO>^vKQaGpW7X80{Gnd_-|L>duSZk^^4i}wiMg{QT&;u)PCB_xkE+N@F*VV zi_`?Ih~Xy>eoU;FbvEH9#vGSyk-wn15>gD4Ij)%Man@y`;LZQPfR7^fMtE`H{qEx9 zhYmjeF#{iw9O2`$sl7VUa%4ecD8l+iGK$`N-m#x&g^c%lw11>Im;~@ecqDq?b1gw5BgZ2Vm$pihmSevrBC-z{C2wIsSmC8j;D$o;UFJ! zbnS7~TdQB@Y^7}DdM3-bUV(OAzOzn)?_PGsb=V_QUH-FmYnJ(Ry5s8)m8FgEJjTaI z<2$H%)o+!_4zFZR1-L$uJfC$9Bf@JrJ5~Dm?kr;rXN++`ehxjiHaTN_<^ND#>|dW< zUR>=Rlk5%n@f#UqIvshjI14}iA>;*#YexPx4Kbdxvy5l*rx?$qPcoj<<-hWVLGr?k z2YE4OhAuk#-<;7;?#b(VXGcM%C&p9V4o4j~D%eekA zV_c^rFMjTf>klI@8Zza@X5@t#-z%pfFTR~+jO#PTcslZ8oioP&3whzruOF|=E-$Y1 zj>(Z13o^!ZI{Y|48$TL*IbFURe-0bT^)YtXaqQ_nWV0K0mXC4!Jln^RZCG+`2pcMh zEnnCglD{KAi#dv)Pb_;{_-E&sdh44i+24iFWb9DYC|g1dI)R-en=-Jczggc)1B#)m zy<=xF=I8yynXuoY8-pef)wOL|>%oTz?bSITn=f+r2&dasXFB87z8}|xboJZSMt`UK z3$>h;`*rlZY_}kOmSXuDoBTMhj%q|l$0vMm#|48ea#VD0Gn@khZQ-=L@^fTz9UX!9UzQJJK=ThHa>IjWgf@ z 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

nlZ*w?-)6oNc!bh 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

cX&m)UTier+j_QdFB5p_iy7c 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

xf5C=JlC9GvHxv; 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

PzwUYu2s4e*F_LVb~1N^G& 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

Lf$>ZuJy$=sNd_8-u?6d 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≥kW zub;-8(nzKMw+ELla_B^3Dc>5Z|7`r`(~{x2@tf32^psm!yIY7gGB@>A>QD#Z7JN

6cJcieuqdGD|!^v%JUVd0BBOwwK$9b{mj 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 z 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�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 Q`%zv_t=MV#;e^=S$L@X}!(Kuw{bmYqv~m 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

eciO=H=2 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 z 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%0AT-h+x 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

>)RLdHH7+!@ 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

qVYkeGeUkWx^FEZ`fnBijOJv1)epNOqkO8 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%0DE|&rq2E7d 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

  • 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

    3ZtuarsrB(PQ-FUMEbSIt7J_SKn(~<@nu`U2G}1 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

  • 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