diff --git a/daemon/cluster/convert/container.go b/daemon/cluster/convert/container.go index d43089b82e..f2d687ba66 100644 --- a/daemon/cluster/convert/container.go +++ b/daemon/cluster/convert/container.go @@ -97,7 +97,7 @@ func secretReferencesToGRPC(sr []*types.SecretReference) []*swarmapi.SecretRefer } if s.File != nil { ref.Target = &swarmapi.SecretReference_File{ - File: &swarmapi.SecretReference_FileTarget{ + File: &swarmapi.FileTarget{ Name: s.File.Name, UID: s.File.UID, GID: s.File.GID, diff --git a/vendor.conf b/vendor.conf index 23e9bea77d..6a31556c2e 100644 --- a/vendor.conf +++ b/vendor.conf @@ -105,7 +105,7 @@ github.com/docker/containerd 9048e5e50717ea4497b757314bad98ea3763c145 github.com/tonistiigi/fifo 1405643975692217d6720f8b54aeee1bf2cd5cf4 # cluster -github.com/docker/swarmkit b74ec2b81bb1d4a998f461bb2dc59b9408b7790f +github.com/docker/swarmkit d2e48a332063ccd4ea26b6262ee717de997de560 github.com/golang/mock bd3c8e81be01eef76d4b503f5e687d2d1354d2d9 github.com/gogo/protobuf 8d70fb3182befc465c4a1eac8ad4d38ff49778e2 github.com/cloudflare/cfssl 7fb22c8cba7ecaf98e4082d22d65800cf45e042a diff --git a/vendor/github.com/docker/swarmkit/agent/agent.go b/vendor/github.com/docker/swarmkit/agent/agent.go index 3721f2916a..abe06735d7 100644 --- a/vendor/github.com/docker/swarmkit/agent/agent.go +++ b/vendor/github.com/docker/swarmkit/agent/agent.go @@ -1,6 +1,7 @@ package agent import ( + "bytes" "fmt" "math/rand" "reflect" @@ -44,6 +45,8 @@ type Agent struct { stopOnce sync.Once // only allow stop to be called once closed chan struct{} // only closed in run err error // read only after closed is closed + + nodeUpdatePeriod time.Duration } // New returns a new agent, ready for task dispatch. @@ -53,14 +56,15 @@ func New(config *Config) (*Agent, error) { } a := &Agent{ - config: config, - sessionq: make(chan sessionOperation), - started: make(chan struct{}), - leaving: make(chan struct{}), - left: make(chan struct{}), - stopped: make(chan struct{}), - closed: make(chan struct{}), - ready: make(chan struct{}), + config: config, + sessionq: make(chan sessionOperation), + started: make(chan struct{}), + leaving: make(chan struct{}), + left: make(chan struct{}), + stopped: make(chan struct{}), + closed: make(chan struct{}), + ready: make(chan struct{}), + nodeUpdatePeriod: nodeUpdatePeriod, } a.worker = newWorker(config.DB, config.Executor, a) @@ -182,13 +186,15 @@ func (a *Agent) run(ctx context.Context) { log.G(ctx).Debug("(*Agent).run") defer log.G(ctx).Debug("(*Agent).run exited") + nodeTLSInfo := a.config.NodeTLSInfo + // get the node description - nodeDescription, err := a.nodeDescriptionWithHostname(ctx) + nodeDescription, err := a.nodeDescriptionWithHostname(ctx, nodeTLSInfo) if err != nil { log.G(ctx).WithError(err).WithField("agent", a.config.Executor).Error("agent: node description unavailable") } // nodeUpdateTicker is used to periodically check for updates to node description - nodeUpdateTicker := time.NewTicker(nodeUpdatePeriod) + nodeUpdateTicker := time.NewTicker(a.nodeUpdatePeriod) defer nodeUpdateTicker.Stop() var ( @@ -214,6 +220,35 @@ func (a *Agent) run(ctx context.Context) { a.worker.Listen(ctx, reporter) + updateNode := func() { + // skip updating if the registration isn't finished + if registered != nil { + return + } + // get the current node description + newNodeDescription, err := a.nodeDescriptionWithHostname(ctx, nodeTLSInfo) + if err != nil { + log.G(ctx).WithError(err).WithField("agent", a.config.Executor).Error("agent: updated node description unavailable") + } + + // if newNodeDescription is nil, it will cause a panic when + // trying to create a session. Typically this can happen + // if the engine goes down + if newNodeDescription == nil { + return + } + + // 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) { + nodeDescription = newNodeDescription + // close the session + log.G(ctx).Info("agent: found node update") + session.sendError(nil) + } + } + for { select { case operation := <-sessionq: @@ -237,7 +272,8 @@ func (a *Agent) run(ctx context.Context) { switch msg.Type { case api.AssignmentsMessage_COMPLETE: - // Need to assign secrets before tasks, because tasks might depend on new secrets + // Need to assign secrets and configs before tasks, + // because tasks might depend on new secrets or configs if err := a.worker.Assign(ctx, msg.Changes); err != nil { log.G(ctx).WithError(err).Error("failed to synchronize worker assignments") } @@ -247,7 +283,7 @@ func (a *Agent) run(ctx context.Context) { } } case msg := <-session.messages: - if err := a.handleSessionMessage(ctx, msg); err != nil { + if err := a.handleSessionMessage(ctx, msg, nodeTLSInfo); err != nil { log.G(ctx).WithError(err).Error("session message handler failed") } case sub := <-session.subscriptions: @@ -305,33 +341,17 @@ func (a *Agent) run(ctx context.Context) { } session = newSession(ctx, a, delay, session.sessionID, nodeDescription) registered = session.registered + case ev := <-a.config.NotifyTLSChange: + // the TLS info has changed, so force a check to see if we need to restart the session + if tlsInfo, ok := ev.(*api.NodeTLSInfo); ok { + nodeTLSInfo = tlsInfo + updateNode() + nodeUpdateTicker.Stop() + nodeUpdateTicker = time.NewTicker(a.nodeUpdatePeriod) + } case <-nodeUpdateTicker.C: - // skip this case if the registration isn't finished - if registered != nil { - continue - } - // get the current node description - newNodeDescription, err := a.nodeDescriptionWithHostname(ctx) - if err != nil { - log.G(ctx).WithError(err).WithField("agent", a.config.Executor).Error("agent: updated node description unavailable") - } - - // if newNodeDescription is nil, it will cause a panic when - // trying to create a session. Typically this can happen - // if the engine goes down - if newNodeDescription == nil { - continue - } - - // 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) { - nodeDescription = newNodeDescription - // close the session - log.G(ctx).Info("agent: found node update") - session.sendError(nil) - } + // periodically check to see whether the node information has changed, and if so, restart the session + updateNode() case <-a.stopped: // TODO(stevvooe): Wait on shutdown and cleanup. May need to pump // this loop a few times. @@ -347,7 +367,7 @@ func (a *Agent) run(ctx context.Context) { } } -func (a *Agent) handleSessionMessage(ctx context.Context, message *api.SessionMessage) error { +func (a *Agent) handleSessionMessage(ctx context.Context, message *api.SessionMessage, nti *api.NodeTLSInfo) error { seen := map[api.Peer]struct{}{} for _, manager := range message.Managers { if manager.Peer.Addr == "" { @@ -358,16 +378,26 @@ func (a *Agent) handleSessionMessage(ctx context.Context, message *api.SessionMe seen[*manager.Peer] = struct{}{} } - if message.Node != nil { - if a.node == nil || !nodesEqual(a.node, message.Node) { - if a.config.NotifyNodeChange != nil { - a.config.NotifyNodeChange <- message.Node.Copy() - } - a.node = message.Node.Copy() - if err := a.config.Executor.Configure(ctx, a.node); err != nil { - log.G(ctx).WithError(err).Error("node configure failed") - } + var changes *NodeChanges + if message.Node != nil && (a.node == nil || !nodesEqual(a.node, message.Node)) { + if a.config.NotifyNodeChange != nil { + changes = &NodeChanges{Node: message.Node.Copy()} } + a.node = message.Node.Copy() + if err := a.config.Executor.Configure(ctx, a.node); err != nil { + log.G(ctx).WithError(err).Error("node configure failed") + } + } + if len(message.RootCA) > 0 && !bytes.Equal(message.RootCA, nti.TrustRoot) { + if changes == nil { + changes = &NodeChanges{RootCert: message.RootCA} + } else { + changes.RootCert = message.RootCA + } + } + + if changes != nil { + a.config.NotifyNodeChange <- changes } // prune managers not in list. @@ -517,12 +547,15 @@ func (a *Agent) Publisher(ctx context.Context, subscriptionID string) (exec.LogP } // nodeDescriptionWithHostname retrieves node description, and overrides hostname if available -func (a *Agent) nodeDescriptionWithHostname(ctx context.Context) (*api.NodeDescription, error) { +func (a *Agent) nodeDescriptionWithHostname(ctx context.Context, tlsInfo *api.NodeTLSInfo) (*api.NodeDescription, error) { desc, err := a.config.Executor.Describe(ctx) - // Override hostname - if a.config.Hostname != "" && desc != nil { - desc.Hostname = a.config.Hostname + // Override hostname and TLS info + if desc != nil { + if a.config.Hostname != "" && desc != nil { + desc.Hostname = a.config.Hostname + } + desc.TLSInfo = tlsInfo } return desc, err } diff --git a/vendor/github.com/docker/swarmkit/agent/config.go b/vendor/github.com/docker/swarmkit/agent/config.go index de9359842e..70c94ecb65 100644 --- a/vendor/github.com/docker/swarmkit/agent/config.go +++ b/vendor/github.com/docker/swarmkit/agent/config.go @@ -2,6 +2,7 @@ package agent import ( "github.com/boltdb/bolt" + "github.com/docker/go-events" "github.com/docker/swarmkit/agent/exec" "github.com/docker/swarmkit/api" "github.com/docker/swarmkit/connectionbroker" @@ -9,6 +10,13 @@ import ( "google.golang.org/grpc/credentials" ) +// NodeChanges encapsulates changes that should be made to the node as per session messages +// from the dispatcher +type NodeChanges struct { + Node *api.Node + RootCert []byte +} + // Config provides values for an Agent. type Config struct { // Hostname the name of host for agent instance. @@ -25,10 +33,16 @@ type Config struct { DB *bolt.DB // NotifyNodeChange channel receives new node changes from session messages. - NotifyNodeChange chan<- *api.Node + NotifyNodeChange chan<- *NodeChanges + + // NotifyTLSChange channel sends new TLS information changes, which can cause a session to restart + NotifyTLSChange <-chan events.Event // Credentials is credentials for grpc connection to manager. Credentials credentials.TransportCredentials + + // NodeTLSInfo contains the starting node TLS info to bootstrap into the agent + NodeTLSInfo *api.NodeTLSInfo } func (c *Config) validate() error { @@ -44,5 +58,9 @@ func (c *Config) validate() error { return errors.New("agent: database required") } + if c.NodeTLSInfo == nil { + return errors.New("agent: Node TLS info is required") + } + return nil } diff --git a/vendor/github.com/docker/swarmkit/agent/configs/configs.go b/vendor/github.com/docker/swarmkit/agent/configs/configs.go new file mode 100644 index 0000000000..f29e8afcba --- /dev/null +++ b/vendor/github.com/docker/swarmkit/agent/configs/configs.go @@ -0,0 +1,87 @@ +package configs + +import ( + "sync" + + "github.com/docker/swarmkit/agent/exec" + "github.com/docker/swarmkit/api" +) + +// configs is a map that keeps all the currently available configs to the agent +// mapped by config ID. +type configs struct { + mu sync.RWMutex + m map[string]*api.Config +} + +// NewManager returns a place to store configs. +func NewManager() exec.ConfigsManager { + return &configs{ + m: make(map[string]*api.Config), + } +} + +// Get returns a config by ID. If the config doesn't exist, returns nil. +func (r *configs) Get(configID string) *api.Config { + r.mu.RLock() + defer r.mu.RUnlock() + if r, ok := r.m[configID]; ok { + return r + } + return nil +} + +// Add adds one or more configs to the config map. +func (r *configs) Add(configs ...api.Config) { + r.mu.Lock() + defer r.mu.Unlock() + for _, config := range configs { + r.m[config.ID] = config.Copy() + } +} + +// Remove removes one or more configs by ID from the config map. Succeeds +// whether or not the given IDs are in the map. +func (r *configs) Remove(configs []string) { + r.mu.Lock() + defer r.mu.Unlock() + for _, config := range configs { + delete(r.m, config) + } +} + +// Reset removes all the configs. +func (r *configs) Reset() { + r.mu.Lock() + defer r.mu.Unlock() + r.m = make(map[string]*api.Config) +} + +// taskRestrictedConfigsProvider restricts the ids to the task. +type taskRestrictedConfigsProvider struct { + configs exec.ConfigGetter + configIDs map[string]struct{} // allow list of config ids +} + +func (sp *taskRestrictedConfigsProvider) Get(configID string) *api.Config { + if _, ok := sp.configIDs[configID]; !ok { + return nil + } + + return sp.configs.Get(configID) +} + +// Restrict provides a getter that only allows access to the configs +// referenced by the task. +func Restrict(configs exec.ConfigGetter, t *api.Task) exec.ConfigGetter { + cids := map[string]struct{}{} + + container := t.Spec.GetContainer() + if container != nil { + for _, configRef := range container.Configs { + cids[configRef.ConfigID] = struct{}{} + } + } + + return &taskRestrictedConfigsProvider{configs: configs, configIDs: cids} +} diff --git a/vendor/github.com/docker/swarmkit/agent/dependency.go b/vendor/github.com/docker/swarmkit/agent/dependency.go new file mode 100644 index 0000000000..4872500867 --- /dev/null +++ b/vendor/github.com/docker/swarmkit/agent/dependency.go @@ -0,0 +1,52 @@ +package agent + +import ( + "github.com/docker/swarmkit/agent/configs" + "github.com/docker/swarmkit/agent/exec" + "github.com/docker/swarmkit/agent/secrets" + "github.com/docker/swarmkit/api" +) + +type dependencyManager struct { + secrets exec.SecretsManager + configs exec.ConfigsManager +} + +// NewDependencyManager creates a dependency manager object that wraps +// objects which provide access to various dependency types. +func NewDependencyManager() exec.DependencyManager { + return &dependencyManager{ + secrets: secrets.NewManager(), + configs: configs.NewManager(), + } +} + +func (d *dependencyManager) Secrets() exec.SecretsManager { + return d.secrets +} + +func (d *dependencyManager) Configs() exec.ConfigsManager { + return d.configs +} + +type dependencyGetter struct { + secrets exec.SecretGetter + configs exec.ConfigGetter +} + +func (d *dependencyGetter) Secrets() exec.SecretGetter { + return d.secrets +} + +func (d *dependencyGetter) Configs() exec.ConfigGetter { + return d.configs +} + +// Restrict provides getters that only allows access to the dependencies +// referenced by the task. +func Restrict(dependencies exec.DependencyManager, t *api.Task) exec.DependencyGetter { + return &dependencyGetter{ + secrets: secrets.Restrict(dependencies.Secrets(), t), + configs: configs.Restrict(dependencies.Configs(), t), + } +} diff --git a/vendor/github.com/docker/swarmkit/agent/exec/executor.go b/vendor/github.com/docker/swarmkit/agent/exec/executor.go index 55754edbbb..12bf29b4d2 100644 --- a/vendor/github.com/docker/swarmkit/agent/exec/executor.go +++ b/vendor/github.com/docker/swarmkit/agent/exec/executor.go @@ -28,6 +28,26 @@ type SecretsProvider interface { Secrets() SecretsManager } +// ConfigsProvider is implemented by objects that can store configs, +// typically an executor. +type ConfigsProvider interface { + Configs() ConfigsManager +} + +// DependencyManager is a meta-object that can keep track of typed objects +// such as secrets and configs. +type DependencyManager interface { + SecretsProvider + ConfigsProvider +} + +// DependencyGetter is a meta-object that can provide access to typed objects +// such as secrets and configs. +type DependencyGetter interface { + Secrets() SecretGetter + Configs() ConfigGetter +} + // SecretGetter contains secret data necessary for the Controller. type SecretGetter interface { // Get returns the the secret with a specific secret ID, if available. @@ -43,3 +63,19 @@ type SecretsManager interface { Remove(secrets []string) // remove the secrets by ID Reset() // remove all secrets } + +// ConfigGetter contains config data necessary for the Controller. +type ConfigGetter interface { + // Get returns the the config with a specific config ID, if available. + // When the config is not available, the return will be nil. + Get(configID string) *api.Config +} + +// ConfigsManager is the interface for config storage and updates. +type ConfigsManager interface { + ConfigGetter + + Add(configs ...api.Config) // add one or more configs + Remove(configs []string) // remove the configs by ID + Reset() // remove all configs +} diff --git a/vendor/github.com/docker/swarmkit/agent/worker.go b/vendor/github.com/docker/swarmkit/agent/worker.go index 1e092c24d4..a27cd96ee4 100644 --- a/vendor/github.com/docker/swarmkit/agent/worker.go +++ b/vendor/github.com/docker/swarmkit/agent/worker.go @@ -23,12 +23,13 @@ type Worker interface { // It is not safe to call any worker function after that. Close() - // Assign assigns a complete set of tasks and secrets to a worker. Any task or secrets not included in - // this set will be removed. + // Assign assigns a complete set of tasks and configs/secrets to a + // worker. Any items not included in this set will be removed. Assign(ctx context.Context, assignments []*api.AssignmentChange) error - // Updates updates an incremental set of tasks or secrets of the worker. Any task/secret not included - // either in added or removed will remain untouched. + // Updates updates an incremental set of tasks or configs/secrets of + // the worker. Any items not included either in added or removed will + // remain untouched. Update(ctx context.Context, assignments []*api.AssignmentChange) error // Listen to updates about tasks controlled by the worker. When first @@ -119,11 +120,11 @@ func (w *worker) Close() { w.taskevents.Close() } -// Assign assigns a full set of tasks and secrets to the worker. +// Assign assigns a full set of tasks, configs, and secrets to the worker. // Any tasks not previously known will be started. Any tasks that are in the task set // and already running will be updated, if possible. Any tasks currently running on // the worker outside the task set will be terminated. -// Any secrets not in the set of assignments will be removed. +// Anything not in the set of assignments will be removed. func (w *worker) Assign(ctx context.Context, assignments []*api.AssignmentChange) error { w.mu.Lock() defer w.mu.Unlock() @@ -136,20 +137,28 @@ func (w *worker) Assign(ctx context.Context, assignments []*api.AssignmentChange "len(assignments)": len(assignments), }).Debug("(*worker).Assign") - // Need to update secrets before tasks, because tasks might depend on new secrets + // Need to update dependencies before tasks + err := reconcileSecrets(ctx, w, assignments, true) if err != nil { return err } + err = reconcileConfigs(ctx, w, assignments, true) + if err != nil { + return err + } + return reconcileTaskState(ctx, w, assignments, true) } -// Update updates the set of tasks and secret for the worker. +// Update updates the set of tasks, configs, and secrets for the worker. // Tasks in the added set will be added to the worker, and tasks in the removed set // will be removed from the worker // Secrets in the added set will be added to the worker, and secrets in the removed set // will be removed from the worker. +// Configs in the added set will be added to the worker, and configs in the removed set +// will be removed from the worker. func (w *worker) Update(ctx context.Context, assignments []*api.AssignmentChange) error { w.mu.Lock() defer w.mu.Unlock() @@ -167,6 +176,11 @@ func (w *worker) Update(ctx context.Context, assignments []*api.AssignmentChange return err } + err = reconcileConfigs(ctx, w, assignments, false) + if err != nil { + return err + } + return reconcileTaskState(ctx, w, assignments, false) } @@ -318,7 +332,7 @@ func reconcileSecrets(ctx context.Context, w *worker, assignments []*api.Assignm } } - provider, ok := w.executor.(exec.SecretsProvider) + secretsProvider, ok := w.executor.(exec.SecretsProvider) if !ok { if len(updatedSecrets) != 0 || len(removedSecrets) != 0 { log.G(ctx).Warn("secrets update ignored; executor does not support secrets") @@ -326,7 +340,7 @@ func reconcileSecrets(ctx context.Context, w *worker, assignments []*api.Assignm return nil } - secrets := provider.Secrets() + secrets := secretsProvider.Secrets() log.G(ctx).WithFields(logrus.Fields{ "len(updatedSecrets)": len(updatedSecrets), @@ -344,6 +358,49 @@ func reconcileSecrets(ctx context.Context, w *worker, assignments []*api.Assignm return nil } +func reconcileConfigs(ctx context.Context, w *worker, assignments []*api.AssignmentChange, fullSnapshot bool) error { + var ( + updatedConfigs []api.Config + removedConfigs []string + ) + for _, a := range assignments { + if r := a.Assignment.GetConfig(); r != nil { + switch a.Action { + case api.AssignmentChange_AssignmentActionUpdate: + updatedConfigs = append(updatedConfigs, *r) + case api.AssignmentChange_AssignmentActionRemove: + removedConfigs = append(removedConfigs, r.ID) + } + + } + } + + configsProvider, ok := w.executor.(exec.ConfigsProvider) + if !ok { + if len(updatedConfigs) != 0 || len(removedConfigs) != 0 { + log.G(ctx).Warn("configs update ignored; executor does not support configs") + } + return nil + } + + configs := configsProvider.Configs() + + log.G(ctx).WithFields(logrus.Fields{ + "len(updatedConfigs)": len(updatedConfigs), + "len(removedConfigs)": len(removedConfigs), + }).Debug("(*worker).reconcileConfigs") + + // If this was a complete set of configs, we're going to clear the configs map and add all of them + if fullSnapshot { + configs.Reset() + } else { + configs.Remove(removedConfigs) + } + configs.Add(updatedConfigs...) + + return nil +} + func (w *worker) Listen(ctx context.Context, reporter StatusReporter) { w.mu.Lock() defer w.mu.Unlock() diff --git a/vendor/github.com/docker/swarmkit/api/control.pb.go b/vendor/github.com/docker/swarmkit/api/control.pb.go index 8d57b49be7..6d63643455 100644 --- a/vendor/github.com/docker/swarmkit/api/control.pb.go +++ b/vendor/github.com/docker/swarmkit/api/control.pb.go @@ -567,7 +567,7 @@ func (m *CreateSecretRequest) Reset() { *m = CreateSecretRequ func (*CreateSecretRequest) ProtoMessage() {} func (*CreateSecretRequest) Descriptor() ([]byte, []int) { return fileDescriptorControl, []int{45} } -// CreateSecretResponse contains the newly created `Secret`` corresponding to the +// 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 { @@ -597,6 +597,119 @@ func (m *RemoveSecretResponse) Reset() { *m = RemoveSecretRes func (*RemoveSecretResponse) ProtoMessage() {} func (*RemoveSecretResponse) Descriptor() ([]byte, []int) { return fileDescriptorControl, []int{48} } +// 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"` +} + +func (m *GetConfigRequest) Reset() { *m = GetConfigRequest{} } +func (*GetConfigRequest) ProtoMessage() {} +func (*GetConfigRequest) Descriptor() ([]byte, []int) { return fileDescriptorControl, []int{49} } + +// GetConfigResponse contains the Config corresponding to the id in +// `GetConfigRequest`. +type GetConfigResponse struct { + Config *Config `protobuf:"bytes,1,opt,name=config" json:"config,omitempty"` +} + +func (m *GetConfigResponse) Reset() { *m = GetConfigResponse{} } +func (*GetConfigResponse) ProtoMessage() {} +func (*GetConfigResponse) Descriptor() ([]byte, []int) { return fileDescriptorControl, []int{50} } + +type UpdateConfigRequest struct { + // 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" 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" json:"spec,omitempty"` +} + +func (m *UpdateConfigRequest) Reset() { *m = UpdateConfigRequest{} } +func (*UpdateConfigRequest) ProtoMessage() {} +func (*UpdateConfigRequest) Descriptor() ([]byte, []int) { return fileDescriptorControl, []int{51} } + +type UpdateConfigResponse struct { + Config *Config `protobuf:"bytes,1,opt,name=config" json:"config,omitempty"` +} + +func (m *UpdateConfigResponse) Reset() { *m = UpdateConfigResponse{} } +func (*UpdateConfigResponse) ProtoMessage() {} +func (*UpdateConfigResponse) Descriptor() ([]byte, []int) { return fileDescriptorControl, []int{52} } + +// 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" json:"filters,omitempty"` +} + +func (m *ListConfigsRequest) Reset() { *m = ListConfigsRequest{} } +func (*ListConfigsRequest) ProtoMessage() {} +func (*ListConfigsRequest) Descriptor() ([]byte, []int) { return fileDescriptorControl, []int{53} } + +type ListConfigsRequest_Filters struct { + Names []string `protobuf:"bytes,1,rep,name=names" json:"names,omitempty"` + IDPrefixes []string `protobuf:"bytes,2,rep,name=id_prefixes,json=idPrefixes" json:"id_prefixes,omitempty"` + Labels map[string]string `protobuf:"bytes,3,rep,name=labels" 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" json:"name_prefixes,omitempty"` +} + +func (m *ListConfigsRequest_Filters) Reset() { *m = ListConfigsRequest_Filters{} } +func (*ListConfigsRequest_Filters) ProtoMessage() {} +func (*ListConfigsRequest_Filters) Descriptor() ([]byte, []int) { + return fileDescriptorControl, []int{53, 0} +} + +// 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" json:"configs,omitempty"` +} + +func (m *ListConfigsResponse) Reset() { *m = ListConfigsResponse{} } +func (*ListConfigsResponse) ProtoMessage() {} +func (*ListConfigsResponse) Descriptor() ([]byte, []int) { return fileDescriptorControl, []int{54} } + +// 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" json:"spec,omitempty"` +} + +func (m *CreateConfigRequest) Reset() { *m = CreateConfigRequest{} } +func (*CreateConfigRequest) ProtoMessage() {} +func (*CreateConfigRequest) Descriptor() ([]byte, []int) { return fileDescriptorControl, []int{55} } + +// CreateConfigResponse contains the newly created `Config` corresponding to the +// name in `CreateConfigRequest`. +type CreateConfigResponse struct { + Config *Config `protobuf:"bytes,1,opt,name=config" json:"config,omitempty"` +} + +func (m *CreateConfigResponse) Reset() { *m = CreateConfigResponse{} } +func (*CreateConfigResponse) ProtoMessage() {} +func (*CreateConfigResponse) Descriptor() ([]byte, []int) { return fileDescriptorControl, []int{56} } + +// 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"` +} + +func (m *RemoveConfigRequest) Reset() { *m = RemoveConfigRequest{} } +func (*RemoveConfigRequest) ProtoMessage() {} +func (*RemoveConfigRequest) Descriptor() ([]byte, []int) { return fileDescriptorControl, []int{57} } + +// RemoveConfigResponse is an empty object indicating the successful removal of +// a config. +type RemoveConfigResponse struct { +} + +func (m *RemoveConfigResponse) Reset() { *m = RemoveConfigResponse{} } +func (*RemoveConfigResponse) ProtoMessage() {} +func (*RemoveConfigResponse) Descriptor() ([]byte, []int) { return fileDescriptorControl, []int{58} } + func init() { proto.RegisterType((*GetNodeRequest)(nil), "docker.swarmkit.v1.GetNodeRequest") proto.RegisterType((*GetNodeResponse)(nil), "docker.swarmkit.v1.GetNodeResponse") @@ -653,6 +766,17 @@ func init() { 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.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.RegisterEnum("docker.swarmkit.v1.UpdateServiceRequest_Rollback", UpdateServiceRequest_Rollback_name, UpdateServiceRequest_Rollback_value) } @@ -860,6 +984,46 @@ func (p *authenticatedWrapperControlServer) RemoveSecret(ctx context.Context, r 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 (m *GetNodeRequest) Copy() *GetNodeRequest { if m == nil { return nil @@ -1996,6 +2160,224 @@ func (m *RemoveSecretResponse) Copy() *RemoveSecretResponse { } 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_docker_swarmkit_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_docker_swarmkit_api_deepcopy.Copy(m.ConfigVersion, o.ConfigVersion) + } + if o.Spec != nil { + m.Spec = &ConfigSpec{} + github_com_docker_swarmkit_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_docker_swarmkit_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_docker_swarmkit_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_docker_swarmkit_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_docker_swarmkit_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_docker_swarmkit_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{}) {} // Reference imports to suppress errors if they are not otherwise used. var _ context.Context @@ -2039,7 +2421,7 @@ type ControlClient interface { // - 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 all non-internal `Secret`s being + // 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`. @@ -2056,6 +2438,35 @@ type ControlClient interface { // - 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) } type controlClient struct { @@ -2282,6 +2693,51 @@ func (c *controlClient) RemoveSecret(ctx context.Context, in *RemoveSecretReques return out, nil } +func (c *controlClient) GetConfig(ctx context.Context, in *GetConfigRequest, opts ...grpc.CallOption) (*GetConfigResponse, error) { + out := new(GetConfigResponse) + err := grpc.Invoke(ctx, "/docker.swarmkit.v1.Control/GetConfig", in, out, c.cc, 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 := grpc.Invoke(ctx, "/docker.swarmkit.v1.Control/UpdateConfig", in, out, c.cc, 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 := grpc.Invoke(ctx, "/docker.swarmkit.v1.Control/ListConfigs", in, out, c.cc, 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 := grpc.Invoke(ctx, "/docker.swarmkit.v1.Control/CreateConfig", in, out, c.cc, 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 := grpc.Invoke(ctx, "/docker.swarmkit.v1.Control/RemoveConfig", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // Server API for Control service type ControlServer interface { @@ -2316,7 +2772,7 @@ type ControlServer interface { // - 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 all non-internal `Secret`s being + // 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`. @@ -2333,6 +2789,35 @@ type ControlServer interface { // - 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) } func RegisterControlServer(s *grpc.Server, srv ControlServer) { @@ -2771,6 +3256,96 @@ func _Control_RemoveSecret_Handler(srv interface{}, ctx context.Context, dec fun 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) +} + var _Control_serviceDesc = grpc.ServiceDesc{ ServiceName: "docker.swarmkit.v1.Control", HandlerType: (*ControlServer)(nil), @@ -2871,6 +3446,26 @@ var _Control_serviceDesc = grpc.ServiceDesc{ 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, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "control.proto", @@ -4896,6 +5491,366 @@ func (m *RemoveSecretResponse) MarshalTo(dAtA []byte) (int, error) { return i, nil } +func (m *GetConfigRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *GetConfigRequest) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.ConfigID) > 0 { + dAtA[i] = 0xa + i++ + i = encodeVarintControl(dAtA, i, uint64(len(m.ConfigID))) + i += copy(dAtA[i:], m.ConfigID) + } + return i, nil +} + +func (m *GetConfigResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *GetConfigResponse) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Config != nil { + dAtA[i] = 0xa + i++ + i = encodeVarintControl(dAtA, i, uint64(m.Config.Size())) + n38, err := m.Config.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n38 + } + return i, nil +} + +func (m *UpdateConfigRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *UpdateConfigRequest) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.ConfigID) > 0 { + dAtA[i] = 0xa + i++ + i = encodeVarintControl(dAtA, i, uint64(len(m.ConfigID))) + i += copy(dAtA[i:], m.ConfigID) + } + if m.ConfigVersion != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintControl(dAtA, i, uint64(m.ConfigVersion.Size())) + n39, err := m.ConfigVersion.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n39 + } + if m.Spec != nil { + dAtA[i] = 0x1a + i++ + i = encodeVarintControl(dAtA, i, uint64(m.Spec.Size())) + n40, err := m.Spec.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n40 + } + return i, nil +} + +func (m *UpdateConfigResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *UpdateConfigResponse) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Config != nil { + dAtA[i] = 0xa + i++ + i = encodeVarintControl(dAtA, i, uint64(m.Config.Size())) + n41, err := m.Config.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n41 + } + return i, nil +} + +func (m *ListConfigsRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ListConfigsRequest) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Filters != nil { + dAtA[i] = 0xa + i++ + i = encodeVarintControl(dAtA, i, uint64(m.Filters.Size())) + n42, err := m.Filters.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n42 + } + return i, nil +} + +func (m *ListConfigsRequest_Filters) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ListConfigsRequest_Filters) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.Names) > 0 { + for _, s := range m.Names { + dAtA[i] = 0xa + i++ + l = len(s) + for l >= 1<<7 { + dAtA[i] = uint8(uint64(l)&0x7f | 0x80) + l >>= 7 + i++ + } + dAtA[i] = uint8(l) + i++ + i += copy(dAtA[i:], s) + } + } + if len(m.IDPrefixes) > 0 { + for _, s := range m.IDPrefixes { + dAtA[i] = 0x12 + i++ + l = len(s) + for l >= 1<<7 { + dAtA[i] = uint8(uint64(l)&0x7f | 0x80) + l >>= 7 + i++ + } + dAtA[i] = uint8(l) + i++ + i += copy(dAtA[i:], s) + } + } + if len(m.Labels) > 0 { + for k, _ := range m.Labels { + dAtA[i] = 0x1a + i++ + v := m.Labels[k] + mapSize := 1 + len(k) + sovControl(uint64(len(k))) + 1 + len(v) + sovControl(uint64(len(v))) + i = encodeVarintControl(dAtA, i, uint64(mapSize)) + dAtA[i] = 0xa + i++ + i = encodeVarintControl(dAtA, i, uint64(len(k))) + i += copy(dAtA[i:], k) + dAtA[i] = 0x12 + i++ + i = encodeVarintControl(dAtA, i, uint64(len(v))) + i += copy(dAtA[i:], v) + } + } + if len(m.NamePrefixes) > 0 { + for _, s := range m.NamePrefixes { + dAtA[i] = 0x22 + i++ + l = len(s) + for l >= 1<<7 { + dAtA[i] = uint8(uint64(l)&0x7f | 0x80) + l >>= 7 + i++ + } + dAtA[i] = uint8(l) + i++ + i += copy(dAtA[i:], s) + } + } + return i, nil +} + +func (m *ListConfigsResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ListConfigsResponse) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.Configs) > 0 { + for _, msg := range m.Configs { + dAtA[i] = 0xa + i++ + i = encodeVarintControl(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func (m *CreateConfigRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CreateConfigRequest) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Spec != nil { + dAtA[i] = 0xa + i++ + i = encodeVarintControl(dAtA, i, uint64(m.Spec.Size())) + n43, err := m.Spec.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n43 + } + return i, nil +} + +func (m *CreateConfigResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CreateConfigResponse) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Config != nil { + dAtA[i] = 0xa + i++ + i = encodeVarintControl(dAtA, i, uint64(m.Config.Size())) + n44, err := m.Config.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n44 + } + return i, nil +} + +func (m *RemoveConfigRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RemoveConfigRequest) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.ConfigID) > 0 { + dAtA[i] = 0xa + i++ + i = encodeVarintControl(dAtA, i, uint64(len(m.ConfigID))) + i += copy(dAtA[i:], m.ConfigID) + } + return i, nil +} + +func (m *RemoveConfigResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RemoveConfigResponse) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + return i, nil +} + func encodeFixed64Control(dAtA []byte, offset int, v uint64) int { dAtA[offset] = uint8(v) dAtA[offset+1] = uint8(v >> 8) @@ -5836,6 +6791,181 @@ func (p *raftProxyControlServer) RemoveSecret(ctx context.Context, r *RemoveSecr 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 (m *GetNodeRequest) Size() (n int) { var l int _ = l @@ -6614,6 +7744,144 @@ func (m *RemoveSecretResponse) Size() (n int) { return n } +func (m *GetConfigRequest) Size() (n int) { + 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) { + 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) { + 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) { + 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) { + 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) { + 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) { + 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) { + 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) { + 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) { + 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) { + var l int + _ = l + return n +} + func sovControl(x uint64) (n int) { for { n++ @@ -7274,6 +8542,130 @@ func (this *RemoveSecretResponse) String() string { }, "") 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" + } + s := strings.Join([]string{`&ListConfigsResponse{`, + `Configs:` + strings.Replace(fmt.Sprintf("%v", this.Configs), "Config", "Config", 1) + `,`, + `}`, + }, "") + 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 valueToStringControl(v interface{}) string { rv := reflect.ValueOf(v) if rv.IsNil() { @@ -13390,6 +14782,1108 @@ func (m *RemoveSecretResponse) Unmarshal(dAtA []byte) error { } 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 > 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 { + 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 > 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 { + 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 > 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 > 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 > 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 { + 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 > 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 { + 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 > 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 { + 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 > 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 > 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 > l { + return io.ErrUnexpectedEOF + } + var keykey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowControl + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + keykey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + 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 > l { + return io.ErrUnexpectedEOF + } + mapkey := string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + if m.Labels == nil { + m.Labels = make(map[string]string) + } + if iNdEx < postIndex { + var valuekey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowControl + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + valuekey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + 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 > l { + return io.ErrUnexpectedEOF + } + mapvalue := string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + m.Labels[mapkey] = mapvalue + } else { + var mapvalue string + 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 > 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 { + 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 > 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 { + 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 > 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 { + 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 > 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 { + 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 > 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 { + 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 { + 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 @@ -13498,125 +15992,136 @@ var ( func init() { proto.RegisterFile("control.proto", fileDescriptorControl) } var fileDescriptorControl = []byte{ - // 1917 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xcc, 0x5a, 0x4f, 0x6f, 0x1b, 0x41, - 0x15, 0x8f, 0xff, 0x24, 0xb6, 0x9f, 0x63, 0x27, 0x99, 0xb8, 0xc5, 0x72, 0x4b, 0x12, 0x6d, 0x69, - 0xe2, 0xa0, 0xe0, 0x50, 0x97, 0x8a, 0x52, 0xc4, 0x9f, 0x26, 0x6e, 0x8b, 0x9b, 0x36, 0xad, 0x36, - 0x49, 0xc5, 0xcd, 0xda, 0xd8, 0x93, 0xb0, 0xb5, 0xe3, 0x35, 0xbb, 0xeb, 0xb4, 0x11, 0x17, 0x40, - 0xe5, 0x23, 0x20, 0x71, 0xe5, 0x0a, 0x12, 0x07, 0x4e, 0xfd, 0x08, 0x15, 0x27, 0x8e, 0x48, 0x48, - 0x11, 0xb5, 0x84, 0xc4, 0x89, 0xcf, 0x80, 0xe6, 0xdf, 0xee, 0x7a, 0x3d, 0xbb, 0x6b, 0x27, 0x96, - 0xc2, 0xa9, 0xde, 0xd9, 0xdf, 0x9b, 0xf7, 0x66, 0xde, 0x6f, 0x7e, 0xfb, 0xe6, 0xa5, 0x90, 0x6b, - 0x1a, 0x5d, 0xdb, 0x34, 0x3a, 0x95, 0x9e, 0x69, 0xd8, 0x06, 0x42, 0x2d, 0xa3, 0xd9, 0xc6, 0x66, - 0xc5, 0xfa, 0xa0, 0x99, 0x67, 0x6d, 0xdd, 0xae, 0x9c, 0x3f, 0x28, 0x65, 0xad, 0x1e, 0x6e, 0x5a, - 0x0c, 0x50, 0xca, 0x19, 0xc7, 0xef, 0x71, 0xd3, 0x16, 0x8f, 0x59, 0xfb, 0xa2, 0x87, 0xc5, 0x43, - 0xe1, 0xd4, 0x38, 0x35, 0xe8, 0xcf, 0x6d, 0xf2, 0x8b, 0x8f, 0x2e, 0xf7, 0x3a, 0xfd, 0x53, 0xbd, - 0xbb, 0xcd, 0xfe, 0x61, 0x83, 0xca, 0x23, 0xc8, 0xbf, 0xc0, 0xf6, 0xbe, 0xd1, 0xc2, 0x2a, 0xfe, - 0x65, 0x1f, 0x5b, 0x36, 0xba, 0x07, 0xa9, 0xae, 0xd1, 0xc2, 0x0d, 0xbd, 0x55, 0x8c, 0xad, 0xc5, - 0xca, 0x99, 0x1d, 0x18, 0x5c, 0xae, 0xce, 0x11, 0x44, 0xbd, 0xa6, 0xce, 0x91, 0x57, 0xf5, 0x96, - 0xf2, 0x13, 0x58, 0x70, 0xcc, 0xac, 0x9e, 0xd1, 0xb5, 0x30, 0xda, 0x82, 0x24, 0x79, 0x49, 0x8d, - 0xb2, 0xd5, 0x62, 0x65, 0x74, 0x01, 0x15, 0x8a, 0xa7, 0x28, 0xe5, 0x32, 0x01, 0x8b, 0xaf, 0x74, - 0x8b, 0x4e, 0x61, 0x09, 0xd7, 0xcf, 0x21, 0x75, 0xa2, 0x77, 0x6c, 0x6c, 0x5a, 0x7c, 0x96, 0x2d, - 0xd9, 0x2c, 0x7e, 0xb3, 0xca, 0x73, 0x66, 0xa3, 0x0a, 0xe3, 0xd2, 0x6f, 0x12, 0x90, 0xe2, 0x83, - 0xa8, 0x00, 0xb3, 0x5d, 0xed, 0x0c, 0x93, 0x19, 0x13, 0xe5, 0x8c, 0xca, 0x1e, 0xd0, 0x36, 0x64, - 0xf5, 0x56, 0xa3, 0x67, 0xe2, 0x13, 0xfd, 0x23, 0xb6, 0x8a, 0x71, 0xf2, 0x6e, 0x27, 0x3f, 0xb8, - 0x5c, 0x85, 0x7a, 0xed, 0x2d, 0x1f, 0x55, 0x41, 0x6f, 0x89, 0xdf, 0xe8, 0x2d, 0xcc, 0x75, 0xb4, - 0x63, 0xdc, 0xb1, 0x8a, 0x89, 0xb5, 0x44, 0x39, 0x5b, 0x7d, 0x3c, 0x49, 0x64, 0x95, 0x57, 0xd4, - 0xf4, 0x59, 0xd7, 0x36, 0x2f, 0x54, 0x3e, 0x0f, 0xaa, 0x43, 0xf6, 0x0c, 0x9f, 0x1d, 0x63, 0xd3, - 0xfa, 0x85, 0xde, 0xb3, 0x8a, 0xc9, 0xb5, 0x44, 0x39, 0x5f, 0xdd, 0x08, 0xda, 0xb6, 0x83, 0x1e, - 0x6e, 0x56, 0x5e, 0x3b, 0x78, 0xd5, 0x6b, 0x8b, 0xaa, 0x30, 0x6b, 0x1a, 0x1d, 0x6c, 0x15, 0x67, - 0xe9, 0x24, 0x77, 0x03, 0xf7, 0xde, 0xe8, 0x60, 0x95, 0x41, 0xd1, 0x3d, 0xc8, 0x91, 0xad, 0x70, - 0xf7, 0x60, 0x8e, 0xee, 0xcf, 0x3c, 0x19, 0x14, 0xab, 0x2e, 0xfd, 0x00, 0xb2, 0x9e, 0xd0, 0xd1, - 0x22, 0x24, 0xda, 0xf8, 0x82, 0xd1, 0x42, 0x25, 0x3f, 0xc9, 0xee, 0x9e, 0x6b, 0x9d, 0x3e, 0x2e, - 0xc6, 0xe9, 0x18, 0x7b, 0x78, 0x12, 0x7f, 0x1c, 0x53, 0x76, 0x61, 0xc9, 0xb3, 0x1d, 0x9c, 0x23, - 0x15, 0x98, 0x25, 0xd9, 0x67, 0xc9, 0x08, 0x23, 0x09, 0x83, 0x29, 0x7f, 0x8a, 0xc1, 0xd2, 0x51, - 0xaf, 0xa5, 0xd9, 0x78, 0x52, 0x86, 0xa2, 0x1f, 0xc3, 0x3c, 0x05, 0x9d, 0x63, 0xd3, 0xd2, 0x8d, - 0x2e, 0x0d, 0x30, 0x5b, 0xbd, 0x23, 0xf3, 0xf8, 0x8e, 0x41, 0xd4, 0x2c, 0x31, 0xe0, 0x0f, 0xe8, - 0xbb, 0x90, 0x24, 0xc7, 0xad, 0x98, 0xa0, 0x76, 0x77, 0xc3, 0xf2, 0xa2, 0x52, 0xa4, 0xb2, 0x03, - 0xc8, 0x1b, 0xeb, 0x95, 0x8e, 0xc5, 0x3e, 0x2c, 0xa9, 0xf8, 0xcc, 0x38, 0x9f, 0x7c, 0xbd, 0x05, - 0x98, 0x3d, 0x31, 0xcc, 0x26, 0xcb, 0x44, 0x5a, 0x65, 0x0f, 0x4a, 0x01, 0x90, 0x77, 0x3e, 0x16, - 0x13, 0x3f, 0xf4, 0x87, 0x9a, 0xd5, 0xf6, 0xb8, 0xb0, 0x35, 0xab, 0xed, 0x73, 0x41, 0x10, 0xc4, - 0x05, 0x79, 0xe5, 0x1c, 0x7a, 0x66, 0xe6, 0xae, 0x8e, 0xbc, 0x0c, 0x5b, 0x1d, 0xc5, 0x53, 0x94, - 0xf2, 0x58, 0xac, 0x6e, 0x62, 0xd7, 0xce, 0x3a, 0xbc, 0xde, 0x95, 0xcf, 0x49, 0x26, 0x22, 0x64, - 0xf0, 0x0a, 0x22, 0xe2, 0x35, 0x1b, 0x15, 0x91, 0x7f, 0xde, 0xa0, 0x88, 0xc8, 0x22, 0x93, 0x8a, - 0xc8, 0x36, 0x64, 0x2d, 0x6c, 0x9e, 0xeb, 0x4d, 0xc2, 0x0e, 0x26, 0x22, 0x3c, 0x84, 0x03, 0x36, - 0x5c, 0xaf, 0x59, 0x2a, 0x70, 0x48, 0xbd, 0x65, 0xa1, 0x75, 0x48, 0x73, 0x2e, 0x31, 0xb5, 0xc8, - 0xec, 0x64, 0x07, 0x97, 0xab, 0x29, 0x46, 0x26, 0x4b, 0x4d, 0x31, 0x36, 0x59, 0xa8, 0x06, 0xf9, - 0x16, 0xb6, 0x74, 0x13, 0xb7, 0x1a, 0x96, 0xad, 0xd9, 0x5c, 0x1f, 0xf2, 0xd5, 0x6f, 0x06, 0xa5, - 0xf8, 0x80, 0xa0, 0xd4, 0x1c, 0x37, 0xa2, 0x4f, 0x12, 0x91, 0x49, 0x8d, 0x8a, 0x0c, 0xba, 0x0b, - 0xd0, 0xef, 0x35, 0x6c, 0xa3, 0x41, 0xce, 0x4e, 0x31, 0x4d, 0xe9, 0x9b, 0xee, 0xf7, 0x0e, 0x8d, - 0x9a, 0x66, 0x63, 0x54, 0x82, 0xb4, 0xd9, 0xef, 0xda, 0x3a, 0xd9, 0xfd, 0x0c, 0xb5, 0x76, 0x9e, - 0xa7, 0x20, 0x4f, 0x7c, 0xa3, 0x5d, 0x79, 0x22, 0x7c, 0x0b, 0x95, 0x27, 0x4a, 0x40, 0x06, 0x53, - 0xf6, 0xa0, 0xb0, 0x6b, 0x62, 0xcd, 0xc6, 0x7c, 0xb3, 0x05, 0x05, 0x1f, 0x72, 0xed, 0x60, 0xfc, - 0x5b, 0x95, 0x4d, 0xc3, 0x2d, 0x3c, 0xf2, 0xb1, 0x0f, 0xb7, 0x7c, 0x93, 0xf1, 0xa8, 0x1e, 0x41, - 0x8a, 0x27, 0x90, 0x4f, 0x78, 0x27, 0x64, 0x42, 0x55, 0x60, 0x95, 0xf7, 0xb0, 0xf4, 0x02, 0xdb, - 0xbe, 0xc8, 0xb6, 0x00, 0x5c, 0xbe, 0xf0, 0xf3, 0x96, 0x1b, 0x5c, 0xae, 0x66, 0x1c, 0xba, 0xa8, - 0x19, 0x87, 0x2d, 0x68, 0x03, 0x16, 0xf4, 0xae, 0x85, 0x4d, 0xbb, 0xd1, 0xc2, 0x27, 0x5a, 0xbf, - 0x63, 0x5b, 0x5c, 0x5d, 0xf2, 0x6c, 0xb8, 0xc6, 0x47, 0x95, 0x3d, 0x40, 0x5e, 0x5f, 0xd7, 0x0b, - 0xfc, 0xaf, 0x71, 0x28, 0x30, 0x21, 0xbd, 0x56, 0xf0, 0x35, 0x58, 0x10, 0xe8, 0x09, 0xbe, 0x01, - 0x79, 0x6e, 0x23, 0x3e, 0x03, 0x0f, 0x87, 0x3e, 0x03, 0xe3, 0xa5, 0x12, 0xbd, 0x86, 0xb4, 0x69, - 0x74, 0x3a, 0xc7, 0x5a, 0xb3, 0x5d, 0x4c, 0xae, 0xc5, 0xca, 0xf9, 0xea, 0x03, 0x99, 0xa1, 0x6c, - 0x91, 0x15, 0x95, 0x1b, 0xaa, 0xce, 0x14, 0x8a, 0x02, 0x69, 0x31, 0x8a, 0xd2, 0x90, 0xdc, 0x7f, - 0xb3, 0xff, 0x6c, 0x71, 0x06, 0xcd, 0x43, 0xfa, 0xad, 0xfa, 0xec, 0x5d, 0xfd, 0xcd, 0xd1, 0xc1, - 0x62, 0x8c, 0xb0, 0xc7, 0x37, 0xdd, 0xf5, 0x92, 0x50, 0x83, 0x02, 0x13, 0xdc, 0xeb, 0xe4, 0x40, - 0xf9, 0x06, 0xdc, 0xf2, 0xcd, 0xc2, 0x95, 0xfb, 0x53, 0x02, 0x96, 0xc9, 0xf9, 0xe3, 0xe3, 0x8e, - 0x78, 0xd7, 0xfd, 0xe2, 0xbd, 0x1d, 0x24, 0x91, 0x3e, 0xcb, 0x51, 0xfd, 0xfe, 0x63, 0x7c, 0xea, - 0xfa, 0x7d, 0xe0, 0xd3, 0xef, 0x1f, 0x4e, 0x18, 0x9c, 0x54, 0xc2, 0x47, 0x34, 0x32, 0x29, 0xd1, - 0x48, 0xaf, 0x0a, 0xce, 0x4e, 0x4f, 0x05, 0xdf, 0x40, 0x61, 0x38, 0x5c, 0x4e, 0x9a, 0xef, 0x43, - 0x9a, 0x27, 0x51, 0x68, 0x61, 0x28, 0x6b, 0x1c, 0xb0, 0xab, 0x88, 0xfb, 0xd8, 0xfe, 0x60, 0x98, - 0xed, 0x09, 0x14, 0x91, 0x5b, 0xc8, 0x14, 0xd1, 0x99, 0xcc, 0xe5, 0x74, 0x97, 0x0d, 0x85, 0x71, - 0x5a, 0x58, 0x09, 0xac, 0x72, 0x44, 0x15, 0xd1, 0x17, 0x19, 0x82, 0x24, 0xd9, 0x69, 0xbe, 0x5f, - 0xf4, 0x37, 0x21, 0x39, 0xb7, 0x21, 0x24, 0x8f, 0xbb, 0x24, 0xe7, 0xb6, 0x84, 0xe4, 0x1c, 0x50, - 0x6f, 0x71, 0xf1, 0x9b, 0x52, 0x8c, 0x3f, 0x17, 0xe7, 0x6e, 0xea, 0x61, 0x3a, 0x67, 0xd1, 0x17, - 0xa9, 0xf2, 0x9f, 0x38, 0x3b, 0x8b, 0x7c, 0xfc, 0x0a, 0x67, 0xd1, 0x67, 0x39, 0x7a, 0x16, 0x7f, - 0x77, 0x83, 0x67, 0x31, 0x20, 0xb8, 0x2b, 0x9f, 0xc5, 0x29, 0x9c, 0x37, 0x37, 0x24, 0xf7, 0xbc, - 0xf1, 0x44, 0x85, 0x9e, 0x37, 0x91, 0x39, 0x07, 0xac, 0x3c, 0xa5, 0x94, 0xde, 0xed, 0xf4, 0x2d, - 0x1b, 0x9b, 0x1e, 0x8d, 0x6e, 0xb2, 0x11, 0x9f, 0x46, 0x73, 0x1c, 0xe1, 0x05, 0x07, 0x38, 0xf4, - 0x75, 0xa6, 0x70, 0xe9, 0xcb, 0x21, 0x61, 0xf4, 0x15, 0x56, 0x02, 0xeb, 0x70, 0x89, 0xbf, 0xb8, - 0x02, 0x97, 0x7c, 0x96, 0xff, 0x5f, 0x5c, 0x0a, 0x08, 0xee, 0x26, 0xb9, 0xe4, 0x86, 0xe4, 0x72, - 0x89, 0x67, 0x23, 0x94, 0x4b, 0x22, 0x75, 0x0e, 0x58, 0xf9, 0x7d, 0x0c, 0xb2, 0x7b, 0xf8, 0x42, - 0x35, 0x6c, 0xcd, 0x26, 0xa5, 0xcf, 0xb7, 0x61, 0x89, 0x90, 0x0c, 0x9b, 0x8d, 0xf7, 0x86, 0xde, - 0x6d, 0xd8, 0x46, 0x1b, 0x77, 0x69, 0x68, 0x69, 0x75, 0x81, 0xbd, 0x78, 0x69, 0xe8, 0xdd, 0x43, - 0x32, 0x8c, 0xb6, 0x00, 0x9d, 0x69, 0x5d, 0xed, 0x74, 0x18, 0xcc, 0x8a, 0xc5, 0x45, 0xfe, 0x46, - 0x8a, 0xee, 0x77, 0x3b, 0x46, 0xb3, 0xdd, 0x20, 0xab, 0x4e, 0x0c, 0xa1, 0x8f, 0xe8, 0x8b, 0x3d, - 0x7c, 0xa1, 0xfc, 0xd6, 0xa9, 0x07, 0xaf, 0xc3, 0x73, 0x52, 0x0f, 0x0a, 0xf4, 0x24, 0xf5, 0x20, - 0xb7, 0x99, 0xa0, 0x1e, 0xe4, 0xde, 0x3d, 0xf5, 0xe0, 0x53, 0x52, 0x0f, 0xb2, 0x5d, 0xa5, 0xf5, - 0x60, 0x80, 0xa1, 0x67, 0xf3, 0x77, 0x92, 0x5f, 0x2e, 0x57, 0x67, 0x54, 0xc7, 0xcc, 0xad, 0xef, - 0xa6, 0x74, 0x50, 0x7f, 0x04, 0x8b, 0xb4, 0x62, 0x6f, 0x9a, 0xd8, 0x16, 0xfb, 0xb9, 0x09, 0x19, - 0x8b, 0x0e, 0xb8, 0xdb, 0x39, 0x3f, 0xb8, 0x5c, 0x4d, 0x33, 0x54, 0xbd, 0x46, 0xbe, 0xf3, 0xf4, - 0x57, 0x4b, 0x79, 0xc1, 0x2f, 0x17, 0xcc, 0x9c, 0x87, 0x52, 0x85, 0x39, 0x06, 0xe0, 0x91, 0x94, - 0xe4, 0x35, 0x03, 0xb5, 0xe1, 0x48, 0xe5, 0x73, 0x0c, 0x96, 0x45, 0xe1, 0x7a, 0xb5, 0x58, 0xd0, - 0x0e, 0xe4, 0x39, 0x74, 0x82, 0xbc, 0xe6, 0x98, 0x89, 0x48, 0x6b, 0x75, 0x28, 0xad, 0x2b, 0xc1, - 0x81, 0x7b, 0xca, 0x93, 0x97, 0xee, 0x35, 0xe5, 0xda, 0xdb, 0xf0, 0xef, 0x38, 0x20, 0x56, 0x89, - 0x91, 0x47, 0x47, 0x36, 0x7f, 0xe6, 0x97, 0xcd, 0x4a, 0x70, 0xc5, 0xe9, 0x35, 0x1c, 0x55, 0xcd, - 0x4f, 0xd3, 0x57, 0x4d, 0xd5, 0xa7, 0x9a, 0x4f, 0x26, 0x8b, 0xed, 0x46, 0x44, 0x73, 0x4f, 0x5c, - 0x3b, 0x78, 0x44, 0x3c, 0x65, 0xdf, 0x23, 0x97, 0x24, 0x3a, 0xc4, 0x25, 0x33, 0x2c, 0x67, 0x02, - 0xaa, 0xd4, 0x61, 0x59, 0xdc, 0xd8, 0xbd, 0xd4, 0xad, 0x0e, 0xd5, 0xba, 0x63, 0x73, 0x69, 0x78, - 0xaa, 0x6b, 0x70, 0xe9, 0xa7, 0xb0, 0x2c, 0x2e, 0x5d, 0x57, 0x3c, 0xdd, 0xb7, 0xdd, 0xcb, 0x9f, - 0x37, 0x9a, 0xea, 0x9f, 0x6f, 0x43, 0x6a, 0x97, 0xfd, 0x99, 0x02, 0xe9, 0x90, 0xe2, 0x7f, 0x01, - 0x40, 0x8a, 0x2c, 0xa8, 0xe1, 0xbf, 0x2a, 0x94, 0xee, 0x85, 0x62, 0x78, 0x25, 0x7a, 0xeb, 0x6f, - 0x7f, 0xf9, 0xef, 0x1f, 0xe2, 0x0b, 0x90, 0xa3, 0xa0, 0xef, 0xf0, 0x2f, 0x01, 0x32, 0x20, 0xe3, - 0xb4, 0x92, 0xd1, 0xb7, 0xc6, 0x69, 0xbc, 0x97, 0xee, 0x47, 0xa0, 0xc2, 0x1d, 0x9a, 0x00, 0x6e, - 0x27, 0x17, 0xdd, 0x0f, 0xbe, 0xbb, 0x7b, 0x57, 0xb8, 0x1e, 0x05, 0x8b, 0xf4, 0xe9, 0x76, 0x6a, - 0xe5, 0x3e, 0x47, 0x3a, 0xc3, 0x72, 0x9f, 0x92, 0x86, 0x6f, 0x80, 0x4f, 0x96, 0xc3, 0x43, 0xcd, - 0x6a, 0x07, 0xe6, 0xd0, 0xd3, 0xa9, 0x0d, 0xcc, 0xe1, 0x50, 0x4f, 0x36, 0x3c, 0x87, 0xb4, 0xdf, - 0x16, 0x9c, 0x43, 0x6f, 0xdf, 0x33, 0x38, 0x87, 0x43, 0x4d, 0xbb, 0xc8, 0xfd, 0xa4, 0xcb, 0x0b, - 0xd9, 0x4f, 0xef, 0x0a, 0xd7, 0xa3, 0x60, 0x91, 0x3e, 0xdd, 0x36, 0x98, 0xdc, 0xe7, 0x48, 0x4b, - 0x4e, 0xee, 0x73, 0xb4, 0x9b, 0x16, 0xe4, 0xf3, 0x23, 0xcc, 0x7b, 0xaf, 0xf0, 0x68, 0x63, 0xcc, - 0x9e, 0x44, 0xa9, 0x1c, 0x0d, 0x0c, 0xf7, 0xfc, 0x2b, 0xc8, 0x0d, 0x35, 0x2c, 0x91, 0x74, 0x46, - 0x59, 0x83, 0xb4, 0xb4, 0x39, 0x06, 0x32, 0xd2, 0xf9, 0x50, 0xbf, 0x4b, 0xee, 0x5c, 0xd6, 0x61, - 0x93, 0x3b, 0x97, 0x36, 0xcf, 0x42, 0x9c, 0x0f, 0xb5, 0xb5, 0xe4, 0xce, 0x65, 0xfd, 0x33, 0xb9, - 0x73, 0x79, 0x8f, 0x2c, 0x94, 0x64, 0xfc, 0x2a, 0x18, 0x48, 0xb2, 0xe1, 0xf6, 0x41, 0x20, 0xc9, - 0xfc, 0xbd, 0x80, 0x70, 0x92, 0x89, 0x7b, 0x6b, 0x30, 0xc9, 0x7c, 0x97, 0xed, 0x60, 0x92, 0xf9, - 0xaf, 0xc0, 0x91, 0x24, 0x13, 0x0b, 0x0e, 0x21, 0x99, 0x6f, 0xcd, 0x9b, 0x63, 0x20, 0xc7, 0xcc, - 0x73, 0xa8, 0x73, 0x59, 0xbf, 0x26, 0x2c, 0xcf, 0x63, 0x3a, 0x67, 0x79, 0xe6, 0x85, 0x7b, 0x60, - 0x9e, 0x87, 0xaf, 0x44, 0x81, 0x79, 0xf6, 0xdd, 0x1a, 0x22, 0xf2, 0x2c, 0xee, 0x94, 0xc1, 0x79, - 0xf6, 0x5d, 0x84, 0x83, 0xf3, 0xec, 0xbf, 0x9e, 0x46, 0x9e, 0x67, 0xb1, 0xe0, 0x90, 0xf3, 0xec, - 0x5b, 0xf3, 0xe6, 0x18, 0xc8, 0xc8, 0x8f, 0x93, 0x73, 0x9b, 0x91, 0x7f, 0x9c, 0xfc, 0x77, 0xa5, - 0xd2, 0xfd, 0x08, 0x54, 0xe4, 0x3e, 0x7b, 0xaf, 0x0e, 0xf2, 0x7d, 0x96, 0x5c, 0x8b, 0x4a, 0xe5, - 0x68, 0x60, 0xb8, 0xe7, 0x3e, 0x64, 0x3d, 0x05, 0x30, 0x5a, 0x1f, 0xaf, 0x66, 0x2f, 0x6d, 0x44, - 0xe2, 0x22, 0x17, 0xec, 0xad, 0x6f, 0xe5, 0x0b, 0x96, 0x14, 0xd3, 0xa5, 0x72, 0x34, 0x30, 0xd2, - 0xb3, 0xb7, 0x96, 0x95, 0x7b, 0x96, 0xd4, 0xcb, 0xa5, 0x72, 0x34, 0x30, 0xd4, 0xf3, 0x4e, 0xf1, - 0xcb, 0xd7, 0x95, 0x99, 0x7f, 0x7c, 0x5d, 0x99, 0xf9, 0xf5, 0x60, 0x25, 0xf6, 0x65, 0xb0, 0x12, - 0xfb, 0xfb, 0x60, 0x25, 0xf6, 0xaf, 0xc1, 0x4a, 0xec, 0x78, 0x8e, 0xfe, 0xdf, 0x9b, 0x87, 0xff, - 0x0b, 0x00, 0x00, 0xff, 0xff, 0x3b, 0x09, 0x33, 0xa6, 0xf4, 0x23, 0x00, 0x00, + // 2096 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xcc, 0x5a, 0x4b, 0x6f, 0x1b, 0xc9, + 0x11, 0x36, 0x1f, 0x12, 0xa9, 0xa2, 0x44, 0x49, 0x2d, 0x39, 0x21, 0x68, 0x47, 0x32, 0xc6, 0xb1, + 0x4d, 0x07, 0x0e, 0x95, 0xa5, 0xb3, 0x88, 0xb3, 0x41, 0x1e, 0x2b, 0xd1, 0xeb, 0x70, 0xb5, 0x2b, + 0x1b, 0x23, 0x6b, 0x91, 0x1b, 0x41, 0x91, 0x2d, 0x65, 0x4c, 0x8a, 0xc3, 0xcc, 0x0c, 0xb5, 0x2b, + 0xe4, 0x92, 0x0d, 0x36, 0x3f, 0x21, 0x40, 0xae, 0xb9, 0xe6, 0x90, 0x43, 0x4e, 0xfb, 0x13, 0x8c, + 0x9c, 0x72, 0x0c, 0x10, 0x40, 0xc8, 0x12, 0x08, 0x90, 0x53, 0x7e, 0x43, 0xd0, 0xdd, 0xd5, 0xf3, + 0x62, 0xcf, 0x0c, 0x5f, 0x80, 0x7c, 0x12, 0xa7, 0xe7, 0xab, 0xae, 0xea, 0xae, 0xaf, 0xbf, 0xe9, + 0xae, 0x16, 0xac, 0xb5, 0xcd, 0xbe, 0x63, 0x99, 0xbd, 0xea, 0xc0, 0x32, 0x1d, 0x93, 0x90, 0x8e, + 0xd9, 0xee, 0x52, 0xab, 0x6a, 0x7f, 0xde, 0xb2, 0x2e, 0xba, 0x86, 0x53, 0xbd, 0x7c, 0xaf, 0x5c, + 0xb0, 0x07, 0xb4, 0x6d, 0x0b, 0x40, 0x79, 0xcd, 0x3c, 0x7d, 0x43, 0xdb, 0x8e, 0x7c, 0x2c, 0x38, + 0x57, 0x03, 0x2a, 0x1f, 0xb6, 0xcf, 0xcd, 0x73, 0x93, 0xff, 0xdc, 0x63, 0xbf, 0xb0, 0x75, 0x6b, + 0xd0, 0x1b, 0x9e, 0x1b, 0xfd, 0x3d, 0xf1, 0x47, 0x34, 0x6a, 0xef, 0x43, 0xf1, 0x05, 0x75, 0x8e, + 0xcc, 0x0e, 0xd5, 0xe9, 0x6f, 0x86, 0xd4, 0x76, 0xc8, 0x7d, 0xc8, 0xf5, 0xcd, 0x0e, 0x6d, 0x1a, + 0x9d, 0x52, 0xea, 0x5e, 0xaa, 0xb2, 0xb2, 0x0f, 0xa3, 0xeb, 0xdd, 0x65, 0x86, 0x68, 0xd4, 0xf5, + 0x65, 0xf6, 0xaa, 0xd1, 0xd1, 0x7e, 0x0e, 0xeb, 0xae, 0x99, 0x3d, 0x30, 0xfb, 0x36, 0x25, 0x4f, + 0x20, 0xcb, 0x5e, 0x72, 0xa3, 0x42, 0xad, 0x54, 0x1d, 0x1f, 0x40, 0x95, 0xe3, 0x39, 0x4a, 0xbb, + 0xce, 0xc0, 0xc6, 0x27, 0x86, 0xcd, 0xbb, 0xb0, 0xa5, 0xeb, 0x8f, 0x20, 0x77, 0x66, 0xf4, 0x1c, + 0x6a, 0xd9, 0xd8, 0xcb, 0x13, 0x55, 0x2f, 0x61, 0xb3, 0xea, 0x47, 0xc2, 0x46, 0x97, 0xc6, 0xe5, + 0x2f, 0x33, 0x90, 0xc3, 0x46, 0xb2, 0x0d, 0x4b, 0xfd, 0xd6, 0x05, 0x65, 0x3d, 0x66, 0x2a, 0x2b, + 0xba, 0x78, 0x20, 0x7b, 0x50, 0x30, 0x3a, 0xcd, 0x81, 0x45, 0xcf, 0x8c, 0x2f, 0xa8, 0x5d, 0x4a, + 0xb3, 0x77, 0xfb, 0xc5, 0xd1, 0xf5, 0x2e, 0x34, 0xea, 0xaf, 0xb0, 0x55, 0x07, 0xa3, 0x23, 0x7f, + 0x93, 0x57, 0xb0, 0xdc, 0x6b, 0x9d, 0xd2, 0x9e, 0x5d, 0xca, 0xdc, 0xcb, 0x54, 0x0a, 0xb5, 0x67, + 0xd3, 0x44, 0x56, 0xfd, 0x84, 0x9b, 0x3e, 0xef, 0x3b, 0xd6, 0x95, 0x8e, 0xfd, 0x90, 0x06, 0x14, + 0x2e, 0xe8, 0xc5, 0x29, 0xb5, 0xec, 0x5f, 0x1b, 0x03, 0xbb, 0x94, 0xbd, 0x97, 0xa9, 0x14, 0x6b, + 0x8f, 0xa2, 0xa6, 0xed, 0x78, 0x40, 0xdb, 0xd5, 0x4f, 0x5d, 0xbc, 0xee, 0xb7, 0x25, 0x35, 0x58, + 0xb2, 0xcc, 0x1e, 0xb5, 0x4b, 0x4b, 0xbc, 0x93, 0xbb, 0x91, 0x73, 0x6f, 0xf6, 0xa8, 0x2e, 0xa0, + 0xe4, 0x3e, 0xac, 0xb1, 0xa9, 0xf0, 0xe6, 0x60, 0x99, 0xcf, 0xcf, 0x2a, 0x6b, 0x94, 0xa3, 0x2e, + 0xff, 0x18, 0x0a, 0xbe, 0xd0, 0xc9, 0x06, 0x64, 0xba, 0xf4, 0x4a, 0xd0, 0x42, 0x67, 0x3f, 0xd9, + 0xec, 0x5e, 0xb6, 0x7a, 0x43, 0x5a, 0x4a, 0xf3, 0x36, 0xf1, 0xf0, 0x41, 0xfa, 0x59, 0x4a, 0x3b, + 0x80, 0x4d, 0xdf, 0x74, 0x20, 0x47, 0xaa, 0xb0, 0xc4, 0xb2, 0x2f, 0x92, 0x11, 0x47, 0x12, 0x01, + 0xd3, 0xfe, 0x92, 0x82, 0xcd, 0x93, 0x41, 0xa7, 0xe5, 0xd0, 0x69, 0x19, 0x4a, 0x7e, 0x06, 0xab, + 0x1c, 0x74, 0x49, 0x2d, 0xdb, 0x30, 0xfb, 0x3c, 0xc0, 0x42, 0xed, 0x8e, 0xca, 0xe3, 0x67, 0x02, + 0xa2, 0x17, 0x98, 0x01, 0x3e, 0x90, 0x1f, 0x40, 0x96, 0x2d, 0xb7, 0x52, 0x86, 0xdb, 0xdd, 0x8d, + 0xcb, 0x8b, 0xce, 0x91, 0xda, 0x3e, 0x10, 0x7f, 0xac, 0x33, 0x2d, 0x8b, 0x23, 0xd8, 0xd4, 0xe9, + 0x85, 0x79, 0x39, 0xfd, 0x78, 0xb7, 0x61, 0xe9, 0xcc, 0xb4, 0xda, 0x22, 0x13, 0x79, 0x5d, 0x3c, + 0x68, 0xdb, 0x40, 0xfc, 0xfd, 0x89, 0x98, 0x70, 0xd1, 0xbf, 0x6e, 0xd9, 0x5d, 0x9f, 0x0b, 0xa7, + 0x65, 0x77, 0x43, 0x2e, 0x18, 0x82, 0xb9, 0x60, 0xaf, 0xdc, 0x45, 0x2f, 0xcc, 0xbc, 0xd1, 0xb1, + 0x97, 0x71, 0xa3, 0xe3, 0x78, 0x8e, 0xd2, 0x9e, 0xc9, 0xd1, 0x4d, 0xed, 0xda, 0x1d, 0x87, 0xdf, + 0xbb, 0xf6, 0x75, 0x56, 0x88, 0x08, 0x6b, 0x9c, 0x41, 0x44, 0xfc, 0x66, 0xe3, 0x22, 0xf2, 0xaf, + 0x1b, 0x14, 0x11, 0x55, 0x64, 0x4a, 0x11, 0xd9, 0x83, 0x82, 0x4d, 0xad, 0x4b, 0xa3, 0xcd, 0xd8, + 0x21, 0x44, 0x04, 0x43, 0x38, 0x16, 0xcd, 0x8d, 0xba, 0xad, 0x03, 0x42, 0x1a, 0x1d, 0x9b, 0x3c, + 0x84, 0x3c, 0x72, 0x49, 0xa8, 0xc5, 0xca, 0x7e, 0x61, 0x74, 0xbd, 0x9b, 0x13, 0x64, 0xb2, 0xf5, + 0x9c, 0x60, 0x93, 0x4d, 0xea, 0x50, 0xec, 0x50, 0xdb, 0xb0, 0x68, 0xa7, 0x69, 0x3b, 0x2d, 0x07, + 0xf5, 0xa1, 0x58, 0xfb, 0x4e, 0x54, 0x8a, 0x8f, 0x19, 0x4a, 0x5f, 0x43, 0x23, 0xfe, 0xa4, 0x10, + 0x99, 0xdc, 0xb8, 0xc8, 0x90, 0xbb, 0x00, 0xc3, 0x41, 0xd3, 0x31, 0x9b, 0x6c, 0xed, 0x94, 0xf2, + 0x9c, 0xbe, 0xf9, 0xe1, 0xe0, 0xb5, 0x59, 0x6f, 0x39, 0x94, 0x94, 0x21, 0x6f, 0x0d, 0xfb, 0x8e, + 0xc1, 0x66, 0x7f, 0x85, 0x5b, 0xbb, 0xcf, 0x0b, 0x90, 0x27, 0x9c, 0x68, 0x4f, 0x9e, 0x18, 0xdf, + 0x62, 0xe5, 0x89, 0x13, 0x50, 0xc0, 0xb4, 0x43, 0xd8, 0x3e, 0xb0, 0x68, 0xcb, 0xa1, 0x38, 0xd9, + 0x92, 0x82, 0x4f, 0x51, 0x3b, 0x04, 0xff, 0x76, 0x55, 0xdd, 0xa0, 0x85, 0x4f, 0x3e, 0x8e, 0xe0, + 0x76, 0xa8, 0x33, 0x8c, 0xea, 0x7d, 0xc8, 0x61, 0x02, 0xb1, 0xc3, 0x3b, 0x31, 0x1d, 0xea, 0x12, + 0xab, 0xbd, 0x81, 0xcd, 0x17, 0xd4, 0x09, 0x45, 0xf6, 0x04, 0xc0, 0xe3, 0x0b, 0xae, 0xb7, 0xb5, + 0xd1, 0xf5, 0xee, 0x8a, 0x4b, 0x17, 0x7d, 0xc5, 0x65, 0x0b, 0x79, 0x04, 0xeb, 0x46, 0xdf, 0xa6, + 0x96, 0xd3, 0xec, 0xd0, 0xb3, 0xd6, 0xb0, 0xe7, 0xd8, 0xa8, 0x2e, 0x45, 0xd1, 0x5c, 0xc7, 0x56, + 0xed, 0x10, 0x88, 0xdf, 0xd7, 0x7c, 0x81, 0xff, 0x2d, 0x0d, 0xdb, 0x42, 0x48, 0xe7, 0x0a, 0xbe, + 0x0e, 0xeb, 0x12, 0x3d, 0xc5, 0x37, 0xa0, 0x88, 0x36, 0xf2, 0x33, 0xf0, 0x34, 0xf0, 0x19, 0x98, + 0x2c, 0x95, 0xe4, 0x53, 0xc8, 0x5b, 0x66, 0xaf, 0x77, 0xda, 0x6a, 0x77, 0x4b, 0xd9, 0x7b, 0xa9, + 0x4a, 0xb1, 0xf6, 0x9e, 0xca, 0x50, 0x35, 0xc8, 0xaa, 0x8e, 0x86, 0xba, 0xdb, 0x85, 0xa6, 0x41, + 0x5e, 0xb6, 0x92, 0x3c, 0x64, 0x8f, 0x5e, 0x1e, 0x3d, 0xdf, 0xb8, 0x45, 0x56, 0x21, 0xff, 0x4a, + 0x7f, 0xfe, 0x59, 0xe3, 0xe5, 0xc9, 0xf1, 0x46, 0x8a, 0xb1, 0x27, 0xd4, 0xdd, 0x7c, 0x49, 0xa8, + 0xc3, 0xb6, 0x10, 0xdc, 0x79, 0x72, 0xa0, 0x7d, 0x1b, 0x6e, 0x87, 0x7a, 0x41, 0xe5, 0xfe, 0x2a, + 0x03, 0x5b, 0x6c, 0xfd, 0x61, 0xbb, 0x2b, 0xde, 0x8d, 0xb0, 0x78, 0xef, 0x45, 0x49, 0x64, 0xc8, + 0x72, 0x5c, 0xbf, 0xff, 0x9c, 0x5e, 0xb8, 0x7e, 0x1f, 0x87, 0xf4, 0xfb, 0x27, 0x53, 0x06, 0xa7, + 0x94, 0xf0, 0x31, 0x8d, 0xcc, 0x2a, 0x34, 0xd2, 0xaf, 0x82, 0x4b, 0x8b, 0x53, 0xc1, 0x97, 0xb0, + 0x1d, 0x0c, 0x17, 0x49, 0xf3, 0x23, 0xc8, 0x63, 0x12, 0xa5, 0x16, 0xc6, 0xb2, 0xc6, 0x05, 0x7b, + 0x8a, 0x78, 0x44, 0x9d, 0xcf, 0x4d, 0xab, 0x3b, 0x85, 0x22, 0xa2, 0x85, 0x4a, 0x11, 0xdd, 0xce, + 0x3c, 0x4e, 0xf7, 0x45, 0x53, 0x1c, 0xa7, 0xa5, 0x95, 0xc4, 0x6a, 0x27, 0x5c, 0x11, 0x43, 0x91, + 0x11, 0xc8, 0xb2, 0x99, 0xc6, 0xf9, 0xe2, 0xbf, 0x19, 0xc9, 0xd1, 0x86, 0x91, 0x3c, 0xed, 0x91, + 0x1c, 0x6d, 0x19, 0xc9, 0x11, 0xd0, 0xe8, 0xa0, 0xf8, 0x2d, 0x28, 0xc6, 0x5f, 0xc9, 0x75, 0xb7, + 0xf0, 0x30, 0xdd, 0xb5, 0x18, 0x8a, 0x54, 0xfb, 0x6f, 0x5a, 0xac, 0x45, 0x6c, 0x9f, 0x61, 0x2d, + 0x86, 0x2c, 0xc7, 0xd7, 0xe2, 0x1f, 0x6e, 0x70, 0x2d, 0x46, 0x04, 0x37, 0xf3, 0x5a, 0x5c, 0xc0, + 0x7a, 0xf3, 0x42, 0xf2, 0xd6, 0x1b, 0x26, 0x2a, 0x76, 0xbd, 0xc9, 0xcc, 0xb9, 0x60, 0xed, 0x43, + 0x4e, 0xe9, 0x83, 0xde, 0xd0, 0x76, 0xa8, 0xe5, 0xd3, 0xe8, 0xb6, 0x68, 0x09, 0x69, 0x34, 0xe2, + 0x18, 0x2f, 0x10, 0xe0, 0xd2, 0xd7, 0xed, 0xc2, 0xa3, 0x2f, 0x42, 0xe2, 0xe8, 0x2b, 0xad, 0x24, + 0xd6, 0xe5, 0x12, 0xbe, 0x98, 0x81, 0x4b, 0x21, 0xcb, 0x77, 0x8b, 0x4b, 0x11, 0xc1, 0xdd, 0x24, + 0x97, 0xbc, 0x90, 0x3c, 0x2e, 0x61, 0x36, 0x62, 0xb9, 0x24, 0x53, 0xe7, 0x82, 0xb5, 0x3f, 0xa6, + 0xa0, 0x70, 0x48, 0xaf, 0x74, 0xd3, 0x69, 0x39, 0x6c, 0xeb, 0xf3, 0x3d, 0xd8, 0x64, 0x24, 0xa3, + 0x56, 0xf3, 0x8d, 0x69, 0xf4, 0x9b, 0x8e, 0xd9, 0xa5, 0x7d, 0x1e, 0x5a, 0x5e, 0x5f, 0x17, 0x2f, + 0x3e, 0x36, 0x8d, 0xfe, 0x6b, 0xd6, 0x4c, 0x9e, 0x00, 0xb9, 0x68, 0xf5, 0x5b, 0xe7, 0x41, 0xb0, + 0xd8, 0x2c, 0x6e, 0xe0, 0x1b, 0x25, 0x7a, 0xd8, 0xef, 0x99, 0xed, 0x6e, 0x93, 0x8d, 0x3a, 0x13, + 0x40, 0x9f, 0xf0, 0x17, 0x87, 0xf4, 0x4a, 0xfb, 0xbd, 0xbb, 0x1f, 0x9c, 0x87, 0xe7, 0x6c, 0x3f, + 0x28, 0xd1, 0xd3, 0xec, 0x07, 0xd1, 0x66, 0x8a, 0xfd, 0x20, 0x7a, 0xf7, 0xed, 0x07, 0x3f, 0x64, + 0xfb, 0x41, 0x31, 0xab, 0x7c, 0x3f, 0x18, 0x61, 0xe8, 0x9b, 0xfc, 0xfd, 0xec, 0xdb, 0xeb, 0xdd, + 0x5b, 0xba, 0x6b, 0xe6, 0xed, 0xef, 0x16, 0xb4, 0x50, 0x7f, 0x0a, 0x1b, 0x7c, 0xc7, 0xde, 0xb6, + 0xa8, 0x23, 0xe7, 0xf3, 0x31, 0xac, 0xd8, 0xbc, 0xc1, 0x9b, 0xce, 0xd5, 0xd1, 0xf5, 0x6e, 0x5e, + 0xa0, 0x1a, 0x75, 0xf6, 0x9d, 0xe7, 0xbf, 0x3a, 0xda, 0x0b, 0x3c, 0x5c, 0x08, 0x73, 0x0c, 0xa5, + 0x06, 0xcb, 0x02, 0x80, 0x91, 0x94, 0xd5, 0x7b, 0x06, 0x6e, 0x83, 0x48, 0xed, 0xeb, 0x14, 0x6c, + 0xc9, 0x8d, 0xeb, 0x6c, 0xb1, 0x90, 0x7d, 0x28, 0x22, 0x74, 0x8a, 0xbc, 0xae, 0x09, 0x13, 0x99, + 0xd6, 0x5a, 0x20, 0xad, 0x3b, 0xd1, 0x81, 0xfb, 0xb6, 0x27, 0x1f, 0x7b, 0xc7, 0x94, 0xb9, 0xa7, + 0xe1, 0x3f, 0x69, 0x20, 0x62, 0x27, 0xc6, 0x1e, 0x5d, 0xd9, 0xfc, 0x65, 0x58, 0x36, 0xab, 0xd1, + 0x3b, 0x4e, 0xbf, 0xe1, 0xb8, 0x6a, 0x7e, 0xb5, 0x78, 0xd5, 0xd4, 0x43, 0xaa, 0xf9, 0xc1, 0x74, + 0xb1, 0xdd, 0x88, 0x68, 0x1e, 0xca, 0x63, 0x07, 0x46, 0x84, 0x29, 0xfb, 0x21, 0x3b, 0x24, 0xf1, + 0x26, 0x94, 0xcc, 0xb8, 0x9c, 0x49, 0xa8, 0xd6, 0x80, 0x2d, 0x79, 0x62, 0xf7, 0x53, 0xb7, 0x16, + 0xd8, 0xeb, 0x4e, 0xcc, 0xa5, 0x60, 0x57, 0x73, 0x70, 0xe9, 0x17, 0xb0, 0x25, 0x0f, 0x5d, 0x33, + 0xae, 0xee, 0x6f, 0x79, 0x87, 0x3f, 0x7f, 0x34, 0x28, 0x1a, 0x07, 0x66, 0xff, 0xcc, 0x38, 0xf7, + 0x75, 0xdb, 0xe6, 0x0d, 0xa1, 0x6e, 0x05, 0x8a, 0x75, 0x2b, 0x5e, 0xbb, 0xa2, 0x21, 0xcd, 0xbd, + 0x11, 0x0a, 0x40, 0xdc, 0x08, 0xd1, 0x06, 0x91, 0x3e, 0xd1, 0x98, 0x35, 0x16, 0x26, 0x1a, 0x08, + 0x9d, 0x46, 0x34, 0x84, 0xc9, 0x14, 0xa2, 0x21, 0x3c, 0xab, 0x44, 0x63, 0x01, 0xd3, 0x20, 0x45, + 0x43, 0x34, 0xcf, 0x20, 0x1a, 0x41, 0xc3, 0x77, 0x4b, 0x34, 0xd4, 0xb1, 0xdd, 0xa4, 0x68, 0xb8, + 0x11, 0x79, 0xa2, 0x21, 0x12, 0x11, 0x2b, 0x1a, 0x98, 0x33, 0x09, 0xf5, 0x44, 0x23, 0x48, 0xdd, + 0x09, 0x44, 0x43, 0xc5, 0xa5, 0x60, 0x57, 0x73, 0x70, 0xc9, 0x15, 0x8d, 0x99, 0x57, 0xb7, 0x2b, + 0x1a, 0xc1, 0x68, 0x6a, 0x5f, 0xde, 0x81, 0xdc, 0x81, 0xb8, 0xdb, 0x24, 0x06, 0xe4, 0xf0, 0xda, + 0x90, 0x68, 0xaa, 0xa0, 0x82, 0x57, 0x91, 0xe5, 0xfb, 0xb1, 0x18, 0x14, 0xa5, 0xdb, 0x7f, 0xff, + 0xeb, 0xff, 0xfe, 0x94, 0x5e, 0x87, 0x35, 0x0e, 0xfa, 0x3e, 0x6e, 0x1f, 0x89, 0x09, 0x2b, 0xee, + 0xfd, 0x13, 0xf9, 0xee, 0x24, 0xb7, 0x75, 0xe5, 0x07, 0x09, 0xa8, 0x78, 0x87, 0x16, 0x80, 0x77, + 0xfd, 0x43, 0x1e, 0x44, 0x17, 0xfc, 0xfc, 0x23, 0x7c, 0x98, 0x04, 0x4b, 0xf4, 0xe9, 0x5d, 0xef, + 0xa8, 0x7d, 0x8e, 0x5d, 0x27, 0xa9, 0x7d, 0x2a, 0x6e, 0x89, 0x22, 0x7c, 0x8a, 0x1c, 0xbe, 0x6e, + 0xd9, 0xdd, 0xc8, 0x1c, 0xfa, 0xae, 0x77, 0x22, 0x73, 0x18, 0xb8, 0xc8, 0x89, 0xcf, 0x21, 0x2f, + 0xd2, 0x47, 0xe7, 0xd0, 0x7f, 0x59, 0x12, 0x9d, 0xc3, 0x40, 0xa5, 0x3f, 0x71, 0x3e, 0xf9, 0xf0, + 0x62, 0xe6, 0xd3, 0x3f, 0xc2, 0x87, 0x49, 0xb0, 0x44, 0x9f, 0x5e, 0xed, 0x5c, 0xed, 0x73, 0xac, + 0x8e, 0xaf, 0xf6, 0x39, 0x5e, 0x82, 0x8f, 0xf2, 0xf9, 0x05, 0xac, 0xfa, 0xeb, 0x7e, 0xe4, 0xd1, + 0x84, 0x85, 0xcc, 0x72, 0x25, 0x19, 0x18, 0xef, 0xf9, 0xb7, 0xb0, 0x16, 0xb8, 0xe5, 0x20, 0xca, + 0x1e, 0x55, 0xb7, 0x2a, 0xe5, 0xc7, 0x13, 0x20, 0x13, 0x9d, 0x07, 0x8a, 0xe4, 0x6a, 0xe7, 0xaa, + 0xb2, 0xbc, 0xda, 0xb9, 0xb2, 0xe2, 0x1e, 0xe3, 0x3c, 0x50, 0x0b, 0x57, 0x3b, 0x57, 0x15, 0xdd, + 0xd5, 0xce, 0xd5, 0x85, 0xf5, 0x58, 0x92, 0x61, 0xfd, 0x28, 0x92, 0x64, 0xc1, 0x9a, 0x63, 0x24, + 0xc9, 0xc2, 0x05, 0xc4, 0x78, 0x92, 0xc9, 0x62, 0x57, 0x34, 0xc9, 0x42, 0x15, 0xba, 0x68, 0x92, + 0x85, 0xeb, 0x66, 0x89, 0x24, 0x93, 0x03, 0x8e, 0x21, 0x59, 0x68, 0xcc, 0x8f, 0x27, 0x40, 0x4e, + 0x98, 0xe7, 0x58, 0xe7, 0xaa, 0x22, 0x6f, 0x5c, 0x9e, 0x27, 0x74, 0x2e, 0xf2, 0x8c, 0xa7, 0xfd, + 0xc8, 0x3c, 0x07, 0xeb, 0x28, 0x91, 0x79, 0x0e, 0x95, 0x1a, 0x12, 0xf2, 0x2c, 0x0b, 0x51, 0xd1, + 0x79, 0x0e, 0x55, 0xcf, 0xa2, 0xf3, 0x1c, 0xae, 0x69, 0x25, 0xae, 0x67, 0x39, 0xe0, 0x98, 0xf5, + 0x1c, 0x1a, 0xf3, 0xe3, 0x09, 0x90, 0x89, 0x1f, 0x27, 0xb7, 0x04, 0xa2, 0xfe, 0x38, 0x85, 0x0b, + 0x2c, 0xe5, 0x07, 0x09, 0xa8, 0xc4, 0x79, 0xf6, 0xd7, 0x1b, 0xd4, 0xf3, 0xac, 0xa8, 0xa5, 0x94, + 0x2b, 0xc9, 0xc0, 0x78, 0xcf, 0x43, 0x28, 0xf8, 0x4e, 0xcd, 0xe4, 0xe1, 0x64, 0x07, 0xfd, 0xf2, + 0xa3, 0x44, 0x5c, 0xe2, 0x80, 0xfd, 0x87, 0x62, 0xf5, 0x80, 0x15, 0x27, 0xf0, 0x72, 0x25, 0x19, + 0x98, 0xe8, 0xd9, 0x7f, 0x00, 0x56, 0x7b, 0x56, 0x1c, 0xb2, 0xcb, 0x95, 0x64, 0xe0, 0x24, 0xac, + 0x12, 0x5b, 0xe8, 0x48, 0x56, 0x05, 0xf6, 0xe8, 0x91, 0xac, 0x0a, 0xee, 0xc3, 0x13, 0x59, 0x85, + 0x3e, 0x63, 0x58, 0x15, 0x74, 0x5b, 0x49, 0x06, 0x4e, 0xc4, 0x2a, 0x3c, 0x56, 0x45, 0xb3, 0x2a, + 0x78, 0x12, 0x8c, 0x66, 0x55, 0xe8, 0x7c, 0x96, 0xc8, 0xaa, 0xb8, 0x01, 0x2b, 0x8e, 0x68, 0x71, + 0xac, 0x9a, 0x78, 0xaa, 0xfd, 0x27, 0xa4, 0x38, 0x56, 0x4d, 0xe0, 0x59, 0x75, 0xd8, 0x8a, 0xf0, + 0xbc, 0x5f, 0x7a, 0xfb, 0xcd, 0xce, 0xad, 0x7f, 0x7e, 0xb3, 0x73, 0xeb, 0x77, 0xa3, 0x9d, 0xd4, + 0xdb, 0xd1, 0x4e, 0xea, 0x1f, 0xa3, 0x9d, 0xd4, 0xbf, 0x47, 0x3b, 0xa9, 0xd3, 0x65, 0xfe, 0x6f, + 0xa0, 0x4f, 0xff, 0x1f, 0x00, 0x00, 0xff, 0xff, 0x16, 0x80, 0xb3, 0xa3, 0x7f, 0x2a, 0x00, 0x00, } diff --git a/vendor/github.com/docker/swarmkit/api/control.proto b/vendor/github.com/docker/swarmkit/api/control.proto index 9c84e3f256..f7f06f4cf5 100644 --- a/vendor/github.com/docker/swarmkit/api/control.proto +++ b/vendor/github.com/docker/swarmkit/api/control.proto @@ -92,7 +92,7 @@ service Control { option (docker.protobuf.plugin.tls_authorization) = { roles: "swarm-manager" }; }; - // ListSecrets returns a `ListSecretResponse` with a list all non-internal `Secret`s being + // 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`. @@ -116,6 +116,51 @@ service Control { rpc RemoveSecret(RemoveSecretRequest) returns (RemoveSecretResponse) { option (docker.protobuf.plugin.tls_authorization) = { roles: "swarm-manager" }; } + + // --- config APIs --- + + // 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. + rpc GetConfig(GetConfigRequest) returns (GetConfigResponse) { + option (docker.protobuf.plugin.tls_authorization) = { roles: "swarm-manager" }; + } + + // 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. + rpc UpdateConfig(UpdateConfigRequest) returns (UpdateConfigResponse) { + option (docker.protobuf.plugin.tls_authorization) = { roles: "swarm-manager" }; + }; + + // 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. + rpc ListConfigs(ListConfigsRequest) returns (ListConfigsResponse) { + option (docker.protobuf.plugin.tls_authorization) = { roles: "swarm-manager" }; + } + // 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. + rpc CreateConfig(CreateConfigRequest) returns (CreateConfigResponse) { + option (docker.protobuf.plugin.tls_authorization) = { roles: "swarm-manager" }; + } + + // 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. + rpc RemoveConfig(RemoveConfigRequest) returns (RemoveConfigResponse) { + option (docker.protobuf.plugin.tls_authorization) = { roles: "swarm-manager" }; + } } message GetNodeRequest { @@ -396,7 +441,6 @@ message UpdateSecretResponse { Secret secret = 1; } - // 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. message ListSecretsRequest { @@ -424,7 +468,7 @@ message CreateSecretRequest { SecretSpec spec = 1; } -// CreateSecretResponse contains the newly created `Secret`` corresponding to the +// 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. message CreateSecretResponse { @@ -440,3 +484,71 @@ message RemoveSecretRequest { // RemoveSecretResponse is an empty object indicating the successful removal of // a secret. message RemoveSecretResponse {} + +// GetConfigRequest is the request to get a `Config` object given a config id. +message GetConfigRequest { + string config_id = 1; +} + +// GetConfigResponse contains the Config corresponding to the id in +// `GetConfigRequest`. +message GetConfigResponse { + Config config = 1; +} + +message UpdateConfigRequest { + // ConfigID is the config ID to update. + string config_id = 1; + + // ConfigVersion is the version of the config being updated. + Version config_version = 2; + + // Spec is the new spec to apply to the Config + // Only some fields are allowed to be updated. + ConfigSpec spec = 3; +} + +message UpdateConfigResponse { + Config config = 1; +} + +// 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. +message ListConfigsRequest { + message Filters { + repeated string names = 1; + repeated string id_prefixes = 2; + map labels = 3; + repeated string name_prefixes = 4; + } + + Filters filters = 1; +} + +// ListConfigResponse contains a list of all the configs that match the name or +// name prefix filters provided in `ListConfigRequest`. +message ListConfigsResponse { + repeated Config configs = 1; +} + +// CreateConfigRequest specifies a new config (it will not update an existing +// config) to create. +message CreateConfigRequest { + ConfigSpec spec = 1; +} + +// CreateConfigResponse contains the newly created `Config` corresponding to the +// name in `CreateConfigRequest`. +message CreateConfigResponse { + Config config = 1; +} + +// RemoveConfigRequest contains the ID of the config that should be removed. This +// removes all versions of the config. +message RemoveConfigRequest { + string config_id = 1; +} + +// RemoveConfigResponse is an empty object indicating the successful removal of +// a config. +message RemoveConfigResponse {} diff --git a/vendor/github.com/docker/swarmkit/api/defaults/service.go b/vendor/github.com/docker/swarmkit/api/defaults/service.go index ecc5fc7f1a..ce1e86435a 100644 --- a/vendor/github.com/docker/swarmkit/api/defaults/service.go +++ b/vendor/github.com/docker/swarmkit/api/defaults/service.go @@ -21,7 +21,8 @@ var Service = api.ServiceSpec{ }, Resources: &api.ResourceRequirements{}, Restart: &api.RestartPolicy{ - Delay: gogotypes.DurationProto(5 * time.Second), + Condition: api.RestartOnAny, + Delay: gogotypes.DurationProto(5 * time.Second), }, Placement: &api.Placement{}, }, @@ -31,6 +32,12 @@ var Service = api.ServiceSpec{ Parallelism: 1, Order: api.UpdateConfig_STOP_FIRST, }, + Rollback: &api.UpdateConfig{ + FailureAction: api.UpdateConfig_PAUSE, + Monitor: gogotypes.DurationProto(5 * time.Second), + Parallelism: 1, + Order: api.UpdateConfig_STOP_FIRST, + }, } // InterpolateService returns a ServiceSpec based on the provided spec, which @@ -79,5 +86,14 @@ func InterpolateService(origSpec *api.ServiceSpec) *api.ServiceSpec { } } + if spec.Rollback == nil { + spec.Rollback = Service.Rollback.Copy() + } else { + if spec.Rollback.Monitor == nil { + spec.Rollback.Monitor = &gogotypes.Duration{} + deepcopy.Copy(spec.Rollback.Monitor, Service.Rollback.Monitor) + } + } + return spec } diff --git a/vendor/github.com/docker/swarmkit/api/dispatcher.pb.go b/vendor/github.com/docker/swarmkit/api/dispatcher.pb.go index ce8d7ddbe4..569eb3b9f1 100644 --- a/vendor/github.com/docker/swarmkit/api/dispatcher.pb.go +++ b/vendor/github.com/docker/swarmkit/api/dispatcher.pb.go @@ -154,6 +154,8 @@ type SessionMessage struct { // Symmetric encryption key distributed by the lead manager. Used by agents // for securing network bootstrapping and communication. NetworkBootstrapKeys []*EncryptionKey `protobuf:"bytes,4,rep,name=network_bootstrap_keys,json=networkBootstrapKeys" json:"network_bootstrap_keys,omitempty"` + // Which root certificates to trust + RootCA []byte `protobuf:"bytes,5,opt,name=RootCA,proto3" json:"RootCA,omitempty"` } func (m *SessionMessage) Reset() { *m = SessionMessage{} } @@ -244,6 +246,7 @@ type Assignment struct { // Types that are valid to be assigned to Item: // *Assignment_Task // *Assignment_Secret + // *Assignment_Config Item isAssignment_Item `protobuf_oneof:"item"` } @@ -263,9 +266,13 @@ type Assignment_Task struct { type Assignment_Secret struct { Secret *Secret `protobuf:"bytes,2,opt,name=secret,oneof"` } +type Assignment_Config struct { + Config *Config `protobuf:"bytes,3,opt,name=config,oneof"` +} func (*Assignment_Task) isAssignment_Item() {} func (*Assignment_Secret) isAssignment_Item() {} +func (*Assignment_Config) isAssignment_Item() {} func (m *Assignment) GetItem() isAssignment_Item { if m != nil { @@ -288,11 +295,19 @@ func (m *Assignment) GetSecret() *Secret { return nil } +func (m *Assignment) GetConfig() *Config { + if x, ok := m.GetItem().(*Assignment_Config); ok { + return x.Config + } + return nil +} + // XXX_OneofFuncs is for the internal use of the proto package. func (*Assignment) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { return _Assignment_OneofMarshaler, _Assignment_OneofUnmarshaler, _Assignment_OneofSizer, []interface{}{ (*Assignment_Task)(nil), (*Assignment_Secret)(nil), + (*Assignment_Config)(nil), } } @@ -310,6 +325,11 @@ func _Assignment_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { if err := b.EncodeMessage(x.Secret); err != nil { return err } + case *Assignment_Config: + _ = b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Config); err != nil { + return err + } case nil: default: return fmt.Errorf("Assignment.Item has unexpected type %T", x) @@ -336,6 +356,14 @@ func _Assignment_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buf err := b.DecodeMessage(msg) m.Item = &Assignment_Secret{msg} return true, err + case 3: // item.config + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Config) + err := b.DecodeMessage(msg) + m.Item = &Assignment_Config{msg} + return true, err default: return false, nil } @@ -355,6 +383,11 @@ func _Assignment_OneofSizer(msg proto.Message) (n int) { n += proto.SizeVarint(2<<3 | proto.WireBytes) n += proto.SizeVarint(uint64(s)) n += s + case *Assignment_Config: + s := proto.Size(x.Config) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s case nil: default: panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) @@ -513,6 +546,10 @@ func (m *SessionMessage) CopyFrom(src interface{}) { } } + if o.RootCA != nil { + m.RootCA = make([]byte, len(o.RootCA)) + copy(m.RootCA, o.RootCA) + } } func (m *HeartbeatRequest) Copy() *HeartbeatRequest { @@ -678,6 +715,12 @@ func (m *Assignment) CopyFrom(src interface{}) { } github_com_docker_swarmkit_api_deepcopy.Copy(v.Secret, o.GetSecret()) m.Item = &v + case *Assignment_Config: + v := Assignment_Config{ + Config: &Config{}, + } + github_com_docker_swarmkit_api_deepcopy.Copy(v.Config, o.GetConfig()) + m.Item = &v } } @@ -1148,6 +1191,12 @@ func (m *SessionMessage) MarshalTo(dAtA []byte) (int, error) { i += n } } + if len(m.RootCA) > 0 { + dAtA[i] = 0x2a + i++ + i = encodeVarintDispatcher(dAtA, i, uint64(len(m.RootCA))) + i += copy(dAtA[i:], m.RootCA) + } return i, nil } @@ -1420,6 +1469,20 @@ func (m *Assignment_Secret) MarshalTo(dAtA []byte) (int, error) { } return i, nil } +func (m *Assignment_Config) MarshalTo(dAtA []byte) (int, error) { + i := 0 + if m.Config != nil { + dAtA[i] = 0x1a + i++ + i = encodeVarintDispatcher(dAtA, i, uint64(m.Config.Size())) + n8, err := m.Config.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n8 + } + return i, nil +} func (m *AssignmentChange) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -1439,11 +1502,11 @@ func (m *AssignmentChange) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintDispatcher(dAtA, i, uint64(m.Assignment.Size())) - n8, err := m.Assignment.MarshalTo(dAtA[i:]) + n9, err := m.Assignment.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n8 + i += n9 } if m.Action != 0 { dAtA[i] = 0x10 @@ -1860,6 +1923,10 @@ func (m *SessionMessage) Size() (n int) { n += 1 + l + sovDispatcher(uint64(l)) } } + l = len(m.RootCA) + if l > 0 { + n += 1 + l + sovDispatcher(uint64(l)) + } return n } @@ -1976,6 +2043,15 @@ func (m *Assignment_Secret) Size() (n int) { } return n } +func (m *Assignment_Config) Size() (n int) { + var l int + _ = l + if m.Config != nil { + l = m.Config.Size() + n += 1 + l + sovDispatcher(uint64(l)) + } + return n +} func (m *AssignmentChange) Size() (n int) { var l int _ = l @@ -2045,6 +2121,7 @@ func (this *SessionMessage) String() string { `Node:` + strings.Replace(fmt.Sprintf("%v", this.Node), "Node", "Node", 1) + `,`, `Managers:` + strings.Replace(fmt.Sprintf("%v", this.Managers), "WeightedPeer", "WeightedPeer", 1) + `,`, `NetworkBootstrapKeys:` + strings.Replace(fmt.Sprintf("%v", this.NetworkBootstrapKeys), "EncryptionKey", "EncryptionKey", 1) + `,`, + `RootCA:` + fmt.Sprintf("%v", this.RootCA) + `,`, `}`, }, "") return s @@ -2160,6 +2237,16 @@ func (this *Assignment_Secret) String() string { }, "") 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 *AssignmentChange) String() string { if this == nil { return "nil" @@ -2457,6 +2544,37 @@ func (m *SessionMessage) Unmarshal(dAtA []byte) error { 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 > 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:]) @@ -3241,6 +3359,38 @@ func (m *Assignment) Unmarshal(dAtA []byte) error { } 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 > l { + return io.ErrUnexpectedEOF + } + v := &Config{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.Item = &Assignment_Config{v} + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipDispatcher(dAtA[iNdEx:]) @@ -3630,65 +3780,67 @@ var ( func init() { proto.RegisterFile("dispatcher.proto", fileDescriptorDispatcher) } var fileDescriptorDispatcher = []byte{ - // 949 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x9c, 0x55, 0xcd, 0x6e, 0xe3, 0x54, - 0x14, 0x8e, 0xd3, 0xd4, 0x6d, 0x4f, 0xda, 0x12, 0x2e, 0xa3, 0xc1, 0x58, 0x9a, 0x34, 0xb8, 0x4c, - 0x54, 0x69, 0x8a, 0x3b, 0x84, 0x9f, 0x0d, 0x55, 0xa1, 0x69, 0x22, 0x35, 0x9a, 0x49, 0xa7, 0xba, - 0xcd, 0xcc, 0x2c, 0x23, 0x27, 0x3e, 0xb8, 0x26, 0x8d, 0xaf, 0xf1, 0xbd, 0x99, 0x21, 0x48, 0x48, - 0x48, 0x30, 0x12, 0x62, 0x85, 0x58, 0x75, 0xc3, 0x2b, 0xf0, 0x1c, 0x15, 0x2b, 0x96, 0xac, 0x0a, - 0x93, 0x07, 0xe0, 0x01, 0x58, 0x21, 0xdb, 0xd7, 0x49, 0xc8, 0x24, 0x9d, 0xb4, 0xab, 0xc4, 0xe7, - 0x7c, 0xdf, 0x39, 0x9f, 0xbf, 0x7b, 0x7c, 0x2e, 0xe4, 0x6c, 0x97, 0xfb, 0x96, 0x68, 0x9f, 0x62, - 0x60, 0xfa, 0x01, 0x13, 0x8c, 0x10, 0x9b, 0xb5, 0x3b, 0x18, 0x98, 0xfc, 0xb9, 0x15, 0x74, 0x3b, - 0xae, 0x30, 0x9f, 0x7d, 0xa0, 0x67, 0x45, 0xdf, 0x47, 0x1e, 0x03, 0xf4, 0x35, 0xd6, 0xfa, 0x12, - 0xdb, 0x22, 0x79, 0xbc, 0xe5, 0x30, 0x87, 0x45, 0x7f, 0x77, 0xc2, 0x7f, 0x32, 0xfa, 0x96, 0x7f, - 0xd6, 0x73, 0x5c, 0x6f, 0x27, 0xfe, 0x91, 0xc1, 0xbc, 0xc3, 0x98, 0x73, 0x86, 0x3b, 0xd1, 0x53, - 0xab, 0xf7, 0xc5, 0x8e, 0xdd, 0x0b, 0x2c, 0xe1, 0x32, 0x99, 0x37, 0x5e, 0x28, 0xb0, 0x7e, 0x82, - 0x9c, 0xbb, 0xcc, 0xa3, 0xf8, 0x55, 0x0f, 0xb9, 0x20, 0x55, 0xc8, 0xda, 0xc8, 0xdb, 0x81, 0xeb, - 0x87, 0x38, 0x4d, 0x29, 0x28, 0x5b, 0xd9, 0xd2, 0xa6, 0xf9, 0xaa, 0x46, 0xf3, 0x88, 0xd9, 0x58, - 0x19, 0x41, 0xe9, 0x38, 0x8f, 0x6c, 0x03, 0xf0, 0xb8, 0x70, 0xd3, 0xb5, 0xb5, 0x74, 0x41, 0xd9, - 0x5a, 0x29, 0xaf, 0x0d, 0x2e, 0x37, 0x56, 0x64, 0xbb, 0x5a, 0x85, 0xae, 0x48, 0x40, 0xcd, 0x36, - 0xbe, 0x4f, 0x0f, 0x75, 0xd4, 0x91, 0x73, 0xcb, 0xc1, 0x89, 0x02, 0xca, 0xd5, 0x05, 0xc8, 0x36, - 0x64, 0x3c, 0x66, 0x63, 0xd4, 0x28, 0x5b, 0xd2, 0x66, 0xc9, 0xa5, 0x11, 0x8a, 0xec, 0xc2, 0x72, - 0xd7, 0xf2, 0x2c, 0x07, 0x03, 0xae, 0x2d, 0x14, 0x16, 0xb6, 0xb2, 0xa5, 0xc2, 0x34, 0xc6, 0x53, - 0x74, 0x9d, 0x53, 0x81, 0xf6, 0x31, 0x62, 0x40, 0x87, 0x0c, 0xf2, 0x14, 0x6e, 0x7b, 0x28, 0x9e, - 0xb3, 0xa0, 0xd3, 0x6c, 0x31, 0x26, 0xb8, 0x08, 0x2c, 0xbf, 0xd9, 0xc1, 0x3e, 0xd7, 0x32, 0x51, - 0xad, 0x77, 0xa7, 0xd5, 0xaa, 0x7a, 0xed, 0xa0, 0x1f, 0x59, 0xf3, 0x00, 0xfb, 0xf4, 0x96, 0x2c, - 0x50, 0x4e, 0xf8, 0x0f, 0xb0, 0xcf, 0x8d, 0xcf, 0x21, 0x77, 0x88, 0x56, 0x20, 0x5a, 0x68, 0x89, - 0xe4, 0x38, 0xae, 0x65, 0x83, 0x71, 0x0c, 0x6f, 0x8e, 0x55, 0xe0, 0x3e, 0xf3, 0x38, 0x92, 0x4f, - 0x41, 0xf5, 0x31, 0x70, 0x99, 0x2d, 0x0f, 0xf3, 0x1d, 0x33, 0x9e, 0x0a, 0x33, 0x99, 0x0a, 0xb3, - 0x22, 0xa7, 0xa2, 0xbc, 0x7c, 0x71, 0xb9, 0x91, 0x3a, 0xff, 0x6b, 0x43, 0xa1, 0x92, 0x62, 0xfc, - 0x9c, 0x86, 0xb7, 0x1f, 0xfb, 0xb6, 0x25, 0xb0, 0x61, 0xf1, 0xce, 0x89, 0xb0, 0x44, 0x8f, 0xdf, - 0x48, 0x1b, 0x79, 0x02, 0x4b, 0xbd, 0xa8, 0x50, 0xe2, 0xf9, 0xee, 0x34, 0x9f, 0x66, 0xf4, 0x32, - 0x47, 0x91, 0x18, 0x41, 0x93, 0x62, 0x3a, 0x83, 0xdc, 0x64, 0x92, 0x6c, 0xc2, 0x92, 0xb0, 0x78, - 0x67, 0x24, 0x0b, 0x06, 0x97, 0x1b, 0x6a, 0x08, 0xab, 0x55, 0xa8, 0x1a, 0xa6, 0x6a, 0x36, 0xf9, - 0x04, 0x54, 0x1e, 0x91, 0xe4, 0xd4, 0xe4, 0xa7, 0xe9, 0x19, 0x53, 0x22, 0xd1, 0x86, 0x0e, 0xda, - 0xab, 0x2a, 0x63, 0xaf, 0x8d, 0x5d, 0x58, 0x0d, 0xa3, 0x37, 0xb3, 0xc8, 0xd8, 0x93, 0xec, 0xe4, - 0x1b, 0x30, 0x61, 0x31, 0xd4, 0xca, 0x35, 0x25, 0x32, 0x4c, 0x9b, 0x25, 0x90, 0xc6, 0x30, 0xa3, - 0x0c, 0x64, 0x9f, 0x73, 0xd7, 0xf1, 0xba, 0xe8, 0x89, 0x1b, 0x6a, 0xf8, 0x06, 0x60, 0x54, 0x83, - 0x98, 0x90, 0x09, 0x4b, 0xcb, 0xc9, 0x99, 0x29, 0xe0, 0x30, 0x45, 0x23, 0x1c, 0xf9, 0x08, 0x54, - 0x8e, 0xed, 0x00, 0x85, 0xf4, 0x54, 0x9f, 0xc6, 0x38, 0x89, 0x10, 0x87, 0x29, 0x2a, 0xb1, 0x65, - 0x15, 0x32, 0xae, 0xc0, 0xae, 0xf1, 0x22, 0x0d, 0xb9, 0x51, 0xf3, 0x83, 0x53, 0xcb, 0x73, 0x90, - 0xec, 0x01, 0x58, 0xc3, 0x98, 0x14, 0x32, 0xf5, 0xa8, 0x46, 0x4c, 0x3a, 0xc6, 0x20, 0x75, 0x50, - 0xad, 0x76, 0xb4, 0xcb, 0x42, 0x49, 0xeb, 0xa5, 0x8f, 0xaf, 0xe6, 0xc6, 0x5d, 0xc7, 0x02, 0xfb, - 0x11, 0x99, 0xca, 0x22, 0x46, 0x6b, 0x5c, 0x62, 0x9c, 0x23, 0x45, 0x50, 0x1f, 0x1f, 0x57, 0xf6, - 0x1b, 0xd5, 0x5c, 0x4a, 0xd7, 0x7f, 0xfa, 0xb5, 0x70, 0x7b, 0x12, 0x21, 0xc7, 0xb2, 0x08, 0x2a, - 0xad, 0xd6, 0x1f, 0x3d, 0xa9, 0xe6, 0x94, 0xe9, 0x38, 0x8a, 0x5d, 0xf6, 0x0c, 0x8d, 0x7f, 0x95, - 0xff, 0x1d, 0x64, 0x32, 0x0e, 0x9f, 0x41, 0x26, 0xbc, 0x16, 0x22, 0x0f, 0xd6, 0x4b, 0xf7, 0xae, - 0x7e, 0x8f, 0x84, 0x65, 0x36, 0xfa, 0x3e, 0xd2, 0x88, 0x48, 0xee, 0x00, 0x58, 0xbe, 0x7f, 0xe6, - 0x22, 0x6f, 0x0a, 0x16, 0x2f, 0x65, 0xba, 0x22, 0x23, 0x0d, 0x16, 0xa6, 0x03, 0xe4, 0xbd, 0x33, - 0xc1, 0x9b, 0xae, 0xa7, 0x2d, 0xc4, 0x69, 0x19, 0xa9, 0x79, 0x64, 0x0f, 0x96, 0xda, 0x91, 0x39, - 0xc9, 0xa2, 0x7b, 0x6f, 0x1e, 0x27, 0x69, 0x42, 0x32, 0xee, 0x42, 0x26, 0xd4, 0x42, 0x56, 0x61, - 0xf9, 0xe0, 0x51, 0xfd, 0xf8, 0x61, 0x35, 0xf4, 0x8b, 0xbc, 0x01, 0xd9, 0xda, 0xd1, 0x01, 0xad, - 0xd6, 0xab, 0x47, 0x8d, 0xfd, 0x87, 0x39, 0xa5, 0x74, 0xbe, 0x08, 0x50, 0x19, 0xde, 0x91, 0xe4, - 0x6b, 0x58, 0x92, 0x73, 0x4a, 0x8c, 0xe9, 0xc3, 0x34, 0x7e, 0x7d, 0xe9, 0x57, 0x61, 0xa4, 0x23, - 0xc6, 0xe6, 0xef, 0xbf, 0xfd, 0x73, 0x9e, 0xbe, 0x03, 0xab, 0x11, 0xe6, 0xfd, 0x70, 0x11, 0x63, - 0x00, 0x6b, 0xf1, 0x93, 0x5c, 0xf3, 0xf7, 0x15, 0xf2, 0x2d, 0xac, 0x0c, 0x97, 0x29, 0x99, 0xfa, - 0xae, 0x93, 0xdb, 0x5a, 0xbf, 0xfb, 0x1a, 0x94, 0xdc, 0x12, 0xf3, 0x08, 0x20, 0xbf, 0x28, 0x90, - 0x9b, 0xdc, 0x33, 0xe4, 0xde, 0x35, 0x76, 0xa6, 0xbe, 0x3d, 0x1f, 0xf8, 0x3a, 0xa2, 0x7a, 0xb0, - 0x18, 0x6d, 0x28, 0x52, 0x98, 0xb5, 0x0a, 0x86, 0xdd, 0x67, 0x23, 0x92, 0x73, 0x28, 0xce, 0xd1, - 0xf1, 0xc7, 0xb4, 0x72, 0x5f, 0x21, 0x3f, 0x28, 0x90, 0x1d, 0x1b, 0x6d, 0x52, 0x7c, 0xcd, 0xec, - 0x27, 0x1a, 0x8a, 0xf3, 0x7d, 0x23, 0x73, 0x4e, 0x44, 0x59, 0xbb, 0x78, 0x99, 0x4f, 0xfd, 0xf9, - 0x32, 0x9f, 0xfa, 0x6e, 0x90, 0x57, 0x2e, 0x06, 0x79, 0xe5, 0x8f, 0x41, 0x5e, 0xf9, 0x7b, 0x90, - 0x57, 0x5a, 0x6a, 0x74, 0x97, 0x7e, 0xf8, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x70, 0xa6, 0xd5, - 0x2c, 0xde, 0x09, 0x00, 0x00, + // 983 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x9c, 0x55, 0x4f, 0x6f, 0x1b, 0x45, + 0x14, 0xf7, 0x38, 0xce, 0x26, 0x7e, 0x4e, 0x82, 0x19, 0xaa, 0xb0, 0xac, 0x54, 0xc7, 0x6c, 0x68, + 0x14, 0xa9, 0x61, 0x53, 0xcc, 0x9f, 0x0b, 0x51, 0x20, 0x8e, 0x2d, 0xc5, 0x6a, 0x93, 0x46, 0x13, + 0xb7, 0x3d, 0x5a, 0x6b, 0xef, 0x74, 0xb3, 0x38, 0xde, 0x59, 0x76, 0xc6, 0x2d, 0x3e, 0x20, 0x71, + 0xa0, 0x12, 0xe2, 0x84, 0x38, 0x45, 0x42, 0x7c, 0x05, 0xc4, 0xc7, 0x88, 0x38, 0x71, 0xe4, 0x14, + 0xa8, 0x3f, 0x00, 0x1f, 0x80, 0x13, 0xda, 0xd9, 0x59, 0xdb, 0x75, 0xed, 0xd4, 0xc9, 0xc9, 0x9e, + 0x37, 0xbf, 0xdf, 0x9b, 0xdf, 0xbc, 0xf7, 0xdb, 0x37, 0x90, 0x77, 0x3c, 0x1e, 0xd8, 0xa2, 0x75, + 0x4a, 0x43, 0x2b, 0x08, 0x99, 0x60, 0x18, 0x3b, 0xac, 0xd5, 0xa6, 0xa1, 0xc5, 0x9f, 0xdb, 0x61, + 0xa7, 0xed, 0x09, 0xeb, 0xd9, 0x47, 0x46, 0x4e, 0xf4, 0x02, 0xca, 0x63, 0x80, 0xb1, 0xcc, 0x9a, + 0x5f, 0xd1, 0x96, 0x48, 0x96, 0xb7, 0x5c, 0xe6, 0x32, 0xf9, 0x77, 0x3b, 0xfa, 0xa7, 0xa2, 0xef, + 0x04, 0x67, 0x5d, 0xd7, 0xf3, 0xb7, 0xe3, 0x1f, 0x15, 0x2c, 0xb8, 0x8c, 0xb9, 0x67, 0x74, 0x5b, + 0xae, 0x9a, 0xdd, 0xa7, 0xdb, 0x4e, 0x37, 0xb4, 0x85, 0xc7, 0xd4, 0xbe, 0xf9, 0x02, 0xc1, 0xca, + 0x09, 0xe5, 0xdc, 0x63, 0x3e, 0xa1, 0x5f, 0x77, 0x29, 0x17, 0xb8, 0x0a, 0x39, 0x87, 0xf2, 0x56, + 0xe8, 0x05, 0x11, 0x4e, 0x47, 0x45, 0xb4, 0x99, 0x2b, 0xad, 0x5b, 0xaf, 0x6b, 0xb4, 0x8e, 0x98, + 0x43, 0x2b, 0x43, 0x28, 0x19, 0xe5, 0xe1, 0x2d, 0x00, 0x1e, 0x27, 0x6e, 0x78, 0x8e, 0x9e, 0x2e, + 0xa2, 0xcd, 0x6c, 0x79, 0xb9, 0x7f, 0xb9, 0x96, 0x55, 0xc7, 0xd5, 0x2a, 0x24, 0xab, 0x00, 0x35, + 0xc7, 0xfc, 0x25, 0x3d, 0xd0, 0x71, 0x48, 0x39, 0xb7, 0x5d, 0x3a, 0x96, 0x00, 0x5d, 0x9d, 0x00, + 0x6f, 0x41, 0xc6, 0x67, 0x0e, 0x95, 0x07, 0xe5, 0x4a, 0xfa, 0x34, 0xb9, 0x44, 0xa2, 0xf0, 0x0e, + 0x2c, 0x76, 0x6c, 0xdf, 0x76, 0x69, 0xc8, 0xf5, 0xb9, 0xe2, 0xdc, 0x66, 0xae, 0x54, 0x9c, 0xc4, + 0x78, 0x42, 0x3d, 0xf7, 0x54, 0x50, 0xe7, 0x98, 0xd2, 0x90, 0x0c, 0x18, 0xf8, 0x09, 0xac, 0xfa, + 0x54, 0x3c, 0x67, 0x61, 0xbb, 0xd1, 0x64, 0x4c, 0x70, 0x11, 0xda, 0x41, 0xa3, 0x4d, 0x7b, 0x5c, + 0xcf, 0xc8, 0x5c, 0xef, 0x4f, 0xca, 0x55, 0xf5, 0x5b, 0x61, 0x4f, 0x96, 0xe6, 0x3e, 0xed, 0x91, + 0x5b, 0x2a, 0x41, 0x39, 0xe1, 0xdf, 0xa7, 0x3d, 0x8e, 0x57, 0x41, 0x23, 0x8c, 0x89, 0xfd, 0x3d, + 0x7d, 0xbe, 0x88, 0x36, 0x97, 0x88, 0x5a, 0x99, 0x5f, 0x42, 0xfe, 0x80, 0xda, 0xa1, 0x68, 0x52, + 0x5b, 0x24, 0x6d, 0xba, 0x56, 0x79, 0xcc, 0x63, 0x78, 0x7b, 0x24, 0x03, 0x0f, 0x98, 0xcf, 0x29, + 0xfe, 0x1c, 0xb4, 0x80, 0x86, 0x1e, 0x73, 0x54, 0x93, 0xdf, 0xb3, 0x62, 0xb7, 0x58, 0x89, 0x5b, + 0xac, 0x8a, 0x72, 0x4b, 0x79, 0xf1, 0xe2, 0x72, 0x2d, 0x75, 0xfe, 0xf7, 0x1a, 0x22, 0x8a, 0x62, + 0xfe, 0x94, 0x86, 0x77, 0x1f, 0x05, 0x8e, 0x2d, 0x68, 0xdd, 0xe6, 0xed, 0x13, 0x61, 0x8b, 0x2e, + 0xbf, 0x91, 0x36, 0xfc, 0x18, 0x16, 0xba, 0x32, 0x51, 0xd2, 0x8b, 0x9d, 0x49, 0xf5, 0x9b, 0x72, + 0x96, 0x35, 0x8c, 0xc4, 0x08, 0x92, 0x24, 0x33, 0x18, 0xe4, 0xc7, 0x37, 0xf1, 0x3a, 0x2c, 0x08, + 0x9b, 0xb7, 0x87, 0xb2, 0xa0, 0x7f, 0xb9, 0xa6, 0x45, 0xb0, 0x5a, 0x85, 0x68, 0xd1, 0x56, 0xcd, + 0xc1, 0x9f, 0x81, 0xc6, 0x25, 0x49, 0xb9, 0xa9, 0x30, 0x49, 0xcf, 0x88, 0x12, 0x85, 0x36, 0x0d, + 0xd0, 0x5f, 0x57, 0x19, 0xd7, 0xda, 0xdc, 0x81, 0xa5, 0x28, 0x7a, 0xb3, 0x12, 0x99, 0xbb, 0x8a, + 0x9d, 0x7c, 0x1b, 0x16, 0xcc, 0x47, 0x5a, 0xb9, 0x8e, 0x64, 0xc1, 0xf4, 0x69, 0x02, 0x49, 0x0c, + 0x33, 0xcb, 0x80, 0xf7, 0x38, 0xf7, 0x5c, 0xbf, 0x43, 0x7d, 0x71, 0x43, 0x0d, 0xbf, 0x23, 0x80, + 0x61, 0x12, 0x6c, 0x41, 0x26, 0xca, 0xad, 0xac, 0x33, 0x55, 0xc1, 0x41, 0x8a, 0x48, 0x1c, 0xfe, + 0x04, 0x34, 0x4e, 0x5b, 0x21, 0x15, 0xaa, 0xa8, 0xc6, 0x24, 0xc6, 0x89, 0x44, 0x1c, 0xa4, 0x88, + 0xc2, 0x46, 0xac, 0x16, 0xf3, 0x9f, 0x7a, 0xae, 0x3e, 0x37, 0x9d, 0xb5, 0x2f, 0x11, 0x11, 0x2b, + 0xc6, 0x96, 0x35, 0xc8, 0x78, 0x82, 0x76, 0xcc, 0x17, 0x69, 0xc8, 0x0f, 0x25, 0xef, 0x9f, 0xda, + 0xbe, 0x4b, 0xf1, 0x2e, 0x80, 0x3d, 0x88, 0x29, 0xf9, 0x13, 0x3b, 0x3c, 0x64, 0x92, 0x11, 0x06, + 0x3e, 0x04, 0xcd, 0x6e, 0xc9, 0xd1, 0x18, 0x5d, 0x64, 0xa5, 0xf4, 0xe9, 0xd5, 0xdc, 0xf8, 0xd4, + 0x91, 0xc0, 0x9e, 0x24, 0x13, 0x95, 0xc4, 0x6c, 0x8e, 0x4a, 0x8c, 0xf7, 0xf0, 0x06, 0x68, 0x8f, + 0x8e, 0x2b, 0x7b, 0xf5, 0x6a, 0x3e, 0x65, 0x18, 0x3f, 0xfe, 0x5a, 0x5c, 0x1d, 0x47, 0x28, 0x37, + 0x6f, 0x80, 0x46, 0xaa, 0x87, 0x0f, 0x1f, 0x57, 0xf3, 0x68, 0x32, 0x8e, 0xd0, 0x0e, 0x7b, 0x46, + 0xcd, 0xff, 0xd0, 0x2b, 0xfd, 0x4f, 0x5c, 0xf4, 0x05, 0x64, 0xa2, 0x57, 0x46, 0xd6, 0x60, 0xa5, + 0x74, 0xf7, 0xea, 0x7b, 0x24, 0x2c, 0xab, 0xde, 0x0b, 0x28, 0x91, 0x44, 0x7c, 0x1b, 0xc0, 0x0e, + 0x82, 0x33, 0x8f, 0xf2, 0x86, 0x60, 0xf1, 0x8c, 0x27, 0x59, 0x15, 0xa9, 0xb3, 0x68, 0x3b, 0xa4, + 0xbc, 0x7b, 0x26, 0x78, 0xc3, 0xf3, 0x65, 0x03, 0xb3, 0x24, 0xab, 0x22, 0x35, 0x1f, 0xef, 0xc2, + 0x42, 0x4b, 0x16, 0x27, 0x99, 0x9b, 0x1f, 0xcc, 0x52, 0x49, 0x92, 0x90, 0xcc, 0x3b, 0x90, 0x89, + 0xb4, 0xe0, 0x25, 0x58, 0xdc, 0x7f, 0x78, 0x78, 0xfc, 0xa0, 0x1a, 0xd5, 0x0b, 0xbf, 0x05, 0xb9, + 0xda, 0xd1, 0x3e, 0xa9, 0x1e, 0x56, 0x8f, 0xea, 0x7b, 0x0f, 0xf2, 0xa8, 0x74, 0x3e, 0x0f, 0x50, + 0x19, 0x3c, 0xb9, 0xf8, 0x1b, 0x58, 0x50, 0xf6, 0xc6, 0xe6, 0x64, 0x0b, 0x8e, 0xbe, 0x86, 0xc6, + 0x55, 0x18, 0x55, 0x11, 0x73, 0xfd, 0x8f, 0xdf, 0xfe, 0x3d, 0x4f, 0xdf, 0x86, 0x25, 0x89, 0xf9, + 0x30, 0x9a, 0xeb, 0x34, 0x84, 0xe5, 0x78, 0xa5, 0x5e, 0x8d, 0x7b, 0x08, 0x7f, 0x0b, 0xd9, 0xc1, + 0x0c, 0xc6, 0x13, 0xef, 0x3a, 0x3e, 0xe4, 0x8d, 0x3b, 0x6f, 0x40, 0xa9, 0xe1, 0x32, 0x8b, 0x00, + 0xfc, 0x33, 0x82, 0xfc, 0xf8, 0x78, 0xc2, 0x77, 0xaf, 0x31, 0x6a, 0x8d, 0xad, 0xd9, 0xc0, 0xd7, + 0x11, 0xd5, 0x85, 0x79, 0x39, 0xd8, 0x70, 0x71, 0xda, 0x00, 0x19, 0x9c, 0x3e, 0x1d, 0x91, 0xf4, + 0x61, 0x63, 0x86, 0x13, 0x7f, 0x48, 0xa3, 0x7b, 0x08, 0x7f, 0x8f, 0x20, 0x37, 0x62, 0x6d, 0xbc, + 0xf1, 0x06, 0xef, 0x27, 0x1a, 0x36, 0x66, 0xfb, 0x46, 0x66, 0x74, 0x44, 0x59, 0xbf, 0x78, 0x59, + 0x48, 0xfd, 0xf5, 0xb2, 0x90, 0xfa, 0xae, 0x5f, 0x40, 0x17, 0xfd, 0x02, 0xfa, 0xb3, 0x5f, 0x40, + 0xff, 0xf4, 0x0b, 0xa8, 0xa9, 0xc9, 0x27, 0xf8, 0xe3, 0xff, 0x03, 0x00, 0x00, 0xff, 0xff, 0x6c, + 0xba, 0x38, 0xbd, 0x2d, 0x0a, 0x00, 0x00, } diff --git a/vendor/github.com/docker/swarmkit/api/dispatcher.proto b/vendor/github.com/docker/swarmkit/api/dispatcher.proto index ffa2464a48..505a80baa2 100644 --- a/vendor/github.com/docker/swarmkit/api/dispatcher.proto +++ b/vendor/github.com/docker/swarmkit/api/dispatcher.proto @@ -126,6 +126,9 @@ message SessionMessage { // Symmetric encryption key distributed by the lead manager. Used by agents // for securing network bootstrapping and communication. repeated EncryptionKey network_bootstrap_keys = 4; + + // Which root certificates to trust + bytes RootCA = 5; } // HeartbeatRequest provides identifying properties for a single heartbeat. @@ -174,6 +177,7 @@ message Assignment { oneof item { Task task = 1; Secret secret = 2; + Config config = 3; } } diff --git a/vendor/github.com/docker/swarmkit/api/objects.pb.go b/vendor/github.com/docker/swarmkit/api/objects.pb.go index d38c383e6e..eb0aa8acd4 100644 --- a/vendor/github.com/docker/swarmkit/api/objects.pb.go +++ b/vendor/github.com/docker/swarmkit/api/objects.pb.go @@ -269,9 +269,7 @@ func (*Cluster) ProtoMessage() {} func (*Cluster) Descriptor() ([]byte, []int) { return fileDescriptorObjects, []int{7} } // Secret represents a secret that should be passed to a container or a node, -// and is immutable. It wraps the `spec` provided by the user with useful -// information that is generated from the secret data in the `spec`, such as -// the digest and size of the secret data. +// 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" json:"meta"` @@ -286,6 +284,20 @@ func (m *Secret) Reset() { *m = Secret{} } func (*Secret) ProtoMessage() {} func (*Secret) Descriptor() ([]byte, []int) { return fileDescriptorObjects, []int{8} } +// 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" json:"meta"` + // 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" json:"spec"` +} + +func (m *Config) Reset() { *m = Config{} } +func (*Config) ProtoMessage() {} +func (*Config) Descriptor() ([]byte, []int) { return fileDescriptorObjects, []int{9} } + // 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. @@ -304,7 +316,7 @@ type Resource struct { func (m *Resource) Reset() { *m = Resource{} } func (*Resource) ProtoMessage() {} -func (*Resource) Descriptor() ([]byte, []int) { return fileDescriptorObjects, []int{9} } +func (*Resource) Descriptor() ([]byte, []int) { return fileDescriptorObjects, []int{10} } // Extension declares a type of "resource" object. This message provides some // metadata about the objects. @@ -317,7 +329,7 @@ type Extension struct { func (m *Extension) Reset() { *m = Extension{} } func (*Extension) ProtoMessage() {} -func (*Extension) Descriptor() ([]byte, []int) { return fileDescriptorObjects, []int{10} } +func (*Extension) Descriptor() ([]byte, []int) { return fileDescriptorObjects, []int{11} } func init() { proto.RegisterType((*Meta)(nil), "docker.swarmkit.v1.Meta") @@ -330,6 +342,7 @@ func init() { proto.RegisterType((*Network)(nil), "docker.swarmkit.v1.Network") proto.RegisterType((*Cluster)(nil), "docker.swarmkit.v1.Cluster") 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") } @@ -629,6 +642,23 @@ func (m *Secret) CopyFrom(src interface{}) { github_com_docker_swarmkit_api_deepcopy.Copy(&m.Spec, &o.Spec) } +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 = *o + github_com_docker_swarmkit_api_deepcopy.Copy(&m.Meta, &o.Meta) + github_com_docker_swarmkit_api_deepcopy.Copy(&m.Spec, &o.Spec) +} + func (m *Resource) Copy() *Resource { if m == nil { return nil @@ -1377,6 +1407,46 @@ func (m *Secret) MarshalTo(dAtA []byte) (int, error) { return i, nil } +func (m *Config) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Config) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.ID) > 0 { + dAtA[i] = 0xa + i++ + i = encodeVarintObjects(dAtA, i, uint64(len(m.ID))) + i += copy(dAtA[i:], m.ID) + } + dAtA[i] = 0x12 + i++ + i = encodeVarintObjects(dAtA, i, uint64(m.Meta.Size())) + n38, err := m.Meta.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n38 + dAtA[i] = 0x1a + i++ + i = encodeVarintObjects(dAtA, i, uint64(m.Spec.Size())) + n39, err := m.Spec.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n39 + return i, nil +} + func (m *Resource) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -1401,19 +1471,19 @@ func (m *Resource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintObjects(dAtA, i, uint64(m.Meta.Size())) - n38, err := m.Meta.MarshalTo(dAtA[i:]) + n40, err := m.Meta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n38 + i += n40 dAtA[i] = 0x1a i++ i = encodeVarintObjects(dAtA, i, uint64(m.Annotations.Size())) - n39, err := m.Annotations.MarshalTo(dAtA[i:]) + n41, err := m.Annotations.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n39 + i += n41 if len(m.Kind) > 0 { dAtA[i] = 0x22 i++ @@ -1424,11 +1494,11 @@ func (m *Resource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x2a i++ i = encodeVarintObjects(dAtA, i, uint64(m.Payload.Size())) - n40, err := m.Payload.MarshalTo(dAtA[i:]) + n42, err := m.Payload.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n40 + i += n42 } return i, nil } @@ -1457,19 +1527,19 @@ func (m *Extension) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintObjects(dAtA, i, uint64(m.Meta.Size())) - n41, err := m.Meta.MarshalTo(dAtA[i:]) + n43, err := m.Meta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n41 + i += n43 dAtA[i] = 0x1a i++ i = encodeVarintObjects(dAtA, i, uint64(m.Annotations.Size())) - n42, err := m.Annotations.MarshalTo(dAtA[i:]) + n44, err := m.Annotations.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n42 + i += n44 if len(m.Description) > 0 { dAtA[i] = 0x22 i++ @@ -1783,6 +1853,20 @@ func (m *Secret) Size() (n int) { return n } +func (m *Config) Size() (n int) { + 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) { var l int _ = l @@ -3212,6 +3296,223 @@ func (indexer SecretCustomIndexer) FromObject(obj interface{}) (bool, [][]byte, return customIndexer("", &m.Spec.Annotations) } +type ConfigCheckFunc func(t1, t2 *Config) 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 +} + +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 +} + +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 (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 EventCreateResource struct { @@ -3708,6 +4009,15 @@ func NewStoreAction(c Event) (StoreAction, error) { 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} @@ -3812,6 +4122,19 @@ func EventFromStoreAction(sa StoreAction, oldObject StoreObject) (Event, error) 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: @@ -3904,6 +4227,16 @@ func WatchMessageEvent(c Event) *WatchMessage_Event { } 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: @@ -3948,6 +4281,8 @@ func ConvertWatchArgs(entries []*WatchRequest_WatchEntry) ([]Event, error) { 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": @@ -4120,6 +4455,18 @@ func (this *Secret) String() string { }, "") 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(this.Spec.String(), "ConfigSpec", "ConfigSpec", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} func (this *Resource) String() string { if this == nil { return "nil" @@ -6506,6 +6853,145 @@ func (m *Secret) Unmarshal(dAtA []byte) error { } 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 > 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 > 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 > 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 { + 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 @@ -6983,92 +7469,93 @@ var ( func init() { proto.RegisterFile("objects.proto", fileDescriptorObjects) } var fileDescriptorObjects = []byte{ - // 1390 bytes of a gzipped FileDescriptorProto + // 1405 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xcc, 0x57, 0xc1, 0x6f, 0x1b, 0x45, - 0x17, 0xef, 0xda, 0x1b, 0xdb, 0xfb, 0x9c, 0x58, 0xf9, 0xa6, 0xf9, 0xf2, 0x6d, 0xf3, 0xe5, 0xb3, - 0xf3, 0xb9, 0x02, 0x55, 0xa8, 0x72, 0x4a, 0x29, 0x28, 0x0d, 0x14, 0x6a, 0x27, 0x16, 0xb5, 0x4a, - 0x69, 0x34, 0x2d, 0x2d, 0x37, 0x33, 0xd9, 0x9d, 0xba, 0x8b, 0xd7, 0x3b, 0xab, 0x9d, 0xb1, 0x8b, - 0x6f, 0x88, 0x63, 0xfe, 0x81, 0xdc, 0x38, 0x70, 0xe2, 0x0e, 0x17, 0x2e, 0x9c, 0x7b, 0xe4, 0x84, - 0x38, 0x45, 0xd4, 0xff, 0x05, 0x12, 0x07, 0x34, 0xb3, 0xb3, 0xce, 0xa6, 0x5e, 0x27, 0x2d, 0xaa, - 0x2a, 0x4e, 0x9e, 0xd9, 0xf9, 0xfd, 0xde, 0xbc, 0xf7, 0xe6, 0x37, 0x6f, 0x9e, 0x61, 0x89, 0xed, - 0x7f, 0x49, 0x1d, 0xc1, 0x1b, 0x61, 0xc4, 0x04, 0x43, 0xc8, 0x65, 0x4e, 0x9f, 0x46, 0x0d, 0xfe, - 0x84, 0x44, 0x83, 0xbe, 0x27, 0x1a, 0xa3, 0xb7, 0xd7, 0xca, 0x62, 0x1c, 0x52, 0x0d, 0x58, 0x2b, - 0xf3, 0x90, 0x3a, 0xc9, 0xa4, 0xd6, 0x63, 0xac, 0xe7, 0xd3, 0x4d, 0x35, 0xdb, 0x1f, 0x3e, 0xda, - 0x14, 0xde, 0x80, 0x72, 0x41, 0x06, 0xa1, 0x06, 0xac, 0xf4, 0x58, 0x8f, 0xa9, 0xe1, 0xa6, 0x1c, - 0xe9, 0xaf, 0x17, 0x9e, 0xa7, 0x91, 0x60, 0xac, 0x97, 0xce, 0x87, 0xfe, 0xb0, 0xe7, 0x05, 0x9b, - 0xf1, 0x4f, 0xfc, 0xb1, 0xfe, 0x93, 0x01, 0xe6, 0x1d, 0x2a, 0x08, 0x7a, 0x1f, 0x8a, 0x23, 0x1a, - 0x71, 0x8f, 0x05, 0xb6, 0xb1, 0x61, 0x5c, 0x2a, 0x5f, 0xfd, 0x6f, 0x63, 0xd6, 0xdf, 0xc6, 0x83, - 0x18, 0xd2, 0x32, 0x9f, 0x1e, 0xd5, 0xce, 0xe1, 0x84, 0x81, 0xae, 0x03, 0x38, 0x11, 0x25, 0x82, - 0xba, 0x5d, 0x22, 0xec, 0x9c, 0xe2, 0xaf, 0x35, 0x62, 0x57, 0x1a, 0x89, 0x2b, 0x8d, 0xfb, 0x49, - 0x04, 0xd8, 0xd2, 0xe8, 0xa6, 0x90, 0xd4, 0x61, 0xe8, 0x26, 0xd4, 0xfc, 0xd9, 0x54, 0x8d, 0x6e, - 0x8a, 0xfa, 0x0f, 0x26, 0x98, 0x9f, 0x32, 0x97, 0xa2, 0x55, 0xc8, 0x79, 0xae, 0x72, 0xdb, 0x6a, - 0x15, 0x26, 0x47, 0xb5, 0x5c, 0x67, 0x17, 0xe7, 0x3c, 0x17, 0x5d, 0x05, 0x73, 0x40, 0x05, 0xd1, - 0x0e, 0xd9, 0x59, 0x01, 0xc9, 0xd8, 0x75, 0x34, 0x0a, 0x8b, 0xde, 0x03, 0x53, 0x1e, 0x83, 0xf6, - 0x64, 0x3d, 0x8b, 0x23, 0xf7, 0xbc, 0x17, 0x52, 0x27, 0xe1, 0x49, 0x3c, 0x6a, 0x43, 0xd9, 0xa5, - 0xdc, 0x89, 0xbc, 0x50, 0xc8, 0x1c, 0x9a, 0x8a, 0x7e, 0x71, 0x1e, 0x7d, 0xf7, 0x18, 0x8a, 0xd3, - 0x3c, 0xf4, 0x01, 0x14, 0xb8, 0x20, 0x62, 0xc8, 0xed, 0x05, 0x65, 0xa1, 0x3a, 0xd7, 0x01, 0x85, - 0xd2, 0x2e, 0x68, 0x0e, 0xba, 0x05, 0x95, 0x01, 0x09, 0x48, 0x8f, 0x46, 0x5d, 0x6d, 0xa5, 0xa0, - 0xac, 0xfc, 0x3f, 0x33, 0xf4, 0x18, 0x19, 0x1b, 0xc2, 0x4b, 0x83, 0xf4, 0x14, 0xb5, 0x01, 0x88, - 0x10, 0xc4, 0x79, 0x3c, 0xa0, 0x81, 0xb0, 0x8b, 0xca, 0xca, 0x1b, 0x99, 0xbe, 0x50, 0xf1, 0x84, - 0x45, 0xfd, 0xe6, 0x14, 0x8c, 0x53, 0x44, 0xf4, 0x31, 0x94, 0x1d, 0x1a, 0x09, 0xef, 0x91, 0xe7, - 0x10, 0x41, 0xed, 0x92, 0xb2, 0x53, 0xcb, 0xb2, 0xb3, 0x73, 0x0c, 0xd3, 0x41, 0xa5, 0x99, 0xe8, - 0x0a, 0x98, 0x11, 0xf3, 0xa9, 0x6d, 0x6d, 0x18, 0x97, 0x2a, 0xf3, 0x8f, 0x05, 0x33, 0x9f, 0x62, - 0x85, 0xdc, 0x5e, 0x3d, 0x38, 0xac, 0x23, 0x58, 0x2e, 0x19, 0xcb, 0x86, 0x92, 0x86, 0x71, 0xc5, - 0xf8, 0xdc, 0xf8, 0xc2, 0xa8, 0xff, 0x99, 0x87, 0xe2, 0x3d, 0x1a, 0x8d, 0x3c, 0xe7, 0xd5, 0x0a, - 0xe7, 0xfa, 0x09, 0xe1, 0x64, 0xc6, 0xa8, 0xb7, 0x9d, 0xd1, 0xce, 0x16, 0x94, 0x68, 0xe0, 0x86, - 0xcc, 0x0b, 0x84, 0x16, 0x4e, 0x66, 0x80, 0x6d, 0x8d, 0xc1, 0x53, 0x34, 0x6a, 0xc3, 0x52, 0x7c, - 0x1f, 0xba, 0x27, 0x54, 0xb3, 0x91, 0x45, 0xff, 0x4c, 0x01, 0xf5, 0x71, 0x2f, 0x0e, 0x53, 0x33, - 0xb4, 0x0b, 0x4b, 0x61, 0x44, 0x47, 0x1e, 0x1b, 0xf2, 0xae, 0x0a, 0xa2, 0xf0, 0x42, 0x41, 0xe0, - 0xc5, 0x84, 0x25, 0x67, 0xe8, 0x43, 0x58, 0x94, 0xe4, 0x6e, 0x52, 0x47, 0xe0, 0xcc, 0x3a, 0x82, - 0x55, 0xc9, 0xd3, 0x13, 0x74, 0x17, 0xfe, 0x7d, 0xc2, 0x8b, 0xa9, 0xa1, 0xf2, 0xd9, 0x86, 0xce, - 0xa7, 0x3d, 0xd1, 0x1f, 0xb7, 0xd1, 0xc1, 0x61, 0xbd, 0x02, 0x8b, 0x69, 0x09, 0xd4, 0xbf, 0xcd, - 0x41, 0x29, 0x49, 0x24, 0xba, 0xa6, 0xcf, 0xcc, 0x98, 0x9f, 0xb5, 0x04, 0xab, 0xe2, 0x8d, 0x8f, - 0xeb, 0x1a, 0x2c, 0x84, 0x2c, 0x12, 0xdc, 0xce, 0x6d, 0xe4, 0xe7, 0x5d, 0xd1, 0x3d, 0x16, 0x89, - 0x1d, 0x16, 0x3c, 0xf2, 0x7a, 0x38, 0x06, 0xa3, 0x87, 0x50, 0x1e, 0x79, 0x91, 0x18, 0x12, 0xbf, - 0xeb, 0x85, 0xdc, 0xce, 0x2b, 0xee, 0x9b, 0xa7, 0x6d, 0xd9, 0x78, 0x10, 0xe3, 0x3b, 0x7b, 0xad, - 0xca, 0xe4, 0xa8, 0x06, 0xd3, 0x29, 0xc7, 0xa0, 0x4d, 0x75, 0x42, 0xbe, 0x76, 0x07, 0xac, 0xe9, - 0x0a, 0xba, 0x0c, 0x10, 0xc4, 0x37, 0xb2, 0x3b, 0x55, 0xf6, 0xd2, 0xe4, 0xa8, 0x66, 0xe9, 0x7b, - 0xda, 0xd9, 0xc5, 0x96, 0x06, 0x74, 0x5c, 0x84, 0xc0, 0x24, 0xae, 0x1b, 0x29, 0x9d, 0x5b, 0x58, - 0x8d, 0xeb, 0xdf, 0x17, 0xc0, 0xbc, 0x4f, 0x78, 0xff, 0x75, 0x57, 0x55, 0xb9, 0xe7, 0xcc, 0xcd, - 0xb8, 0x0c, 0xc0, 0x63, 0xbd, 0xc9, 0x70, 0xcc, 0xe3, 0x70, 0xb4, 0x0a, 0x65, 0x38, 0x1a, 0x10, - 0x87, 0xc3, 0x7d, 0x26, 0xd4, 0x25, 0x30, 0xb1, 0x1a, 0xa3, 0x8b, 0x50, 0x0c, 0x98, 0xab, 0xe8, - 0x05, 0x45, 0x87, 0xc9, 0x51, 0xad, 0x20, 0x6b, 0x45, 0x67, 0x17, 0x17, 0xe4, 0x52, 0xc7, 0x95, - 0x65, 0x8a, 0x04, 0x01, 0x13, 0x44, 0xd6, 0x60, 0xae, 0xcb, 0x5d, 0xa6, 0xfa, 0x9b, 0xc7, 0xb0, - 0xa4, 0x4c, 0xa5, 0x98, 0xe8, 0x01, 0x9c, 0x4f, 0xfc, 0x4d, 0x1b, 0x2c, 0xbd, 0x8c, 0x41, 0xa4, - 0x2d, 0xa4, 0x56, 0x52, 0xcf, 0x82, 0x35, 0xff, 0x59, 0x50, 0x19, 0xcc, 0x7a, 0x16, 0x5a, 0xb0, - 0xe4, 0x52, 0xee, 0x45, 0xd4, 0x55, 0x65, 0x82, 0xaa, 0x9b, 0x59, 0xb9, 0xfa, 0xbf, 0xd3, 0x8c, - 0x50, 0xbc, 0xa8, 0x39, 0x6a, 0x86, 0x9a, 0x50, 0xd2, 0xba, 0xe1, 0x76, 0x59, 0x69, 0xf7, 0x05, - 0x9f, 0x83, 0x29, 0xed, 0x44, 0x99, 0x5b, 0x7c, 0xa9, 0x32, 0x77, 0x1d, 0xc0, 0x67, 0xbd, 0xae, - 0x1b, 0x79, 0x23, 0x1a, 0xd9, 0x4b, 0xba, 0x49, 0xc8, 0xe0, 0xee, 0x2a, 0x04, 0xb6, 0x7c, 0xd6, - 0x8b, 0x87, 0x33, 0x45, 0xa9, 0xf2, 0x72, 0x45, 0x69, 0x7b, 0xed, 0xe0, 0xb0, 0xbe, 0x0a, 0x2b, - 0xe9, 0x1a, 0xb2, 0x65, 0xdc, 0x34, 0x6e, 0x19, 0x7b, 0x46, 0xfd, 0x1b, 0x03, 0xfe, 0x35, 0x13, - 0x30, 0x7a, 0x17, 0x8a, 0x3a, 0xe4, 0xd3, 0x3a, 0x29, 0xcd, 0xc3, 0x09, 0x16, 0xad, 0x83, 0x25, - 0xef, 0x1f, 0xe5, 0x9c, 0xc6, 0x95, 0xc5, 0xc2, 0xc7, 0x1f, 0x90, 0x0d, 0x45, 0xe2, 0x7b, 0x44, - 0xae, 0xe5, 0xd5, 0x5a, 0x32, 0xad, 0x7f, 0x97, 0x83, 0xa2, 0x36, 0xf6, 0xba, 0xdf, 0x33, 0xbd, - 0xed, 0xcc, 0xad, 0xbd, 0x01, 0x8b, 0xf1, 0x51, 0x69, 0xb9, 0x99, 0x67, 0x1e, 0x58, 0x39, 0xc6, - 0xc7, 0x52, 0xbb, 0x01, 0xa6, 0x17, 0x92, 0x81, 0x7e, 0xcb, 0x32, 0x77, 0xee, 0xec, 0x35, 0xef, - 0xdc, 0x0d, 0xe3, 0x5b, 0x53, 0x9a, 0x1c, 0xd5, 0x4c, 0xf9, 0x01, 0x2b, 0x5a, 0x66, 0xd5, 0xff, - 0x71, 0x01, 0x8a, 0x3b, 0xfe, 0x90, 0x0b, 0x1a, 0xbd, 0xee, 0x24, 0xe9, 0x6d, 0x67, 0x92, 0xb4, - 0x03, 0xc5, 0x88, 0x31, 0xd1, 0x75, 0xc8, 0x69, 0xf9, 0xc1, 0x8c, 0x89, 0x9d, 0x66, 0xab, 0x22, - 0x89, 0xb2, 0x70, 0xc5, 0x73, 0x5c, 0x90, 0xd4, 0x1d, 0x82, 0x1e, 0xc2, 0x6a, 0x52, 0xee, 0xf7, - 0x19, 0x13, 0x5c, 0x44, 0x24, 0xec, 0xf6, 0xe9, 0x58, 0x36, 0x02, 0xf9, 0x79, 0x8d, 0x5f, 0x3b, - 0x70, 0xa2, 0xb1, 0x4a, 0xde, 0x6d, 0x3a, 0xc6, 0x2b, 0xda, 0x40, 0x2b, 0xe1, 0xdf, 0xa6, 0x63, - 0x8e, 0x3e, 0x82, 0x75, 0x3a, 0x85, 0x49, 0x8b, 0x5d, 0x9f, 0x0c, 0xe4, 0x43, 0xd6, 0x75, 0x7c, - 0xe6, 0xf4, 0x55, 0x2d, 0x35, 0xf1, 0x05, 0x9a, 0x36, 0xf5, 0x49, 0x8c, 0xd8, 0x91, 0x00, 0xc4, - 0xc1, 0xde, 0xf7, 0x89, 0xd3, 0xf7, 0x3d, 0x2e, 0x7b, 0xfb, 0x54, 0x2f, 0x27, 0xcb, 0xa1, 0xf4, - 0x6d, 0xeb, 0x94, 0x6c, 0x35, 0x5a, 0xc7, 0xdc, 0x54, 0x67, 0xc8, 0xdb, 0x81, 0x88, 0xc6, 0xf8, - 0x3f, 0xfb, 0xd9, 0xab, 0xa8, 0x05, 0xe5, 0x61, 0x20, 0xb7, 0x8f, 0x73, 0x60, 0xbd, 0x68, 0x0e, - 0x20, 0x66, 0xc9, 0xc8, 0xd7, 0x46, 0xb0, 0x7e, 0xda, 0xe6, 0x68, 0x19, 0xf2, 0x7d, 0x3a, 0x8e, - 0xf5, 0x83, 0xe5, 0x10, 0xdd, 0x84, 0x85, 0x11, 0xf1, 0x87, 0x54, 0x2b, 0xe7, 0xad, 0xac, 0xfd, - 0xb2, 0x4d, 0xe2, 0x98, 0xb8, 0x9d, 0xdb, 0x32, 0x32, 0x65, 0xfb, 0xb3, 0x01, 0x85, 0x7b, 0xd4, - 0x89, 0xa8, 0x78, 0xa5, 0xaa, 0xdd, 0x3a, 0xa1, 0xda, 0x6a, 0x76, 0x97, 0x27, 0x77, 0x9d, 0x11, - 0xed, 0x1a, 0x94, 0xbc, 0x40, 0xd0, 0x28, 0x20, 0xbe, 0x52, 0x6d, 0x09, 0x4f, 0xe7, 0x99, 0x01, - 0xfc, 0x61, 0x40, 0x09, 0x53, 0xce, 0x86, 0xd1, 0x2b, 0xee, 0xb6, 0x9f, 0x7b, 0xb1, 0xf3, 0x7f, - 0xfb, 0xc5, 0x46, 0x60, 0xf6, 0xbd, 0x40, 0xf7, 0x16, 0x58, 0x8d, 0x51, 0x03, 0x8a, 0x21, 0x19, - 0xfb, 0x8c, 0xb8, 0xba, 0x06, 0xad, 0xcc, 0xfc, 0x21, 0x6d, 0x06, 0x63, 0x9c, 0x80, 0xb6, 0x57, - 0x0e, 0x0e, 0xeb, 0xcb, 0x50, 0x49, 0x47, 0xfe, 0xd8, 0xa8, 0xff, 0x6a, 0x80, 0xd5, 0xfe, 0x4a, - 0xd0, 0x40, 0x35, 0xb7, 0xff, 0xc8, 0xe0, 0x37, 0x66, 0xff, 0xb4, 0x5a, 0x27, 0xfe, 0x8f, 0x66, - 0x1d, 0x6a, 0xcb, 0x7e, 0xfa, 0xac, 0x7a, 0xee, 0xb7, 0x67, 0xd5, 0x73, 0x5f, 0x4f, 0xaa, 0xc6, - 0xd3, 0x49, 0xd5, 0xf8, 0x65, 0x52, 0x35, 0x7e, 0x9f, 0x54, 0x8d, 0xfd, 0x82, 0xca, 0xcf, 0x3b, - 0x7f, 0x05, 0x00, 0x00, 0xff, 0xff, 0x01, 0x4f, 0xd2, 0x2a, 0xfa, 0x10, 0x00, 0x00, + 0x17, 0xef, 0xda, 0x1b, 0xdb, 0xfb, 0x9c, 0x58, 0xf9, 0xa6, 0xf9, 0xf2, 0x6d, 0xf3, 0x05, 0x3b, + 0xb8, 0x02, 0x55, 0xa8, 0x72, 0x4a, 0x29, 0x28, 0x0d, 0x14, 0x6a, 0x27, 0x11, 0xb5, 0x4a, 0x69, + 0x34, 0x2d, 0x2d, 0x37, 0x33, 0xd9, 0x9d, 0xba, 0x8b, 0xd7, 0x3b, 0xab, 0x9d, 0xb1, 0x8b, 0x6f, + 0x88, 0x63, 0xfe, 0x81, 0xdc, 0x38, 0xf4, 0xc4, 0x1d, 0x2e, 0x5c, 0x38, 0xf7, 0xc8, 0x09, 0x71, + 0x8a, 0xa8, 0xff, 0x0b, 0x24, 0x0e, 0x68, 0x66, 0x67, 0x9d, 0x4d, 0xbd, 0x4e, 0x5a, 0x54, 0x45, + 0x9c, 0x3c, 0xb3, 0xf3, 0xfb, 0xbd, 0x79, 0xef, 0xcd, 0x6f, 0xde, 0x3c, 0xc3, 0x02, 0xdb, 0xfb, + 0x9a, 0x3a, 0x82, 0x37, 0xc2, 0x88, 0x09, 0x86, 0x90, 0xcb, 0x9c, 0x1e, 0x8d, 0x1a, 0xfc, 0x09, + 0x89, 0xfa, 0x3d, 0x4f, 0x34, 0x86, 0xef, 0xae, 0x94, 0xc5, 0x28, 0xa4, 0x1a, 0xb0, 0x52, 0xe6, + 0x21, 0x75, 0x92, 0x49, 0xad, 0xcb, 0x58, 0xd7, 0xa7, 0xeb, 0x6a, 0xb6, 0x37, 0x78, 0xb4, 0x2e, + 0xbc, 0x3e, 0xe5, 0x82, 0xf4, 0x43, 0x0d, 0x58, 0xea, 0xb2, 0x2e, 0x53, 0xc3, 0x75, 0x39, 0xd2, + 0x5f, 0x2f, 0xbc, 0x48, 0x23, 0xc1, 0x48, 0x2f, 0x9d, 0x0f, 0xfd, 0x41, 0xd7, 0x0b, 0xd6, 0xe3, + 0x9f, 0xf8, 0x63, 0xfd, 0x67, 0x03, 0xcc, 0x3b, 0x54, 0x10, 0xf4, 0x21, 0x14, 0x87, 0x34, 0xe2, + 0x1e, 0x0b, 0x6c, 0x63, 0xcd, 0xb8, 0x54, 0xbe, 0xfa, 0xff, 0xc6, 0xb4, 0xbf, 0x8d, 0x07, 0x31, + 0xa4, 0x65, 0x3e, 0x3b, 0xac, 0x9d, 0xc3, 0x09, 0x03, 0x5d, 0x07, 0x70, 0x22, 0x4a, 0x04, 0x75, + 0x3b, 0x44, 0xd8, 0x39, 0xc5, 0x5f, 0x69, 0xc4, 0xae, 0x34, 0x12, 0x57, 0x1a, 0xf7, 0x93, 0x08, + 0xb0, 0xa5, 0xd1, 0x4d, 0x21, 0xa9, 0x83, 0xd0, 0x4d, 0xa8, 0xf9, 0xd3, 0xa9, 0x1a, 0xdd, 0x14, + 0xf5, 0x1f, 0x4d, 0x30, 0x3f, 0x67, 0x2e, 0x45, 0xcb, 0x90, 0xf3, 0x5c, 0xe5, 0xb6, 0xd5, 0x2a, + 0x8c, 0x0f, 0x6b, 0xb9, 0xf6, 0x36, 0xce, 0x79, 0x2e, 0xba, 0x0a, 0x66, 0x9f, 0x0a, 0xa2, 0x1d, + 0xb2, 0xb3, 0x02, 0x92, 0xb1, 0xeb, 0x68, 0x14, 0x16, 0x7d, 0x00, 0xa6, 0x3c, 0x06, 0xed, 0xc9, + 0x6a, 0x16, 0x47, 0xee, 0x79, 0x2f, 0xa4, 0x4e, 0xc2, 0x93, 0x78, 0xb4, 0x03, 0x65, 0x97, 0x72, + 0x27, 0xf2, 0x42, 0x21, 0x73, 0x68, 0x2a, 0xfa, 0xc5, 0x59, 0xf4, 0xed, 0x23, 0x28, 0x4e, 0xf3, + 0xd0, 0x47, 0x50, 0xe0, 0x82, 0x88, 0x01, 0xb7, 0xe7, 0x94, 0x85, 0xea, 0x4c, 0x07, 0x14, 0x4a, + 0xbb, 0xa0, 0x39, 0xe8, 0x16, 0x54, 0xfa, 0x24, 0x20, 0x5d, 0x1a, 0x75, 0xb4, 0x95, 0x82, 0xb2, + 0xf2, 0x66, 0x66, 0xe8, 0x31, 0x32, 0x36, 0x84, 0x17, 0xfa, 0xe9, 0x29, 0xda, 0x01, 0x20, 0x42, + 0x10, 0xe7, 0x71, 0x9f, 0x06, 0xc2, 0x2e, 0x2a, 0x2b, 0x6f, 0x65, 0xfa, 0x42, 0xc5, 0x13, 0x16, + 0xf5, 0x9a, 0x13, 0x30, 0x4e, 0x11, 0xd1, 0xa7, 0x50, 0x76, 0x68, 0x24, 0xbc, 0x47, 0x9e, 0x43, + 0x04, 0xb5, 0x4b, 0xca, 0x4e, 0x2d, 0xcb, 0xce, 0xd6, 0x11, 0x4c, 0x07, 0x95, 0x66, 0xa2, 0x2b, + 0x60, 0x46, 0xcc, 0xa7, 0xb6, 0xb5, 0x66, 0x5c, 0xaa, 0xcc, 0x3e, 0x16, 0xcc, 0x7c, 0x8a, 0x15, + 0x72, 0x73, 0x79, 0xff, 0xa0, 0x8e, 0x60, 0xb1, 0x64, 0x2c, 0x1a, 0x4a, 0x1a, 0xc6, 0x15, 0xe3, + 0x4b, 0xe3, 0x2b, 0xa3, 0xfe, 0x57, 0x1e, 0x8a, 0xf7, 0x68, 0x34, 0xf4, 0x9c, 0xd7, 0x2b, 0x9c, + 0xeb, 0xc7, 0x84, 0x93, 0x19, 0xa3, 0xde, 0x76, 0x4a, 0x3b, 0x1b, 0x50, 0xa2, 0x81, 0x1b, 0x32, + 0x2f, 0x10, 0x5a, 0x38, 0x99, 0x01, 0xee, 0x68, 0x0c, 0x9e, 0xa0, 0xd1, 0x0e, 0x2c, 0xc4, 0xf7, + 0xa1, 0x73, 0x4c, 0x35, 0x6b, 0x59, 0xf4, 0x2f, 0x14, 0x50, 0x1f, 0xf7, 0xfc, 0x20, 0x35, 0x43, + 0xdb, 0xb0, 0x10, 0x46, 0x74, 0xe8, 0xb1, 0x01, 0xef, 0xa8, 0x20, 0x0a, 0x2f, 0x15, 0x04, 0x9e, + 0x4f, 0x58, 0x72, 0x86, 0x3e, 0x86, 0x79, 0x49, 0xee, 0x24, 0x75, 0x04, 0x4e, 0xad, 0x23, 0x58, + 0x95, 0x3c, 0x3d, 0x41, 0x77, 0xe1, 0xbf, 0xc7, 0xbc, 0x98, 0x18, 0x2a, 0x9f, 0x6e, 0xe8, 0x7c, + 0xda, 0x13, 0xfd, 0x71, 0x13, 0xed, 0x1f, 0xd4, 0x2b, 0x30, 0x9f, 0x96, 0x40, 0xfd, 0xfb, 0x1c, + 0x94, 0x92, 0x44, 0xa2, 0x6b, 0xfa, 0xcc, 0x8c, 0xd9, 0x59, 0x4b, 0xb0, 0x2a, 0xde, 0xf8, 0xb8, + 0xae, 0xc1, 0x5c, 0xc8, 0x22, 0xc1, 0xed, 0xdc, 0x5a, 0x7e, 0xd6, 0x15, 0xdd, 0x65, 0x91, 0xd8, + 0x62, 0xc1, 0x23, 0xaf, 0x8b, 0x63, 0x30, 0x7a, 0x08, 0xe5, 0xa1, 0x17, 0x89, 0x01, 0xf1, 0x3b, + 0x5e, 0xc8, 0xed, 0xbc, 0xe2, 0xbe, 0x7d, 0xd2, 0x96, 0x8d, 0x07, 0x31, 0xbe, 0xbd, 0xdb, 0xaa, + 0x8c, 0x0f, 0x6b, 0x30, 0x99, 0x72, 0x0c, 0xda, 0x54, 0x3b, 0xe4, 0x2b, 0x77, 0xc0, 0x9a, 0xac, + 0xa0, 0xcb, 0x00, 0x41, 0x7c, 0x23, 0x3b, 0x13, 0x65, 0x2f, 0x8c, 0x0f, 0x6b, 0x96, 0xbe, 0xa7, + 0xed, 0x6d, 0x6c, 0x69, 0x40, 0xdb, 0x45, 0x08, 0x4c, 0xe2, 0xba, 0x91, 0xd2, 0xb9, 0x85, 0xd5, + 0xb8, 0xfe, 0x43, 0x01, 0xcc, 0xfb, 0x84, 0xf7, 0xce, 0xba, 0xaa, 0xca, 0x3d, 0xa7, 0x6e, 0xc6, + 0x65, 0x00, 0x1e, 0xeb, 0x4d, 0x86, 0x63, 0x1e, 0x85, 0xa3, 0x55, 0x28, 0xc3, 0xd1, 0x80, 0x38, + 0x1c, 0xee, 0x33, 0xa1, 0x2e, 0x81, 0x89, 0xd5, 0x18, 0x5d, 0x84, 0x62, 0xc0, 0x5c, 0x45, 0x2f, + 0x28, 0x3a, 0x8c, 0x0f, 0x6b, 0x05, 0x59, 0x2b, 0xda, 0xdb, 0xb8, 0x20, 0x97, 0xda, 0xae, 0x2c, + 0x53, 0x24, 0x08, 0x98, 0x20, 0xb2, 0x06, 0x73, 0x5d, 0xee, 0x32, 0xd5, 0xdf, 0x3c, 0x82, 0x25, + 0x65, 0x2a, 0xc5, 0x44, 0x0f, 0xe0, 0x7c, 0xe2, 0x6f, 0xda, 0x60, 0xe9, 0x55, 0x0c, 0x22, 0x6d, + 0x21, 0xb5, 0x92, 0x7a, 0x16, 0xac, 0xd9, 0xcf, 0x82, 0xca, 0x60, 0xd6, 0xb3, 0xd0, 0x82, 0x05, + 0x97, 0x72, 0x2f, 0xa2, 0xae, 0x2a, 0x13, 0x54, 0xdd, 0xcc, 0xca, 0xd5, 0x37, 0x4e, 0x32, 0x42, + 0xf1, 0xbc, 0xe6, 0xa8, 0x19, 0x6a, 0x42, 0x49, 0xeb, 0x86, 0xdb, 0x65, 0xa5, 0xdd, 0x97, 0x7c, + 0x0e, 0x26, 0xb4, 0x63, 0x65, 0x6e, 0xfe, 0x95, 0xca, 0xdc, 0x75, 0x00, 0x9f, 0x75, 0x3b, 0x6e, + 0xe4, 0x0d, 0x69, 0x64, 0x2f, 0xe8, 0x26, 0x21, 0x83, 0xbb, 0xad, 0x10, 0xd8, 0xf2, 0x59, 0x37, + 0x1e, 0x4e, 0x15, 0xa5, 0xca, 0xab, 0x15, 0xa5, 0xcd, 0x95, 0xfd, 0x83, 0xfa, 0x32, 0x2c, 0xa5, + 0x6b, 0xc8, 0x86, 0x71, 0xd3, 0xb8, 0x65, 0xec, 0x1a, 0xf5, 0xef, 0x0c, 0xf8, 0xcf, 0x54, 0xc0, + 0xe8, 0x7d, 0x28, 0xea, 0x90, 0x4f, 0xea, 0xa4, 0x34, 0x0f, 0x27, 0x58, 0xb4, 0x0a, 0x96, 0xbc, + 0x7f, 0x94, 0x73, 0x1a, 0x57, 0x16, 0x0b, 0x1f, 0x7d, 0x40, 0x36, 0x14, 0x89, 0xef, 0x11, 0xb9, + 0x96, 0x57, 0x6b, 0xc9, 0xb4, 0xfe, 0x34, 0x07, 0x45, 0x6d, 0xec, 0xac, 0xdf, 0x33, 0xbd, 0xed, + 0xd4, 0xad, 0xbd, 0x01, 0xf3, 0xf1, 0x51, 0x69, 0xb9, 0x99, 0xa7, 0x1e, 0x58, 0x39, 0xc6, 0xc7, + 0x52, 0xbb, 0x01, 0xa6, 0x17, 0x92, 0xbe, 0x7e, 0xcb, 0x32, 0x77, 0x6e, 0xef, 0x36, 0xef, 0xdc, + 0x0d, 0xe3, 0x5b, 0x53, 0x1a, 0x1f, 0xd6, 0x4c, 0xf9, 0x01, 0x2b, 0x5a, 0x66, 0xd5, 0xff, 0x69, + 0x0e, 0x8a, 0x5b, 0xfe, 0x80, 0x0b, 0x1a, 0x9d, 0x75, 0x92, 0xf4, 0xb6, 0x53, 0x49, 0xda, 0x82, + 0x62, 0xc4, 0x98, 0xe8, 0x38, 0xe4, 0xa4, 0xfc, 0x60, 0xc6, 0xc4, 0x56, 0xb3, 0x55, 0x91, 0x44, + 0x59, 0xb8, 0xe2, 0x39, 0x2e, 0x48, 0xea, 0x16, 0x41, 0x0f, 0x61, 0x39, 0x29, 0xf7, 0x7b, 0x8c, + 0x09, 0x2e, 0x22, 0x12, 0x76, 0x7a, 0x74, 0x24, 0x1b, 0x81, 0xfc, 0xac, 0xc6, 0x6f, 0x27, 0x70, + 0xa2, 0x91, 0x4a, 0xde, 0x6d, 0x3a, 0xc2, 0x4b, 0xda, 0x40, 0x2b, 0xe1, 0xdf, 0xa6, 0x23, 0x8e, + 0x3e, 0x81, 0x55, 0x3a, 0x81, 0x49, 0x8b, 0x1d, 0x9f, 0xf4, 0xe5, 0x43, 0xd6, 0x71, 0x7c, 0xe6, + 0xf4, 0x54, 0x2d, 0x35, 0xf1, 0x05, 0x9a, 0x36, 0xf5, 0x59, 0x8c, 0xd8, 0x92, 0x00, 0xc4, 0xc1, + 0xde, 0xf3, 0x89, 0xd3, 0xf3, 0x3d, 0x2e, 0x7b, 0xfb, 0x54, 0x2f, 0x27, 0xcb, 0xa1, 0xf4, 0x6d, + 0xe3, 0x84, 0x6c, 0x35, 0x5a, 0x47, 0xdc, 0x54, 0x67, 0xc8, 0x77, 0x02, 0x11, 0x8d, 0xf0, 0xff, + 0xf6, 0xb2, 0x57, 0x51, 0x0b, 0xca, 0x83, 0x40, 0x6e, 0x1f, 0xe7, 0xc0, 0x7a, 0xd9, 0x1c, 0x40, + 0xcc, 0x92, 0x91, 0xaf, 0x0c, 0x61, 0xf5, 0xa4, 0xcd, 0xd1, 0x22, 0xe4, 0x7b, 0x74, 0x14, 0xeb, + 0x07, 0xcb, 0x21, 0xba, 0x09, 0x73, 0x43, 0xe2, 0x0f, 0xa8, 0x56, 0xce, 0x3b, 0x59, 0xfb, 0x65, + 0x9b, 0xc4, 0x31, 0x71, 0x33, 0xb7, 0x61, 0x64, 0xca, 0xf6, 0x17, 0x03, 0x0a, 0xf7, 0xa8, 0x13, + 0x51, 0xf1, 0x5a, 0x55, 0xbb, 0x71, 0x4c, 0xb5, 0xd5, 0xec, 0x2e, 0x4f, 0xee, 0x3a, 0x25, 0xda, + 0x15, 0x28, 0x79, 0x81, 0xa0, 0x51, 0x40, 0x7c, 0xa5, 0xda, 0x12, 0x9e, 0xcc, 0x33, 0x03, 0x78, + 0x6a, 0x40, 0x21, 0x6e, 0x83, 0xce, 0x3a, 0x80, 0x78, 0xd7, 0x17, 0x03, 0xc8, 0x74, 0xf2, 0x4f, + 0x03, 0x4a, 0x98, 0x72, 0x36, 0x88, 0x5e, 0xf3, 0x5f, 0x82, 0x17, 0xda, 0x8a, 0xfc, 0x3f, 0x6e, + 0x2b, 0x10, 0x98, 0x3d, 0x2f, 0xd0, 0x0d, 0x10, 0x56, 0x63, 0xd4, 0x80, 0x62, 0x48, 0x46, 0x3e, + 0x23, 0xae, 0x2e, 0x94, 0x4b, 0x53, 0xff, 0x9a, 0x9b, 0xc1, 0x08, 0x27, 0xa0, 0xcd, 0xa5, 0xfd, + 0x83, 0xfa, 0x22, 0x54, 0xd2, 0x91, 0x3f, 0x36, 0xea, 0xbf, 0x19, 0x60, 0xed, 0x7c, 0x23, 0x68, + 0xa0, 0x3a, 0xf0, 0x7f, 0x65, 0xf0, 0x6b, 0xd3, 0xff, 0xac, 0xad, 0x63, 0x7f, 0x9a, 0xb3, 0x0e, + 0xb5, 0x65, 0x3f, 0x7b, 0x5e, 0x3d, 0xf7, 0xfb, 0xf3, 0xea, 0xb9, 0x6f, 0xc7, 0x55, 0xe3, 0xd9, + 0xb8, 0x6a, 0xfc, 0x3a, 0xae, 0x1a, 0x7f, 0x8c, 0xab, 0xc6, 0x5e, 0x41, 0xe5, 0xe7, 0xbd, 0xbf, + 0x03, 0x00, 0x00, 0xff, 0xff, 0xa3, 0x7d, 0xca, 0x6a, 0x9f, 0x11, 0x00, 0x00, } diff --git a/vendor/github.com/docker/swarmkit/api/objects.proto b/vendor/github.com/docker/swarmkit/api/objects.proto index 9c0525e724..7136a88840 100644 --- a/vendor/github.com/docker/swarmkit/api/objects.proto +++ b/vendor/github.com/docker/swarmkit/api/objects.proto @@ -328,9 +328,7 @@ message Cluster { } // Secret represents a secret that should be passed to a container or a node, -// and is immutable. It wraps the `spec` provided by the user with useful -// information that is generated from the secret data in the `spec`, such as -// the digest and size of the secret data. +// and is immutable. message Secret { option (docker.protobuf.plugin.store_object) = { watch_selectors: { @@ -355,6 +353,29 @@ message Secret { bool internal = 4; } +// Config represents a set of configuration files that should be passed to a +// container. +message Config { + option (docker.protobuf.plugin.store_object) = { + watch_selectors: { + id: true + id_prefix: true + name: true + name_prefix: true + custom: true + custom_prefix: true + } + }; + + string id = 1; + + Meta meta = 2 [(gogoproto.nullable) = false]; + + // 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]; +} + // 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. diff --git a/vendor/github.com/docker/swarmkit/api/raft.pb.go b/vendor/github.com/docker/swarmkit/api/raft.pb.go index c7dcde9e9d..2347ef9267 100644 --- a/vendor/github.com/docker/swarmkit/api/raft.pb.go +++ b/vendor/github.com/docker/swarmkit/api/raft.pb.go @@ -175,6 +175,7 @@ type StoreAction struct { // *StoreAction_Secret // *StoreAction_Resource // *StoreAction_Extension + // *StoreAction_Config Target isStoreAction_Target `protobuf_oneof:"target"` } @@ -212,6 +213,9 @@ type StoreAction_Resource struct { type StoreAction_Extension struct { Extension *Extension `protobuf:"bytes,9,opt,name=extension,oneof"` } +type StoreAction_Config struct { + Config *Config `protobuf:"bytes,10,opt,name=config,oneof"` +} func (*StoreAction_Node) isStoreAction_Target() {} func (*StoreAction_Service) isStoreAction_Target() {} @@ -221,6 +225,7 @@ 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 (m *StoreAction) GetTarget() isStoreAction_Target { if m != nil { @@ -285,6 +290,13 @@ func (m *StoreAction) GetExtension() *Extension { return nil } +func (m *StoreAction) GetConfig() *Config { + if x, ok := m.GetTarget().(*StoreAction_Config); ok { + return x.Config + } + return nil +} + // XXX_OneofFuncs is for the internal use of the proto package. func (*StoreAction) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { return _StoreAction_OneofMarshaler, _StoreAction_OneofUnmarshaler, _StoreAction_OneofSizer, []interface{}{ @@ -296,6 +308,7 @@ func (*StoreAction) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) e (*StoreAction_Secret)(nil), (*StoreAction_Resource)(nil), (*StoreAction_Extension)(nil), + (*StoreAction_Config)(nil), } } @@ -343,6 +356,11 @@ func _StoreAction_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { if err := b.EncodeMessage(x.Extension); err != nil { return err } + case *StoreAction_Config: + _ = b.EncodeVarint(10<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Config); err != nil { + return err + } case nil: default: return fmt.Errorf("StoreAction.Target has unexpected type %T", x) @@ -417,6 +435,14 @@ func _StoreAction_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Bu err := b.DecodeMessage(msg) m.Target = &StoreAction_Extension{msg} return true, err + case 10: // target.config + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Config) + err := b.DecodeMessage(msg) + m.Target = &StoreAction_Config{msg} + return true, err default: return false, nil } @@ -466,6 +492,11 @@ func _StoreAction_OneofSizer(msg proto.Message) (n int) { n += proto.SizeVarint(9<<3 | proto.WireBytes) n += proto.SizeVarint(uint64(s)) n += s + case *StoreAction_Config: + s := proto.Size(x.Config) + n += proto.SizeVarint(10<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s case nil: default: panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) @@ -757,6 +788,12 @@ func (m *StoreAction) CopyFrom(src interface{}) { } github_com_docker_swarmkit_api_deepcopy.Copy(v.Extension, o.GetExtension()) m.Target = &v + case *StoreAction_Config: + v := StoreAction_Config{ + Config: &Config{}, + } + github_com_docker_swarmkit_api_deepcopy.Copy(v.Config, o.GetConfig()) + m.Target = &v } } @@ -1409,6 +1446,20 @@ func (m *StoreAction_Extension) MarshalTo(dAtA []byte) (int, error) { } return i, nil } +func (m *StoreAction_Config) MarshalTo(dAtA []byte) (int, error) { + i := 0 + if m.Config != nil { + dAtA[i] = 0x52 + i++ + i = encodeVarintRaft(dAtA, i, uint64(m.Config.Size())) + n15, err := m.Config.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n15 + } + return i, nil +} func encodeFixed64Raft(dAtA []byte, offset int, v uint64) int { dAtA[offset] = uint8(v) dAtA[offset+1] = uint8(v >> 8) @@ -1922,6 +1973,15 @@ func (m *StoreAction_Extension) Size() (n int) { } return n } +func (m *StoreAction_Config) Size() (n int) { + var l int + _ = l + if m.Config != nil { + l = m.Config.Size() + n += 1 + l + sovRaft(uint64(l)) + } + return n +} func sovRaft(x uint64) (n int) { for { @@ -2131,6 +2191,16 @@ func (this *StoreAction_Extension) String() string { }, "") 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 valueToStringRaft(v interface{}) string { rv := reflect.ValueOf(v) if rv.IsNil() { @@ -3355,6 +3425,38 @@ func (m *StoreAction) Unmarshal(dAtA []byte) error { } 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 > l { + return io.ErrUnexpectedEOF + } + v := &Config{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.Target = &StoreAction_Config{v} + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipRaft(dAtA[iNdEx:]) @@ -3484,64 +3586,65 @@ var ( func init() { proto.RegisterFile("raft.proto", fileDescriptorRaft) } var fileDescriptorRaft = []byte{ - // 933 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x8c, 0x96, 0x41, 0x73, 0xdb, 0x44, - 0x14, 0xc7, 0x25, 0x5b, 0xb5, 0x9b, 0xe7, 0x26, 0xce, 0x6c, 0x48, 0x50, 0x45, 0x51, 0x5c, 0x95, - 0x99, 0xba, 0x1d, 0x22, 0x0f, 0x86, 0x19, 0x98, 0x42, 0x0f, 0x71, 0xe2, 0x19, 0x9b, 0xb6, 0x4e, - 0x47, 0x49, 0xa0, 0xb7, 0x20, 0x4b, 0x5b, 0x57, 0xd8, 0xd6, 0x9a, 0xdd, 0xb5, 0x03, 0x17, 0xa6, - 0x47, 0x26, 0x27, 0x66, 0x98, 0x01, 0x2e, 0x3d, 0xc1, 0xb9, 0x1f, 0x80, 0x4f, 0x90, 0xe1, 0xc4, - 0x0d, 0x4e, 0x19, 0xea, 0x0f, 0x00, 0x5f, 0x81, 0xd9, 0x95, 0x64, 0x07, 0x47, 0x76, 0x73, 0xb1, - 0xd7, 0xbb, 0xbf, 0xff, 0xfb, 0xef, 0xee, 0xd3, 0x7b, 0x32, 0x00, 0x75, 0x9f, 0x72, 0x7b, 0x40, - 0x09, 0x27, 0x08, 0xf9, 0xc4, 0xeb, 0x62, 0x6a, 0xb3, 0x63, 0x97, 0xf6, 0xbb, 0x01, 0xb7, 0x47, - 0xef, 0x19, 0xcb, 0xa4, 0xfd, 0x25, 0xf6, 0x38, 0x8b, 0x10, 0xa3, 0xc0, 0xbf, 0x19, 0xe0, 0xe4, - 0xc7, 0x56, 0x27, 0xe0, 0xcf, 0x86, 0x6d, 0xdb, 0x23, 0xfd, 0x8a, 0x47, 0x28, 0x26, 0xac, 0x82, - 0xb9, 0xe7, 0x57, 0x44, 0x48, 0xf9, 0x31, 0x68, 0x57, 0xa6, 0xe1, 0x8d, 0x37, 0x3a, 0xa4, 0x43, - 0xe4, 0xb0, 0x22, 0x46, 0xf1, 0xec, 0xda, 0xa0, 0x37, 0xec, 0x04, 0x61, 0x25, 0xfa, 0x8a, 0x26, - 0xad, 0x97, 0x2a, 0x80, 0xe3, 0x3e, 0xe5, 0x8f, 0x70, 0xbf, 0x8d, 0x29, 0xba, 0x05, 0x79, 0x11, - 0xe7, 0x28, 0xf0, 0x75, 0xb5, 0xa4, 0x96, 0xb5, 0x1a, 0x8c, 0xcf, 0x36, 0x73, 0x02, 0x68, 0xee, - 0x3a, 0x39, 0xb1, 0xd4, 0xf4, 0x05, 0x14, 0x12, 0x1f, 0x0b, 0x28, 0x53, 0x52, 0xcb, 0x4b, 0x11, - 0xd4, 0x22, 0x3e, 0x16, 0x90, 0x58, 0x6a, 0xfa, 0x08, 0x81, 0xe6, 0xfa, 0x3e, 0xd5, 0xb3, 0x82, - 0x70, 0xe4, 0x18, 0xd5, 0x20, 0xc7, 0xb8, 0xcb, 0x87, 0x4c, 0xd7, 0x4a, 0x6a, 0xb9, 0x50, 0x7d, - 0xc7, 0xbe, 0x78, 0x0f, 0xf6, 0x74, 0x37, 0xfb, 0x92, 0xad, 0x69, 0xa7, 0x67, 0x9b, 0x8a, 0x13, - 0x2b, 0xad, 0x9b, 0x50, 0xf8, 0x94, 0x04, 0xa1, 0x83, 0xbf, 0x1a, 0x62, 0xc6, 0x27, 0x36, 0xea, - 0xd4, 0xc6, 0xfa, 0x51, 0x85, 0x6b, 0x11, 0xc3, 0x06, 0x24, 0x64, 0xf8, 0x72, 0xa7, 0xfa, 0x08, - 0xf2, 0x7d, 0x69, 0xcb, 0xf4, 0x4c, 0x29, 0x5b, 0x2e, 0x54, 0xcd, 0xc5, 0xbb, 0x73, 0x12, 0x1c, - 0xdd, 0x86, 0x22, 0xc5, 0x7d, 0x32, 0xc2, 0xfe, 0x51, 0x12, 0x21, 0x5b, 0xca, 0x96, 0x35, 0x67, - 0x25, 0x9e, 0x8e, 0x04, 0xcc, 0xaa, 0xc1, 0xb5, 0x87, 0xd8, 0x1d, 0xe1, 0x64, 0xf3, 0x55, 0xd0, - 0xc4, 0x6d, 0xc9, 0x4d, 0xbd, 0xde, 0x4f, 0xb2, 0x56, 0x11, 0x96, 0xe3, 0x18, 0xd1, 0xe1, 0xac, - 0x87, 0x70, 0xfd, 0x31, 0x25, 0x1e, 0x66, 0x2c, 0x62, 0x19, 0x73, 0x3b, 0x13, 0x87, 0x3b, 0xe2, - 0x50, 0x72, 0x26, 0x36, 0x29, 0xda, 0xd1, 0xe3, 0x62, 0x27, 0x60, 0xb2, 0x7e, 0x4f, 0x7b, 0xfe, - 0x93, 0xa5, 0x58, 0x37, 0xc0, 0x48, 0x8b, 0x16, 0x7b, 0x7d, 0x02, 0xeb, 0x0e, 0x66, 0xa4, 0x37, - 0xc2, 0xdb, 0xbe, 0x4f, 0x05, 0x14, 0xfb, 0x5c, 0xe6, 0x86, 0xad, 0x77, 0x61, 0x63, 0x56, 0x1d, - 0x27, 0x28, 0x2d, 0x8b, 0x3d, 0x58, 0x6b, 0x86, 0x1c, 0xd3, 0xd0, 0xed, 0x89, 0x38, 0x89, 0xd3, - 0x06, 0x64, 0x26, 0x26, 0xb9, 0xf1, 0xd9, 0x66, 0xa6, 0xb9, 0xeb, 0x64, 0x02, 0x1f, 0xdd, 0x87, - 0x9c, 0xeb, 0xf1, 0x80, 0x84, 0x71, 0xf6, 0x36, 0xd3, 0x6e, 0x73, 0x9f, 0x13, 0x8a, 0xb7, 0x25, - 0x96, 0x3c, 0x56, 0x91, 0xc8, 0xfa, 0x5e, 0x83, 0xc2, 0xb9, 0x55, 0xf4, 0xf1, 0x24, 0x9c, 0xb0, - 0x5a, 0xa9, 0xde, 0x7a, 0x4d, 0xb8, 0x07, 0x41, 0xe8, 0x27, 0xc1, 0x90, 0x1d, 0xe7, 0x35, 0x23, - 0xaf, 0x5c, 0x4f, 0x93, 0x8a, 0x6a, 0x69, 0x28, 0x51, 0x4e, 0xd1, 0x87, 0x90, 0x67, 0x98, 0x8e, - 0x02, 0x0f, 0xcb, 0x72, 0x29, 0x54, 0xdf, 0x4a, 0x75, 0x8b, 0x90, 0x86, 0xe2, 0x24, 0xb4, 0x30, - 0xe2, 0x2e, 0xeb, 0xc6, 0xe5, 0x94, 0x6a, 0x74, 0xe0, 0xb2, 0xae, 0x30, 0x12, 0x9c, 0x30, 0x0a, - 0x31, 0x3f, 0x26, 0xb4, 0xab, 0x5f, 0x99, 0x6f, 0xd4, 0x8a, 0x10, 0x61, 0x14, 0xd3, 0x42, 0xe8, - 0xf5, 0x86, 0x8c, 0x63, 0xaa, 0xe7, 0xe6, 0x0b, 0x77, 0x22, 0x44, 0x08, 0x63, 0x1a, 0x7d, 0x00, - 0x39, 0x86, 0x3d, 0x8a, 0xb9, 0x9e, 0x97, 0x3a, 0x23, 0xfd, 0x64, 0x82, 0x68, 0x88, 0x22, 0x97, - 0x23, 0x74, 0x0f, 0xae, 0x52, 0xcc, 0xc8, 0x90, 0x7a, 0x58, 0xbf, 0x2a, 0x75, 0x37, 0x52, 0x8b, - 0x23, 0x66, 0x1a, 0x8a, 0x33, 0xe1, 0xd1, 0x7d, 0x58, 0xc2, 0x5f, 0x73, 0x1c, 0x32, 0x91, 0xbc, - 0x25, 0x29, 0x7e, 0x3b, 0x4d, 0x5c, 0x4f, 0xa0, 0x86, 0xe2, 0x4c, 0x15, 0xb5, 0xab, 0x90, 0xe3, - 0x2e, 0xed, 0x60, 0x7e, 0xf7, 0x5f, 0x15, 0x8a, 0x33, 0x19, 0x46, 0xb7, 0x21, 0x7f, 0xd8, 0x7a, - 0xd0, 0xda, 0xfb, 0xbc, 0xb5, 0xaa, 0x18, 0xc6, 0xc9, 0x8b, 0xd2, 0xc6, 0x0c, 0x71, 0x18, 0x76, - 0x43, 0x72, 0x1c, 0xa2, 0x2a, 0xac, 0xed, 0x1f, 0xec, 0x39, 0xf5, 0xa3, 0xed, 0x9d, 0x83, 0xe6, - 0x5e, 0xeb, 0x68, 0xc7, 0xa9, 0x6f, 0x1f, 0xd4, 0x57, 0x55, 0xe3, 0xfa, 0xc9, 0x8b, 0xd2, 0xfa, - 0x8c, 0x68, 0x87, 0x62, 0x97, 0xe3, 0x0b, 0x9a, 0xc3, 0xc7, 0xbb, 0x42, 0x93, 0x49, 0xd5, 0x1c, - 0x0e, 0xfc, 0x34, 0x8d, 0x53, 0x7f, 0xb4, 0xf7, 0x59, 0x7d, 0x35, 0x9b, 0xaa, 0x71, 0x64, 0x3b, - 0x32, 0xde, 0xfc, 0xee, 0x17, 0x53, 0xf9, 0xed, 0x57, 0x73, 0xf6, 0x74, 0xd5, 0x1f, 0x32, 0xa0, - 0x89, 0x5a, 0x43, 0x27, 0x2a, 0xa0, 0x8b, 0x6d, 0x00, 0x6d, 0xa5, 0xdd, 0xe3, 0xdc, 0xe6, 0x63, - 0xd8, 0x97, 0xc5, 0xe3, 0xee, 0xb2, 0xfe, 0xfb, 0xcb, 0x7f, 0x7e, 0xce, 0x14, 0x61, 0x59, 0xf2, - 0x5b, 0x7d, 0x37, 0x74, 0x3b, 0x98, 0xa2, 0x6f, 0x61, 0xe5, 0xff, 0x6d, 0x03, 0xdd, 0x99, 0xf7, - 0x30, 0x5c, 0x68, 0x4c, 0xc6, 0xdd, 0xcb, 0xa0, 0x0b, 0xfd, 0xab, 0x7f, 0xaa, 0xb0, 0x32, 0x6d, - 0xc3, 0xec, 0x59, 0x30, 0x40, 0x5f, 0x80, 0x26, 0x5e, 0x30, 0x28, 0xb5, 0xc9, 0x9c, 0x7b, 0x3d, - 0x19, 0xa5, 0xf9, 0xc0, 0xe2, 0x43, 0x7b, 0x70, 0x45, 0xb6, 0x79, 0x94, 0x1a, 0xe1, 0xfc, 0x5b, - 0xc4, 0xb8, 0xb9, 0x80, 0x58, 0x68, 0x52, 0xd3, 0x4f, 0x5f, 0x99, 0xca, 0x5f, 0xaf, 0x4c, 0xe5, - 0xf9, 0xd8, 0x54, 0x4f, 0xc7, 0xa6, 0xfa, 0xc7, 0xd8, 0x54, 0xff, 0x1e, 0x9b, 0xea, 0x93, 0xec, - 0x13, 0xad, 0x9d, 0x93, 0xff, 0x10, 0xde, 0xff, 0x2f, 0x00, 0x00, 0xff, 0xff, 0x98, 0x55, 0x8d, - 0x81, 0xb9, 0x08, 0x00, 0x00, + // 949 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x8c, 0x96, 0x4f, 0x6f, 0x1b, 0x45, + 0x18, 0xc6, 0x77, 0xed, 0xad, 0x9d, 0xbc, 0x6e, 0xe2, 0x68, 0x42, 0xc2, 0x76, 0x29, 0x8e, 0xbb, + 0x45, 0xaa, 0x5b, 0x91, 0xb5, 0x30, 0x48, 0xa0, 0x42, 0x0f, 0xb1, 0x63, 0xc9, 0xa6, 0xad, 0x53, + 0x6d, 0x12, 0xe8, 0x2d, 0xac, 0x77, 0x27, 0xee, 0x62, 0x7b, 0xc7, 0xcc, 0x8c, 0x1d, 0xb8, 0xa0, + 0x1e, 0x51, 0xae, 0x48, 0xc0, 0xa5, 0x27, 0x38, 0xf7, 0x03, 0xf0, 0x01, 0x50, 0xc4, 0x89, 0x1b, + 0x9c, 0x22, 0xea, 0x0f, 0x00, 0x5f, 0x01, 0xcd, 0xec, 0xae, 0x1d, 0x9c, 0xb5, 0x9b, 0x8b, 0x3d, + 0x9e, 0xf9, 0x3d, 0xef, 0xf3, 0xce, 0xbf, 0x77, 0x0c, 0x40, 0x9d, 0x63, 0x6e, 0x0d, 0x28, 0xe1, + 0x04, 0x21, 0x8f, 0xb8, 0x5d, 0x4c, 0x2d, 0x76, 0xe2, 0xd0, 0x7e, 0xd7, 0xe7, 0xd6, 0xe8, 0x3d, + 0x63, 0x85, 0xb4, 0xbf, 0xc4, 0x2e, 0x67, 0x21, 0x62, 0xe4, 0xf8, 0x37, 0x03, 0x1c, 0xff, 0xd8, + 0xee, 0xf8, 0xfc, 0xd9, 0xb0, 0x6d, 0xb9, 0xa4, 0x5f, 0x76, 0x09, 0xc5, 0x84, 0x95, 0x31, 0x77, + 0xbd, 0xb2, 0x08, 0x29, 0x3f, 0x06, 0xed, 0xf2, 0x34, 0xbc, 0xf1, 0x46, 0x87, 0x74, 0x88, 0x6c, + 0x96, 0x45, 0x2b, 0xea, 0x5d, 0x1f, 0xf4, 0x86, 0x1d, 0x3f, 0x28, 0x87, 0x5f, 0x61, 0xa7, 0xf9, + 0x52, 0x05, 0xb0, 0x9d, 0x63, 0xfe, 0x18, 0xf7, 0xdb, 0x98, 0xa2, 0xdb, 0x90, 0x15, 0x71, 0x8e, + 0x7c, 0x4f, 0x57, 0x8b, 0x6a, 0x49, 0xab, 0xc2, 0xf8, 0x7c, 0x2b, 0x23, 0x80, 0xe6, 0xae, 0x9d, + 0x11, 0x43, 0x4d, 0x4f, 0x40, 0x01, 0xf1, 0xb0, 0x80, 0x52, 0x45, 0xb5, 0xb4, 0x1c, 0x42, 0x2d, + 0xe2, 0x61, 0x01, 0x89, 0xa1, 0xa6, 0x87, 0x10, 0x68, 0x8e, 0xe7, 0x51, 0x3d, 0x2d, 0x08, 0x5b, + 0xb6, 0x51, 0x15, 0x32, 0x8c, 0x3b, 0x7c, 0xc8, 0x74, 0xad, 0xa8, 0x96, 0x72, 0x95, 0x77, 0xac, + 0xcb, 0xeb, 0x60, 0x4d, 0xb3, 0xd9, 0x97, 0x6c, 0x55, 0x3b, 0x3b, 0xdf, 0x52, 0xec, 0x48, 0x69, + 0xde, 0x82, 0xdc, 0xa7, 0xc4, 0x0f, 0x6c, 0xfc, 0xd5, 0x10, 0x33, 0x3e, 0xb1, 0x51, 0xa7, 0x36, + 0xe6, 0x0f, 0x2a, 0x5c, 0x0f, 0x19, 0x36, 0x20, 0x01, 0xc3, 0x57, 0x9b, 0xd5, 0x47, 0x90, 0xed, + 0x4b, 0x5b, 0xa6, 0xa7, 0x8a, 0xe9, 0x52, 0xae, 0x52, 0x58, 0x9c, 0x9d, 0x1d, 0xe3, 0xe8, 0x0e, + 0xe4, 0x29, 0xee, 0x93, 0x11, 0xf6, 0x8e, 0xe2, 0x08, 0xe9, 0x62, 0xba, 0xa4, 0xd9, 0xab, 0x51, + 0x77, 0x28, 0x60, 0x66, 0x15, 0xae, 0x3f, 0xc2, 0xce, 0x08, 0xc7, 0xc9, 0x57, 0x40, 0x13, 0xab, + 0x25, 0x93, 0x7a, 0xbd, 0x9f, 0x64, 0xcd, 0x3c, 0xac, 0x44, 0x31, 0xc2, 0xc9, 0x99, 0x8f, 0xe0, + 0xc6, 0x13, 0x4a, 0x5c, 0xcc, 0x58, 0xc8, 0x32, 0xe6, 0x74, 0x26, 0x0e, 0x77, 0xc5, 0xa4, 0x64, + 0x4f, 0x64, 0x92, 0xb7, 0xc2, 0xe3, 0x62, 0xc5, 0x60, 0x3c, 0x7e, 0x5f, 0x7b, 0xfe, 0xa3, 0xa9, + 0x98, 0x37, 0xc1, 0x48, 0x8a, 0x16, 0x79, 0x7d, 0x02, 0x1b, 0x36, 0x66, 0xa4, 0x37, 0xc2, 0x3b, + 0x9e, 0x47, 0x05, 0x14, 0xf9, 0x5c, 0x65, 0x85, 0xcd, 0x77, 0x61, 0x73, 0x56, 0x1d, 0x6d, 0x50, + 0xd2, 0x2e, 0xf6, 0x60, 0xbd, 0x19, 0x70, 0x4c, 0x03, 0xa7, 0x27, 0xe2, 0xc4, 0x4e, 0x9b, 0x90, + 0x9a, 0x98, 0x64, 0xc6, 0xe7, 0x5b, 0xa9, 0xe6, 0xae, 0x9d, 0xf2, 0x3d, 0xf4, 0x00, 0x32, 0x8e, + 0xcb, 0x7d, 0x12, 0x44, 0xbb, 0xb7, 0x95, 0xb4, 0x9a, 0xfb, 0x9c, 0x50, 0xbc, 0x23, 0xb1, 0xf8, + 0x58, 0x85, 0x22, 0xf3, 0x37, 0x0d, 0x72, 0x17, 0x46, 0xd1, 0xc7, 0x93, 0x70, 0xc2, 0x6a, 0xb5, + 0x72, 0xfb, 0x35, 0xe1, 0x1e, 0xfa, 0x81, 0x17, 0x07, 0x43, 0x56, 0xb4, 0xaf, 0x29, 0xb9, 0xe4, + 0x7a, 0x92, 0x54, 0xdc, 0x96, 0x86, 0x12, 0xee, 0x29, 0xfa, 0x10, 0xb2, 0x0c, 0xd3, 0x91, 0xef, + 0x62, 0x79, 0x5d, 0x72, 0x95, 0xb7, 0x12, 0xdd, 0x42, 0xa4, 0xa1, 0xd8, 0x31, 0x2d, 0x8c, 0xb8, + 0xc3, 0xba, 0xd1, 0x75, 0x4a, 0x34, 0x3a, 0x70, 0x58, 0x57, 0x18, 0x09, 0x4e, 0x18, 0x05, 0x98, + 0x9f, 0x10, 0xda, 0xd5, 0xaf, 0xcd, 0x37, 0x6a, 0x85, 0x88, 0x30, 0x8a, 0x68, 0x21, 0x74, 0x7b, + 0x43, 0xc6, 0x31, 0xd5, 0x33, 0xf3, 0x85, 0xb5, 0x10, 0x11, 0xc2, 0x88, 0x46, 0x1f, 0x40, 0x86, + 0x61, 0x97, 0x62, 0xae, 0x67, 0xa5, 0xce, 0x48, 0x9e, 0x99, 0x20, 0x1a, 0xe2, 0x92, 0xcb, 0x16, + 0xba, 0x0f, 0x4b, 0x14, 0x33, 0x32, 0xa4, 0x2e, 0xd6, 0x97, 0xa4, 0xee, 0x66, 0xe2, 0xe5, 0x88, + 0x98, 0x86, 0x62, 0x4f, 0x78, 0xf4, 0x00, 0x96, 0xf1, 0xd7, 0x1c, 0x07, 0x4c, 0x6c, 0xde, 0xb2, + 0x14, 0xbf, 0x9d, 0x24, 0xae, 0xc7, 0x50, 0x43, 0xb1, 0xa7, 0x0a, 0x91, 0xb0, 0x4b, 0x82, 0x63, + 0xbf, 0xa3, 0xc3, 0xfc, 0x84, 0x6b, 0x92, 0x10, 0x09, 0x87, 0x6c, 0x75, 0x09, 0x32, 0xdc, 0xa1, + 0x1d, 0xcc, 0xef, 0xfd, 0xab, 0x42, 0x7e, 0xe6, 0x5c, 0xa0, 0x3b, 0x90, 0x3d, 0x6c, 0x3d, 0x6c, + 0xed, 0x7d, 0xde, 0x5a, 0x53, 0x0c, 0xe3, 0xf4, 0x45, 0x71, 0x73, 0x86, 0x38, 0x0c, 0xba, 0x01, + 0x39, 0x09, 0x50, 0x05, 0xd6, 0xf7, 0x0f, 0xf6, 0xec, 0xfa, 0xd1, 0x4e, 0xed, 0xa0, 0xb9, 0xd7, + 0x3a, 0xaa, 0xd9, 0xf5, 0x9d, 0x83, 0xfa, 0x9a, 0x6a, 0xdc, 0x38, 0x7d, 0x51, 0xdc, 0x98, 0x11, + 0xd5, 0x28, 0x76, 0x38, 0xbe, 0xa4, 0x39, 0x7c, 0xb2, 0x2b, 0x34, 0xa9, 0x44, 0xcd, 0xe1, 0xc0, + 0x4b, 0xd2, 0xd8, 0xf5, 0xc7, 0x7b, 0x9f, 0xd5, 0xd7, 0xd2, 0x89, 0x1a, 0x5b, 0x16, 0x31, 0xe3, + 0xcd, 0xef, 0x7e, 0x2e, 0x28, 0xbf, 0xfe, 0x52, 0x98, 0x9d, 0x5d, 0xe5, 0xfb, 0x14, 0x68, 0xe2, + 0x86, 0xa2, 0x53, 0x15, 0xd0, 0xe5, 0xe2, 0x81, 0xb6, 0x93, 0x56, 0x70, 0x6e, 0xc9, 0x32, 0xac, + 0xab, 0xe2, 0x51, 0x4d, 0xda, 0xf8, 0xfd, 0xe5, 0x3f, 0x3f, 0xa5, 0xf2, 0xb0, 0x22, 0xf9, 0xed, + 0xbe, 0x13, 0x38, 0x1d, 0x4c, 0xd1, 0xb7, 0xb0, 0xfa, 0xff, 0x62, 0x83, 0xee, 0xce, 0x3b, 0x42, + 0x97, 0xca, 0x99, 0x71, 0xef, 0x2a, 0xe8, 0x42, 0xff, 0xca, 0x9f, 0x2a, 0xac, 0x4e, 0x8b, 0x37, + 0x7b, 0xe6, 0x0f, 0xd0, 0x17, 0xa0, 0x89, 0x67, 0x09, 0x25, 0x96, 0xa6, 0x0b, 0x8f, 0x9a, 0x51, + 0x9c, 0x0f, 0x2c, 0x9e, 0xb4, 0x0b, 0xd7, 0xe4, 0xe3, 0x80, 0x12, 0x23, 0x5c, 0x7c, 0x7b, 0x8c, + 0x5b, 0x0b, 0x88, 0x85, 0x26, 0x55, 0xfd, 0xec, 0x55, 0x41, 0xf9, 0xeb, 0x55, 0x41, 0x79, 0x3e, + 0x2e, 0xa8, 0x67, 0xe3, 0x82, 0xfa, 0xc7, 0xb8, 0xa0, 0xfe, 0x3d, 0x2e, 0xa8, 0x4f, 0xd3, 0x4f, + 0xb5, 0x76, 0x46, 0xfe, 0xaf, 0x78, 0xff, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x70, 0x31, 0xfd, + 0xe7, 0xef, 0x08, 0x00, 0x00, } diff --git a/vendor/github.com/docker/swarmkit/api/raft.proto b/vendor/github.com/docker/swarmkit/api/raft.proto index baa7185b02..6f49ea8d5c 100644 --- a/vendor/github.com/docker/swarmkit/api/raft.proto +++ b/vendor/github.com/docker/swarmkit/api/raft.proto @@ -127,5 +127,6 @@ message StoreAction { Secret secret = 7; Resource resource = 8; Extension extension = 9; + Config config = 10; } } diff --git a/vendor/github.com/docker/swarmkit/api/snapshot.pb.go b/vendor/github.com/docker/swarmkit/api/snapshot.pb.go index 245e8da0cd..a346ead712 100644 --- a/vendor/github.com/docker/swarmkit/api/snapshot.pb.go +++ b/vendor/github.com/docker/swarmkit/api/snapshot.pb.go @@ -51,6 +51,7 @@ type StoreSnapshot struct { Secrets []*Secret `protobuf:"bytes,6,rep,name=secrets" json:"secrets,omitempty"` Resources []*Resource `protobuf:"bytes,7,rep,name=resources" json:"resources,omitempty"` Extensions []*Extension `protobuf:"bytes,8,rep,name=extensions" json:"extensions,omitempty"` + Configs []*Config `protobuf:"bytes,9,rep,name=configs" json:"configs,omitempty"` } func (m *StoreSnapshot) Reset() { *m = StoreSnapshot{} } @@ -161,6 +162,14 @@ func (m *StoreSnapshot) CopyFrom(src interface{}) { } } + if o.Configs != nil { + m.Configs = make([]*Config, len(o.Configs)) + for i := range m.Configs { + m.Configs[i] = &Config{} + github_com_docker_swarmkit_api_deepcopy.Copy(m.Configs[i], o.Configs[i]) + } + } + } func (m *ClusterSnapshot) Copy() *ClusterSnapshot { @@ -319,6 +328,18 @@ func (m *StoreSnapshot) MarshalTo(dAtA []byte) (int, error) { i += n } } + if len(m.Configs) > 0 { + for _, msg := range m.Configs { + dAtA[i] = 0x4a + i++ + i = encodeVarintSnapshot(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } return i, nil } @@ -487,6 +508,12 @@ func (m *StoreSnapshot) Size() (n int) { 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)) + } + } return n } @@ -548,6 +575,7 @@ func (this *StoreSnapshot) String() string { `Secrets:` + strings.Replace(fmt.Sprintf("%v", this.Secrets), "Secret", "Secret", 1) + `,`, `Resources:` + strings.Replace(fmt.Sprintf("%v", this.Resources), "Resource", "Resource", 1) + `,`, `Extensions:` + strings.Replace(fmt.Sprintf("%v", this.Extensions), "Extension", "Extension", 1) + `,`, + `Configs:` + strings.Replace(fmt.Sprintf("%v", this.Configs), "Config", "Config", 1) + `,`, `}`, }, "") return s @@ -860,6 +888,37 @@ func (m *StoreSnapshot) Unmarshal(dAtA []byte) error { 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 > 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 := skipSnapshot(dAtA[iNdEx:]) @@ -1261,34 +1320,35 @@ var ( func init() { proto.RegisterFile("snapshot.proto", fileDescriptorSnapshot) } var fileDescriptorSnapshot = []byte{ - // 449 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x7c, 0x93, 0xbf, 0x6f, 0xd3, 0x40, - 0x14, 0xc7, 0x73, 0xf9, 0xe5, 0xf0, 0xaa, 0x16, 0x38, 0x31, 0x9c, 0x02, 0x98, 0x10, 0x18, 0x32, - 0x19, 0x08, 0x48, 0x20, 0xa4, 0x32, 0x14, 0x31, 0x30, 0xd0, 0xe1, 0x82, 0x2a, 0x56, 0xc7, 0x79, - 0x6d, 0x83, 0x89, 0x2f, 0xba, 0x77, 0x75, 0x19, 0xf9, 0xf3, 0x22, 0xb1, 0x30, 0x32, 0x21, 0xea, - 0x85, 0x7f, 0x03, 0xdd, 0x9d, 0x6d, 0x22, 0xe1, 0x74, 0xbb, 0x44, 0x9f, 0xcf, 0xfb, 0xbe, 0xbb, - 0xf7, 0x0c, 0x07, 0x94, 0xc5, 0x6b, 0x3a, 0x57, 0x26, 0x5a, 0x6b, 0x65, 0x14, 0xe7, 0x0b, 0x95, - 0xa4, 0xa8, 0x23, 0xba, 0x8c, 0xf5, 0x2a, 0x5d, 0x9a, 0x28, 0x7f, 0x36, 0xdc, 0x57, 0xf3, 0xcf, - 0x98, 0x18, 0xf2, 0xc8, 0x10, 0x74, 0x7c, 0x5a, 0xe2, 0xc3, 0x3b, 0x67, 0xea, 0x4c, 0xb9, 0xe3, - 0x13, 0x7b, 0xf2, 0xff, 0x8e, 0xbf, 0x77, 0x60, 0x7f, 0x66, 0x94, 0xc6, 0x59, 0x59, 0x9c, 0x47, - 0xd0, 0xcb, 0xd4, 0x02, 0x49, 0xb0, 0x51, 0x67, 0xb2, 0x37, 0x15, 0xd1, 0xff, 0x31, 0xd1, 0xb1, - 0x5a, 0xa0, 0xf4, 0x18, 0x7f, 0x09, 0x03, 0x42, 0x9d, 0x2f, 0x13, 0x24, 0xd1, 0x76, 0xca, 0xdd, - 0x26, 0x65, 0xe6, 0x19, 0x59, 0xc3, 0x56, 0xcc, 0xd0, 0x5c, 0x2a, 0x9d, 0x92, 0xe8, 0xec, 0x16, - 0x8f, 0x3d, 0x23, 0x6b, 0xd8, 0x76, 0x68, 0x62, 0x4a, 0x49, 0x74, 0x77, 0x77, 0xf8, 0x31, 0xa6, - 0x54, 0x7a, 0xcc, 0x06, 0x25, 0x5f, 0x2e, 0xc8, 0xa0, 0x26, 0xd1, 0xdb, 0x1d, 0xf4, 0xd6, 0x33, - 0xb2, 0x86, 0xf9, 0x0b, 0x08, 0x08, 0x13, 0x8d, 0x86, 0x44, 0xdf, 0x79, 0xc3, 0xe6, 0x9b, 0x59, - 0x44, 0x56, 0x28, 0x7f, 0x0d, 0x37, 0x34, 0x92, 0xba, 0xd0, 0xf6, 0x45, 0x02, 0xe7, 0xdd, 0x6b, - 0xf2, 0x64, 0x09, 0xc9, 0x7f, 0x38, 0x3f, 0x04, 0xc0, 0xaf, 0x06, 0x33, 0x5a, 0xaa, 0x8c, 0xc4, - 0xc0, 0xc9, 0xf7, 0x9b, 0xe4, 0x77, 0x15, 0x25, 0xb7, 0x84, 0x31, 0xc2, 0xcd, 0xf2, 0x16, 0xf5, - 0x38, 0x5f, 0x41, 0xb0, 0xc2, 0xd5, 0xdc, 0xde, 0xdd, 0x0f, 0x34, 0x6c, 0xec, 0x25, 0x3e, 0x35, - 0x1f, 0x1c, 0x26, 0x2b, 0x9c, 0x0b, 0x08, 0x34, 0xae, 0x54, 0x8e, 0x0b, 0x37, 0xd7, 0xae, 0xac, - 0x7e, 0x8e, 0xff, 0x30, 0x18, 0xd4, 0x01, 0x6f, 0x20, 0xc8, 0x51, 0xdb, 0x7c, 0xc1, 0x46, 0x6c, - 0x72, 0x30, 0x7d, 0xdc, 0xf8, 0x48, 0xd5, 0xee, 0x9e, 0x78, 0x56, 0x56, 0x12, 0x7f, 0x0f, 0x50, - 0x26, 0x9e, 0x2f, 0xd7, 0xa2, 0x3d, 0x62, 0x93, 0xbd, 0xe9, 0xa3, 0x6b, 0xe6, 0x53, 0x55, 0x3a, - 0xea, 0x6e, 0x7e, 0x3d, 0x68, 0xc9, 0x2d, 0x99, 0x1f, 0x42, 0x8f, 0xec, 0x2e, 0x8b, 0x8e, 0xab, - 0xf2, 0xb0, 0xb1, 0x91, 0xed, 0x65, 0x2f, 0x6b, 0x78, 0x6b, 0x7c, 0x1b, 0x82, 0xb2, 0x3b, 0xde, - 0x87, 0xf6, 0xc9, 0xd3, 0x5b, 0xad, 0x23, 0xb1, 0xb9, 0x0a, 0x5b, 0x3f, 0xaf, 0xc2, 0xd6, 0xb7, - 0x22, 0x64, 0x9b, 0x22, 0x64, 0x3f, 0x8a, 0x90, 0xfd, 0x2e, 0x42, 0xf6, 0xa9, 0x3d, 0xef, 0xbb, - 0x2f, 0xe8, 0xf9, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x91, 0xfe, 0xed, 0x18, 0x98, 0x03, 0x00, - 0x00, + // 466 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x7c, 0x93, 0x3f, 0x6f, 0x13, 0x4d, + 0x10, 0x87, 0xbd, 0xfe, 0x77, 0xce, 0x44, 0xc9, 0xfb, 0xb2, 0xa2, 0x58, 0x19, 0x38, 0x8c, 0xa1, + 0x70, 0x75, 0x80, 0x41, 0x02, 0x21, 0x85, 0x22, 0x11, 0x05, 0x05, 0x29, 0xd6, 0x28, 0xa2, 0x3d, + 0x9f, 0xc7, 0xce, 0x71, 0xf8, 0xd6, 0xda, 0xd9, 0x38, 0x94, 0xf0, 0xed, 0x5c, 0x52, 0x52, 0x21, + 0xe2, 0x86, 0xaf, 0x81, 0x76, 0xf7, 0xee, 0xb0, 0xc4, 0x99, 0x6e, 0x6d, 0x3d, 0xcf, 0xcc, 0x6f, + 0xf7, 0x66, 0xe0, 0x98, 0xf2, 0x78, 0x45, 0x97, 0xca, 0x44, 0x2b, 0xad, 0x8c, 0xe2, 0x7c, 0xa6, + 0x92, 0x0c, 0x75, 0x44, 0xd7, 0xb1, 0x5e, 0x66, 0xa9, 0x89, 0xd6, 0x4f, 0xfb, 0x47, 0x6a, 0xfa, + 0x11, 0x13, 0x43, 0x1e, 0xe9, 0x83, 0x8e, 0xe7, 0x05, 0xde, 0xbf, 0xbd, 0x50, 0x0b, 0xe5, 0x8e, + 0x8f, 0xed, 0xc9, 0xff, 0x3b, 0xfc, 0xda, 0x86, 0xa3, 0x89, 0x51, 0x1a, 0x27, 0x45, 0x71, 0x1e, + 0x41, 0x27, 0x57, 0x33, 0x24, 0xc1, 0x06, 0xad, 0xd1, 0xe1, 0x58, 0x44, 0x7f, 0xb7, 0x89, 0xce, + 0xd5, 0x0c, 0xa5, 0xc7, 0xf8, 0x0b, 0xe8, 0x11, 0xea, 0x75, 0x9a, 0x20, 0x89, 0xa6, 0x53, 0xee, + 0xd4, 0x29, 0x13, 0xcf, 0xc8, 0x0a, 0xb6, 0x62, 0x8e, 0xe6, 0x5a, 0xe9, 0x8c, 0x44, 0x6b, 0xbf, + 0x78, 0xee, 0x19, 0x59, 0xc1, 0x36, 0xa1, 0x89, 0x29, 0x23, 0xd1, 0xde, 0x9f, 0xf0, 0x7d, 0x4c, + 0x99, 0xf4, 0x98, 0x6d, 0x94, 0x7c, 0xba, 0x22, 0x83, 0x9a, 0x44, 0x67, 0x7f, 0xa3, 0x33, 0xcf, + 0xc8, 0x0a, 0xe6, 0xcf, 0x21, 0x20, 0x4c, 0x34, 0x1a, 0x12, 0x5d, 0xe7, 0xf5, 0xeb, 0x6f, 0x66, + 0x11, 0x59, 0xa2, 0xfc, 0x15, 0x1c, 0x68, 0x24, 0x75, 0xa5, 0xed, 0x8b, 0x04, 0xce, 0xbb, 0x5b, + 0xe7, 0xc9, 0x02, 0x92, 0x7f, 0x70, 0x7e, 0x02, 0x80, 0x9f, 0x0d, 0xe6, 0x94, 0xaa, 0x9c, 0x44, + 0xcf, 0xc9, 0xf7, 0xea, 0xe4, 0x37, 0x25, 0x25, 0x77, 0x04, 0x1b, 0x38, 0x51, 0xf9, 0x3c, 0x5d, + 0x90, 0x38, 0xd8, 0x1f, 0xf8, 0xcc, 0x21, 0xb2, 0x44, 0x87, 0x08, 0xff, 0x15, 0x77, 0xaf, 0x86, + 0xe0, 0x25, 0x04, 0x4b, 0x5c, 0x4e, 0xed, 0x8b, 0xf9, 0x31, 0x08, 0x6b, 0x6f, 0x10, 0xcf, 0xcd, + 0x3b, 0x87, 0xc9, 0x12, 0xe7, 0x02, 0x02, 0x8d, 0x4b, 0xb5, 0xc6, 0x99, 0x9b, 0x86, 0xb6, 0x2c, + 0x7f, 0x0e, 0x7f, 0x31, 0xe8, 0x55, 0x0d, 0x5e, 0x43, 0xb0, 0x46, 0x6d, 0x53, 0x0b, 0x36, 0x60, + 0xa3, 0xe3, 0xf1, 0xa3, 0xda, 0xa7, 0x2d, 0x27, 0xfe, 0xc2, 0xb3, 0xb2, 0x94, 0xf8, 0x5b, 0x80, + 0xa2, 0xe3, 0x65, 0xba, 0x12, 0xcd, 0x01, 0x1b, 0x1d, 0x8e, 0x1f, 0xfe, 0xe3, 0xab, 0x96, 0x95, + 0x4e, 0xdb, 0x9b, 0x1f, 0xf7, 0x1b, 0x72, 0x47, 0xe6, 0x27, 0xd0, 0x21, 0xbb, 0x01, 0xa2, 0xe5, + 0xaa, 0x3c, 0xa8, 0x0d, 0xb2, 0xbb, 0x22, 0x45, 0x0d, 0x6f, 0x0d, 0x6f, 0x41, 0x50, 0xa4, 0xe3, + 0x5d, 0x68, 0x5e, 0x3c, 0xf9, 0xbf, 0x71, 0x2a, 0x36, 0x37, 0x61, 0xe3, 0xfb, 0x4d, 0xd8, 0xf8, + 0xb2, 0x0d, 0xd9, 0x66, 0x1b, 0xb2, 0x6f, 0xdb, 0x90, 0xfd, 0xdc, 0x86, 0xec, 0x43, 0x73, 0xda, + 0x75, 0x7b, 0xf7, 0xec, 0x77, 0x00, 0x00, 0x00, 0xff, 0xff, 0x8f, 0x41, 0x5b, 0x51, 0xce, 0x03, + 0x00, 0x00, } diff --git a/vendor/github.com/docker/swarmkit/api/snapshot.proto b/vendor/github.com/docker/swarmkit/api/snapshot.proto index 9d341b072c..3d59acae43 100644 --- a/vendor/github.com/docker/swarmkit/api/snapshot.proto +++ b/vendor/github.com/docker/swarmkit/api/snapshot.proto @@ -22,6 +22,7 @@ message StoreSnapshot { repeated Secret secrets = 6; repeated Resource resources = 7; repeated Extension extensions = 8; + repeated Config configs = 9; } // ClusterSnapshot stores cluster membership information in snapshots. diff --git a/vendor/github.com/docker/swarmkit/api/specs.pb.go b/vendor/github.com/docker/swarmkit/api/specs.pb.go index fd0185739a..24596d22a2 100644 --- a/vendor/github.com/docker/swarmkit/api/specs.pb.go +++ b/vendor/github.com/docker/swarmkit/api/specs.pb.go @@ -522,6 +522,8 @@ type ContainerSpec struct { User string `protobuf:"bytes,7,opt,name=user,proto3" json:"user,omitempty"` // Groups specifies supplementary groups available to the user. Groups []string `protobuf:"bytes,11,rep,name=groups" json:"groups,omitempty"` + // Privileges specifies security configuration/permissions. + Privileges *Privileges `protobuf:"bytes,22,opt,name=privileges" json:"privileges,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"` @@ -544,6 +546,9 @@ type ContainerSpec struct { // SecretReference contains references to zero or more secrets that // will be exposed to the container. Secrets []*SecretReference `protobuf:"bytes,12,rep,name=secrets" json:"secrets,omitempty"` + // ConfigReference contains references to zero or more configs that + // will be exposed to the container. + Configs []*ConfigReference `protobuf:"bytes,21,rep,name=configs" json:"configs,omitempty"` // Hosts allow additional entries to be specified in /etc/hosts // that associates IP addresses with hostnames. // Detailed documentation is available in: @@ -679,6 +684,19 @@ func (m *SecretSpec) Reset() { *m = SecretSpec{} } func (*SecretSpec) ProtoMessage() {} func (*SecretSpec) Descriptor() ([]byte, []int) { return fileDescriptorSpecs, []int{11} } +// ConfigSpec specifies user-provided configuration files. +type ConfigSpec struct { + Annotations Annotations `protobuf:"bytes,1,opt,name=annotations" json:"annotations"` + // 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... + Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"` +} + +func (m *ConfigSpec) Reset() { *m = ConfigSpec{} } +func (*ConfigSpec) ProtoMessage() {} +func (*ConfigSpec) Descriptor() ([]byte, []int) { return fileDescriptorSpecs, []int{12} } + func init() { proto.RegisterType((*NodeSpec)(nil), "docker.swarmkit.v1.NodeSpec") proto.RegisterType((*ServiceSpec)(nil), "docker.swarmkit.v1.ServiceSpec") @@ -694,6 +712,7 @@ func init() { 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.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.EndpointSpec_ResolutionMode", EndpointSpec_ResolutionMode_name, EndpointSpec_ResolutionMode_value) @@ -930,6 +949,10 @@ func (m *ContainerSpec) CopyFrom(src interface{}) { copy(m.Groups, o.Groups) } + if o.Privileges != nil { + m.Privileges = &Privileges{} + github_com_docker_swarmkit_api_deepcopy.Copy(m.Privileges, o.Privileges) + } if o.Mounts != nil { m.Mounts = make([]Mount, len(o.Mounts)) for i := range m.Mounts { @@ -953,6 +976,14 @@ func (m *ContainerSpec) CopyFrom(src interface{}) { } } + if o.Configs != nil { + m.Configs = make([]*ConfigReference, len(o.Configs)) + for i := range m.Configs { + m.Configs[i] = &ConfigReference{} + github_com_docker_swarmkit_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) @@ -1103,6 +1134,26 @@ func (m *SecretSpec) CopyFrom(src interface{}) { } } +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) + *m = *o + github_com_docker_swarmkit_api_deepcopy.Copy(&m.Annotations, &o.Annotations) + if o.Data != nil { + m.Data = make([]byte, len(o.Data)) + copy(m.Data, o.Data) + } +} + func (m *NodeSpec) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -1719,6 +1770,32 @@ func (m *ContainerSpec) MarshalTo(dAtA []byte) (int, error) { i = encodeVarintSpecs(dAtA, i, uint64(len(m.StopSignal))) i += copy(dAtA[i:], m.StopSignal) } + if len(m.Configs) > 0 { + for _, msg := range m.Configs { + dAtA[i] = 0xaa + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintSpecs(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if m.Privileges != nil { + dAtA[i] = 0xb2 + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintSpecs(dAtA, i, uint64(m.Privileges.Size())) + n23, err := m.Privileges.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n23 + } return i, nil } @@ -1864,20 +1941,20 @@ func (m *NetworkSpec) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintSpecs(dAtA, i, uint64(m.Annotations.Size())) - n23, err := m.Annotations.MarshalTo(dAtA[i:]) + n24, err := m.Annotations.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n23 + i += n24 if m.DriverConfig != nil { dAtA[i] = 0x12 i++ i = encodeVarintSpecs(dAtA, i, uint64(m.DriverConfig.Size())) - n24, err := m.DriverConfig.MarshalTo(dAtA[i:]) + n25, err := m.DriverConfig.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n24 + i += n25 } if m.Ipv6Enabled { dAtA[i] = 0x18 @@ -1903,11 +1980,11 @@ func (m *NetworkSpec) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x2a i++ i = encodeVarintSpecs(dAtA, i, uint64(m.IPAM.Size())) - n25, err := m.IPAM.MarshalTo(dAtA[i:]) + n26, err := m.IPAM.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n25 + i += n26 } if m.Attachable { dAtA[i] = 0x30 @@ -1950,67 +2027,67 @@ func (m *ClusterSpec) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintSpecs(dAtA, i, uint64(m.Annotations.Size())) - n26, err := m.Annotations.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n26 - dAtA[i] = 0x12 - i++ - i = encodeVarintSpecs(dAtA, i, uint64(m.AcceptancePolicy.Size())) - n27, err := m.AcceptancePolicy.MarshalTo(dAtA[i:]) + n27, err := m.Annotations.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n27 - dAtA[i] = 0x1a + dAtA[i] = 0x12 i++ - i = encodeVarintSpecs(dAtA, i, uint64(m.Orchestration.Size())) - n28, err := m.Orchestration.MarshalTo(dAtA[i:]) + i = encodeVarintSpecs(dAtA, i, uint64(m.AcceptancePolicy.Size())) + n28, err := m.AcceptancePolicy.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n28 - dAtA[i] = 0x22 + dAtA[i] = 0x1a i++ - i = encodeVarintSpecs(dAtA, i, uint64(m.Raft.Size())) - n29, err := m.Raft.MarshalTo(dAtA[i:]) + i = encodeVarintSpecs(dAtA, i, uint64(m.Orchestration.Size())) + n29, err := m.Orchestration.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n29 - dAtA[i] = 0x2a + dAtA[i] = 0x22 i++ - i = encodeVarintSpecs(dAtA, i, uint64(m.Dispatcher.Size())) - n30, err := m.Dispatcher.MarshalTo(dAtA[i:]) + i = encodeVarintSpecs(dAtA, i, uint64(m.Raft.Size())) + n30, err := m.Raft.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n30 - dAtA[i] = 0x32 + dAtA[i] = 0x2a i++ - i = encodeVarintSpecs(dAtA, i, uint64(m.CAConfig.Size())) - n31, err := m.CAConfig.MarshalTo(dAtA[i:]) + i = encodeVarintSpecs(dAtA, i, uint64(m.Dispatcher.Size())) + n31, err := m.Dispatcher.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n31 - dAtA[i] = 0x3a + dAtA[i] = 0x32 i++ - i = encodeVarintSpecs(dAtA, i, uint64(m.TaskDefaults.Size())) - n32, err := m.TaskDefaults.MarshalTo(dAtA[i:]) + i = encodeVarintSpecs(dAtA, i, uint64(m.CAConfig.Size())) + n32, err := m.CAConfig.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n32 - dAtA[i] = 0x42 + dAtA[i] = 0x3a i++ - i = encodeVarintSpecs(dAtA, i, uint64(m.EncryptionConfig.Size())) - n33, err := m.EncryptionConfig.MarshalTo(dAtA[i:]) + i = encodeVarintSpecs(dAtA, i, uint64(m.TaskDefaults.Size())) + n33, err := m.TaskDefaults.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n33 + dAtA[i] = 0x42 + i++ + i = encodeVarintSpecs(dAtA, i, uint64(m.EncryptionConfig.Size())) + n34, err := m.EncryptionConfig.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n34 return i, nil } @@ -2032,11 +2109,43 @@ func (m *SecretSpec) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintSpecs(dAtA, i, uint64(m.Annotations.Size())) - n34, err := m.Annotations.MarshalTo(dAtA[i:]) + n35, err := m.Annotations.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n34 + i += n35 + if len(m.Data) > 0 { + dAtA[i] = 0x12 + i++ + i = encodeVarintSpecs(dAtA, i, uint64(len(m.Data))) + i += copy(dAtA[i:], m.Data) + } + return i, nil +} + +func (m *ConfigSpec) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ConfigSpec) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + dAtA[i] = 0xa + i++ + i = encodeVarintSpecs(dAtA, i, uint64(m.Annotations.Size())) + n36, err := m.Annotations.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n36 if len(m.Data) > 0 { dAtA[i] = 0x12 i++ @@ -2338,6 +2447,16 @@ func (m *ContainerSpec) Size() (n int) { 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)) + } return n } @@ -2452,6 +2571,18 @@ func (m *SecretSpec) Size() (n int) { return n } +func (m *ConfigSpec) Size() (n int) { + 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)) + } + return n +} + func sovSpecs(x uint64) (n int) { for { n++ @@ -2635,6 +2766,8 @@ func (this *ContainerSpec) String() string { `OpenStdin:` + fmt.Sprintf("%v", this.OpenStdin) + `,`, `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, `StopSignal:` + fmt.Sprintf("%v", this.StopSignal) + `,`, + `Configs:` + strings.Replace(fmt.Sprintf("%v", this.Configs), "ConfigReference", "ConfigReference", 1) + `,`, + `Privileges:` + strings.Replace(fmt.Sprintf("%v", this.Privileges), "Privileges", "Privileges", 1) + `,`, `}`, }, "") return s @@ -2716,6 +2849,17 @@ func (this *SecretSpec) String() string { }, "") return s } +func (this *ConfigSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ConfigSpec{`, + `Annotations:` + strings.Replace(strings.Replace(this.Annotations.String(), "Annotations", "Annotations", 1), `&`, ``, 1) + `,`, + `Data:` + fmt.Sprintf("%v", this.Data) + `,`, + `}`, + }, "") + return s +} func valueToStringSpecs(v interface{}) string { rv := reflect.ValueOf(v) if rv.IsNil() { @@ -4492,6 +4636,70 @@ func (m *ContainerSpec) Unmarshal(dAtA []byte) error { } 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 > 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 > 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 default: iNdEx = preIndex skippy, err := skipSpecs(dAtA[iNdEx:]) @@ -5456,6 +5664,117 @@ func (m *SecretSpec) Unmarshal(dAtA []byte) error { } 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 > 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 > l { + return io.ErrUnexpectedEOF + } + m.Data = append(m.Data[:0], dAtA[iNdEx:postIndex]...) + if m.Data == nil { + m.Data = []byte{} + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipSpecs(dAtA[iNdEx:]) + if err != nil { + return err + } + if 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 @@ -5564,117 +5883,119 @@ var ( func init() { proto.RegisterFile("specs.proto", fileDescriptorSpecs) } var fileDescriptorSpecs = []byte{ - // 1779 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xac, 0x57, 0x41, 0x73, 0x1b, 0x49, - 0x15, 0xb6, 0x6c, 0x59, 0x1a, 0xbd, 0x91, 0x13, 0xb9, 0xc9, 0x2e, 0x63, 0x85, 0x95, 0x15, 0x6d, - 0x08, 0x5e, 0xb6, 0x90, 0x0b, 0x43, 0x2d, 0x59, 0xc2, 0x16, 0x48, 0x96, 0x70, 0x8c, 0xb1, 0xa3, - 0x6a, 0x7b, 0x03, 0x39, 0xa9, 0xda, 0x33, 0x6d, 0x69, 0xca, 0xa3, 0xee, 0xa1, 0xa7, 0xc7, 0x5b, - 0xba, 0x71, 0xdc, 0xca, 0x99, 0xab, 0x8b, 0x03, 0x7f, 0x26, 0x37, 0x28, 0x4e, 0x9c, 0x5c, 0xac, - 0xfe, 0x02, 0x3f, 0x00, 0xaa, 0x7b, 0x7a, 0xa4, 0x51, 0x32, 0x4e, 0x52, 0x45, 0x6e, 0xfd, 0x5e, - 0x7f, 0xdf, 0x9b, 0xd7, 0xaf, 0xbf, 0xee, 0xd7, 0x03, 0x76, 0x14, 0x52, 0x37, 0x6a, 0x87, 0x82, - 0x4b, 0x8e, 0x90, 0xc7, 0xdd, 0x4b, 0x2a, 0xda, 0xd1, 0x37, 0x44, 0x4c, 0x2e, 0x7d, 0xd9, 0xbe, - 0xfa, 0x69, 0xdd, 0x96, 0xd3, 0x90, 0x1a, 0x40, 0xfd, 0xde, 0x88, 0x8f, 0xb8, 0x1e, 0xee, 0xaa, - 0x91, 0xf1, 0x36, 0x46, 0x9c, 0x8f, 0x02, 0xba, 0xab, 0xad, 0xf3, 0xf8, 0x62, 0xd7, 0x8b, 0x05, - 0x91, 0x3e, 0x67, 0x66, 0x7e, 0xeb, 0xf5, 0x79, 0xc2, 0xa6, 0xc9, 0x54, 0xeb, 0xba, 0x08, 0xd6, - 0x09, 0xf7, 0xe8, 0x69, 0x48, 0x5d, 0x74, 0x00, 0x36, 0x61, 0x8c, 0x4b, 0xcd, 0x8d, 0x9c, 0x42, - 0xb3, 0xb0, 0x63, 0xef, 0x6d, 0xb7, 0xdf, 0x4c, 0xaa, 0xdd, 0x59, 0xc0, 0xba, 0xc5, 0x57, 0x37, - 0xdb, 0x2b, 0x38, 0xcb, 0x44, 0xbf, 0x86, 0xaa, 0x47, 0x23, 0x5f, 0x50, 0x6f, 0x28, 0x78, 0x40, - 0x9d, 0xd5, 0x66, 0x61, 0xe7, 0xce, 0xde, 0x0f, 0xf2, 0x22, 0xa9, 0x8f, 0x63, 0x1e, 0x50, 0x6c, - 0x1b, 0x86, 0x32, 0xd0, 0x01, 0xc0, 0x84, 0x4e, 0xce, 0xa9, 0x88, 0xc6, 0x7e, 0xe8, 0xac, 0x69, - 0xfa, 0x8f, 0x6e, 0xa3, 0xab, 0xdc, 0xdb, 0xc7, 0x73, 0x38, 0xce, 0x50, 0xd1, 0x31, 0x54, 0xc9, - 0x15, 0xf1, 0x03, 0x72, 0xee, 0x07, 0xbe, 0x9c, 0x3a, 0x45, 0x1d, 0xea, 0xb3, 0xb7, 0x86, 0xea, - 0x64, 0x08, 0x78, 0x89, 0xde, 0xf2, 0x00, 0x16, 0x1f, 0x42, 0x8f, 0xa0, 0x3c, 0xe8, 0x9f, 0xf4, - 0x0e, 0x4f, 0x0e, 0x6a, 0x2b, 0xf5, 0xad, 0x97, 0xd7, 0xcd, 0x8f, 0x54, 0x8c, 0x05, 0x60, 0x40, - 0x99, 0xe7, 0xb3, 0x11, 0xda, 0x01, 0xab, 0xb3, 0xbf, 0xdf, 0x1f, 0x9c, 0xf5, 0x7b, 0xb5, 0x42, - 0xbd, 0xfe, 0xf2, 0xba, 0xf9, 0xf1, 0x32, 0xb0, 0xe3, 0xba, 0x34, 0x94, 0xd4, 0xab, 0x17, 0xbf, - 0xfd, 0x5b, 0x63, 0xa5, 0xf5, 0x6d, 0x01, 0xaa, 0xd9, 0x24, 0xd0, 0x23, 0x28, 0x75, 0xf6, 0xcf, - 0x0e, 0x9f, 0xf7, 0x6b, 0x2b, 0x0b, 0x7a, 0x16, 0xd1, 0x71, 0xa5, 0x7f, 0x45, 0xd1, 0x43, 0x58, - 0x1f, 0x74, 0xbe, 0x3e, 0xed, 0xd7, 0x0a, 0x8b, 0x74, 0xb2, 0xb0, 0x01, 0x89, 0x23, 0x8d, 0xea, - 0xe1, 0xce, 0xe1, 0x49, 0x6d, 0x35, 0x1f, 0xd5, 0x13, 0xc4, 0x67, 0x26, 0x95, 0xbf, 0x16, 0xc1, - 0x3e, 0xa5, 0xe2, 0xca, 0x77, 0x3f, 0xb0, 0x44, 0xbe, 0x80, 0xa2, 0x24, 0xd1, 0xa5, 0x96, 0x86, - 0x9d, 0x2f, 0x8d, 0x33, 0x12, 0x5d, 0xaa, 0x8f, 0x1a, 0xba, 0xc6, 0x2b, 0x65, 0x08, 0x1a, 0x06, - 0xbe, 0x4b, 0x24, 0xf5, 0xb4, 0x32, 0xec, 0xbd, 0x1f, 0xe6, 0xb1, 0xf1, 0x1c, 0x65, 0xf2, 0x7f, - 0xba, 0x82, 0x33, 0x54, 0xf4, 0x04, 0x4a, 0xa3, 0x80, 0x9f, 0x93, 0x40, 0x6b, 0xc2, 0xde, 0x7b, - 0x90, 0x17, 0xe4, 0x40, 0x23, 0x16, 0x01, 0x0c, 0x05, 0x3d, 0x86, 0x52, 0x1c, 0x7a, 0x44, 0x52, - 0xa7, 0xa4, 0xc9, 0xcd, 0x3c, 0xf2, 0xd7, 0x1a, 0xb1, 0xcf, 0xd9, 0x85, 0x3f, 0xc2, 0x06, 0x8f, - 0x8e, 0xc0, 0x62, 0x54, 0x7e, 0xc3, 0xc5, 0x65, 0xe4, 0x94, 0x9b, 0x6b, 0x3b, 0xf6, 0xde, 0xe7, - 0xb9, 0x62, 0x4c, 0x30, 0x1d, 0x29, 0x89, 0x3b, 0x9e, 0x50, 0x26, 0x93, 0x30, 0xdd, 0x55, 0xa7, - 0x80, 0xe7, 0x01, 0xd0, 0xaf, 0xc0, 0xa2, 0xcc, 0x0b, 0xb9, 0xcf, 0xa4, 0x63, 0xdd, 0x9e, 0x48, - 0xdf, 0x60, 0x54, 0x31, 0xf1, 0x9c, 0xa1, 0xd8, 0x82, 0x07, 0xc1, 0x39, 0x71, 0x2f, 0x9d, 0xca, - 0x7b, 0x2e, 0x63, 0xce, 0xe8, 0x96, 0xa0, 0x38, 0xe1, 0x1e, 0x6d, 0xed, 0xc2, 0xe6, 0x1b, 0xa5, - 0x46, 0x75, 0xb0, 0x4c, 0xa9, 0x13, 0x8d, 0x14, 0xf1, 0xdc, 0x6e, 0xdd, 0x85, 0x8d, 0xa5, 0xb2, - 0xb6, 0xfe, 0x59, 0x04, 0x2b, 0xdd, 0x6b, 0xd4, 0x81, 0x8a, 0xcb, 0x99, 0x24, 0x3e, 0xa3, 0xc2, - 0xc8, 0x2b, 0x77, 0x67, 0xf6, 0x53, 0x90, 0x62, 0x3d, 0x5d, 0xc1, 0x0b, 0x16, 0xfa, 0x2d, 0x54, - 0x04, 0x8d, 0x78, 0x2c, 0x5c, 0x1a, 0x19, 0x7d, 0xed, 0xe4, 0x2b, 0x24, 0x01, 0x61, 0xfa, 0xa7, - 0xd8, 0x17, 0x54, 0x55, 0x39, 0xc2, 0x0b, 0x2a, 0x7a, 0x02, 0x65, 0x41, 0x23, 0x49, 0x84, 0x7c, - 0x9b, 0x44, 0x70, 0x02, 0x19, 0xf0, 0xc0, 0x77, 0xa7, 0x38, 0x65, 0xa0, 0x27, 0x50, 0x09, 0x03, - 0xe2, 0xea, 0xa8, 0xce, 0xba, 0xa6, 0x7f, 0x92, 0x47, 0x1f, 0xa4, 0x20, 0xbc, 0xc0, 0xa3, 0x2f, - 0x01, 0x02, 0x3e, 0x1a, 0x7a, 0xc2, 0xbf, 0xa2, 0xc2, 0x48, 0xac, 0x9e, 0xc7, 0xee, 0x69, 0x04, - 0xae, 0x04, 0x7c, 0x94, 0x0c, 0xd1, 0xc1, 0xff, 0xa5, 0xaf, 0x8c, 0xb6, 0x8e, 0x00, 0xc8, 0x7c, - 0xd6, 0xa8, 0xeb, 0xb3, 0xf7, 0x0a, 0x65, 0x76, 0x24, 0x43, 0x47, 0x0f, 0xa0, 0x7a, 0xc1, 0x85, - 0x4b, 0x87, 0xe6, 0xd4, 0x54, 0xb4, 0x26, 0x6c, 0xed, 0x4b, 0xf4, 0x85, 0xba, 0x50, 0x1e, 0x51, - 0x46, 0x85, 0xef, 0x3a, 0xa0, 0x3f, 0xf6, 0x28, 0xf7, 0x40, 0x26, 0x10, 0x1c, 0x33, 0xe9, 0x4f, - 0xa8, 0xf9, 0x52, 0x4a, 0xec, 0x56, 0xa0, 0x2c, 0x92, 0x99, 0xd6, 0x1f, 0x01, 0xbd, 0x89, 0x45, - 0x08, 0x8a, 0x97, 0x3e, 0xf3, 0xb4, 0xb0, 0x2a, 0x58, 0x8f, 0x51, 0x1b, 0xca, 0x21, 0x99, 0x06, - 0x9c, 0x78, 0x46, 0x2c, 0xf7, 0xda, 0x49, 0xbf, 0x6c, 0xa7, 0xfd, 0xb2, 0xdd, 0x61, 0x53, 0x9c, - 0x82, 0x5a, 0x47, 0xf0, 0x51, 0xee, 0x92, 0xd1, 0x1e, 0x54, 0xe7, 0x22, 0x1c, 0xfa, 0xe6, 0x23, - 0xdd, 0xbb, 0xb3, 0x9b, 0x6d, 0x7b, 0xae, 0xd6, 0xc3, 0x1e, 0xb6, 0xe7, 0xa0, 0x43, 0xaf, 0xf5, - 0x17, 0x0b, 0x36, 0x96, 0xa4, 0x8c, 0xee, 0xc1, 0xba, 0x3f, 0x21, 0x23, 0x6a, 0x72, 0x4c, 0x0c, - 0xd4, 0x87, 0x52, 0x40, 0xce, 0x69, 0xa0, 0x04, 0xad, 0x36, 0xf5, 0x27, 0xef, 0x3c, 0x13, 0xed, - 0xdf, 0x6b, 0x7c, 0x9f, 0x49, 0x31, 0xc5, 0x86, 0x8c, 0x1c, 0x28, 0xbb, 0x7c, 0x32, 0x21, 0x4c, - 0x5d, 0x9d, 0x6b, 0x3b, 0x15, 0x9c, 0x9a, 0xaa, 0x32, 0x44, 0x8c, 0x22, 0xa7, 0xa8, 0xdd, 0x7a, - 0x8c, 0x6a, 0xb0, 0x46, 0xd9, 0x95, 0xb3, 0xae, 0x5d, 0x6a, 0xa8, 0x3c, 0x9e, 0x9f, 0x28, 0xb2, - 0x82, 0xd5, 0x50, 0xf1, 0xe2, 0x88, 0x0a, 0xa7, 0x9c, 0x54, 0x54, 0x8d, 0xd1, 0x2f, 0xa0, 0x34, - 0xe1, 0x31, 0x93, 0x91, 0x63, 0xe9, 0x64, 0xb7, 0xf2, 0x92, 0x3d, 0x56, 0x08, 0x73, 0xb5, 0x1b, - 0x38, 0xea, 0xc3, 0x66, 0x24, 0x79, 0x38, 0x1c, 0x09, 0xe2, 0xd2, 0x61, 0x48, 0x85, 0xcf, 0x3d, - 0x73, 0x35, 0x6d, 0xbd, 0xb1, 0x29, 0x3d, 0xf3, 0xc8, 0xc1, 0x77, 0x15, 0xe7, 0x40, 0x51, 0x06, - 0x9a, 0x81, 0x06, 0x50, 0x0d, 0xe3, 0x20, 0x18, 0xf2, 0x30, 0xe9, 0x52, 0x89, 0x9e, 0xde, 0xa3, - 0x64, 0x83, 0x38, 0x08, 0x9e, 0x25, 0x24, 0x6c, 0x87, 0x0b, 0x03, 0x7d, 0x0c, 0xa5, 0x91, 0xe0, - 0x71, 0x18, 0x39, 0xb6, 0x2e, 0x86, 0xb1, 0xd0, 0x57, 0x50, 0x8e, 0xa8, 0x2b, 0xa8, 0x8c, 0x9c, - 0xaa, 0x5e, 0xea, 0xa7, 0x79, 0x1f, 0x39, 0xd5, 0x10, 0x4c, 0x2f, 0xa8, 0xa0, 0xcc, 0xa5, 0x38, - 0xe5, 0xa0, 0x2d, 0x58, 0x93, 0x72, 0xea, 0x6c, 0x34, 0x0b, 0x3b, 0x56, 0xb7, 0x3c, 0xbb, 0xd9, - 0x5e, 0x3b, 0x3b, 0x7b, 0x81, 0x95, 0x4f, 0xdd, 0xa0, 0x63, 0x1e, 0x49, 0x46, 0x26, 0xd4, 0xb9, - 0xa3, 0x6b, 0x3b, 0xb7, 0xd1, 0x0b, 0x00, 0x8f, 0x45, 0x43, 0x57, 0x1f, 0x59, 0xe7, 0xae, 0x5e, - 0xdd, 0xe7, 0xef, 0x5e, 0x5d, 0xef, 0xe4, 0xd4, 0x74, 0x91, 0x8d, 0xd9, 0xcd, 0x76, 0x65, 0x6e, - 0xe2, 0x8a, 0xc7, 0xa2, 0x64, 0x88, 0xba, 0x60, 0x8f, 0x29, 0x09, 0xe4, 0xd8, 0x1d, 0x53, 0xf7, - 0xd2, 0xa9, 0xdd, 0xde, 0x16, 0x9e, 0x6a, 0x98, 0x89, 0x90, 0x25, 0x29, 0x05, 0xab, 0x54, 0x23, - 0x67, 0x53, 0xd7, 0x2a, 0x31, 0xd0, 0x27, 0x00, 0x3c, 0xa4, 0x6c, 0x18, 0x49, 0xcf, 0x67, 0x0e, - 0x52, 0x4b, 0xc6, 0x15, 0xe5, 0x39, 0x55, 0x0e, 0x74, 0x5f, 0x5d, 0xda, 0xc4, 0x1b, 0x72, 0x16, - 0x4c, 0x9d, 0xef, 0xe9, 0x59, 0x4b, 0x39, 0x9e, 0xb1, 0x60, 0x8a, 0xb6, 0xc1, 0xd6, 0xba, 0x88, - 0xfc, 0x11, 0x23, 0x81, 0x73, 0x4f, 0xd7, 0x03, 0x94, 0xeb, 0x54, 0x7b, 0xea, 0x5f, 0x82, 0x9d, - 0x91, 0xbb, 0x92, 0xe9, 0x25, 0x9d, 0x9a, 0x13, 0xa4, 0x86, 0x2a, 0xa7, 0x2b, 0x12, 0xc4, 0xc9, - 0x53, 0xb4, 0x82, 0x13, 0xe3, 0x97, 0xab, 0x8f, 0x0b, 0xf5, 0x3d, 0xb0, 0x33, 0xdb, 0x8e, 0x3e, - 0x85, 0x0d, 0x41, 0x47, 0x7e, 0x24, 0xc5, 0x74, 0x48, 0x62, 0x39, 0x76, 0x7e, 0xa3, 0x09, 0xd5, - 0xd4, 0xd9, 0x89, 0xe5, 0xb8, 0x3e, 0x84, 0x45, 0xf5, 0x50, 0x13, 0x6c, 0xb5, 0x2b, 0x11, 0x15, - 0x57, 0x54, 0xa8, 0x76, 0xa7, 0x16, 0x9d, 0x75, 0x29, 0xf5, 0x44, 0x94, 0x08, 0x77, 0xac, 0x0f, - 0x6f, 0x05, 0x1b, 0x4b, 0x9d, 0xc6, 0x54, 0xa2, 0xe6, 0x34, 0x1a, 0xb3, 0xf5, 0x9f, 0x02, 0x54, - 0xb3, 0x5d, 0x1b, 0xed, 0x27, 0xdd, 0x56, 0x2f, 0xe9, 0xce, 0xde, 0xee, 0xbb, 0xba, 0xbc, 0xee, - 0x6d, 0x41, 0xac, 0x82, 0x1d, 0xab, 0x07, 0xb6, 0x26, 0xa3, 0x9f, 0xc3, 0x7a, 0xc8, 0x85, 0x4c, - 0xef, 0x90, 0x46, 0x6e, 0x3f, 0xe2, 0x22, 0xed, 0x05, 0x09, 0xb8, 0x35, 0x86, 0x3b, 0xcb, 0xd1, - 0xd0, 0x43, 0x58, 0x7b, 0x7e, 0x38, 0xa8, 0xad, 0xd4, 0xef, 0xbf, 0xbc, 0x6e, 0x7e, 0x7f, 0x79, - 0xf2, 0xb9, 0x2f, 0x64, 0x4c, 0x82, 0xc3, 0x01, 0xfa, 0x31, 0xac, 0xf7, 0x4e, 0x4e, 0x31, 0xae, - 0x15, 0xea, 0xdb, 0x2f, 0xaf, 0x9b, 0xf7, 0x97, 0x71, 0x6a, 0x8a, 0xc7, 0xcc, 0xc3, 0xfc, 0x7c, - 0xfe, 0xd8, 0xfc, 0xfb, 0x2a, 0xd8, 0xe6, 0x6a, 0xfd, 0xd0, 0xff, 0x23, 0x1b, 0x49, 0x2f, 0x4d, - 0xcf, 0xcc, 0xea, 0x3b, 0x5b, 0x6a, 0x35, 0x21, 0x98, 0x3d, 0x7e, 0x00, 0x55, 0x3f, 0xbc, 0xfa, - 0x62, 0x48, 0x19, 0x39, 0x0f, 0xcc, 0xbb, 0xd3, 0xc2, 0xb6, 0xf2, 0xf5, 0x13, 0x97, 0x3a, 0xb0, - 0x3e, 0x93, 0x54, 0x30, 0xf3, 0xa2, 0xb4, 0xf0, 0xdc, 0x46, 0x5f, 0x41, 0xd1, 0x0f, 0xc9, 0xc4, - 0xbc, 0x03, 0x72, 0x57, 0x70, 0x38, 0xe8, 0x1c, 0x1b, 0x0d, 0x76, 0xad, 0xd9, 0xcd, 0x76, 0x51, - 0x39, 0xb0, 0xa6, 0xa1, 0x46, 0xda, 0x8a, 0xd5, 0x97, 0xf4, 0xe5, 0x6b, 0xe1, 0x8c, 0x47, 0xe9, - 0xc8, 0x67, 0x23, 0x41, 0xa3, 0x48, 0x5f, 0xc3, 0x16, 0x4e, 0xcd, 0xd6, 0x7f, 0x8b, 0x60, 0xef, - 0x07, 0x71, 0x24, 0x4d, 0x73, 0xf9, 0x60, 0x15, 0x7d, 0x01, 0x9b, 0x44, 0xff, 0xb4, 0x10, 0xa6, - 0x6e, 0x6a, 0xfd, 0xf8, 0x31, 0x55, 0x7d, 0x98, 0x1b, 0x6e, 0x0e, 0x4e, 0x1e, 0x4a, 0xdd, 0x92, - 0x8a, 0xe9, 0x14, 0x70, 0x8d, 0xbc, 0x36, 0x83, 0x4e, 0x61, 0x83, 0x0b, 0x77, 0x4c, 0x23, 0x99, - 0xdc, 0xef, 0xe6, 0x91, 0x9f, 0xfb, 0xfb, 0xf7, 0x2c, 0x0b, 0x34, 0x97, 0x5b, 0x92, 0xed, 0x72, - 0x0c, 0xf4, 0x18, 0x8a, 0x82, 0x5c, 0xa4, 0x0f, 0xb9, 0x5c, 0xe5, 0x63, 0x72, 0x21, 0x97, 0x42, - 0x68, 0x06, 0xfa, 0x1d, 0x80, 0xe7, 0x47, 0x21, 0x91, 0xee, 0x98, 0x0a, 0xb3, 0x83, 0xb9, 0x4b, - 0xec, 0xcd, 0x51, 0x4b, 0x51, 0x32, 0x6c, 0x74, 0x04, 0x15, 0x97, 0xa4, 0x1a, 0x2c, 0xdd, 0xfe, - 0xe7, 0xb3, 0xdf, 0x31, 0x21, 0x6a, 0x2a, 0xc4, 0xec, 0x66, 0xdb, 0x4a, 0x3d, 0xd8, 0x72, 0x89, - 0xd1, 0xe4, 0x11, 0x6c, 0xa8, 0x3f, 0xa2, 0xa1, 0x47, 0x2f, 0x48, 0x1c, 0xc8, 0x64, 0xef, 0x6f, - 0xb9, 0xac, 0xd5, 0xf3, 0xba, 0x67, 0x70, 0x26, 0xaf, 0xaa, 0xcc, 0xf8, 0xd0, 0x1f, 0x60, 0x93, - 0x32, 0x57, 0x4c, 0xb5, 0x02, 0xd3, 0x0c, 0xad, 0xdb, 0x17, 0xdb, 0x9f, 0x83, 0x97, 0x16, 0x5b, - 0xa3, 0xaf, 0xf9, 0x5b, 0x3e, 0x40, 0xd2, 0xfe, 0x3e, 0xac, 0xfe, 0x10, 0x14, 0x3d, 0x22, 0x89, - 0x96, 0x5c, 0x15, 0xeb, 0x71, 0xd7, 0x79, 0xf5, 0x5d, 0x63, 0xe5, 0x5f, 0xdf, 0x35, 0x56, 0xfe, - 0x3c, 0x6b, 0x14, 0x5e, 0xcd, 0x1a, 0x85, 0x7f, 0xcc, 0x1a, 0x85, 0x7f, 0xcf, 0x1a, 0x85, 0xf3, - 0x92, 0x7e, 0x34, 0xfc, 0xec, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xbe, 0x3e, 0xe8, 0xcb, 0x6d, - 0x11, 0x00, 0x00, + // 1824 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xb4, 0x57, 0x4f, 0x73, 0x1b, 0x49, + 0x15, 0xb7, 0x6c, 0x59, 0x7f, 0xde, 0xc8, 0x89, 0xd2, 0x24, 0x61, 0xac, 0xb0, 0xb2, 0xa2, 0x0d, + 0xc1, 0xcb, 0x16, 0x72, 0x61, 0xa8, 0x25, 0x4b, 0x58, 0x40, 0xb2, 0x84, 0x63, 0x8c, 0x1d, 0x55, + 0xdb, 0x1b, 0xc8, 0x49, 0xd5, 0x9e, 0x69, 0x4b, 0x53, 0x1e, 0x75, 0x0f, 0xdd, 0x3d, 0xda, 0xd2, + 0x8d, 0xe3, 0x56, 0xae, 0x9c, 0x5d, 0x1c, 0xf8, 0x32, 0xb9, 0x41, 0x71, 0xe2, 0xe4, 0x62, 0xfd, + 0x15, 0xf8, 0x00, 0x50, 0xdd, 0xd3, 0xa3, 0x3f, 0xc9, 0x78, 0x93, 0x2a, 0xc2, 0xad, 0xfb, 0xcd, + 0xef, 0xf7, 0xfa, 0xf5, 0xeb, 0x5f, 0xf7, 0x7b, 0x03, 0x8e, 0x8c, 0xa8, 0x27, 0x5b, 0x91, 0xe0, + 0x8a, 0x23, 0xe4, 0x73, 0xef, 0x82, 0x8a, 0x96, 0xfc, 0x8a, 0x88, 0xf1, 0x45, 0xa0, 0x5a, 0x93, + 0x1f, 0xd7, 0x1c, 0x35, 0x8d, 0xa8, 0x05, 0xd4, 0xee, 0x0e, 0xf9, 0x90, 0x9b, 0xe1, 0x8e, 0x1e, + 0x59, 0x6b, 0x7d, 0xc8, 0xf9, 0x30, 0xa4, 0x3b, 0x66, 0x76, 0x16, 0x9f, 0xef, 0xf8, 0xb1, 0x20, + 0x2a, 0xe0, 0xcc, 0x7e, 0xdf, 0x7c, 0xf3, 0x3b, 0x61, 0xd3, 0xe4, 0x53, 0xf3, 0x32, 0x0f, 0xa5, + 0x63, 0xee, 0xd3, 0x93, 0x88, 0x7a, 0x68, 0x1f, 0x1c, 0xc2, 0x18, 0x57, 0x86, 0x2b, 0xdd, 0x5c, + 0x23, 0xb7, 0xed, 0xec, 0x6e, 0xb5, 0xde, 0x0e, 0xaa, 0xd5, 0x9e, 0xc3, 0x3a, 0xf9, 0xd7, 0x57, + 0x5b, 0x2b, 0x78, 0x91, 0x89, 0x7e, 0x05, 0x15, 0x9f, 0xca, 0x40, 0x50, 0x7f, 0x20, 0x78, 0x48, + 0xdd, 0xd5, 0x46, 0x6e, 0xfb, 0xd6, 0xee, 0xf7, 0xb2, 0x3c, 0xe9, 0xc5, 0x31, 0x0f, 0x29, 0x76, + 0x2c, 0x43, 0x4f, 0xd0, 0x3e, 0xc0, 0x98, 0x8e, 0xcf, 0xa8, 0x90, 0xa3, 0x20, 0x72, 0xd7, 0x0c, + 0xfd, 0x07, 0x37, 0xd1, 0x75, 0xec, 0xad, 0xa3, 0x19, 0x1c, 0x2f, 0x50, 0xd1, 0x11, 0x54, 0xc8, + 0x84, 0x04, 0x21, 0x39, 0x0b, 0xc2, 0x40, 0x4d, 0xdd, 0xbc, 0x71, 0xf5, 0xc9, 0xb7, 0xba, 0x6a, + 0x2f, 0x10, 0xf0, 0x12, 0xbd, 0xe9, 0x03, 0xcc, 0x17, 0x42, 0x8f, 0xa1, 0xd8, 0xef, 0x1d, 0x77, + 0x0f, 0x8e, 0xf7, 0xab, 0x2b, 0xb5, 0xcd, 0x57, 0x97, 0x8d, 0x7b, 0xda, 0xc7, 0x1c, 0xd0, 0xa7, + 0xcc, 0x0f, 0xd8, 0x10, 0x6d, 0x43, 0xa9, 0xbd, 0xb7, 0xd7, 0xeb, 0x9f, 0xf6, 0xba, 0xd5, 0x5c, + 0xad, 0xf6, 0xea, 0xb2, 0x71, 0x7f, 0x19, 0xd8, 0xf6, 0x3c, 0x1a, 0x29, 0xea, 0xd7, 0xf2, 0x5f, + 0xff, 0xb5, 0xbe, 0xd2, 0xfc, 0x3a, 0x07, 0x95, 0xc5, 0x20, 0xd0, 0x63, 0x28, 0xb4, 0xf7, 0x4e, + 0x0f, 0x5e, 0xf4, 0xaa, 0x2b, 0x73, 0xfa, 0x22, 0xa2, 0xed, 0xa9, 0x60, 0x42, 0xd1, 0x23, 0x58, + 0xef, 0xb7, 0xbf, 0x3c, 0xe9, 0x55, 0x73, 0xf3, 0x70, 0x16, 0x61, 0x7d, 0x12, 0x4b, 0x83, 0xea, + 0xe2, 0xf6, 0xc1, 0x71, 0x75, 0x35, 0x1b, 0xd5, 0x15, 0x24, 0x60, 0x36, 0x94, 0xbf, 0xe4, 0xc1, + 0x39, 0xa1, 0x62, 0x12, 0x78, 0x1f, 0x58, 0x22, 0x9f, 0x41, 0x5e, 0x11, 0x79, 0x61, 0xa4, 0xe1, + 0x64, 0x4b, 0xe3, 0x94, 0xc8, 0x0b, 0xbd, 0xa8, 0xa5, 0x1b, 0xbc, 0x56, 0x86, 0xa0, 0x51, 0x18, + 0x78, 0x44, 0x51, 0xdf, 0x28, 0xc3, 0xd9, 0xfd, 0x7e, 0x16, 0x1b, 0xcf, 0x50, 0x36, 0xfe, 0x67, + 0x2b, 0x78, 0x81, 0x8a, 0x9e, 0x42, 0x61, 0x18, 0xf2, 0x33, 0x12, 0x1a, 0x4d, 0x38, 0xbb, 0x0f, + 0xb3, 0x9c, 0xec, 0x1b, 0xc4, 0xdc, 0x81, 0xa5, 0xa0, 0x27, 0x50, 0x88, 0x23, 0x9f, 0x28, 0xea, + 0x16, 0x0c, 0xb9, 0x91, 0x45, 0xfe, 0xd2, 0x20, 0xf6, 0x38, 0x3b, 0x0f, 0x86, 0xd8, 0xe2, 0xd1, + 0x21, 0x94, 0x18, 0x55, 0x5f, 0x71, 0x71, 0x21, 0xdd, 0x62, 0x63, 0x6d, 0xdb, 0xd9, 0xfd, 0x34, + 0x53, 0x8c, 0x09, 0xa6, 0xad, 0x14, 0xf1, 0x46, 0x63, 0xca, 0x54, 0xe2, 0xa6, 0xb3, 0xea, 0xe6, + 0xf0, 0xcc, 0x01, 0xfa, 0x05, 0x94, 0x28, 0xf3, 0x23, 0x1e, 0x30, 0xe5, 0x96, 0x6e, 0x0e, 0xa4, + 0x67, 0x31, 0x3a, 0x99, 0x78, 0xc6, 0xd0, 0x6c, 0xc1, 0xc3, 0xf0, 0x8c, 0x78, 0x17, 0x6e, 0xf9, + 0x3d, 0xb7, 0x31, 0x63, 0x74, 0x0a, 0x90, 0x1f, 0x73, 0x9f, 0x36, 0x77, 0xe0, 0xce, 0x5b, 0xa9, + 0x46, 0x35, 0x28, 0xd9, 0x54, 0x27, 0x1a, 0xc9, 0xe3, 0xd9, 0xbc, 0x79, 0x1b, 0x36, 0x96, 0xd2, + 0xda, 0xfc, 0x47, 0x1e, 0x4a, 0xe9, 0x59, 0xa3, 0x36, 0x94, 0x3d, 0xce, 0x14, 0x09, 0x18, 0x15, + 0x56, 0x5e, 0x99, 0x27, 0xb3, 0x97, 0x82, 0x34, 0xeb, 0xd9, 0x0a, 0x9e, 0xb3, 0xd0, 0x6f, 0xa0, + 0x2c, 0xa8, 0xe4, 0xb1, 0xf0, 0xa8, 0xb4, 0xfa, 0xda, 0xce, 0x56, 0x48, 0x02, 0xc2, 0xf4, 0x8f, + 0x71, 0x20, 0xa8, 0xce, 0xb2, 0xc4, 0x73, 0x2a, 0x7a, 0x0a, 0x45, 0x41, 0xa5, 0x22, 0x42, 0x7d, + 0x9b, 0x44, 0x70, 0x02, 0xe9, 0xf3, 0x30, 0xf0, 0xa6, 0x38, 0x65, 0xa0, 0xa7, 0x50, 0x8e, 0x42, + 0xe2, 0x19, 0xaf, 0xee, 0xba, 0xa1, 0x7f, 0x94, 0x45, 0xef, 0xa7, 0x20, 0x3c, 0xc7, 0xa3, 0xcf, + 0x01, 0x42, 0x3e, 0x1c, 0xf8, 0x22, 0x98, 0x50, 0x61, 0x25, 0x56, 0xcb, 0x62, 0x77, 0x0d, 0x02, + 0x97, 0x43, 0x3e, 0x4c, 0x86, 0x68, 0xff, 0x7f, 0xd2, 0xd7, 0x82, 0xb6, 0x0e, 0x01, 0xc8, 0xec, + 0xab, 0x55, 0xd7, 0x27, 0xef, 0xe5, 0xca, 0x9e, 0xc8, 0x02, 0x1d, 0x3d, 0x84, 0xca, 0x39, 0x17, + 0x1e, 0x1d, 0xd8, 0x5b, 0x53, 0x36, 0x9a, 0x70, 0x8c, 0x2d, 0xd1, 0x17, 0xea, 0x40, 0x71, 0x48, + 0x19, 0x15, 0x81, 0xe7, 0x82, 0x59, 0xec, 0x71, 0xe6, 0x85, 0x4c, 0x20, 0x38, 0x66, 0x2a, 0x18, + 0x53, 0xbb, 0x52, 0x4a, 0xec, 0x94, 0xa1, 0x28, 0x92, 0x2f, 0xcd, 0x3f, 0x00, 0x7a, 0x1b, 0x8b, + 0x10, 0xe4, 0x2f, 0x02, 0xe6, 0x1b, 0x61, 0x95, 0xb1, 0x19, 0xa3, 0x16, 0x14, 0x23, 0x32, 0x0d, + 0x39, 0xf1, 0xad, 0x58, 0xee, 0xb6, 0x92, 0x7a, 0xd9, 0x4a, 0xeb, 0x65, 0xab, 0xcd, 0xa6, 0x38, + 0x05, 0x35, 0x0f, 0xe1, 0x5e, 0xe6, 0x96, 0xd1, 0x2e, 0x54, 0x66, 0x22, 0x1c, 0x04, 0x76, 0x91, + 0xce, 0xed, 0xeb, 0xab, 0x2d, 0x67, 0xa6, 0xd6, 0x83, 0x2e, 0x76, 0x66, 0xa0, 0x03, 0xbf, 0xf9, + 0xe7, 0x32, 0x6c, 0x2c, 0x49, 0x19, 0xdd, 0x85, 0xf5, 0x60, 0x4c, 0x86, 0xd4, 0xc6, 0x98, 0x4c, + 0x50, 0x0f, 0x0a, 0x21, 0x39, 0xa3, 0xa1, 0x16, 0xb4, 0x3e, 0xd4, 0x1f, 0xbd, 0xf3, 0x4e, 0xb4, + 0x7e, 0x67, 0xf0, 0x3d, 0xa6, 0xc4, 0x14, 0x5b, 0x32, 0x72, 0xa1, 0xe8, 0xf1, 0xf1, 0x98, 0x30, + 0xfd, 0x74, 0xae, 0x6d, 0x97, 0x71, 0x3a, 0xd5, 0x99, 0x21, 0x62, 0x28, 0xdd, 0xbc, 0x31, 0x9b, + 0x31, 0xaa, 0xc2, 0x1a, 0x65, 0x13, 0x77, 0xdd, 0x98, 0xf4, 0x50, 0x5b, 0xfc, 0x20, 0x51, 0x64, + 0x19, 0xeb, 0xa1, 0xe6, 0xc5, 0x92, 0x0a, 0xb7, 0x98, 0x64, 0x54, 0x8f, 0xd1, 0xcf, 0xa0, 0x30, + 0xe6, 0x31, 0x53, 0xd2, 0x2d, 0x99, 0x60, 0x37, 0xb3, 0x82, 0x3d, 0xd2, 0x08, 0xfb, 0xb4, 0x5b, + 0x38, 0xea, 0xc1, 0x1d, 0xa9, 0x78, 0x34, 0x18, 0x0a, 0xe2, 0xd1, 0x41, 0x44, 0x45, 0xc0, 0x7d, + 0xfb, 0x34, 0x6d, 0xbe, 0x75, 0x28, 0x5d, 0xdb, 0xe4, 0xe0, 0xdb, 0x9a, 0xb3, 0xaf, 0x29, 0x7d, + 0xc3, 0x40, 0x7d, 0xa8, 0x44, 0x71, 0x18, 0x0e, 0x78, 0x94, 0x54, 0xa9, 0x44, 0x4f, 0xef, 0x91, + 0xb2, 0x7e, 0x1c, 0x86, 0xcf, 0x13, 0x12, 0x76, 0xa2, 0xf9, 0x04, 0xdd, 0x87, 0xc2, 0x50, 0xf0, + 0x38, 0x92, 0xae, 0x63, 0x92, 0x61, 0x67, 0xe8, 0x0b, 0x28, 0x4a, 0xea, 0x09, 0xaa, 0xa4, 0x5b, + 0x31, 0x5b, 0xfd, 0x38, 0x6b, 0x91, 0x13, 0x03, 0xc1, 0xf4, 0x9c, 0x0a, 0xca, 0x3c, 0x8a, 0x53, + 0x0e, 0xda, 0x84, 0x35, 0xa5, 0xa6, 0xee, 0x46, 0x23, 0xb7, 0x5d, 0xea, 0x14, 0xaf, 0xaf, 0xb6, + 0xd6, 0x4e, 0x4f, 0x5f, 0x62, 0x6d, 0xd3, 0x2f, 0xe8, 0x88, 0x4b, 0xc5, 0xc8, 0x98, 0xba, 0xb7, + 0x4c, 0x6e, 0x67, 0x73, 0xf4, 0x12, 0xc0, 0x67, 0x72, 0xe0, 0x99, 0x2b, 0xeb, 0xde, 0x36, 0xbb, + 0xfb, 0xf4, 0xdd, 0xbb, 0xeb, 0x1e, 0x9f, 0xd8, 0x2a, 0xb2, 0x71, 0x7d, 0xb5, 0x55, 0x9e, 0x4d, + 0x71, 0xd9, 0x67, 0x32, 0x19, 0xa2, 0x0e, 0x38, 0x23, 0x4a, 0x42, 0x35, 0xf2, 0x46, 0xd4, 0xbb, + 0x70, 0xab, 0x37, 0x97, 0x85, 0x67, 0x06, 0x66, 0x3d, 0x2c, 0x92, 0xb4, 0x82, 0x75, 0xa8, 0xd2, + 0xbd, 0x63, 0x72, 0x95, 0x4c, 0xd0, 0x47, 0x00, 0x3c, 0xa2, 0x6c, 0x20, 0x95, 0x1f, 0x30, 0x17, + 0xe9, 0x2d, 0xe3, 0xb2, 0xb6, 0x9c, 0x68, 0x03, 0x7a, 0xa0, 0x1f, 0x6d, 0xe2, 0x0f, 0x38, 0x0b, + 0xa7, 0xee, 0x77, 0xcc, 0xd7, 0x92, 0x36, 0x3c, 0x67, 0xe1, 0x14, 0x6d, 0x81, 0x63, 0x74, 0x21, + 0x83, 0x21, 0x23, 0xa1, 0x7b, 0xd7, 0xe4, 0x03, 0xb4, 0xe9, 0xc4, 0x58, 0xf4, 0x39, 0x24, 0xd9, + 0x90, 0xee, 0xbd, 0x9b, 0xcf, 0xc1, 0x06, 0x3b, 0x3f, 0x07, 0xcb, 0x41, 0xbf, 0x04, 0x88, 0x44, + 0x30, 0x09, 0x42, 0x3a, 0xa4, 0xd2, 0xbd, 0x6f, 0x36, 0x5d, 0xcf, 0x7c, 0xad, 0x67, 0x28, 0xbc, + 0xc0, 0xa8, 0x7d, 0x0e, 0xce, 0xc2, 0x6d, 0xd3, 0xb7, 0xe4, 0x82, 0x4e, 0xed, 0x05, 0xd6, 0x43, + 0x9d, 0x92, 0x09, 0x09, 0xe3, 0xa4, 0x13, 0x2e, 0xe3, 0x64, 0xf2, 0xf3, 0xd5, 0x27, 0xb9, 0xda, + 0x2e, 0x38, 0x0b, 0xaa, 0x43, 0x1f, 0xc3, 0x86, 0xa0, 0xc3, 0x40, 0x2a, 0x31, 0x1d, 0x90, 0x58, + 0x8d, 0xdc, 0x5f, 0x1b, 0x42, 0x25, 0x35, 0xb6, 0x63, 0x35, 0xaa, 0x0d, 0x60, 0x7e, 0x78, 0xa8, + 0x01, 0x8e, 0x16, 0x85, 0xa4, 0x62, 0x42, 0x85, 0xae, 0xb6, 0x3a, 0xe7, 0x8b, 0x26, 0x2d, 0x5e, + 0x49, 0x89, 0xf0, 0x46, 0xe6, 0xed, 0x28, 0x63, 0x3b, 0xd3, 0x8f, 0x41, 0x7a, 0x43, 0xec, 0x63, + 0x60, 0xa7, 0xcd, 0x7f, 0xe7, 0xa0, 0xb2, 0xd8, 0x34, 0xa0, 0xbd, 0xa4, 0xd8, 0x9b, 0x2d, 0xdd, + 0xda, 0xdd, 0x79, 0x57, 0x93, 0x61, 0x4a, 0x6b, 0x18, 0x6b, 0x67, 0x47, 0xba, 0xbf, 0x37, 0x64, + 0xf4, 0x53, 0x58, 0x8f, 0xb8, 0x50, 0xe9, 0x13, 0x96, 0x9d, 0x60, 0x2e, 0xd2, 0x52, 0x94, 0x80, + 0x9b, 0x23, 0xb8, 0xb5, 0xec, 0x0d, 0x3d, 0x82, 0xb5, 0x17, 0x07, 0xfd, 0xea, 0x4a, 0xed, 0xc1, + 0xab, 0xcb, 0xc6, 0x77, 0x97, 0x3f, 0xbe, 0x08, 0x84, 0x8a, 0x49, 0x78, 0xd0, 0x47, 0x3f, 0x84, + 0xf5, 0xee, 0xf1, 0x09, 0xc6, 0xd5, 0x5c, 0x6d, 0xeb, 0xd5, 0x65, 0xe3, 0xc1, 0x32, 0x4e, 0x7f, + 0xe2, 0x31, 0xf3, 0x31, 0x3f, 0x9b, 0xf5, 0xba, 0x7f, 0x5b, 0x05, 0xc7, 0xbe, 0xec, 0x1f, 0xfa, + 0x77, 0x68, 0x23, 0x29, 0xe5, 0xe9, 0x95, 0x5d, 0x7d, 0x67, 0x45, 0xaf, 0x24, 0x04, 0x7b, 0xc6, + 0x0f, 0xa1, 0x12, 0x44, 0x93, 0xcf, 0x06, 0x94, 0x91, 0xb3, 0xd0, 0xb6, 0xbd, 0x25, 0xec, 0x68, + 0x5b, 0x2f, 0x31, 0xe9, 0xf7, 0x22, 0x60, 0x8a, 0x0a, 0x66, 0x1b, 0xda, 0x12, 0x9e, 0xcd, 0xd1, + 0x17, 0x90, 0x0f, 0x22, 0x32, 0xb6, 0x6d, 0x48, 0xe6, 0x0e, 0x0e, 0xfa, 0xed, 0x23, 0xab, 0xc1, + 0x4e, 0xe9, 0xfa, 0x6a, 0x2b, 0xaf, 0x0d, 0xd8, 0xd0, 0x50, 0x3d, 0xed, 0x04, 0xf4, 0x4a, 0xe6, + 0xed, 0x2f, 0xe1, 0x05, 0x8b, 0xd6, 0x51, 0xc0, 0x86, 0x82, 0x4a, 0x69, 0xaa, 0x40, 0x09, 0xa7, + 0xd3, 0xe6, 0x7f, 0xf2, 0xe0, 0xec, 0x85, 0xb1, 0x54, 0xb6, 0xb6, 0x7d, 0xb0, 0x8c, 0xbe, 0x84, + 0x3b, 0xc4, 0xfc, 0x33, 0x11, 0xa6, 0x0b, 0x85, 0xe9, 0xbd, 0x6c, 0x56, 0x1f, 0x65, 0xba, 0x9b, + 0x81, 0x93, 0x3e, 0xad, 0x53, 0xd0, 0x3e, 0xdd, 0x1c, 0xae, 0x92, 0x37, 0xbe, 0xa0, 0x13, 0xd8, + 0xe0, 0xc2, 0x1b, 0x51, 0xa9, 0x92, 0xf2, 0x62, 0xff, 0x31, 0x32, 0xff, 0x3e, 0x9f, 0x2f, 0x02, + 0xed, 0xdb, 0x9a, 0x44, 0xbb, 0xec, 0x03, 0x3d, 0x81, 0xbc, 0x20, 0xe7, 0x69, 0x1f, 0x99, 0xa9, + 0x7c, 0x4c, 0xce, 0xd5, 0x92, 0x0b, 0xc3, 0x40, 0xbf, 0x05, 0xf0, 0x03, 0x19, 0x11, 0xe5, 0x8d, + 0xa8, 0xb0, 0x27, 0x98, 0xb9, 0xc5, 0xee, 0x0c, 0xb5, 0xe4, 0x65, 0x81, 0x8d, 0x0e, 0xa1, 0xec, + 0x91, 0x54, 0x83, 0x85, 0x9b, 0x7f, 0xbc, 0xf6, 0xda, 0xd6, 0x45, 0x55, 0xbb, 0xb8, 0xbe, 0xda, + 0x2a, 0xa5, 0x16, 0x5c, 0xf2, 0x88, 0xd5, 0xe4, 0x21, 0x6c, 0xe8, 0x1f, 0xb2, 0x81, 0x4f, 0xcf, + 0x49, 0x1c, 0xaa, 0xe4, 0xec, 0x6f, 0xa8, 0x15, 0xba, 0xbb, 0xef, 0x5a, 0x9c, 0x8d, 0xab, 0xa2, + 0x16, 0x6c, 0xe8, 0xf7, 0x70, 0x87, 0x32, 0x4f, 0x4c, 0x8d, 0x02, 0xd3, 0x08, 0x4b, 0x37, 0x6f, + 0xb6, 0x37, 0x03, 0x2f, 0x6d, 0xb6, 0x4a, 0xdf, 0xb0, 0x37, 0x03, 0x80, 0xa4, 0xfa, 0x7e, 0x58, + 0xfd, 0x21, 0xc8, 0xfb, 0x44, 0x11, 0x23, 0xb9, 0x0a, 0x36, 0x63, 0xbd, 0x54, 0xb2, 0xe8, 0xff, + 0x7d, 0xa9, 0x8e, 0xfb, 0xfa, 0x9b, 0xfa, 0xca, 0x3f, 0xbf, 0xa9, 0xaf, 0xfc, 0xe9, 0xba, 0x9e, + 0x7b, 0x7d, 0x5d, 0xcf, 0xfd, 0xfd, 0xba, 0x9e, 0xfb, 0xd7, 0x75, 0x3d, 0x77, 0x56, 0x30, 0xed, + 0xd1, 0x4f, 0xfe, 0x1b, 0x00, 0x00, 0xff, 0xff, 0x90, 0x54, 0x3b, 0xfc, 0x57, 0x12, 0x00, 0x00, } diff --git a/vendor/github.com/docker/swarmkit/api/specs.proto b/vendor/github.com/docker/swarmkit/api/specs.proto index beac76f773..0b65afa929 100644 --- a/vendor/github.com/docker/swarmkit/api/specs.proto +++ b/vendor/github.com/docker/swarmkit/api/specs.proto @@ -197,6 +197,9 @@ message ContainerSpec { // Groups specifies supplementary groups available to the user. repeated string groups = 11; + // Privileges specifies security configuration/permissions. + Privileges privileges = 22; + // 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"]; @@ -236,6 +239,10 @@ message ContainerSpec { // will be exposed to the container. repeated SecretReference secrets = 12; + // ConfigReference contains references to zero or more configs that + // will be exposed to the container. + repeated ConfigReference configs = 21; + // Hosts allow additional entries to be specified in /etc/hosts // that associates IP addresses with hostnames. // Detailed documentation is available in: @@ -371,3 +378,13 @@ message SecretSpec { // Data is the secret payload - the maximum size is 500KB (that is, 500*1024 bytes) bytes data = 2; } + +// ConfigSpec specifies user-provided configuration files. +message ConfigSpec { + Annotations annotations = 1 [(gogoproto.nullable) = false]; + + // 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... + bytes data = 2; +} diff --git a/vendor/github.com/docker/swarmkit/api/store.pb.go b/vendor/github.com/docker/swarmkit/api/store.pb.go index e0dc2579cc..6a69774c46 100644 --- a/vendor/github.com/docker/swarmkit/api/store.pb.go +++ b/vendor/github.com/docker/swarmkit/api/store.pb.go @@ -73,6 +73,7 @@ type Object struct { // *Object_Secret // *Object_Resource // *Object_Extension + // *Object_Config Object isObject_Object `protobuf_oneof:"Object"` } @@ -110,6 +111,9 @@ type Object_Resource struct { type Object_Extension struct { Extension *Extension `protobuf:"bytes,8,opt,name=extension,oneof"` } +type Object_Config struct { + Config *Config `protobuf:"bytes,9,opt,name=config,oneof"` +} func (*Object_Node) isObject_Object() {} func (*Object_Service) isObject_Object() {} @@ -119,6 +123,7 @@ 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 (m *Object) GetObject() isObject_Object { if m != nil { @@ -183,6 +188,13 @@ func (m *Object) GetExtension() *Extension { return nil } +func (m *Object) GetConfig() *Config { + if x, ok := m.GetObject().(*Object_Config); ok { + return x.Config + } + return nil +} + // XXX_OneofFuncs is for the internal use of the proto package. func (*Object) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { return _Object_OneofMarshaler, _Object_OneofUnmarshaler, _Object_OneofSizer, []interface{}{ @@ -194,6 +206,7 @@ func (*Object) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, (*Object_Secret)(nil), (*Object_Resource)(nil), (*Object_Extension)(nil), + (*Object_Config)(nil), } } @@ -241,6 +254,11 @@ func _Object_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { if err := b.EncodeMessage(x.Extension); err != nil { return err } + case *Object_Config: + _ = b.EncodeVarint(9<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Config); err != nil { + return err + } case nil: default: return fmt.Errorf("Object.Object has unexpected type %T", x) @@ -315,6 +333,14 @@ func _Object_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) err := b.DecodeMessage(msg) m.Object = &Object_Extension{msg} return true, err + case 9: // Object.config + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Config) + err := b.DecodeMessage(msg) + m.Object = &Object_Config{msg} + return true, err default: return false, nil } @@ -364,6 +390,11 @@ func _Object_OneofSizer(msg proto.Message) (n int) { n += proto.SizeVarint(8<<3 | proto.WireBytes) n += proto.SizeVarint(uint64(s)) n += s + case *Object_Config: + s := proto.Size(x.Config) + n += proto.SizeVarint(9<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s case nil: default: panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) @@ -412,6 +443,7 @@ type SelectBy struct { // *SelectBy_Membership // *SelectBy_ReferencedNetworkID // *SelectBy_ReferencedSecretID + // *SelectBy_ReferencedConfigID // *SelectBy_Kind By isSelectBy_By `protobuf_oneof:"By"` } @@ -468,6 +500,9 @@ type SelectBy_ReferencedNetworkID struct { type SelectBy_ReferencedSecretID struct { ReferencedSecretID string `protobuf:"bytes,14,opt,name=referenced_secret_id,json=referencedSecretId,proto3,oneof"` } +type SelectBy_ReferencedConfigID struct { + ReferencedConfigID string `protobuf:"bytes,16,opt,name=referenced_config_id,json=referencedConfigId,proto3,oneof"` +} type SelectBy_Kind struct { Kind string `protobuf:"bytes,15,opt,name=kind,proto3,oneof"` } @@ -486,6 +521,7 @@ 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 { @@ -593,6 +629,13 @@ func (m *SelectBy) GetReferencedSecretID() string { return "" } +func (m *SelectBy) GetReferencedConfigID() string { + if x, ok := m.GetBy().(*SelectBy_ReferencedConfigID); ok { + return x.ReferencedConfigID + } + return "" +} + func (m *SelectBy) GetKind() string { if x, ok := m.GetBy().(*SelectBy_Kind); ok { return x.Kind @@ -617,6 +660,7 @@ func (*SelectBy) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) erro (*SelectBy_Membership)(nil), (*SelectBy_ReferencedNetworkID)(nil), (*SelectBy_ReferencedSecretID)(nil), + (*SelectBy_ReferencedConfigID)(nil), (*SelectBy_Kind)(nil), } } @@ -673,6 +717,9 @@ func _SelectBy_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { case *SelectBy_ReferencedSecretID: _ = b.EncodeVarint(14<<3 | proto.WireBytes) _ = b.EncodeStringBytes(x.ReferencedSecretID) + case *SelectBy_ReferencedConfigID: + _ = b.EncodeVarint(16<<3 | proto.WireBytes) + _ = b.EncodeStringBytes(x.ReferencedConfigID) case *SelectBy_Kind: _ = b.EncodeVarint(15<<3 | proto.WireBytes) _ = b.EncodeStringBytes(x.Kind) @@ -787,6 +834,13 @@ func _SelectBy_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffe x, err := b.DecodeStringBytes() m.By = &SelectBy_ReferencedSecretID{x} return true, err + case 16: // By.referenced_config_id + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.By = &SelectBy_ReferencedConfigID{x} + return true, err case 15: // By.kind if wire != proto.WireBytes { return true, proto.ErrInternalBadWireType @@ -859,6 +913,10 @@ func _SelectBy_OneofSizer(msg proto.Message) (n int) { n += proto.SizeVarint(14<<3 | proto.WireBytes) n += proto.SizeVarint(uint64(len(x.ReferencedSecretID))) n += len(x.ReferencedSecretID) + case *SelectBy_ReferencedConfigID: + n += proto.SizeVarint(16<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.ReferencedConfigID))) + n += len(x.ReferencedConfigID) case *SelectBy_Kind: n += proto.SizeVarint(15<<3 | proto.WireBytes) n += proto.SizeVarint(uint64(len(x.Kind))) @@ -1034,6 +1092,12 @@ func (m *Object) CopyFrom(src interface{}) { } github_com_docker_swarmkit_api_deepcopy.Copy(v.Extension, o.GetExtension()) m.Object = &v + case *Object_Config: + v := Object_Config{ + Config: &Config{}, + } + github_com_docker_swarmkit_api_deepcopy.Copy(v.Config, o.GetConfig()) + m.Object = &v } } @@ -1157,6 +1221,11 @@ func (m *SelectBy) CopyFrom(src interface{}) { 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(), @@ -1513,6 +1582,20 @@ func (m *Object_Extension) MarshalTo(dAtA []byte) (int, error) { } return i, nil } +func (m *Object_Config) MarshalTo(dAtA []byte) (int, error) { + i := 0 + if m.Config != nil { + dAtA[i] = 0x4a + i++ + i = encodeVarintStore(dAtA, i, uint64(m.Config.Size())) + n10, err := m.Config.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n10 + } + return i, nil +} func (m *SelectBySlot) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -1594,11 +1677,11 @@ func (m *SelectBy) MarshalTo(dAtA []byte) (int, error) { var l int _ = l if m.By != nil { - nn10, err := m.By.MarshalTo(dAtA[i:]) + nn11, err := m.By.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += nn10 + i += nn11 } return i, nil } @@ -1641,11 +1724,11 @@ func (m *SelectBy_Custom) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x2a i++ i = encodeVarintStore(dAtA, i, uint64(m.Custom.Size())) - n11, err := m.Custom.MarshalTo(dAtA[i:]) + n12, err := m.Custom.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n11 + i += n12 } return i, nil } @@ -1655,11 +1738,11 @@ func (m *SelectBy_CustomPrefix) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x32 i++ i = encodeVarintStore(dAtA, i, uint64(m.CustomPrefix.Size())) - n12, err := m.CustomPrefix.MarshalTo(dAtA[i:]) + n13, err := m.CustomPrefix.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n12 + i += n13 } return i, nil } @@ -1685,11 +1768,11 @@ func (m *SelectBy_Slot) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x4a i++ i = encodeVarintStore(dAtA, i, uint64(m.Slot.Size())) - n13, err := m.Slot.MarshalTo(dAtA[i:]) + n14, err := m.Slot.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n13 + i += n14 } return i, nil } @@ -1738,6 +1821,16 @@ func (m *SelectBy_Kind) MarshalTo(dAtA []byte) (int, error) { i += copy(dAtA[i:], m.Kind) return i, nil } +func (m *SelectBy_ReferencedConfigID) MarshalTo(dAtA []byte) (int, error) { + i := 0 + dAtA[i] = 0x82 + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintStore(dAtA, i, uint64(len(m.ReferencedConfigID))) + i += copy(dAtA[i:], m.ReferencedConfigID) + return i, nil +} func (m *WatchRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -1769,11 +1862,11 @@ func (m *WatchRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintStore(dAtA, i, uint64(m.ResumeFrom.Size())) - n14, err := m.ResumeFrom.MarshalTo(dAtA[i:]) + n15, err := m.ResumeFrom.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n14 + i += n15 } if m.IncludeOldObject { dAtA[i] = 0x18 @@ -1860,11 +1953,11 @@ func (m *WatchMessage) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintStore(dAtA, i, uint64(m.Version.Size())) - n15, err := m.Version.MarshalTo(dAtA[i:]) + n16, err := m.Version.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n15 + i += n16 } return i, nil } @@ -1893,21 +1986,21 @@ func (m *WatchMessage_Event) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintStore(dAtA, i, uint64(m.Object.Size())) - n16, err := m.Object.MarshalTo(dAtA[i:]) + n17, err := m.Object.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n16 + i += n17 } if m.OldObject != nil { dAtA[i] = 0x1a i++ i = encodeVarintStore(dAtA, i, uint64(m.OldObject.Size())) - n17, err := m.OldObject.MarshalTo(dAtA[i:]) + n18, err := m.OldObject.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n17 + i += n18 } return i, nil } @@ -2144,6 +2237,15 @@ func (m *Object_Extension) Size() (n int) { } return n } +func (m *Object_Config) Size() (n int) { + var l int + _ = l + if m.Config != nil { + l = m.Config.Size() + n += 1 + l + sovStore(uint64(l)) + } + return n +} func (m *SelectBySlot) Size() (n int) { var l int _ = l @@ -2292,6 +2394,13 @@ func (m *SelectBy_Kind) Size() (n int) { n += 1 + l + sovStore(uint64(l)) return n } +func (m *SelectBy_ReferencedConfigID) Size() (n int) { + var l int + _ = l + l = len(m.ReferencedConfigID) + n += 2 + l + sovStore(uint64(l)) + return n +} func (m *WatchRequest) Size() (n int) { var l int _ = l @@ -2466,6 +2575,16 @@ func (this *Object_Extension) String() string { }, "") 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 *SelectBySlot) String() string { if this == nil { return "nil" @@ -2649,6 +2768,16 @@ func (this *SelectBy_Kind) String() string { }, "") 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" @@ -2989,6 +3118,38 @@ func (m *Object) Unmarshal(dAtA []byte) error { } 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 ErrIntOverflowStore + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthStore + } + postIndex := iNdEx + msglen + 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 default: iNdEx = preIndex skippy, err := skipStore(dAtA[iNdEx:]) @@ -3691,6 +3852,35 @@ func (m *SelectBy) Unmarshal(dAtA []byte) error { } 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 ErrIntOverflowStore + } + 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 ErrInvalidLengthStore + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.By = &SelectBy_ReferencedConfigID{string(dAtA[iNdEx:postIndex])} + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipStore(dAtA[iNdEx:]) @@ -4332,76 +4522,78 @@ var ( func init() { proto.RegisterFile("store.proto", fileDescriptorStore) } var fileDescriptorStore = []byte{ - // 1127 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x94, 0x96, 0x4f, 0x6f, 0x1b, 0xc5, - 0x1b, 0xc7, 0xbd, 0x8e, 0xb3, 0xb6, 0x1f, 0xc7, 0x6d, 0x34, 0x49, 0xdb, 0xfd, 0xf9, 0x57, 0x6c, - 0x63, 0x04, 0x54, 0xb4, 0xb8, 0x10, 0x4a, 0x11, 0x50, 0x90, 0x62, 0xc7, 0xc8, 0xa6, 0x8a, 0x13, - 0x8d, 0x93, 0xe6, 0x68, 0x6d, 0x76, 0x9f, 0xa4, 0x8b, 0xf7, 0x8f, 0x99, 0x1d, 0x3b, 0xcd, 0x8d, - 0x23, 0xea, 0x1d, 0x89, 0x4b, 0xb9, 0xc0, 0x99, 0x0b, 0x37, 0x78, 0x03, 0x15, 0x07, 0xc4, 0x11, - 0x2e, 0x16, 0xf5, 0x0b, 0xe0, 0x15, 0x70, 0x40, 0x33, 0x3b, 0x9b, 0x3f, 0xee, 0x3a, 0xa5, 0x27, - 0xcf, 0xcc, 0x7e, 0x3f, 0xcf, 0x3e, 0xf3, 0x7c, 0x67, 0x1e, 0x2f, 0x14, 0x42, 0x1e, 0x30, 0xac, - 0x0f, 0x59, 0xc0, 0x03, 0x42, 0xec, 0xc0, 0x1a, 0x20, 0xab, 0x87, 0x47, 0x26, 0xf3, 0x06, 0x0e, - 0xaf, 0x8f, 0xdf, 0x2d, 0x15, 0xc2, 0x21, 0x5a, 0x61, 0x24, 0x28, 0x15, 0x83, 0xfd, 0x2f, 0xd0, - 0xe2, 0xf1, 0xb4, 0xc0, 0x8f, 0x87, 0x18, 0x4f, 0x56, 0x0f, 0x83, 0xc3, 0x40, 0x0e, 0x6f, 0x8b, - 0x91, 0x5a, 0x5d, 0x19, 0xba, 0xa3, 0x43, 0xc7, 0xbf, 0x1d, 0xfd, 0x44, 0x8b, 0xb5, 0xdf, 0x16, - 0x40, 0xdf, 0x92, 0x91, 0x48, 0x1d, 0x32, 0x7e, 0x60, 0xa3, 0xa1, 0x55, 0xb5, 0x1b, 0x85, 0x35, - 0xa3, 0xfe, 0x7c, 0x06, 0xf5, 0x6e, 0x60, 0x63, 0x3b, 0x45, 0xa5, 0x8e, 0x7c, 0x00, 0xd9, 0x10, - 0xd9, 0xd8, 0xb1, 0xd0, 0x48, 0x4b, 0xe4, 0xff, 0x49, 0x48, 0x2f, 0x92, 0xb4, 0x53, 0x34, 0x56, - 0x0b, 0xd0, 0x47, 0x7e, 0x14, 0xb0, 0x81, 0xb1, 0x30, 0x1f, 0xec, 0x46, 0x12, 0x01, 0x2a, 0xb5, - 0xc8, 0x90, 0x9b, 0xe1, 0xc0, 0xc8, 0xcc, 0xcf, 0x70, 0xc7, 0x0c, 0x05, 0x22, 0x75, 0xe2, 0x45, - 0x96, 0x3b, 0x0a, 0x39, 0x32, 0x63, 0x71, 0xfe, 0x8b, 0x9a, 0x91, 0x44, 0xbc, 0x48, 0xa9, 0xc9, - 0x1d, 0xd0, 0x43, 0xb4, 0x18, 0x72, 0x43, 0x97, 0x5c, 0x29, 0x79, 0x67, 0x42, 0xd1, 0x4e, 0x51, - 0xa5, 0x25, 0x1f, 0x41, 0x8e, 0x61, 0x18, 0x8c, 0x98, 0x85, 0x46, 0x56, 0x72, 0xd7, 0x93, 0x38, - 0xaa, 0x34, 0xed, 0x14, 0x3d, 0xd1, 0x93, 0x4f, 0x20, 0x8f, 0x8f, 0x38, 0xfa, 0xa1, 0x13, 0xf8, - 0x46, 0x4e, 0xc2, 0xaf, 0x24, 0xc1, 0xad, 0x58, 0xd4, 0x4e, 0xd1, 0x53, 0xa2, 0x91, 0x8b, 0x5d, - 0xac, 0x6d, 0xc3, 0x52, 0x0f, 0x5d, 0xb4, 0x78, 0xe3, 0xb8, 0xe7, 0x06, 0x9c, 0xdc, 0x02, 0x50, - 0x75, 0xef, 0x3b, 0xb6, 0xf4, 0x36, 0xdf, 0x28, 0x4e, 0x27, 0x95, 0xbc, 0x32, 0xa6, 0xb3, 0x41, - 0xf3, 0x4a, 0xd0, 0xb1, 0x09, 0x81, 0x4c, 0xe8, 0x06, 0x5c, 0x1a, 0x9a, 0xa1, 0x72, 0x5c, 0xdb, - 0x86, 0x4b, 0x71, 0xc4, 0xe6, 0x28, 0xe4, 0x81, 0x27, 0x54, 0x03, 0xc7, 0x57, 0xd1, 0xa8, 0x1c, - 0x93, 0x55, 0x58, 0x74, 0x7c, 0x1b, 0x1f, 0x49, 0x34, 0x4f, 0xa3, 0x89, 0x58, 0x1d, 0x9b, 0xee, - 0x08, 0xa5, 0xd1, 0x79, 0x1a, 0x4d, 0x6a, 0xdf, 0xe9, 0x90, 0x8b, 0x43, 0x12, 0x03, 0xd2, 0x27, - 0x89, 0xe9, 0xd3, 0x49, 0x25, 0xdd, 0xd9, 0x68, 0xa7, 0x68, 0xda, 0xb1, 0xc9, 0x4d, 0xc8, 0x3b, - 0x76, 0x7f, 0xc8, 0xf0, 0xc0, 0x51, 0x61, 0x1b, 0x4b, 0xd3, 0x49, 0x25, 0xd7, 0xd9, 0xd8, 0x96, - 0x6b, 0xa2, 0x80, 0x8e, 0x1d, 0x8d, 0xc9, 0x2a, 0x64, 0x7c, 0xd3, 0x53, 0x2f, 0x92, 0x67, 0xd4, - 0xf4, 0x90, 0xbc, 0x0a, 0x05, 0xf1, 0x1b, 0x07, 0xc9, 0xa8, 0x87, 0x20, 0x16, 0x15, 0x78, 0x0f, - 0x74, 0x4b, 0x6e, 0x4b, 0x9d, 0x91, 0x5a, 0xb2, 0xd7, 0x67, 0x0b, 0x20, 0x3c, 0x8f, 0x18, 0xd2, - 0x81, 0x62, 0x34, 0x8a, 0x5f, 0xa1, 0xbf, 0x44, 0x90, 0xa5, 0x08, 0x55, 0x89, 0xd4, 0xcf, 0x39, - 0x95, 0x4d, 0x70, 0x4a, 0x78, 0x7e, 0xea, 0xd5, 0xeb, 0x90, 0x15, 0xf7, 0x50, 0x88, 0x73, 0x52, - 0x0c, 0xd3, 0x49, 0x45, 0x17, 0x57, 0x54, 0x2a, 0x75, 0xf1, 0xb0, 0x63, 0x93, 0xbb, 0xca, 0xd2, - 0xbc, 0x4c, 0xac, 0x7a, 0x51, 0x62, 0xe2, 0xc0, 0x88, 0xd2, 0x09, 0x3d, 0xd9, 0x80, 0xa2, 0x8d, - 0xa1, 0xc3, 0xd0, 0xee, 0x87, 0xdc, 0xe4, 0x68, 0x40, 0x55, 0xbb, 0x71, 0x29, 0xf9, 0x54, 0x8a, - 0x5b, 0xd7, 0x13, 0x22, 0xb1, 0x29, 0x45, 0xc9, 0x39, 0x59, 0x83, 0x0c, 0x0b, 0x5c, 0x34, 0x0a, - 0x12, 0xbe, 0x3e, 0xaf, 0xa9, 0xd0, 0xc0, 0x95, 0x8d, 0x45, 0x68, 0x49, 0x07, 0xc0, 0x43, 0x6f, - 0x1f, 0x59, 0xf8, 0xd0, 0x19, 0x1a, 0x4b, 0x92, 0x7c, 0x73, 0x1e, 0xd9, 0x1b, 0xa2, 0x55, 0xdf, - 0x3c, 0x91, 0x0b, 0x73, 0x4f, 0x61, 0xb2, 0x09, 0x57, 0x18, 0x1e, 0x20, 0x43, 0xdf, 0x42, 0xbb, - 0xaf, 0xfa, 0x88, 0xa8, 0x58, 0x51, 0x56, 0xec, 0xda, 0x74, 0x52, 0x59, 0xa1, 0x27, 0x02, 0xd5, - 0x72, 0x64, 0xf9, 0x56, 0xd8, 0x73, 0xcb, 0x36, 0xf9, 0x1c, 0x56, 0xcf, 0x84, 0x8b, 0xae, 0xbd, - 0x88, 0x76, 0x49, 0x46, 0xbb, 0x3a, 0x9d, 0x54, 0xc8, 0x69, 0xb4, 0xa8, 0x3f, 0xc8, 0x60, 0x84, - 0xcd, 0xae, 0x8a, 0x0b, 0x13, 0x5d, 0xa2, 0xcb, 0xf1, 0x81, 0x15, 0xb3, 0x46, 0x06, 0xd2, 0x8d, - 0xe3, 0xda, 0x9f, 0x69, 0x58, 0xda, 0x33, 0xb9, 0xf5, 0x90, 0xe2, 0x97, 0x23, 0x0c, 0x39, 0x69, - 0x41, 0x16, 0x7d, 0xce, 0x1c, 0x0c, 0x0d, 0xad, 0xba, 0x70, 0xa3, 0xb0, 0x76, 0x33, 0xa9, 0x1e, - 0x67, 0x91, 0x68, 0xd2, 0xf2, 0x39, 0x3b, 0xa6, 0x31, 0x4b, 0xee, 0x41, 0x81, 0x61, 0x38, 0xf2, - 0xb0, 0x7f, 0xc0, 0x02, 0xef, 0xa2, 0xb6, 0xfd, 0x00, 0x99, 0x68, 0x2c, 0x14, 0x22, 0xfd, 0x67, - 0x2c, 0xf0, 0xc8, 0x2d, 0x20, 0x8e, 0x6f, 0xb9, 0x23, 0x1b, 0xfb, 0x81, 0x6b, 0xf7, 0xa3, 0x3f, - 0x20, 0x79, 0xe1, 0x72, 0x74, 0x59, 0x3d, 0xd9, 0x72, 0xed, 0xa8, 0x11, 0x95, 0xbe, 0xd1, 0x00, - 0x4e, 0x73, 0x48, 0xec, 0x19, 0x1f, 0x83, 0x6e, 0x5a, 0x5c, 0x74, 0xbc, 0xb4, 0x34, 0xf9, 0xb5, - 0xb9, 0x9b, 0x5a, 0x97, 0xb2, 0xfb, 0x8e, 0x6f, 0x53, 0x85, 0x90, 0xbb, 0x90, 0x3d, 0x70, 0x5c, - 0x8e, 0x2c, 0x34, 0x16, 0x64, 0x49, 0xae, 0x5f, 0x74, 0xb4, 0x69, 0x2c, 0xae, 0xfd, 0x12, 0xd7, - 0x76, 0x13, 0xc3, 0xd0, 0x3c, 0x44, 0xf2, 0x29, 0xe8, 0x38, 0x46, 0x9f, 0xc7, 0xa5, 0x7d, 0x63, - 0x6e, 0x16, 0x8a, 0xa8, 0xb7, 0x84, 0x9c, 0x2a, 0x8a, 0xbc, 0x0f, 0xd9, 0x71, 0x54, 0xad, 0xff, - 0x52, 0xd0, 0x58, 0x5b, 0xfa, 0x49, 0x83, 0x45, 0x19, 0xe8, 0x4c, 0x19, 0xb4, 0x97, 0x2f, 0xc3, - 0x1a, 0xe8, 0xca, 0x88, 0xf4, 0xfc, 0xbf, 0xaa, 0xc8, 0x12, 0xaa, 0x94, 0xe4, 0x43, 0x80, 0x19, - 0x03, 0x2f, 0xe6, 0xf2, 0x41, 0xec, 0xea, 0x5b, 0xff, 0x68, 0x70, 0x79, 0x26, 0x15, 0x72, 0x07, - 0x56, 0xf7, 0xd6, 0x77, 0x9a, 0xed, 0xfe, 0x7a, 0x73, 0xa7, 0xb3, 0xd5, 0xed, 0xef, 0x76, 0xef, - 0x77, 0xb7, 0xf6, 0xba, 0xcb, 0xa9, 0x52, 0xe9, 0xf1, 0x93, 0xea, 0xd5, 0x19, 0xf9, 0xae, 0x3f, - 0xf0, 0x83, 0x23, 0x91, 0xf8, 0xca, 0x39, 0xaa, 0x49, 0x5b, 0xeb, 0x3b, 0xad, 0x65, 0xad, 0xf4, - 0xbf, 0xc7, 0x4f, 0xaa, 0x57, 0x66, 0xa0, 0x26, 0xc3, 0xa8, 0x9b, 0x9c, 0x67, 0x76, 0xb7, 0x37, - 0x04, 0x93, 0x4e, 0x64, 0x76, 0x87, 0x76, 0x12, 0x43, 0x5b, 0x9b, 0x5b, 0x0f, 0x5a, 0xcb, 0x99, - 0x44, 0x86, 0xa2, 0x17, 0x8c, 0xb1, 0x74, 0xed, 0xeb, 0xef, 0xcb, 0xa9, 0x9f, 0x7f, 0x28, 0xcf, - 0x6e, 0x75, 0xcd, 0x83, 0xc5, 0x9e, 0xf8, 0x4a, 0x23, 0x36, 0x2c, 0xca, 0x67, 0xa4, 0xfa, 0xa2, - 0x8b, 0x58, 0xaa, 0xbe, 0xe8, 0x3c, 0xd5, 0xae, 0xfc, 0xfa, 0xe3, 0xdf, 0xdf, 0xa6, 0x2f, 0x43, - 0x51, 0x2a, 0xde, 0xf6, 0x4c, 0xdf, 0x3c, 0x44, 0xf6, 0x8e, 0xd6, 0x30, 0x9e, 0x3e, 0x2b, 0xa7, - 0xfe, 0x78, 0x56, 0x4e, 0x7d, 0x35, 0x2d, 0x6b, 0x4f, 0xa7, 0x65, 0xed, 0xf7, 0x69, 0x59, 0xfb, - 0x6b, 0x5a, 0xd6, 0xf6, 0x75, 0xf9, 0xf9, 0xf6, 0xde, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0xa9, - 0xa5, 0x8e, 0xe6, 0x35, 0x0a, 0x00, 0x00, + // 1160 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x94, 0x96, 0xbd, 0x73, 0x1b, 0xc5, + 0x1b, 0xc7, 0x75, 0x8a, 0x7c, 0x92, 0x1e, 0xd9, 0x89, 0x67, 0xed, 0x24, 0xf7, 0xd3, 0x2f, 0xc8, + 0x42, 0x0c, 0x90, 0x21, 0x41, 0x01, 0x13, 0xc2, 0x00, 0x81, 0x19, 0x4b, 0x16, 0x23, 0x91, 0xf1, + 0xcb, 0xac, 0xec, 0xa4, 0xd4, 0x5c, 0xee, 0x1e, 0x2b, 0x87, 0xee, 0x6e, 0xc5, 0xde, 0x49, 0x89, + 0x3b, 0x0a, 0x0a, 0x26, 0x3d, 0x33, 0x34, 0xa9, 0xa0, 0xa6, 0xa1, 0x83, 0x7f, 0x20, 0x43, 0x45, + 0x09, 0x8d, 0x86, 0xa8, 0xa4, 0xe0, 0x2f, 0xa0, 0x60, 0xf6, 0xe5, 0xfc, 0xa2, 0x9c, 0x1c, 0x52, + 0x69, 0x77, 0xef, 0xf3, 0x7d, 0xf6, 0xb9, 0xe7, 0xed, 0x04, 0xa5, 0x28, 0x66, 0x1c, 0xeb, 0x43, + 0xce, 0x62, 0x46, 0x88, 0xcb, 0x9c, 0x01, 0xf2, 0x7a, 0xf4, 0xd0, 0xe6, 0xc1, 0xc0, 0x8b, 0xeb, + 0xe3, 0x77, 0xcb, 0xa5, 0x68, 0x88, 0x4e, 0xa4, 0x80, 0xf2, 0x12, 0xbb, 0xff, 0x05, 0x3a, 0x71, + 0xb2, 0x2d, 0xc5, 0x87, 0x43, 0x4c, 0x36, 0xab, 0x7d, 0xd6, 0x67, 0x72, 0x79, 0x43, 0xac, 0xf4, + 0xe9, 0xca, 0xd0, 0x1f, 0xf5, 0xbd, 0xf0, 0x86, 0xfa, 0x51, 0x87, 0xb5, 0xaf, 0x73, 0x60, 0xee, + 0x48, 0x4b, 0xa4, 0x0e, 0xb9, 0x90, 0xb9, 0x68, 0x19, 0x55, 0xe3, 0x6a, 0x69, 0xdd, 0xaa, 0x3f, + 0xef, 0x41, 0x7d, 0x9b, 0xb9, 0xd8, 0xce, 0x50, 0xc9, 0x91, 0x0f, 0x20, 0x1f, 0x21, 0x1f, 0x7b, + 0x0e, 0x5a, 0x59, 0x29, 0xf9, 0x7f, 0x9a, 0xa4, 0xab, 0x90, 0x76, 0x86, 0x26, 0xb4, 0x10, 0x86, + 0x18, 0x3f, 0x64, 0x7c, 0x60, 0x9d, 0x9b, 0x2f, 0xdc, 0x56, 0x88, 0x10, 0x6a, 0x5a, 0x78, 0x18, + 0xdb, 0xd1, 0xc0, 0xca, 0xcd, 0xf7, 0x70, 0xcf, 0x8e, 0x84, 0x44, 0x72, 0xe2, 0x22, 0xc7, 0x1f, + 0x45, 0x31, 0x72, 0x6b, 0x61, 0xfe, 0x45, 0x4d, 0x85, 0x88, 0x8b, 0x34, 0x4d, 0x6e, 0x82, 0x19, + 0xa1, 0xc3, 0x31, 0xb6, 0x4c, 0xa9, 0x2b, 0xa7, 0xbf, 0x99, 0x20, 0xda, 0x19, 0xaa, 0x59, 0xf2, + 0x11, 0x14, 0x38, 0x46, 0x6c, 0xc4, 0x1d, 0xb4, 0xf2, 0x52, 0x77, 0x25, 0x4d, 0x47, 0x35, 0xd3, + 0xce, 0xd0, 0x23, 0x9e, 0x7c, 0x02, 0x45, 0x7c, 0x14, 0x63, 0x18, 0x79, 0x2c, 0xb4, 0x0a, 0x52, + 0xfc, 0x4a, 0x9a, 0xb8, 0x95, 0x40, 0xed, 0x0c, 0x3d, 0x56, 0x08, 0x87, 0x1d, 0x16, 0x1e, 0x78, + 0x7d, 0xab, 0x38, 0xdf, 0xe1, 0xa6, 0x24, 0x84, 0xc3, 0x8a, 0x6d, 0x14, 0x92, 0xdc, 0xd7, 0x76, + 0x61, 0xb1, 0x8b, 0x3e, 0x3a, 0x71, 0xe3, 0xb0, 0xeb, 0xb3, 0x98, 0x5c, 0x07, 0xd0, 0xd9, 0xea, + 0x79, 0xae, 0xac, 0x88, 0x62, 0x63, 0x69, 0x3a, 0x59, 0x2b, 0xea, 0x74, 0x76, 0x36, 0x69, 0x51, + 0x03, 0x1d, 0x97, 0x10, 0xc8, 0x45, 0x3e, 0x8b, 0x65, 0x19, 0xe4, 0xa8, 0x5c, 0xd7, 0x76, 0xe1, + 0x7c, 0x62, 0xb1, 0x39, 0x8a, 0x62, 0x16, 0x08, 0x6a, 0xe0, 0x85, 0xda, 0x1a, 0x95, 0x6b, 0xb2, + 0x0a, 0x0b, 0x5e, 0xe8, 0xe2, 0x23, 0x29, 0x2d, 0x52, 0xb5, 0x11, 0xa7, 0x63, 0xdb, 0x1f, 0xa1, + 0x2c, 0x8f, 0x22, 0x55, 0x9b, 0xda, 0x5f, 0x26, 0x14, 0x12, 0x93, 0xc4, 0x82, 0xec, 0x91, 0x63, + 0xe6, 0x74, 0xb2, 0x96, 0xed, 0x6c, 0xb6, 0x33, 0x34, 0xeb, 0xb9, 0xe4, 0x1a, 0x14, 0x3d, 0xb7, + 0x37, 0xe4, 0x78, 0xe0, 0x69, 0xb3, 0x8d, 0xc5, 0xe9, 0x64, 0xad, 0xd0, 0xd9, 0xdc, 0x95, 0x67, + 0x22, 0xec, 0x9e, 0xab, 0xd6, 0x64, 0x15, 0x72, 0xa1, 0x1d, 0xe8, 0x8b, 0x64, 0x65, 0xdb, 0x01, + 0x92, 0x57, 0xa1, 0x24, 0x7e, 0x13, 0x23, 0x39, 0xfd, 0x10, 0xc4, 0xa1, 0x16, 0xde, 0x06, 0xd3, + 0x91, 0xaf, 0xa5, 0x2b, 0xab, 0x96, 0x5e, 0x21, 0x27, 0x03, 0x20, 0x03, 0xaf, 0x42, 0xd1, 0x81, + 0x25, 0xb5, 0x4a, 0xae, 0x30, 0x5f, 0xc2, 0xc8, 0xa2, 0x92, 0x6a, 0x47, 0xea, 0xa7, 0x32, 0x95, + 0x4f, 0xc9, 0x94, 0xa8, 0x94, 0xe3, 0x5c, 0xbd, 0x0e, 0x79, 0xd1, 0xbd, 0x02, 0x2e, 0x48, 0x18, + 0xa6, 0x93, 0x35, 0x53, 0x34, 0xb6, 0x24, 0x4d, 0xf1, 0xb0, 0xe3, 0x92, 0x5b, 0x3a, 0xa5, 0xaa, + 0x9c, 0xaa, 0x67, 0x39, 0x26, 0x0a, 0x46, 0x84, 0x4e, 0xf0, 0x64, 0x13, 0x96, 0x5c, 0x8c, 0x3c, + 0x8e, 0x6e, 0x2f, 0x8a, 0xed, 0x18, 0x2d, 0xa8, 0x1a, 0x57, 0xcf, 0xa7, 0xd7, 0xb2, 0xe8, 0xd5, + 0xae, 0x80, 0xc4, 0x4b, 0x69, 0x95, 0xdc, 0x93, 0x75, 0xc8, 0x71, 0xe6, 0xa3, 0x55, 0x92, 0xe2, + 0x2b, 0xf3, 0x46, 0x11, 0x65, 0xbe, 0x1c, 0x47, 0x82, 0x25, 0x1d, 0x80, 0x00, 0x83, 0xfb, 0xc8, + 0xa3, 0x07, 0xde, 0xd0, 0x5a, 0x94, 0xca, 0x37, 0xe7, 0x29, 0xbb, 0x43, 0x74, 0xea, 0x5b, 0x47, + 0xb8, 0x48, 0xee, 0xb1, 0x98, 0x6c, 0xc1, 0x45, 0x8e, 0x07, 0xc8, 0x31, 0x74, 0xd0, 0xed, 0xe9, + 0xe9, 0x23, 0x22, 0xb6, 0x24, 0x23, 0x76, 0x79, 0x3a, 0x59, 0x5b, 0xa1, 0x47, 0x80, 0x1e, 0x54, + 0x32, 0x7c, 0x2b, 0xfc, 0xb9, 0x63, 0x97, 0x7c, 0x0e, 0xab, 0x27, 0xcc, 0xa9, 0x61, 0x21, 0xac, + 0x9d, 0x97, 0xd6, 0x2e, 0x4d, 0x27, 0x6b, 0xe4, 0xd8, 0x9a, 0x9a, 0x2a, 0xd2, 0x18, 0xe1, 0xb3, + 0xa7, 0xa2, 0x61, 0x54, 0x13, 0x5d, 0x48, 0x0a, 0x56, 0xb6, 0xd1, 0xe9, 0x1b, 0x54, 0x77, 0x8b, + 0x1b, 0x96, 0xd3, 0x6e, 0x50, 0x63, 0x60, 0xf6, 0x06, 0x7d, 0xea, 0x36, 0x72, 0x90, 0x6d, 0x1c, + 0xd6, 0xfe, 0xc8, 0xc2, 0xe2, 0x3d, 0x3b, 0x76, 0x1e, 0x50, 0xfc, 0x72, 0x84, 0x51, 0x4c, 0x5a, + 0x90, 0xc7, 0x30, 0xe6, 0x1e, 0x46, 0x96, 0x51, 0x3d, 0x77, 0xb5, 0xb4, 0x7e, 0x2d, 0x2d, 0xb6, + 0x27, 0x25, 0x6a, 0xd3, 0x0a, 0x63, 0x7e, 0x48, 0x13, 0x2d, 0xb9, 0x0d, 0x25, 0x8e, 0xd1, 0x28, + 0xc0, 0xde, 0x01, 0x67, 0xc1, 0x59, 0x1f, 0x8e, 0xbb, 0xc8, 0xc5, 0x68, 0xa3, 0xa0, 0xf8, 0xcf, + 0x38, 0x0b, 0xc8, 0x75, 0x20, 0x5e, 0xe8, 0xf8, 0x23, 0x17, 0x7b, 0xcc, 0x77, 0x7b, 0xea, 0x13, + 0x28, 0x9b, 0xb7, 0x40, 0x97, 0xf5, 0x93, 0x1d, 0xdf, 0x55, 0x43, 0xad, 0xfc, 0xad, 0x01, 0x70, + 0xec, 0x43, 0xea, 0xfc, 0xf9, 0x18, 0x4c, 0xdb, 0x89, 0xc5, 0xcc, 0xcd, 0xca, 0x82, 0x79, 0x6d, + 0xee, 0x4b, 0x6d, 0x48, 0xec, 0x8e, 0x17, 0xba, 0x54, 0x4b, 0xc8, 0x2d, 0xc8, 0x1f, 0x78, 0x7e, + 0x8c, 0x3c, 0xb2, 0xce, 0xc9, 0x90, 0x5c, 0x39, 0xab, 0x4d, 0x68, 0x02, 0xd7, 0x7e, 0x49, 0x62, + 0xbb, 0x85, 0x51, 0x64, 0xf7, 0x91, 0x7c, 0x0a, 0x26, 0x8e, 0x31, 0x8c, 0x93, 0xd0, 0xbe, 0x31, + 0xd7, 0x0b, 0xad, 0xa8, 0xb7, 0x04, 0x4e, 0xb5, 0x8a, 0xbc, 0x0f, 0xf9, 0xb1, 0x8a, 0xd6, 0x7f, + 0x09, 0x68, 0xc2, 0x96, 0x7f, 0x32, 0x60, 0x41, 0x1a, 0x3a, 0x11, 0x06, 0xe3, 0xe5, 0xc3, 0xb0, + 0x0e, 0xa6, 0x4e, 0x44, 0x76, 0xfe, 0xb7, 0x47, 0xa5, 0x84, 0x6a, 0x92, 0x7c, 0x08, 0x30, 0x93, + 0xc0, 0xb3, 0x75, 0x45, 0x96, 0x64, 0xf5, 0xad, 0x7f, 0x0c, 0xb8, 0x30, 0xe3, 0x0a, 0xb9, 0x09, + 0xab, 0xf7, 0x36, 0xf6, 0x9a, 0xed, 0xde, 0x46, 0x73, 0xaf, 0xb3, 0xb3, 0xdd, 0xdb, 0xdf, 0xbe, + 0xb3, 0xbd, 0x73, 0x6f, 0x7b, 0x39, 0x53, 0x2e, 0x3f, 0x7e, 0x52, 0xbd, 0x34, 0x83, 0xef, 0x87, + 0x83, 0x90, 0x3d, 0x14, 0x8e, 0xaf, 0x9c, 0x52, 0x35, 0x69, 0x6b, 0x63, 0xaf, 0xb5, 0x6c, 0x94, + 0xff, 0xf7, 0xf8, 0x49, 0xf5, 0xe2, 0x8c, 0xa8, 0xc9, 0x51, 0x4d, 0xa6, 0xd3, 0x9a, 0xfd, 0xdd, + 0x4d, 0xa1, 0xc9, 0xa6, 0x6a, 0xf6, 0x87, 0x6e, 0x9a, 0x86, 0xb6, 0xb6, 0x76, 0xee, 0xb6, 0x96, + 0x73, 0xa9, 0x1a, 0x8a, 0x01, 0x1b, 0x63, 0xf9, 0xf2, 0x37, 0xdf, 0x57, 0x32, 0x3f, 0xff, 0x50, + 0x99, 0x7d, 0xd5, 0xf5, 0x00, 0x16, 0xba, 0xe2, 0x7f, 0x22, 0x71, 0x61, 0x41, 0x3e, 0x23, 0xd5, + 0x17, 0x35, 0x62, 0xb9, 0xfa, 0xa2, 0x7a, 0xaa, 0x5d, 0xfc, 0xf5, 0xc7, 0xbf, 0xbf, 0xcb, 0x5e, + 0x80, 0x25, 0x49, 0xbc, 0x1d, 0xd8, 0xa1, 0xdd, 0x47, 0xfe, 0x8e, 0xd1, 0xb0, 0x9e, 0x3e, 0xab, + 0x64, 0x7e, 0x7f, 0x56, 0xc9, 0x7c, 0x35, 0xad, 0x18, 0x4f, 0xa7, 0x15, 0xe3, 0xb7, 0x69, 0xc5, + 0xf8, 0x73, 0x5a, 0x31, 0xee, 0x9b, 0xf2, 0x0f, 0xe4, 0x7b, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, + 0x9d, 0xb1, 0x59, 0x21, 0xb7, 0x0a, 0x00, 0x00, } diff --git a/vendor/github.com/docker/swarmkit/api/store.proto b/vendor/github.com/docker/swarmkit/api/store.proto index ed7efe27a7..b95c31cd5c 100644 --- a/vendor/github.com/docker/swarmkit/api/store.proto +++ b/vendor/github.com/docker/swarmkit/api/store.proto @@ -18,6 +18,7 @@ message Object { Secret secret = 6; Resource resource = 7; Extension extension = 8; + Config config = 9; } } @@ -60,6 +61,7 @@ message SelectBy { // 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"]; // supported by: resource string kind = 15; diff --git a/vendor/github.com/docker/swarmkit/api/types.pb.go b/vendor/github.com/docker/swarmkit/api/types.pb.go index 271c1794a0..bbf1b87602 100644 --- a/vendor/github.com/docker/swarmkit/api/types.pb.go +++ b/vendor/github.com/docker/swarmkit/api/types.pb.go @@ -29,6 +29,7 @@ PluginDescription EngineDescription NodeDescription + NodeTLSInfo RaftMemberStatus NodeStatus Image @@ -63,11 +64,14 @@ Certificate EncryptionKey ManagerStatus + FileTarget SecretReference + ConfigReference BlacklistedCertificate HealthConfig MaybeEncryptedRecord RootRotation + Privileges NodeSpec ServiceSpec ReplicatedService @@ -80,6 +84,7 @@ NetworkSpec ClusterSpec SecretSpec + ConfigSpec Meta Node Service @@ -89,6 +94,7 @@ Network Cluster Secret + Config Resource Extension GetNodeRequest @@ -140,6 +146,16 @@ CreateSecretResponse RemoveSecretRequest RemoveSecretResponse + GetConfigRequest + GetConfigResponse + UpdateConfigRequest + UpdateConfigResponse + ListConfigsRequest + ListConfigsResponse + CreateConfigRequest + CreateConfigResponse + RemoveConfigRequest + RemoveConfigResponse SessionRequest SessionMessage HeartbeatRequest @@ -336,7 +352,7 @@ func (x RaftMemberStatus_Reachability) String() string { return proto.EnumName(RaftMemberStatus_Reachability_name, int32(x)) } func (RaftMemberStatus_Reachability) EnumDescriptor() ([]byte, []int) { - return fileDescriptorTypes, []int{9, 0} + return fileDescriptorTypes, []int{10, 0} } // TODO(aluzzardi) These should be using `gogoproto.enumvalue_customname`. @@ -369,7 +385,7 @@ var NodeStatus_State_value = map[string]int32{ func (x NodeStatus_State) String() string { return proto.EnumName(NodeStatus_State_name, int32(x)) } -func (NodeStatus_State) EnumDescriptor() ([]byte, []int) { return fileDescriptorTypes, []int{10, 0} } +func (NodeStatus_State) EnumDescriptor() ([]byte, []int) { return fileDescriptorTypes, []int{11, 0} } type Mount_MountType int32 @@ -393,7 +409,7 @@ var Mount_MountType_value = map[string]int32{ func (x Mount_MountType) String() string { return proto.EnumName(Mount_MountType_name, int32(x)) } -func (Mount_MountType) EnumDescriptor() ([]byte, []int) { return fileDescriptorTypes, []int{12, 0} } +func (Mount_MountType) EnumDescriptor() ([]byte, []int) { return fileDescriptorTypes, []int{13, 0} } type Mount_BindOptions_MountPropagation int32 @@ -427,7 +443,7 @@ func (x Mount_BindOptions_MountPropagation) String() string { return proto.EnumName(Mount_BindOptions_MountPropagation_name, int32(x)) } func (Mount_BindOptions_MountPropagation) EnumDescriptor() ([]byte, []int) { - return fileDescriptorTypes, []int{12, 0, 0} + return fileDescriptorTypes, []int{13, 0, 0} } type RestartPolicy_RestartCondition int32 @@ -453,7 +469,7 @@ func (x RestartPolicy_RestartCondition) String() string { return proto.EnumName(RestartPolicy_RestartCondition_name, int32(x)) } func (RestartPolicy_RestartCondition) EnumDescriptor() ([]byte, []int) { - return fileDescriptorTypes, []int{13, 0} + return fileDescriptorTypes, []int{14, 0} } type UpdateConfig_FailureAction int32 @@ -479,7 +495,7 @@ func (x UpdateConfig_FailureAction) String() string { return proto.EnumName(UpdateConfig_FailureAction_name, int32(x)) } func (UpdateConfig_FailureAction) EnumDescriptor() ([]byte, []int) { - return fileDescriptorTypes, []int{14, 0} + return fileDescriptorTypes, []int{15, 0} } // UpdateOrder controls the order of operations when rolling out an @@ -506,7 +522,7 @@ func (x UpdateConfig_UpdateOrder) String() string { return proto.EnumName(UpdateConfig_UpdateOrder_name, int32(x)) } func (UpdateConfig_UpdateOrder) EnumDescriptor() ([]byte, []int) { - return fileDescriptorTypes, []int{14, 1} + return fileDescriptorTypes, []int{15, 1} } type UpdateStatus_UpdateState int32 @@ -544,7 +560,7 @@ func (x UpdateStatus_UpdateState) String() string { return proto.EnumName(UpdateStatus_UpdateState_name, int32(x)) } func (UpdateStatus_UpdateState) EnumDescriptor() ([]byte, []int) { - return fileDescriptorTypes, []int{15, 0} + return fileDescriptorTypes, []int{16, 0} } // AddressFamily specifies the network address family that @@ -572,7 +588,7 @@ func (x IPAMConfig_AddressFamily) String() string { return proto.EnumName(IPAMConfig_AddressFamily_name, int32(x)) } func (IPAMConfig_AddressFamily) EnumDescriptor() ([]byte, []int) { - return fileDescriptorTypes, []int{20, 0} + return fileDescriptorTypes, []int{21, 0} } type PortConfig_Protocol int32 @@ -594,7 +610,7 @@ var PortConfig_Protocol_value = map[string]int32{ func (x PortConfig_Protocol) String() string { return proto.EnumName(PortConfig_Protocol_name, int32(x)) } -func (PortConfig_Protocol) EnumDescriptor() ([]byte, []int) { return fileDescriptorTypes, []int{21, 0} } +func (PortConfig_Protocol) EnumDescriptor() ([]byte, []int) { return fileDescriptorTypes, []int{22, 0} } // PublishMode controls how ports are published on the swarm. type PortConfig_PublishMode int32 @@ -622,7 +638,7 @@ func (x PortConfig_PublishMode) String() string { return proto.EnumName(PortConfig_PublishMode_name, int32(x)) } func (PortConfig_PublishMode) EnumDescriptor() ([]byte, []int) { - return fileDescriptorTypes, []int{21, 1} + return fileDescriptorTypes, []int{22, 1} } type IssuanceStatus_State int32 @@ -662,7 +678,7 @@ var IssuanceStatus_State_value = map[string]int32{ func (x IssuanceStatus_State) String() string { return proto.EnumName(IssuanceStatus_State_name, int32(x)) } -func (IssuanceStatus_State) EnumDescriptor() ([]byte, []int) { return fileDescriptorTypes, []int{26, 0} } +func (IssuanceStatus_State) EnumDescriptor() ([]byte, []int) { return fileDescriptorTypes, []int{27, 0} } type ExternalCA_CAProtocol int32 @@ -681,7 +697,7 @@ func (x ExternalCA_CAProtocol) String() string { return proto.EnumName(ExternalCA_CAProtocol_name, int32(x)) } func (ExternalCA_CAProtocol) EnumDescriptor() ([]byte, []int) { - return fileDescriptorTypes, []int{28, 0} + return fileDescriptorTypes, []int{29, 0} } // Encryption algorithm that can implemented using this key @@ -702,7 +718,7 @@ func (x EncryptionKey_Algorithm) String() string { return proto.EnumName(EncryptionKey_Algorithm_name, int32(x)) } func (EncryptionKey_Algorithm) EnumDescriptor() ([]byte, []int) { - return fileDescriptorTypes, []int{41, 0} + return fileDescriptorTypes, []int{42, 0} } type MaybeEncryptedRecord_Algorithm int32 @@ -725,7 +741,7 @@ func (x MaybeEncryptedRecord_Algorithm) String() string { return proto.EnumName(MaybeEncryptedRecord_Algorithm_name, int32(x)) } func (MaybeEncryptedRecord_Algorithm) EnumDescriptor() ([]byte, []int) { - return fileDescriptorTypes, []int{46, 0} + return fileDescriptorTypes, []int{49, 0} } // Version tracks the last time an object in the store was updated. @@ -828,12 +844,26 @@ type NodeDescription struct { Resources *Resources `protobuf:"bytes,3,opt,name=resources" json:"resources,omitempty"` // Information about the Docker Engine on the node. Engine *EngineDescription `protobuf:"bytes,4,opt,name=engine" json:"engine,omitempty"` + // Information on the node's TLS setup + TLSInfo *NodeTLSInfo `protobuf:"bytes,5,opt,name=tls_info,json=tlsInfo" json:"tls_info,omitempty"` } func (m *NodeDescription) Reset() { *m = NodeDescription{} } func (*NodeDescription) ProtoMessage() {} func (*NodeDescription) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{8} } +type NodeTLSInfo struct { + // 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"` +} + +func (m *NodeTLSInfo) Reset() { *m = NodeTLSInfo{} } +func (*NodeTLSInfo) ProtoMessage() {} +func (*NodeTLSInfo) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{9} } + 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"` @@ -842,7 +872,7 @@ type RaftMemberStatus struct { func (m *RaftMemberStatus) Reset() { *m = RaftMemberStatus{} } func (*RaftMemberStatus) ProtoMessage() {} -func (*RaftMemberStatus) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{9} } +func (*RaftMemberStatus) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{10} } type NodeStatus struct { State NodeStatus_State `protobuf:"varint,1,opt,name=state,proto3,enum=docker.swarmkit.v1.NodeStatus_State" json:"state,omitempty"` @@ -853,7 +883,7 @@ type NodeStatus struct { func (m *NodeStatus) Reset() { *m = NodeStatus{} } func (*NodeStatus) ProtoMessage() {} -func (*NodeStatus) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{10} } +func (*NodeStatus) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{11} } type Image struct { // reference is a docker image reference. This can include a rpository, tag @@ -864,7 +894,7 @@ type Image struct { func (m *Image) Reset() { *m = Image{} } func (*Image) ProtoMessage() {} -func (*Image) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{11} } +func (*Image) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{12} } // Mount describes volume mounts for a container. // @@ -899,7 +929,7 @@ type Mount struct { func (m *Mount) Reset() { *m = Mount{} } func (*Mount) ProtoMessage() {} -func (*Mount) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{12} } +func (*Mount) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{13} } // BindOptions specifies options that are specific to a bind mount. type Mount_BindOptions struct { @@ -909,7 +939,7 @@ type Mount_BindOptions struct { func (m *Mount_BindOptions) Reset() { *m = Mount_BindOptions{} } func (*Mount_BindOptions) ProtoMessage() {} -func (*Mount_BindOptions) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{12, 0} } +func (*Mount_BindOptions) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{13, 0} } // VolumeOptions contains parameters for mounting the volume. type Mount_VolumeOptions struct { @@ -926,7 +956,7 @@ type Mount_VolumeOptions struct { func (m *Mount_VolumeOptions) Reset() { *m = Mount_VolumeOptions{} } func (*Mount_VolumeOptions) ProtoMessage() {} -func (*Mount_VolumeOptions) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{12, 1} } +func (*Mount_VolumeOptions) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{13, 1} } type Mount_TmpfsOptions struct { // Size sets the size of the tmpfs, in bytes. @@ -944,7 +974,7 @@ type Mount_TmpfsOptions struct { func (m *Mount_TmpfsOptions) Reset() { *m = Mount_TmpfsOptions{} } func (*Mount_TmpfsOptions) ProtoMessage() {} -func (*Mount_TmpfsOptions) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{12, 2} } +func (*Mount_TmpfsOptions) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{13, 2} } type RestartPolicy struct { Condition RestartPolicy_RestartCondition `protobuf:"varint,1,opt,name=condition,proto3,enum=docker.swarmkit.v1.RestartPolicy_RestartCondition" json:"condition,omitempty"` @@ -962,7 +992,7 @@ type RestartPolicy struct { func (m *RestartPolicy) Reset() { *m = RestartPolicy{} } func (*RestartPolicy) ProtoMessage() {} -func (*RestartPolicy) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{13} } +func (*RestartPolicy) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{14} } // UpdateConfig specifies the rate and policy of updates. // TODO(aluzzardi): Consider making this a oneof with RollingStrategy and LockstepStrategy. @@ -1002,7 +1032,7 @@ type UpdateConfig struct { func (m *UpdateConfig) Reset() { *m = UpdateConfig{} } func (*UpdateConfig) ProtoMessage() {} -func (*UpdateConfig) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{14} } +func (*UpdateConfig) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{15} } // UpdateStatus is the status of an update in progress. type UpdateStatus struct { @@ -1026,7 +1056,7 @@ type UpdateStatus struct { func (m *UpdateStatus) Reset() { *m = UpdateStatus{} } func (*UpdateStatus) ProtoMessage() {} -func (*UpdateStatus) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{15} } +func (*UpdateStatus) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{16} } // Container specific status. type ContainerStatus struct { @@ -1037,7 +1067,7 @@ type ContainerStatus struct { func (m *ContainerStatus) Reset() { *m = ContainerStatus{} } func (*ContainerStatus) ProtoMessage() {} -func (*ContainerStatus) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{16} } +func (*ContainerStatus) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{17} } // PortStatus specifies the actual allocated runtime state of a list // of port configs. @@ -1047,7 +1077,7 @@ type PortStatus struct { func (m *PortStatus) Reset() { *m = PortStatus{} } func (*PortStatus) ProtoMessage() {} -func (*PortStatus) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{17} } +func (*PortStatus) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{18} } type TaskStatus struct { // Note: can't use stdtime because this field is nullable. @@ -1084,7 +1114,7 @@ type TaskStatus struct { func (m *TaskStatus) Reset() { *m = TaskStatus{} } func (*TaskStatus) ProtoMessage() {} -func (*TaskStatus) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{18} } +func (*TaskStatus) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{19} } type isTaskStatus_RuntimeStatus interface { isTaskStatus_RuntimeStatus() @@ -1186,7 +1216,7 @@ type NetworkAttachmentConfig struct { func (m *NetworkAttachmentConfig) Reset() { *m = NetworkAttachmentConfig{} } func (*NetworkAttachmentConfig) ProtoMessage() {} -func (*NetworkAttachmentConfig) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{19} } +func (*NetworkAttachmentConfig) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{20} } // IPAMConfig specifies parameters for IP Address Management. type IPAMConfig struct { @@ -1207,7 +1237,7 @@ type IPAMConfig struct { func (m *IPAMConfig) Reset() { *m = IPAMConfig{} } func (*IPAMConfig) ProtoMessage() {} -func (*IPAMConfig) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{20} } +func (*IPAMConfig) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{21} } // PortConfig specifies an exposed port which can be // addressed using the given name. This can be later queried @@ -1233,7 +1263,7 @@ type PortConfig struct { func (m *PortConfig) Reset() { *m = PortConfig{} } func (*PortConfig) ProtoMessage() {} -func (*PortConfig) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{21} } +func (*PortConfig) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{22} } // 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 @@ -1246,7 +1276,7 @@ type Driver struct { func (m *Driver) Reset() { *m = Driver{} } func (*Driver) ProtoMessage() {} -func (*Driver) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{22} } +func (*Driver) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{23} } type IPAMOptions struct { Driver *Driver `protobuf:"bytes,1,opt,name=driver" json:"driver,omitempty"` @@ -1255,7 +1285,7 @@ type IPAMOptions struct { func (m *IPAMOptions) Reset() { *m = IPAMOptions{} } func (*IPAMOptions) ProtoMessage() {} -func (*IPAMOptions) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{23} } +func (*IPAMOptions) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{24} } // Peer should be used anywhere where we are describing a remote peer. type Peer struct { @@ -1265,7 +1295,7 @@ type Peer struct { func (m *Peer) Reset() { *m = Peer{} } func (*Peer) ProtoMessage() {} -func (*Peer) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{24} } +func (*Peer) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{25} } // WeightedPeer should be used anywhere where we are describing a remote peer // with a weight. @@ -1276,7 +1306,7 @@ type WeightedPeer struct { func (m *WeightedPeer) Reset() { *m = WeightedPeer{} } func (*WeightedPeer) ProtoMessage() {} -func (*WeightedPeer) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{25} } +func (*WeightedPeer) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{26} } type IssuanceStatus struct { State IssuanceStatus_State `protobuf:"varint,1,opt,name=state,proto3,enum=docker.swarmkit.v1.IssuanceStatus_State" json:"state,omitempty"` @@ -1288,7 +1318,7 @@ type IssuanceStatus struct { func (m *IssuanceStatus) Reset() { *m = IssuanceStatus{} } func (*IssuanceStatus) ProtoMessage() {} -func (*IssuanceStatus) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{26} } +func (*IssuanceStatus) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{27} } type AcceptancePolicy struct { Policies []*AcceptancePolicy_RoleAdmissionPolicy `protobuf:"bytes,1,rep,name=policies" json:"policies,omitempty"` @@ -1296,7 +1326,7 @@ type AcceptancePolicy struct { func (m *AcceptancePolicy) Reset() { *m = AcceptancePolicy{} } func (*AcceptancePolicy) ProtoMessage() {} -func (*AcceptancePolicy) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{27} } +func (*AcceptancePolicy) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{28} } type AcceptancePolicy_RoleAdmissionPolicy struct { Role NodeRole `protobuf:"varint,1,opt,name=role,proto3,enum=docker.swarmkit.v1.NodeRole" json:"role,omitempty"` @@ -1311,7 +1341,7 @@ type AcceptancePolicy_RoleAdmissionPolicy struct { func (m *AcceptancePolicy_RoleAdmissionPolicy) Reset() { *m = AcceptancePolicy_RoleAdmissionPolicy{} } func (*AcceptancePolicy_RoleAdmissionPolicy) ProtoMessage() {} func (*AcceptancePolicy_RoleAdmissionPolicy) Descriptor() ([]byte, []int) { - return fileDescriptorTypes, []int{27, 0} + return fileDescriptorTypes, []int{28, 0} } type AcceptancePolicy_RoleAdmissionPolicy_Secret struct { @@ -1326,7 +1356,7 @@ func (m *AcceptancePolicy_RoleAdmissionPolicy_Secret) Reset() { } func (*AcceptancePolicy_RoleAdmissionPolicy_Secret) ProtoMessage() {} func (*AcceptancePolicy_RoleAdmissionPolicy_Secret) Descriptor() ([]byte, []int) { - return fileDescriptorTypes, []int{27, 0, 0} + return fileDescriptorTypes, []int{28, 0, 0} } type ExternalCA struct { @@ -1343,7 +1373,7 @@ type ExternalCA struct { func (m *ExternalCA) Reset() { *m = ExternalCA{} } func (*ExternalCA) ProtoMessage() {} -func (*ExternalCA) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{28} } +func (*ExternalCA) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{29} } type CAConfig struct { // NodeCertExpiry is the duration certificates should be issued for @@ -1368,7 +1398,7 @@ type CAConfig struct { func (m *CAConfig) Reset() { *m = CAConfig{} } func (*CAConfig) ProtoMessage() {} -func (*CAConfig) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{29} } +func (*CAConfig) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{30} } // OrchestrationConfig defines cluster-level orchestration settings. type OrchestrationConfig struct { @@ -1379,7 +1409,7 @@ type OrchestrationConfig struct { func (m *OrchestrationConfig) Reset() { *m = OrchestrationConfig{} } func (*OrchestrationConfig) ProtoMessage() {} -func (*OrchestrationConfig) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{30} } +func (*OrchestrationConfig) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{31} } // TaskDefaults specifies default values for task creation. type TaskDefaults struct { @@ -1393,7 +1423,7 @@ type TaskDefaults struct { func (m *TaskDefaults) Reset() { *m = TaskDefaults{} } func (*TaskDefaults) ProtoMessage() {} -func (*TaskDefaults) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{31} } +func (*TaskDefaults) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{32} } // DispatcherConfig defines cluster-level dispatcher settings. type DispatcherConfig struct { @@ -1405,7 +1435,7 @@ type DispatcherConfig struct { func (m *DispatcherConfig) Reset() { *m = DispatcherConfig{} } func (*DispatcherConfig) ProtoMessage() {} -func (*DispatcherConfig) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{32} } +func (*DispatcherConfig) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{33} } // RaftConfig defines raft settings for the cluster. type RaftConfig struct { @@ -1427,7 +1457,7 @@ type RaftConfig struct { func (m *RaftConfig) Reset() { *m = RaftConfig{} } func (*RaftConfig) ProtoMessage() {} -func (*RaftConfig) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{33} } +func (*RaftConfig) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{34} } type EncryptionConfig struct { // AutoLockManagers specifies whether or not managers TLS keys and raft data @@ -1438,7 +1468,7 @@ type EncryptionConfig struct { func (m *EncryptionConfig) Reset() { *m = EncryptionConfig{} } func (*EncryptionConfig) ProtoMessage() {} -func (*EncryptionConfig) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{34} } +func (*EncryptionConfig) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{35} } type SpreadOver struct { SpreadDescriptor string `protobuf:"bytes,1,opt,name=spread_descriptor,json=spreadDescriptor,proto3" json:"spread_descriptor,omitempty"` @@ -1446,7 +1476,7 @@ type SpreadOver struct { func (m *SpreadOver) Reset() { *m = SpreadOver{} } func (*SpreadOver) ProtoMessage() {} -func (*SpreadOver) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{35} } +func (*SpreadOver) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{36} } type PlacementPreference struct { // Types that are valid to be assigned to Preference: @@ -1456,7 +1486,7 @@ type PlacementPreference struct { func (m *PlacementPreference) Reset() { *m = PlacementPreference{} } func (*PlacementPreference) ProtoMessage() {} -func (*PlacementPreference) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{36} } +func (*PlacementPreference) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{37} } type isPlacementPreference_Preference interface { isPlacementPreference_Preference() @@ -1551,7 +1581,7 @@ type Placement struct { func (m *Placement) Reset() { *m = Placement{} } func (*Placement) ProtoMessage() {} -func (*Placement) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{37} } +func (*Placement) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{38} } // JoinToken contains the join tokens for workers and managers. type JoinTokens struct { @@ -1563,7 +1593,7 @@ type JoinTokens struct { func (m *JoinTokens) Reset() { *m = JoinTokens{} } func (*JoinTokens) ProtoMessage() {} -func (*JoinTokens) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{38} } +func (*JoinTokens) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{39} } type RootCA struct { // CAKey is the root CA private key. @@ -1584,7 +1614,7 @@ type RootCA struct { func (m *RootCA) Reset() { *m = RootCA{} } func (*RootCA) ProtoMessage() {} -func (*RootCA) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{39} } +func (*RootCA) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{40} } type Certificate struct { Role NodeRole `protobuf:"varint,1,opt,name=role,proto3,enum=docker.swarmkit.v1.NodeRole" json:"role,omitempty"` @@ -1597,7 +1627,7 @@ type Certificate struct { func (m *Certificate) Reset() { *m = Certificate{} } func (*Certificate) ProtoMessage() {} -func (*Certificate) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{40} } +func (*Certificate) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{41} } // Symmetric keys to encrypt inter-agent communication. type EncryptionKey struct { @@ -1613,7 +1643,7 @@ type EncryptionKey struct { func (m *EncryptionKey) Reset() { *m = EncryptionKey{} } func (*EncryptionKey) ProtoMessage() {} -func (*EncryptionKey) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{41} } +func (*EncryptionKey) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{42} } // ManagerStatus provides informations about the state of a manager in the cluster. type ManagerStatus struct { @@ -1630,7 +1660,23 @@ type ManagerStatus struct { func (m *ManagerStatus) Reset() { *m = ManagerStatus{} } func (*ManagerStatus) ProtoMessage() {} -func (*ManagerStatus) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{42} } +func (*ManagerStatus) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{43} } + +// FileTarget represents a specific target that is backed by a file +type FileTarget struct { + // 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 + UID string `protobuf:"bytes,2,opt,name=uid,proto3" json:"uid,omitempty"` + // 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"` +} + +func (m *FileTarget) Reset() { *m = FileTarget{} } +func (*FileTarget) ProtoMessage() {} +func (*FileTarget) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{44} } // SecretReference is the linkage between a service and a secret that it uses. type SecretReference struct { @@ -1650,7 +1696,7 @@ type SecretReference struct { func (m *SecretReference) Reset() { *m = SecretReference{} } func (*SecretReference) ProtoMessage() {} -func (*SecretReference) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{43} } +func (*SecretReference) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{45} } type isSecretReference_Target interface { isSecretReference_Target() @@ -1659,7 +1705,7 @@ type isSecretReference_Target interface { } type SecretReference_File struct { - File *SecretReference_FileTarget `protobuf:"bytes,3,opt,name=file,oneof"` + File *FileTarget `protobuf:"bytes,3,opt,name=file,oneof"` } func (*SecretReference_File) isSecretReference_Target() {} @@ -1671,7 +1717,7 @@ func (m *SecretReference) GetTarget() isSecretReference_Target { return nil } -func (m *SecretReference) GetFile() *SecretReference_FileTarget { +func (m *SecretReference) GetFile() *FileTarget { if x, ok := m.GetTarget().(*SecretReference_File); ok { return x.File } @@ -1708,7 +1754,7 @@ func _SecretReference_OneofUnmarshaler(msg proto.Message, tag, wire int, b *prot if wire != proto.WireBytes { return true, proto.ErrInternalBadWireType } - msg := new(SecretReference_FileTarget) + msg := new(FileTarget) err := b.DecodeMessage(msg) m.Target = &SecretReference_File{msg} return true, err @@ -1733,22 +1779,104 @@ func _SecretReference_OneofSizer(msg proto.Message) (n int) { return n } -// FileTarget represents a specific target that is backed by a file -type SecretReference_FileTarget struct { - // 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 - UID string `protobuf:"bytes,2,opt,name=uid,proto3" json:"uid,omitempty"` - // 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"` +// ConfigReference is the linkage between a service and a config that it uses. +type ConfigReference struct { + // 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"` + // ConfigName is the name of the config that this references, but this is just provided for + // lookup/display purposes. The config in the reference will be identified by its ID. + ConfigName string `protobuf:"bytes,2,opt,name=config_name,json=configName,proto3" json:"config_name,omitempty"` + // Target specifies how this secret should be exposed to the task. + // + // Types that are valid to be assigned to Target: + // *ConfigReference_File + Target isConfigReference_Target `protobuf_oneof:"target"` } -func (m *SecretReference_FileTarget) Reset() { *m = SecretReference_FileTarget{} } -func (*SecretReference_FileTarget) ProtoMessage() {} -func (*SecretReference_FileTarget) Descriptor() ([]byte, []int) { - return fileDescriptorTypes, []int{43, 0} +func (m *ConfigReference) Reset() { *m = ConfigReference{} } +func (*ConfigReference) ProtoMessage() {} +func (*ConfigReference) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{46} } + +type isConfigReference_Target interface { + isConfigReference_Target() + MarshalTo([]byte) (int, error) + Size() int +} + +type ConfigReference_File struct { + File *FileTarget `protobuf:"bytes,3,opt,name=file,oneof"` +} + +func (*ConfigReference_File) isConfigReference_Target() {} + +func (m *ConfigReference) GetTarget() isConfigReference_Target { + if m != nil { + return m.Target + } + return nil +} + +func (m *ConfigReference) GetFile() *FileTarget { + if x, ok := m.GetTarget().(*ConfigReference_File); ok { + return x.File + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*ConfigReference) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _ConfigReference_OneofMarshaler, _ConfigReference_OneofUnmarshaler, _ConfigReference_OneofSizer, []interface{}{ + (*ConfigReference_File)(nil), + } +} + +func _ConfigReference_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*ConfigReference) + // target + switch x := m.Target.(type) { + case *ConfigReference_File: + _ = b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.File); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("ConfigReference.Target has unexpected type %T", x) + } + return nil +} + +func _ConfigReference_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*ConfigReference) + switch tag { + case 3: // target.file + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(FileTarget) + err := b.DecodeMessage(msg) + m.Target = &ConfigReference_File{msg} + return true, err + default: + return false, nil + } +} + +func _ConfigReference_OneofSizer(msg proto.Message) (n int) { + m := msg.(*ConfigReference) + // target + switch x := m.Target.(type) { + case *ConfigReference_File: + s := proto.Size(x.File) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n } // BlacklistedCertificate is a record for a blacklisted certificate. It does not @@ -1762,7 +1890,7 @@ type BlacklistedCertificate struct { func (m *BlacklistedCertificate) Reset() { *m = BlacklistedCertificate{} } func (*BlacklistedCertificate) ProtoMessage() {} -func (*BlacklistedCertificate) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{44} } +func (*BlacklistedCertificate) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{47} } // HealthConfig holds configuration settings for the HEALTHCHECK feature. type HealthConfig struct { @@ -1792,7 +1920,7 @@ type HealthConfig struct { func (m *HealthConfig) Reset() { *m = HealthConfig{} } func (*HealthConfig) ProtoMessage() {} -func (*HealthConfig) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{45} } +func (*HealthConfig) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{48} } type MaybeEncryptedRecord struct { Algorithm MaybeEncryptedRecord_Algorithm `protobuf:"varint,1,opt,name=algorithm,proto3,enum=docker.swarmkit.v1.MaybeEncryptedRecord_Algorithm" json:"algorithm,omitempty"` @@ -1802,7 +1930,7 @@ type MaybeEncryptedRecord struct { func (m *MaybeEncryptedRecord) Reset() { *m = MaybeEncryptedRecord{} } func (*MaybeEncryptedRecord) ProtoMessage() {} -func (*MaybeEncryptedRecord) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{46} } +func (*MaybeEncryptedRecord) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{49} } type RootRotation struct { CACert []byte `protobuf:"bytes,1,opt,name=ca_cert,json=caCert,proto3" json:"ca_cert,omitempty"` @@ -1813,7 +1941,149 @@ type RootRotation struct { func (m *RootRotation) Reset() { *m = RootRotation{} } func (*RootRotation) ProtoMessage() {} -func (*RootRotation) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{47} } +func (*RootRotation) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{50} } + +// Privileges specifies security configuration/permissions. +type Privileges struct { + CredentialSpec *Privileges_CredentialSpec `protobuf:"bytes,1,opt,name=credential_spec,json=credentialSpec" json:"credential_spec,omitempty"` + SELinuxContext *Privileges_SELinuxContext `protobuf:"bytes,2,opt,name=selinux_context,json=selinuxContext" json:"selinux_context,omitempty"` +} + +func (m *Privileges) Reset() { *m = Privileges{} } +func (*Privileges) ProtoMessage() {} +func (*Privileges) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{51} } + +// 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 + Source isPrivileges_CredentialSpec_Source `protobuf_oneof:"source"` +} + +func (m *Privileges_CredentialSpec) Reset() { *m = Privileges_CredentialSpec{} } +func (*Privileges_CredentialSpec) ProtoMessage() {} +func (*Privileges_CredentialSpec) Descriptor() ([]byte, []int) { + return fileDescriptorTypes, []int{51, 0} +} + +type isPrivileges_CredentialSpec_Source interface { + isPrivileges_CredentialSpec_Source() + MarshalTo([]byte) (int, error) + Size() int +} + +type Privileges_CredentialSpec_File struct { + File string `protobuf:"bytes,1,opt,name=file,proto3,oneof"` +} +type Privileges_CredentialSpec_Registry struct { + Registry string `protobuf:"bytes,2,opt,name=registry,proto3,oneof"` +} + +func (*Privileges_CredentialSpec_File) isPrivileges_CredentialSpec_Source() {} +func (*Privileges_CredentialSpec_Registry) isPrivileges_CredentialSpec_Source() {} + +func (m *Privileges_CredentialSpec) GetSource() isPrivileges_CredentialSpec_Source { + if m != nil { + return m.Source + } + return nil +} + +func (m *Privileges_CredentialSpec) GetFile() string { + if x, ok := m.GetSource().(*Privileges_CredentialSpec_File); ok { + return x.File + } + return "" +} + +func (m *Privileges_CredentialSpec) GetRegistry() string { + if x, ok := m.GetSource().(*Privileges_CredentialSpec_Registry); ok { + return x.Registry + } + return "" +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*Privileges_CredentialSpec) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _Privileges_CredentialSpec_OneofMarshaler, _Privileges_CredentialSpec_OneofUnmarshaler, _Privileges_CredentialSpec_OneofSizer, []interface{}{ + (*Privileges_CredentialSpec_File)(nil), + (*Privileges_CredentialSpec_Registry)(nil), + } +} + +func _Privileges_CredentialSpec_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*Privileges_CredentialSpec) + // source + switch x := m.Source.(type) { + case *Privileges_CredentialSpec_File: + _ = b.EncodeVarint(1<<3 | proto.WireBytes) + _ = b.EncodeStringBytes(x.File) + case *Privileges_CredentialSpec_Registry: + _ = b.EncodeVarint(2<<3 | proto.WireBytes) + _ = b.EncodeStringBytes(x.Registry) + case nil: + default: + return fmt.Errorf("Privileges_CredentialSpec.Source has unexpected type %T", x) + } + return nil +} + +func _Privileges_CredentialSpec_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*Privileges_CredentialSpec) + switch tag { + case 1: // source.file + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Source = &Privileges_CredentialSpec_File{x} + return true, err + case 2: // source.registry + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Source = &Privileges_CredentialSpec_Registry{x} + return true, err + default: + return false, nil + } +} + +func _Privileges_CredentialSpec_OneofSizer(msg proto.Message) (n int) { + m := msg.(*Privileges_CredentialSpec) + // source + switch x := m.Source.(type) { + case *Privileges_CredentialSpec_File: + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.File))) + n += len(x.File) + case *Privileges_CredentialSpec_Registry: + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.Registry))) + n += len(x.Registry) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// 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 (m *Privileges_SELinuxContext) Reset() { *m = Privileges_SELinuxContext{} } +func (*Privileges_SELinuxContext) ProtoMessage() {} +func (*Privileges_SELinuxContext) Descriptor() ([]byte, []int) { + return fileDescriptorTypes, []int{51, 1} +} func init() { proto.RegisterType((*Version)(nil), "docker.swarmkit.v1.Version") @@ -1825,6 +2095,7 @@ func init() { proto.RegisterType((*PluginDescription)(nil), "docker.swarmkit.v1.PluginDescription") proto.RegisterType((*EngineDescription)(nil), "docker.swarmkit.v1.EngineDescription") proto.RegisterType((*NodeDescription)(nil), "docker.swarmkit.v1.NodeDescription") + proto.RegisterType((*NodeTLSInfo)(nil), "docker.swarmkit.v1.NodeTLSInfo") proto.RegisterType((*RaftMemberStatus)(nil), "docker.swarmkit.v1.RaftMemberStatus") proto.RegisterType((*NodeStatus)(nil), "docker.swarmkit.v1.NodeStatus") proto.RegisterType((*Image)(nil), "docker.swarmkit.v1.Image") @@ -1864,12 +2135,16 @@ func init() { 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((*SecretReference)(nil), "docker.swarmkit.v1.SecretReference") - proto.RegisterType((*SecretReference_FileTarget)(nil), "docker.swarmkit.v1.SecretReference.FileTarget") + 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.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) @@ -2070,6 +2345,37 @@ func (m *NodeDescription) CopyFrom(src interface{}) { m.Engine = &EngineDescription{} github_com_docker_swarmkit_api_deepcopy.Copy(m.Engine, o.Engine) } + if o.TLSInfo != nil { + m.TLSInfo = &NodeTLSInfo{} + github_com_docker_swarmkit_api_deepcopy.Copy(m.TLSInfo, o.TLSInfo) + } +} + +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) + *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 (m *RaftMemberStatus) Copy() *RaftMemberStatus { @@ -2873,6 +3179,21 @@ func (m *ManagerStatus) CopyFrom(src interface{}) { *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 *SecretReference) Copy() *SecretReference { if m == nil { return nil @@ -2890,7 +3211,7 @@ func (m *SecretReference) CopyFrom(src interface{}) { switch o.Target.(type) { case *SecretReference_File: v := SecretReference_File{ - File: &SecretReference_FileTarget{}, + File: &FileTarget{}, } github_com_docker_swarmkit_api_deepcopy.Copy(v.File, o.GetFile()) m.Target = &v @@ -2899,19 +3220,30 @@ func (m *SecretReference) CopyFrom(src interface{}) { } -func (m *SecretReference_FileTarget) Copy() *SecretReference_FileTarget { +func (m *ConfigReference) Copy() *ConfigReference { if m == nil { return nil } - o := &SecretReference_FileTarget{} + o := &ConfigReference{} o.CopyFrom(m) return o } -func (m *SecretReference_FileTarget) CopyFrom(src interface{}) { +func (m *ConfigReference) CopyFrom(src interface{}) { - o := src.(*SecretReference_FileTarget) + o := src.(*ConfigReference) *m = *o + if o.Target != nil { + switch o.Target.(type) { + case *ConfigReference_File: + v := ConfigReference_File{ + File: &FileTarget{}, + } + github_com_docker_swarmkit_api_deepcopy.Copy(v.File, o.GetFile()) + m.Target = &v + } + } + } func (m *BlacklistedCertificate) Copy() *BlacklistedCertificate { @@ -3015,6 +3347,74 @@ func (m *RootRotation) CopyFrom(src interface{}) { } } +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_docker_swarmkit_api_deepcopy.Copy(m.CredentialSpec, o.CredentialSpec) + } + if o.SELinuxContext != nil { + m.SELinuxContext = &Privileges_SELinuxContext{} + github_com_docker_swarmkit_api_deepcopy.Copy(m.SELinuxContext, o.SELinuxContext) + } +} + +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 + } + } + +} + +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 *Version) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -3351,6 +3751,52 @@ func (m *NodeDescription) MarshalTo(dAtA []byte) (int, error) { } i += n5 } + if m.TLSInfo != nil { + dAtA[i] = 0x2a + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.TLSInfo.Size())) + n6, err := m.TLSInfo.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n6 + } + return i, nil +} + +func (m *NodeTLSInfo) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *NodeTLSInfo) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.TrustRoot) > 0 { + dAtA[i] = 0xa + i++ + i = encodeVarintTypes(dAtA, i, uint64(len(m.TrustRoot))) + i += copy(dAtA[i:], m.TrustRoot) + } + if len(m.CertIssuerSubject) > 0 { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(len(m.CertIssuerSubject))) + i += copy(dAtA[i:], m.CertIssuerSubject) + } + if len(m.CertIssuerPublicKey) > 0 { + dAtA[i] = 0x1a + i++ + i = encodeVarintTypes(dAtA, i, uint64(len(m.CertIssuerPublicKey))) + i += copy(dAtA[i:], m.CertIssuerPublicKey) + } return i, nil } @@ -3498,32 +3944,32 @@ func (m *Mount) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x2a i++ i = encodeVarintTypes(dAtA, i, uint64(m.BindOptions.Size())) - n6, err := m.BindOptions.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n6 - } - if m.VolumeOptions != nil { - dAtA[i] = 0x32 - i++ - i = encodeVarintTypes(dAtA, i, uint64(m.VolumeOptions.Size())) - n7, err := m.VolumeOptions.MarshalTo(dAtA[i:]) + n7, err := m.BindOptions.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n7 } - if m.TmpfsOptions != nil { - dAtA[i] = 0x3a + if m.VolumeOptions != nil { + dAtA[i] = 0x32 i++ - i = encodeVarintTypes(dAtA, i, uint64(m.TmpfsOptions.Size())) - n8, err := m.TmpfsOptions.MarshalTo(dAtA[i:]) + i = encodeVarintTypes(dAtA, i, uint64(m.VolumeOptions.Size())) + n8, err := m.VolumeOptions.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n8 } + if m.TmpfsOptions != nil { + dAtA[i] = 0x3a + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.TmpfsOptions.Size())) + n9, err := m.TmpfsOptions.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n9 + } return i, nil } @@ -3596,11 +4042,11 @@ func (m *Mount_VolumeOptions) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintTypes(dAtA, i, uint64(m.DriverConfig.Size())) - n9, err := m.DriverConfig.MarshalTo(dAtA[i:]) + n10, err := m.DriverConfig.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n9 + i += n10 } return i, nil } @@ -3657,11 +4103,11 @@ func (m *RestartPolicy) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintTypes(dAtA, i, uint64(m.Delay.Size())) - n10, err := m.Delay.MarshalTo(dAtA[i:]) + n11, err := m.Delay.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n10 + i += n11 } if m.MaxAttempts != 0 { dAtA[i] = 0x18 @@ -3672,11 +4118,11 @@ func (m *RestartPolicy) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x22 i++ i = encodeVarintTypes(dAtA, i, uint64(m.Window.Size())) - n11, err := m.Window.MarshalTo(dAtA[i:]) + n12, err := m.Window.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n11 + i += n12 } return i, nil } @@ -3704,11 +4150,11 @@ func (m *UpdateConfig) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(m.Delay))) - n12, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.Delay, dAtA[i:]) + n13, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.Delay, dAtA[i:]) if err != nil { return 0, err } - i += n12 + i += n13 if m.FailureAction != 0 { dAtA[i] = 0x18 i++ @@ -3718,11 +4164,11 @@ func (m *UpdateConfig) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x22 i++ i = encodeVarintTypes(dAtA, i, uint64(m.Monitor.Size())) - n13, err := m.Monitor.MarshalTo(dAtA[i:]) + n14, err := m.Monitor.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n13 + i += n14 } if m.MaxFailureRatio != 0 { dAtA[i] = 0x2d @@ -3761,21 +4207,21 @@ func (m *UpdateStatus) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintTypes(dAtA, i, uint64(m.StartedAt.Size())) - n14, err := m.StartedAt.MarshalTo(dAtA[i:]) + n15, err := m.StartedAt.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n14 + i += n15 } if m.CompletedAt != nil { dAtA[i] = 0x1a i++ i = encodeVarintTypes(dAtA, i, uint64(m.CompletedAt.Size())) - n15, err := m.CompletedAt.MarshalTo(dAtA[i:]) + n16, err := m.CompletedAt.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n15 + i += n16 } if len(m.Message) > 0 { dAtA[i] = 0x22 @@ -3869,11 +4315,11 @@ func (m *TaskStatus) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintTypes(dAtA, i, uint64(m.Timestamp.Size())) - n16, err := m.Timestamp.MarshalTo(dAtA[i:]) + n17, err := m.Timestamp.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n16 + i += n17 } if m.State != 0 { dAtA[i] = 0x10 @@ -3893,21 +4339,21 @@ func (m *TaskStatus) MarshalTo(dAtA []byte) (int, error) { i += copy(dAtA[i:], m.Err) } if m.RuntimeStatus != nil { - nn17, err := m.RuntimeStatus.MarshalTo(dAtA[i:]) + nn18, err := m.RuntimeStatus.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += nn17 + i += nn18 } if m.PortStatus != nil { dAtA[i] = 0x32 i++ i = encodeVarintTypes(dAtA, i, uint64(m.PortStatus.Size())) - n18, err := m.PortStatus.MarshalTo(dAtA[i:]) + n19, err := m.PortStatus.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n18 + i += n19 } return i, nil } @@ -3918,11 +4364,11 @@ func (m *TaskStatus_Container) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x2a i++ i = encodeVarintTypes(dAtA, i, uint64(m.Container.Size())) - n19, err := m.Container.MarshalTo(dAtA[i:]) + n20, err := m.Container.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n19 + i += n20 } return i, nil } @@ -4142,11 +4588,11 @@ func (m *IPAMOptions) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintTypes(dAtA, i, uint64(m.Driver.Size())) - n20, err := m.Driver.MarshalTo(dAtA[i:]) + n21, err := m.Driver.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n20 + i += n21 } if len(m.Configs) > 0 { for _, msg := range m.Configs { @@ -4212,11 +4658,11 @@ func (m *WeightedPeer) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintTypes(dAtA, i, uint64(m.Peer.Size())) - n21, err := m.Peer.MarshalTo(dAtA[i:]) + n22, err := m.Peer.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n21 + i += n22 } if m.Weight != 0 { dAtA[i] = 0x10 @@ -4319,11 +4765,11 @@ func (m *AcceptancePolicy_RoleAdmissionPolicy) MarshalTo(dAtA []byte) (int, erro dAtA[i] = 0x1a i++ i = encodeVarintTypes(dAtA, i, uint64(m.Secret.Size())) - n22, err := m.Secret.MarshalTo(dAtA[i:]) + n23, err := m.Secret.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n22 + i += n23 } return i, nil } @@ -4429,11 +4875,11 @@ func (m *CAConfig) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintTypes(dAtA, i, uint64(m.NodeCertExpiry.Size())) - n23, err := m.NodeCertExpiry.MarshalTo(dAtA[i:]) + n24, err := m.NodeCertExpiry.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n23 + i += n24 } if len(m.ExternalCAs) > 0 { for _, msg := range m.ExternalCAs { @@ -4509,11 +4955,11 @@ func (m *TaskDefaults) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintTypes(dAtA, i, uint64(m.LogDriver.Size())) - n24, err := m.LogDriver.MarshalTo(dAtA[i:]) + n25, err := m.LogDriver.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n24 + i += n25 } return i, nil } @@ -4537,11 +4983,11 @@ func (m *DispatcherConfig) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintTypes(dAtA, i, uint64(m.HeartbeatPeriod.Size())) - n25, err := m.HeartbeatPeriod.MarshalTo(dAtA[i:]) + n26, err := m.HeartbeatPeriod.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n25 + i += n26 } return i, nil } @@ -4657,11 +5103,11 @@ func (m *PlacementPreference) MarshalTo(dAtA []byte) (int, error) { var l int _ = l if m.Preference != nil { - nn26, err := m.Preference.MarshalTo(dAtA[i:]) + nn27, err := m.Preference.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += nn26 + i += nn27 } return i, nil } @@ -4672,11 +5118,11 @@ func (m *PlacementPreference_Spread) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintTypes(dAtA, i, uint64(m.Spread.Size())) - n27, err := m.Spread.MarshalTo(dAtA[i:]) + n28, err := m.Spread.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n27 + i += n28 } return i, nil } @@ -4791,20 +5237,20 @@ func (m *RootCA) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x22 i++ i = encodeVarintTypes(dAtA, i, uint64(m.JoinTokens.Size())) - n28, err := m.JoinTokens.MarshalTo(dAtA[i:]) + n29, err := m.JoinTokens.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n28 + i += n29 if m.RootRotation != nil { dAtA[i] = 0x2a i++ i = encodeVarintTypes(dAtA, i, uint64(m.RootRotation.Size())) - n29, err := m.RootRotation.MarshalTo(dAtA[i:]) + n30, err := m.RootRotation.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n29 + i += n30 } if m.LastForcedRotation != 0 { dAtA[i] = 0x30 @@ -4843,11 +5289,11 @@ func (m *Certificate) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintTypes(dAtA, i, uint64(m.Status.Size())) - n30, err := m.Status.MarshalTo(dAtA[i:]) + n31, err := m.Status.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n30 + i += n31 if len(m.Certificate) > 0 { dAtA[i] = 0x22 i++ @@ -4947,7 +5393,7 @@ func (m *ManagerStatus) MarshalTo(dAtA []byte) (int, error) { return i, nil } -func (m *SecretReference) Marshal() (dAtA []byte, err error) { +func (m *FileTarget) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalTo(dAtA) @@ -4957,58 +5403,7 @@ func (m *SecretReference) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *SecretReference) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.SecretID) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintTypes(dAtA, i, uint64(len(m.SecretID))) - i += copy(dAtA[i:], m.SecretID) - } - if len(m.SecretName) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintTypes(dAtA, i, uint64(len(m.SecretName))) - i += copy(dAtA[i:], m.SecretName) - } - if m.Target != nil { - nn31, err := m.Target.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += nn31 - } - return i, nil -} - -func (m *SecretReference_File) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.File != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintTypes(dAtA, i, uint64(m.File.Size())) - n32, err := m.File.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n32 - } - return i, nil -} -func (m *SecretReference_FileTarget) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *SecretReference_FileTarget) MarshalTo(dAtA []byte) (int, error) { +func (m *FileTarget) MarshalTo(dAtA []byte) (int, error) { var i int _ = i var l int @@ -5039,6 +5434,108 @@ func (m *SecretReference_FileTarget) MarshalTo(dAtA []byte) (int, error) { return i, nil } +func (m *SecretReference) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *SecretReference) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.SecretID) > 0 { + dAtA[i] = 0xa + i++ + i = encodeVarintTypes(dAtA, i, uint64(len(m.SecretID))) + i += copy(dAtA[i:], m.SecretID) + } + if len(m.SecretName) > 0 { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(len(m.SecretName))) + i += copy(dAtA[i:], m.SecretName) + } + if m.Target != nil { + nn32, err := m.Target.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += nn32 + } + return i, nil +} + +func (m *SecretReference_File) MarshalTo(dAtA []byte) (int, error) { + i := 0 + if m.File != nil { + dAtA[i] = 0x1a + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.File.Size())) + n33, err := m.File.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n33 + } + return i, nil +} +func (m *ConfigReference) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ConfigReference) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.ConfigID) > 0 { + dAtA[i] = 0xa + i++ + i = encodeVarintTypes(dAtA, i, uint64(len(m.ConfigID))) + i += copy(dAtA[i:], m.ConfigID) + } + if len(m.ConfigName) > 0 { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(len(m.ConfigName))) + i += copy(dAtA[i:], m.ConfigName) + } + if m.Target != nil { + nn34, err := m.Target.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += nn34 + } + return i, nil +} + +func (m *ConfigReference_File) MarshalTo(dAtA []byte) (int, error) { + i := 0 + if m.File != nil { + dAtA[i] = 0x1a + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.File.Size())) + n35, err := m.File.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n35 + } + return i, nil +} func (m *BlacklistedCertificate) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -5058,11 +5555,11 @@ func (m *BlacklistedCertificate) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintTypes(dAtA, i, uint64(m.Expiry.Size())) - n33, err := m.Expiry.MarshalTo(dAtA[i:]) + n36, err := m.Expiry.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n33 + i += n36 } return i, nil } @@ -5101,21 +5598,21 @@ func (m *HealthConfig) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintTypes(dAtA, i, uint64(m.Interval.Size())) - n34, err := m.Interval.MarshalTo(dAtA[i:]) + n37, err := m.Interval.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n34 + i += n37 } if m.Timeout != nil { dAtA[i] = 0x1a i++ i = encodeVarintTypes(dAtA, i, uint64(m.Timeout.Size())) - n35, err := m.Timeout.MarshalTo(dAtA[i:]) + n38, err := m.Timeout.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n35 + i += n38 } if m.Retries != 0 { dAtA[i] = 0x20 @@ -5126,11 +5623,11 @@ func (m *HealthConfig) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x2a i++ i = encodeVarintTypes(dAtA, i, uint64(m.StartPeriod.Size())) - n36, err := m.StartPeriod.MarshalTo(dAtA[i:]) + n39, err := m.StartPeriod.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n36 + i += n39 } return i, nil } @@ -5206,6 +5703,137 @@ func (m *RootRotation) MarshalTo(dAtA []byte) (int, error) { return i, nil } +func (m *Privileges) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Privileges) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.CredentialSpec != nil { + dAtA[i] = 0xa + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.CredentialSpec.Size())) + n40, err := m.CredentialSpec.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n40 + } + if m.SELinuxContext != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.SELinuxContext.Size())) + n41, err := m.SELinuxContext.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n41 + } + return i, nil +} + +func (m *Privileges_CredentialSpec) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Privileges_CredentialSpec) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Source != nil { + nn42, err := m.Source.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += nn42 + } + return i, nil +} + +func (m *Privileges_CredentialSpec_File) MarshalTo(dAtA []byte) (int, error) { + i := 0 + dAtA[i] = 0xa + i++ + i = encodeVarintTypes(dAtA, i, uint64(len(m.File))) + i += copy(dAtA[i:], m.File) + return i, nil +} +func (m *Privileges_CredentialSpec_Registry) MarshalTo(dAtA []byte) (int, error) { + i := 0 + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(len(m.Registry))) + i += copy(dAtA[i:], m.Registry) + return i, nil +} +func (m *Privileges_SELinuxContext) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Privileges_SELinuxContext) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Disable { + dAtA[i] = 0x8 + i++ + if m.Disable { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i++ + } + if len(m.User) > 0 { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(len(m.User))) + i += copy(dAtA[i:], m.User) + } + if len(m.Role) > 0 { + dAtA[i] = 0x1a + i++ + i = encodeVarintTypes(dAtA, i, uint64(len(m.Role))) + i += copy(dAtA[i:], m.Role) + } + if len(m.Type) > 0 { + dAtA[i] = 0x22 + i++ + i = encodeVarintTypes(dAtA, i, uint64(len(m.Type))) + i += copy(dAtA[i:], m.Type) + } + if len(m.Level) > 0 { + dAtA[i] = 0x2a + i++ + i = encodeVarintTypes(dAtA, i, uint64(len(m.Level))) + i += copy(dAtA[i:], m.Level) + } + return i, nil +} + func encodeFixed64Types(dAtA []byte, offset int, v uint64) int { dAtA[offset] = uint8(v) dAtA[offset+1] = uint8(v >> 8) @@ -5378,6 +6006,28 @@ func (m *NodeDescription) Size() (n int) { l = m.Engine.Size() n += 1 + l + sovTypes(uint64(l)) } + if m.TLSInfo != nil { + l = m.TLSInfo.Size() + n += 1 + l + sovTypes(uint64(l)) + } + return n +} + +func (m *NodeTLSInfo) Size() (n int) { + 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 } @@ -6077,6 +6727,27 @@ func (m *ManagerStatus) Size() (n int) { return n } +func (m *FileTarget) Size() (n int) { + 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 *SecretReference) Size() (n int) { var l int _ = l @@ -6103,27 +6774,32 @@ func (m *SecretReference_File) Size() (n int) { } return n } -func (m *SecretReference_FileTarget) Size() (n int) { +func (m *ConfigReference) Size() (n int) { var l int _ = l - l = len(m.Name) + l = len(m.ConfigID) if l > 0 { n += 1 + l + sovTypes(uint64(l)) } - l = len(m.UID) + l = len(m.ConfigName) 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)) + if m.Target != nil { + n += m.Target.Size() } return n } +func (m *ConfigReference_File) Size() (n int) { + var l int + _ = l + if m.File != nil { + l = m.File.Size() + n += 1 + l + sovTypes(uint64(l)) + } + return n +} func (m *BlacklistedCertificate) Size() (n int) { var l int _ = l @@ -6196,6 +6872,68 @@ func (m *RootRotation) Size() (n int) { return n } +func (m *Privileges) Size() (n int) { + 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)) + } + return n +} + +func (m *Privileges_CredentialSpec) Size() (n int) { + var l int + _ = l + if m.Source != nil { + n += m.Source.Size() + } + return n +} + +func (m *Privileges_CredentialSpec_File) Size() (n int) { + var l int + _ = l + l = len(m.File) + n += 1 + l + sovTypes(uint64(l)) + return n +} +func (m *Privileges_CredentialSpec_Registry) Size() (n int) { + var l int + _ = l + l = len(m.Registry) + n += 1 + l + sovTypes(uint64(l)) + return n +} +func (m *Privileges_SELinuxContext) Size() (n int) { + 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 sovTypes(x uint64) (n int) { for { n++ @@ -6327,6 +7065,19 @@ func (this *NodeDescription) String() string { `Platform:` + strings.Replace(fmt.Sprintf("%v", this.Platform), "Platform", "Platform", 1) + `,`, `Resources:` + strings.Replace(fmt.Sprintf("%v", this.Resources), "Resources", "Resources", 1) + `,`, `Engine:` + strings.Replace(fmt.Sprintf("%v", this.Engine), "EngineDescription", "EngineDescription", 1) + `,`, + `TLSInfo:` + strings.Replace(fmt.Sprintf("%v", this.TLSInfo), "NodeTLSInfo", "NodeTLSInfo", 1) + `,`, + `}`, + }, "") + 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 @@ -6858,6 +7609,19 @@ func (this *ManagerStatus) String() string { }, "") 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 *SecretReference) String() string { if this == nil { return "nil" @@ -6875,20 +7639,29 @@ func (this *SecretReference_File) String() string { return "nil" } s := strings.Join([]string{`&SecretReference_File{`, - `File:` + strings.Replace(fmt.Sprintf("%v", this.File), "SecretReference_FileTarget", "SecretReference_FileTarget", 1) + `,`, + `File:` + strings.Replace(fmt.Sprintf("%v", this.File), "FileTarget", "FileTarget", 1) + `,`, `}`, }, "") return s } -func (this *SecretReference_FileTarget) String() string { +func (this *ConfigReference) String() string { if this == nil { return "nil" } - s := strings.Join([]string{`&SecretReference_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) + `,`, + 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 @@ -6941,6 +7714,61 @@ func (this *RootRotation) String() string { }, "") 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) + `,`, + `}`, + }, "") + 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_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 valueToStringTypes(v interface{}) string { rv := reflect.ValueOf(v) if rv.IsNil() { @@ -8155,6 +8983,182 @@ func (m *NodeDescription) Unmarshal(dAtA []byte) error { 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 > 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 + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if 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 > 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 > 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 > 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:]) @@ -13508,147 +14512,7 @@ func (m *ManagerStatus) Unmarshal(dAtA []byte) error { } 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 > 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 > 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 > l { - return io.ErrUnexpectedEOF - } - v := &SecretReference_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 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *SecretReference_FileTarget) Unmarshal(dAtA []byte) error { +func (m *FileTarget) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -13804,6 +14668,286 @@ func (m *SecretReference_FileTarget) Unmarshal(dAtA []byte) error { } 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 > 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 > 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 > 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 { + 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 > 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 > 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 > l { + return io.ErrUnexpectedEOF + } + v := &FileTarget{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.Target = &ConfigReference_File{v} + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if 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 @@ -14358,6 +15502,416 @@ func (m *RootRotation) Unmarshal(dAtA []byte) error { } 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 > 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 > 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 + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if 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 > 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 > l { + return io.ErrUnexpectedEOF + } + m.Source = &Privileges_CredentialSpec_Registry{string(dAtA[iNdEx:postIndex])} + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if 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 > 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 > 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 > 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 > 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 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func skipTypes(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 @@ -14466,276 +16020,296 @@ var ( func init() { proto.RegisterFile("types.proto", fileDescriptorTypes) } var fileDescriptorTypes = []byte{ - // 4333 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xac, 0x5a, 0x4f, 0x6c, 0x24, 0xc7, - 0x5a, 0xf7, 0xfc, 0xf5, 0xcc, 0x37, 0x63, 0xbb, 0xb7, 0xd6, 0xd9, 0x78, 0x27, 0x1b, 0x7b, 0xd2, - 0xc9, 0xbe, 0xfc, 0x79, 0xd1, 0x64, 0xd7, 0xfb, 0x12, 0x6d, 0x12, 0x5e, 0x92, 0xf9, 0xe7, 0xf5, - 0xbc, 0xb5, 0x67, 0x46, 0x35, 0xe3, 0xdd, 0x97, 0x03, 0xb4, 0xca, 0xdd, 0xe5, 0x71, 0xc7, 0x3d, - 0x5d, 0x43, 0x77, 0x8f, 0xbd, 0x03, 0x42, 0xac, 0x38, 0x00, 0xf2, 0x89, 0x23, 0x12, 0xf2, 0x09, - 0x4e, 0x1c, 0xb8, 0x70, 0x40, 0x70, 0x21, 0x48, 0x1c, 0x72, 0xe3, 0x01, 0x12, 0x7a, 0x02, 0xc9, - 0x10, 0x23, 0x71, 0x43, 0x70, 0x79, 0xe2, 0x02, 0x12, 0xaa, 0x3f, 0xdd, 0xd3, 0xf6, 0x8e, 0xed, - 0x0d, 0xe1, 0x62, 0x77, 0x7d, 0xf5, 0xfb, 0xbe, 0xaa, 0xfa, 0xea, 0xab, 0xaa, 0xdf, 0x57, 0x35, - 0x50, 0x08, 0x26, 0x23, 0xea, 0x57, 0x46, 0x1e, 0x0b, 0x18, 0x42, 0x16, 0x33, 0x0f, 0xa8, 0x57, - 0xf1, 0x8f, 0x88, 0x37, 0x3c, 0xb0, 0x83, 0xca, 0xe1, 0xfd, 0xd2, 0xda, 0x80, 0xb1, 0x81, 0x43, - 0x3f, 0x10, 0x88, 0xdd, 0xf1, 0xde, 0x07, 0x81, 0x3d, 0xa4, 0x7e, 0x40, 0x86, 0x23, 0xa9, 0x54, - 0x5a, 0xbd, 0x08, 0xb0, 0xc6, 0x1e, 0x09, 0x6c, 0xe6, 0xaa, 0xfa, 0xe5, 0x01, 0x1b, 0x30, 0xf1, - 0xf9, 0x01, 0xff, 0x92, 0x52, 0x7d, 0x0d, 0xe6, 0x9f, 0x50, 0xcf, 0xb7, 0x99, 0x8b, 0x96, 0x21, - 0x63, 0xbb, 0x16, 0x7d, 0xb6, 0x92, 0x28, 0x27, 0xde, 0x49, 0x63, 0x59, 0xd0, 0xef, 0x01, 0xb4, - 0xf8, 0x47, 0xd3, 0x0d, 0xbc, 0x09, 0xd2, 0x20, 0x75, 0x40, 0x27, 0x02, 0x91, 0xc7, 0xfc, 0x93, - 0x4b, 0x0e, 0x89, 0xb3, 0x92, 0x94, 0x92, 0x43, 0xe2, 0xe8, 0xdf, 0x26, 0xa0, 0x50, 0x75, 0x5d, - 0x16, 0x88, 0xd6, 0x7d, 0x84, 0x20, 0xed, 0x92, 0x21, 0x55, 0x4a, 0xe2, 0x1b, 0xd5, 0x21, 0xeb, - 0x90, 0x5d, 0xea, 0xf8, 0x2b, 0xc9, 0x72, 0xea, 0x9d, 0xc2, 0xfa, 0x0f, 0x2b, 0x2f, 0x0e, 0xb9, - 0x12, 0x33, 0x52, 0xd9, 0x12, 0x68, 0xd1, 0x09, 0xac, 0x54, 0xd1, 0x67, 0x30, 0x6f, 0xbb, 0x96, - 0x6d, 0x52, 0x7f, 0x25, 0x2d, 0xac, 0xac, 0xce, 0xb2, 0x32, 0xed, 0x7d, 0x2d, 0xfd, 0xcd, 0xe9, - 0xda, 0x1c, 0x0e, 0x95, 0x4a, 0x1f, 0x43, 0x21, 0x66, 0x76, 0xc6, 0xd8, 0x96, 0x21, 0x73, 0x48, - 0x9c, 0x31, 0x55, 0xa3, 0x93, 0x85, 0x4f, 0x92, 0x0f, 0x13, 0xfa, 0x97, 0x90, 0xc7, 0xd4, 0x67, - 0x63, 0xcf, 0xa4, 0x3e, 0x7a, 0x17, 0xf2, 0x2e, 0x71, 0x99, 0x61, 0x8e, 0xc6, 0xbe, 0x50, 0x4f, - 0xd5, 0x8a, 0x67, 0xa7, 0x6b, 0xb9, 0x36, 0x71, 0x59, 0xbd, 0xbb, 0xe3, 0xe3, 0x1c, 0xaf, 0xae, - 0x8f, 0xc6, 0x3e, 0x7a, 0x03, 0x8a, 0x43, 0x3a, 0x64, 0xde, 0xc4, 0xd8, 0x9d, 0x04, 0xd4, 0x17, - 0x86, 0x53, 0xb8, 0x20, 0x65, 0x35, 0x2e, 0xd2, 0x7f, 0x2f, 0x01, 0xcb, 0xa1, 0x6d, 0x4c, 0x7f, - 0x75, 0x6c, 0x7b, 0x74, 0x48, 0xdd, 0xc0, 0x47, 0x1f, 0x42, 0xd6, 0xb1, 0x87, 0x76, 0x20, 0xdb, - 0x28, 0xac, 0xbf, 0x3e, 0x6b, 0xb4, 0x51, 0xaf, 0xb0, 0x02, 0xa3, 0x2a, 0x14, 0x3d, 0xea, 0x53, - 0xef, 0x50, 0x7a, 0x52, 0x34, 0x79, 0xad, 0xf2, 0x39, 0x15, 0x7d, 0x03, 0x72, 0x5d, 0x87, 0x04, - 0x7b, 0xcc, 0x1b, 0x22, 0x1d, 0x8a, 0xc4, 0x33, 0xf7, 0xed, 0x80, 0x9a, 0xc1, 0xd8, 0x0b, 0x67, - 0xf5, 0x9c, 0x0c, 0xdd, 0x82, 0x24, 0x93, 0x0d, 0xe5, 0x6b, 0xd9, 0xb3, 0xd3, 0xb5, 0x64, 0xa7, - 0x87, 0x93, 0xcc, 0xd7, 0x3f, 0x85, 0x1b, 0x5d, 0x67, 0x3c, 0xb0, 0xdd, 0x06, 0xf5, 0x4d, 0xcf, - 0x1e, 0x71, 0xeb, 0x3c, 0x3c, 0x78, 0xec, 0x87, 0xe1, 0xc1, 0xbf, 0xa3, 0x90, 0x49, 0x4e, 0x43, - 0x46, 0xff, 0x9d, 0x24, 0xdc, 0x68, 0xba, 0x03, 0xdb, 0xa5, 0x71, 0xed, 0xbb, 0xb0, 0x48, 0x85, - 0xd0, 0x38, 0x94, 0x61, 0xac, 0xec, 0x2c, 0x48, 0x69, 0x18, 0xdb, 0xad, 0x0b, 0xf1, 0x76, 0x7f, - 0xd6, 0xf0, 0x5f, 0xb0, 0x3e, 0x33, 0xea, 0x9a, 0x30, 0x3f, 0x12, 0x83, 0xf0, 0x57, 0x52, 0xc2, - 0xd6, 0xdd, 0x59, 0xb6, 0x5e, 0x18, 0x67, 0x18, 0x7c, 0x4a, 0xf7, 0xfb, 0x04, 0xdf, 0xbf, 0x26, - 0x60, 0xa9, 0xcd, 0xac, 0x73, 0x7e, 0x28, 0x41, 0x6e, 0x9f, 0xf9, 0x41, 0x6c, 0xa1, 0x45, 0x65, - 0xf4, 0x10, 0x72, 0x23, 0x35, 0x7d, 0x6a, 0xf6, 0xef, 0xcc, 0xee, 0xb2, 0xc4, 0xe0, 0x08, 0x8d, - 0x3e, 0x85, 0xbc, 0x17, 0xc6, 0xc4, 0x4a, 0xea, 0x65, 0x02, 0x67, 0x8a, 0x47, 0x3f, 0x86, 0xac, - 0x9c, 0x84, 0x95, 0xb4, 0xd0, 0xbc, 0xfb, 0x52, 0x3e, 0xc7, 0x4a, 0x49, 0xff, 0x79, 0x02, 0x34, - 0x4c, 0xf6, 0x82, 0x6d, 0x3a, 0xdc, 0xa5, 0x5e, 0x2f, 0x20, 0xc1, 0xd8, 0x47, 0xb7, 0x20, 0xeb, - 0x50, 0x62, 0x51, 0x4f, 0x0c, 0x32, 0x87, 0x55, 0x09, 0xed, 0xf0, 0x20, 0x27, 0xe6, 0x3e, 0xd9, - 0xb5, 0x1d, 0x3b, 0x98, 0x88, 0x61, 0x2e, 0xce, 0x9e, 0xe5, 0x8b, 0x36, 0x2b, 0x38, 0xa6, 0x88, - 0xcf, 0x99, 0x41, 0x2b, 0x30, 0x3f, 0xa4, 0xbe, 0x4f, 0x06, 0x54, 0x8c, 0x3e, 0x8f, 0xc3, 0xa2, - 0xfe, 0x29, 0x14, 0xe3, 0x7a, 0xa8, 0x00, 0xf3, 0x3b, 0xed, 0xc7, 0xed, 0xce, 0xd3, 0xb6, 0x36, - 0x87, 0x96, 0xa0, 0xb0, 0xd3, 0xc6, 0xcd, 0x6a, 0x7d, 0xb3, 0x5a, 0xdb, 0x6a, 0x6a, 0x09, 0xb4, - 0x00, 0xf9, 0x69, 0x31, 0xa9, 0xff, 0x69, 0x02, 0x80, 0x4f, 0xa0, 0x1a, 0xd4, 0x27, 0x90, 0xf1, - 0x03, 0x12, 0xc8, 0x89, 0x5b, 0x5c, 0x7f, 0x6b, 0x56, 0xaf, 0xa7, 0xf0, 0x0a, 0xff, 0x47, 0xb1, - 0x54, 0x89, 0xf7, 0x30, 0x79, 0xae, 0x87, 0x7c, 0x0d, 0x11, 0xcb, 0xf2, 0x54, 0xc7, 0xc5, 0xb7, - 0xfe, 0x29, 0x64, 0x84, 0xf6, 0xf9, 0xee, 0xe6, 0x20, 0xdd, 0xe0, 0x5f, 0x09, 0x94, 0x87, 0x0c, - 0x6e, 0x56, 0x1b, 0x5f, 0x6a, 0x49, 0xa4, 0x41, 0xb1, 0xd1, 0xea, 0xd5, 0x3b, 0xed, 0x76, 0xb3, - 0xde, 0x6f, 0x36, 0xb4, 0x94, 0x7e, 0x17, 0x32, 0xad, 0x21, 0xb7, 0x7c, 0x87, 0x47, 0xc5, 0x1e, - 0xf5, 0xa8, 0x6b, 0x86, 0xc1, 0x36, 0x15, 0xe8, 0x3f, 0xcb, 0x43, 0x66, 0x9b, 0x8d, 0xdd, 0x00, - 0xad, 0xc7, 0x56, 0xf6, 0xe2, 0xec, 0xcd, 0x59, 0x00, 0x2b, 0xfd, 0xc9, 0x88, 0xaa, 0x95, 0x7f, - 0x0b, 0xb2, 0x32, 0x7e, 0xd4, 0x70, 0x54, 0x89, 0xcb, 0x03, 0xe2, 0x0d, 0x68, 0xa0, 0xc6, 0xa3, - 0x4a, 0xe8, 0x1d, 0xc8, 0x79, 0x94, 0x58, 0xcc, 0x75, 0x26, 0x22, 0xcc, 0x72, 0x72, 0xeb, 0xc5, - 0x94, 0x58, 0x1d, 0xd7, 0x99, 0xe0, 0xa8, 0x16, 0x6d, 0x42, 0x71, 0xd7, 0x76, 0x2d, 0x83, 0x8d, - 0xe4, 0x3e, 0x98, 0xb9, 0x3c, 0x28, 0x65, 0xaf, 0x6a, 0xb6, 0x6b, 0x75, 0x24, 0x18, 0x17, 0x76, - 0xa7, 0x05, 0xd4, 0x86, 0xc5, 0x43, 0xe6, 0x8c, 0x87, 0x34, 0xb2, 0x95, 0x15, 0xb6, 0xde, 0xbe, - 0xdc, 0xd6, 0x13, 0x81, 0x0f, 0xad, 0x2d, 0x1c, 0xc6, 0x8b, 0xe8, 0x31, 0x2c, 0x04, 0xc3, 0xd1, - 0x9e, 0x1f, 0x99, 0x9b, 0x17, 0xe6, 0x7e, 0x70, 0x85, 0xc3, 0x38, 0x3c, 0xb4, 0x56, 0x0c, 0x62, - 0xa5, 0xd2, 0x6f, 0xa5, 0xa0, 0x10, 0xeb, 0x39, 0xea, 0x41, 0x61, 0xe4, 0xb1, 0x11, 0x19, 0x88, - 0xbd, 0x5c, 0xcd, 0xc5, 0xfd, 0x97, 0x1a, 0x75, 0xa5, 0x3b, 0x55, 0xc4, 0x71, 0x2b, 0xfa, 0x49, - 0x12, 0x0a, 0xb1, 0x4a, 0xf4, 0x1e, 0xe4, 0x70, 0x17, 0xb7, 0x9e, 0x54, 0xfb, 0x4d, 0x6d, 0xae, - 0x74, 0xe7, 0xf8, 0xa4, 0xbc, 0x22, 0xac, 0xc5, 0x0d, 0x74, 0x3d, 0xfb, 0x90, 0x87, 0xde, 0x3b, - 0x30, 0x1f, 0x42, 0x13, 0xa5, 0xd7, 0x8e, 0x4f, 0xca, 0xaf, 0x5e, 0x84, 0xc6, 0x90, 0xb8, 0xb7, - 0x59, 0xc5, 0xcd, 0x86, 0x96, 0x9c, 0x8d, 0xc4, 0xbd, 0x7d, 0xe2, 0x51, 0x0b, 0xfd, 0x00, 0xb2, - 0x0a, 0x98, 0x2a, 0x95, 0x8e, 0x4f, 0xca, 0xb7, 0x2e, 0x02, 0xa7, 0x38, 0xdc, 0xdb, 0xaa, 0x3e, - 0x69, 0x6a, 0xe9, 0xd9, 0x38, 0xdc, 0x73, 0xc8, 0x21, 0x45, 0x6f, 0x41, 0x46, 0xc2, 0x32, 0xa5, - 0xdb, 0xc7, 0x27, 0xe5, 0x57, 0x5e, 0x30, 0xc7, 0x51, 0xa5, 0x95, 0xdf, 0xfd, 0xc3, 0xd5, 0xb9, - 0xbf, 0xf8, 0xa3, 0x55, 0xed, 0x62, 0x75, 0xe9, 0xbf, 0x13, 0xb0, 0x70, 0x6e, 0xca, 0x91, 0x0e, - 0x59, 0x97, 0x99, 0x6c, 0x24, 0xb7, 0xf8, 0x5c, 0x0d, 0xce, 0x4e, 0xd7, 0xb2, 0x6d, 0x56, 0x67, - 0xa3, 0x09, 0x56, 0x35, 0xe8, 0xf1, 0x85, 0x43, 0xea, 0xc1, 0x4b, 0xc6, 0xd3, 0xcc, 0x63, 0xea, - 0x73, 0x58, 0xb0, 0x3c, 0xfb, 0x90, 0x7a, 0x86, 0xc9, 0xdc, 0x3d, 0x7b, 0xa0, 0xb6, 0xef, 0xd2, - 0x2c, 0x9b, 0x0d, 0x01, 0xc4, 0x45, 0xa9, 0x50, 0x17, 0xf8, 0xef, 0x71, 0x40, 0x95, 0x9e, 0x40, - 0x31, 0x1e, 0xa1, 0xe8, 0x75, 0x00, 0xdf, 0xfe, 0x35, 0xaa, 0x38, 0x8f, 0x60, 0x48, 0x38, 0xcf, - 0x25, 0x82, 0xf1, 0xa0, 0xb7, 0x21, 0x3d, 0x64, 0x96, 0xb4, 0xb3, 0x50, 0xbb, 0xc9, 0xcf, 0xc9, - 0x7f, 0x3c, 0x5d, 0x2b, 0x30, 0xbf, 0xb2, 0x61, 0x3b, 0x74, 0x9b, 0x59, 0x14, 0x0b, 0x80, 0x7e, - 0x08, 0x69, 0xbe, 0x55, 0xa0, 0xd7, 0x20, 0x5d, 0x6b, 0xb5, 0x1b, 0xda, 0x5c, 0xe9, 0xc6, 0xf1, - 0x49, 0x79, 0x41, 0xb8, 0x84, 0x57, 0xf0, 0xd8, 0x45, 0x6b, 0x90, 0x7d, 0xd2, 0xd9, 0xda, 0xd9, - 0xe6, 0xe1, 0x75, 0xf3, 0xf8, 0xa4, 0xbc, 0x14, 0x55, 0x4b, 0xa7, 0xa1, 0xd7, 0x21, 0xd3, 0xdf, - 0xee, 0x6e, 0xf4, 0xb4, 0x64, 0x09, 0x1d, 0x9f, 0x94, 0x17, 0xa3, 0x7a, 0xd1, 0xe7, 0xd2, 0x0d, - 0x35, 0xab, 0xf9, 0x48, 0xae, 0xff, 0x22, 0x09, 0x0b, 0x98, 0x93, 0x6d, 0x2f, 0xe8, 0x32, 0xc7, - 0x36, 0x27, 0xa8, 0x0b, 0x79, 0x93, 0xb9, 0x96, 0x1d, 0x5b, 0x53, 0xeb, 0x97, 0x1c, 0x8c, 0x53, - 0xad, 0xb0, 0x54, 0x0f, 0x35, 0xf1, 0xd4, 0x08, 0xfa, 0x00, 0x32, 0x16, 0x75, 0xc8, 0x44, 0x9d, - 0xd0, 0xb7, 0x2b, 0x92, 0xce, 0x57, 0x42, 0x3a, 0x5f, 0x69, 0x28, 0x3a, 0x8f, 0x25, 0x4e, 0x50, - 0x49, 0xf2, 0xcc, 0x20, 0x41, 0x40, 0x87, 0xa3, 0x40, 0x1e, 0xcf, 0x69, 0x5c, 0x18, 0x92, 0x67, - 0x55, 0x25, 0x42, 0xf7, 0x21, 0x7b, 0x64, 0xbb, 0x16, 0x3b, 0x52, 0x27, 0xf0, 0x15, 0x46, 0x15, - 0x50, 0x3f, 0xe6, 0xa7, 0xee, 0x85, 0x6e, 0x72, 0x7f, 0xb7, 0x3b, 0xed, 0x66, 0xe8, 0x6f, 0x55, - 0xdf, 0x71, 0xdb, 0xcc, 0xe5, 0x6b, 0x05, 0x3a, 0x6d, 0x63, 0xa3, 0xda, 0xda, 0xda, 0xc1, 0xdc, - 0xe7, 0xcb, 0xc7, 0x27, 0x65, 0x2d, 0x82, 0x6c, 0x10, 0xdb, 0xe1, 0x94, 0xf0, 0x36, 0xa4, 0xaa, - 0xed, 0x2f, 0xb5, 0x64, 0x49, 0x3b, 0x3e, 0x29, 0x17, 0xa3, 0xea, 0xaa, 0x3b, 0x99, 0x2e, 0xa3, - 0x8b, 0xed, 0xea, 0x7f, 0x93, 0x82, 0xe2, 0xce, 0xc8, 0x22, 0x01, 0x95, 0x31, 0x89, 0xca, 0x50, - 0x18, 0x11, 0x8f, 0x38, 0x0e, 0x75, 0x6c, 0x7f, 0xa8, 0x12, 0x95, 0xb8, 0x08, 0x7d, 0xfc, 0xb2, - 0x6e, 0xac, 0xe5, 0x78, 0x9c, 0xfd, 0xfe, 0x3f, 0xaf, 0x25, 0x42, 0x87, 0xee, 0xc0, 0xe2, 0x9e, - 0xec, 0xad, 0x41, 0x4c, 0x31, 0xb1, 0x29, 0x31, 0xb1, 0x95, 0x59, 0x13, 0x1b, 0xef, 0x56, 0x45, - 0x0d, 0xb2, 0x2a, 0xb4, 0xf0, 0xc2, 0x5e, 0xbc, 0x88, 0x1e, 0xc0, 0xfc, 0x90, 0xb9, 0x76, 0xc0, - 0xbc, 0xeb, 0x67, 0x21, 0x44, 0xa2, 0xf7, 0xe0, 0x06, 0x9f, 0xdc, 0xb0, 0x3f, 0xa2, 0x5a, 0x9c, - 0x58, 0x49, 0xbc, 0x34, 0x24, 0xcf, 0x54, 0x83, 0x98, 0x8b, 0x51, 0x0d, 0x32, 0xcc, 0xe3, 0x94, - 0x28, 0x2b, 0xba, 0xfb, 0xfe, 0xb5, 0xdd, 0x95, 0x85, 0x0e, 0xd7, 0xc1, 0x52, 0x55, 0xff, 0x08, - 0x16, 0xce, 0x0d, 0x82, 0x33, 0x81, 0x6e, 0x75, 0xa7, 0xd7, 0xd4, 0xe6, 0x50, 0x11, 0x72, 0xf5, - 0x4e, 0xbb, 0xdf, 0x6a, 0xef, 0x70, 0x2a, 0x53, 0x84, 0x1c, 0xee, 0x6c, 0x6d, 0xd5, 0xaa, 0xf5, - 0xc7, 0x5a, 0x52, 0xaf, 0x40, 0x21, 0x66, 0x0d, 0x2d, 0x02, 0xf4, 0xfa, 0x9d, 0xae, 0xb1, 0xd1, - 0xc2, 0xbd, 0xbe, 0x24, 0x42, 0xbd, 0x7e, 0x15, 0xf7, 0x95, 0x20, 0xa1, 0xff, 0x47, 0x32, 0x9c, - 0x51, 0xc5, 0x7d, 0x6a, 0xe7, 0xb9, 0xcf, 0x15, 0x9d, 0x57, 0xec, 0x67, 0x5a, 0x88, 0x38, 0xd0, - 0xc7, 0x00, 0x22, 0x70, 0xa8, 0x65, 0x90, 0x40, 0x4d, 0x7c, 0xe9, 0x05, 0x27, 0xf7, 0xc3, 0x7c, - 0x19, 0xe7, 0x15, 0xba, 0x1a, 0xa0, 0x1f, 0x43, 0xd1, 0x64, 0xc3, 0x91, 0x43, 0x95, 0x72, 0xea, - 0x5a, 0xe5, 0x42, 0x84, 0xaf, 0x06, 0x71, 0xf6, 0x95, 0x3e, 0xcf, 0x0f, 0x7f, 0x3b, 0x11, 0x7a, - 0x66, 0x06, 0xe1, 0x2a, 0x42, 0x6e, 0xa7, 0xdb, 0xa8, 0xf6, 0x5b, 0xed, 0x47, 0x5a, 0x02, 0x01, - 0x64, 0x85, 0xab, 0x1b, 0x5a, 0x92, 0x13, 0xc5, 0x7a, 0x67, 0xbb, 0xbb, 0xd5, 0x14, 0x94, 0x0b, - 0x2d, 0x83, 0x16, 0x3a, 0xdb, 0x10, 0x8e, 0x6c, 0x36, 0xb4, 0x34, 0xba, 0x09, 0x4b, 0x91, 0x54, - 0x69, 0x66, 0xd0, 0x2d, 0x40, 0x91, 0x70, 0x6a, 0x22, 0xab, 0xff, 0x06, 0x2c, 0xd5, 0x99, 0x1b, - 0x10, 0xdb, 0x8d, 0x48, 0xf4, 0x3a, 0x1f, 0xb4, 0x12, 0x19, 0xb6, 0x25, 0xf7, 0xf4, 0xda, 0xd2, - 0xd9, 0xe9, 0x5a, 0x21, 0x82, 0xb6, 0x1a, 0x7c, 0xa4, 0x61, 0xc1, 0xe2, 0xeb, 0x77, 0x64, 0x5b, - 0xc2, 0xb9, 0x99, 0xda, 0xfc, 0xd9, 0xe9, 0x5a, 0xaa, 0xdb, 0x6a, 0x60, 0x2e, 0x43, 0xaf, 0x41, - 0x9e, 0x3e, 0xb3, 0x03, 0xc3, 0xe4, 0x7b, 0x38, 0x77, 0x60, 0x06, 0xe7, 0xb8, 0xa0, 0xce, 0xb7, - 0xec, 0x1a, 0x40, 0x97, 0x79, 0x81, 0x6a, 0xf9, 0x47, 0x90, 0x19, 0x31, 0x4f, 0x64, 0xb0, 0x97, - 0xe6, 0xeb, 0x1c, 0x2e, 0x03, 0x15, 0x4b, 0xb0, 0xfe, 0x97, 0x49, 0x80, 0x3e, 0xf1, 0x0f, 0x94, - 0x91, 0x87, 0x90, 0x8f, 0xee, 0x3e, 0x54, 0x2a, 0x7c, 0xe5, 0x6c, 0x47, 0x60, 0xf4, 0x20, 0x0c, - 0x36, 0x99, 0x1e, 0xcc, 0x4c, 0x65, 0xc2, 0x86, 0x66, 0x31, 0xec, 0xf3, 0x39, 0x00, 0x3f, 0x12, - 0xa9, 0xe7, 0xa9, 0x99, 0xe7, 0x9f, 0xa8, 0x2e, 0x8e, 0x05, 0xe9, 0x34, 0x45, 0x30, 0xdf, 0x9c, - 0xd5, 0xc8, 0x85, 0x19, 0xd9, 0x9c, 0xc3, 0x53, 0x3d, 0xf4, 0x39, 0x14, 0xf8, 0xb8, 0x0d, 0x5f, - 0xd4, 0x29, 0x6e, 0x79, 0xa9, 0xab, 0xa4, 0x05, 0x0c, 0xa3, 0xe8, 0xbb, 0xa6, 0xc1, 0xa2, 0x37, - 0x76, 0xf9, 0xb0, 0x95, 0x0d, 0xdd, 0x86, 0x57, 0xdb, 0x34, 0x38, 0x62, 0xde, 0x41, 0x35, 0x08, - 0x88, 0xb9, 0x3f, 0xa4, 0xae, 0xf2, 0x71, 0x8c, 0x58, 0x27, 0xce, 0x11, 0xeb, 0x15, 0x98, 0x27, - 0x8e, 0x4d, 0x7c, 0x2a, 0xd9, 0x48, 0x1e, 0x87, 0x45, 0x4e, 0xff, 0x79, 0x32, 0x41, 0x7d, 0x9f, - 0xca, 0x14, 0x38, 0x8f, 0xa7, 0x02, 0xfd, 0xef, 0x93, 0x00, 0xad, 0x6e, 0x75, 0x5b, 0x99, 0x6f, - 0x40, 0x76, 0x8f, 0x0c, 0x6d, 0x67, 0x72, 0xd5, 0x02, 0x9f, 0xe2, 0x2b, 0x55, 0x69, 0x68, 0x43, - 0xe8, 0x60, 0xa5, 0x2b, 0xb2, 0x82, 0xf1, 0xae, 0x4b, 0x83, 0x28, 0x2b, 0x10, 0x25, 0x4e, 0x41, - 0x3c, 0xe2, 0x46, 0x33, 0x23, 0x0b, 0xbc, 0xeb, 0x03, 0x12, 0xd0, 0x23, 0x32, 0x09, 0x57, 0xa5, - 0x2a, 0xa2, 0x4d, 0x9e, 0x2d, 0xf8, 0xd4, 0x3b, 0xa4, 0xd6, 0x4a, 0x46, 0x84, 0xe0, 0x75, 0xfd, - 0xc1, 0x0a, 0x2e, 0xc9, 0x55, 0xa4, 0x5d, 0xfa, 0x54, 0x30, 0x82, 0x69, 0xd5, 0x77, 0x4a, 0xe0, - 0xef, 0xc1, 0xc2, 0xb9, 0x71, 0xbe, 0x90, 0x8e, 0xb5, 0xba, 0x4f, 0x7e, 0xa4, 0xa5, 0xd5, 0xd7, - 0x47, 0x5a, 0x56, 0xff, 0xe3, 0x94, 0x5c, 0x47, 0xca, 0xab, 0xb3, 0xaf, 0xd4, 0x72, 0x22, 0xfa, - 0x4d, 0xe6, 0xa8, 0xf8, 0x7e, 0xfb, 0xea, 0xe5, 0xc5, 0xe9, 0xbd, 0x80, 0xe3, 0x48, 0x11, 0xad, - 0x41, 0x41, 0xce, 0xbf, 0xc1, 0xe3, 0x49, 0xb8, 0x75, 0x01, 0x83, 0x14, 0x71, 0x4d, 0x74, 0x17, - 0x16, 0x47, 0xe3, 0x5d, 0xc7, 0xf6, 0xf7, 0xa9, 0x25, 0x31, 0x69, 0x81, 0x59, 0x88, 0xa4, 0x02, - 0xb6, 0x0d, 0x45, 0x25, 0x30, 0x04, 0xb5, 0xcb, 0x88, 0x0e, 0xbd, 0x77, 0x5d, 0x87, 0xa4, 0x8a, - 0x60, 0x7c, 0x85, 0xd1, 0xb4, 0xa0, 0x37, 0x20, 0x17, 0x76, 0x16, 0xad, 0x40, 0xaa, 0x5f, 0xef, - 0x6a, 0x73, 0xa5, 0xa5, 0xe3, 0x93, 0x72, 0x21, 0x14, 0xf7, 0xeb, 0x5d, 0x5e, 0xb3, 0xd3, 0xe8, - 0x6a, 0x89, 0xf3, 0x35, 0x3b, 0x8d, 0x6e, 0x29, 0xcd, 0x29, 0x86, 0xbe, 0x07, 0x85, 0x58, 0x0b, - 0xe8, 0x4d, 0x98, 0x6f, 0xb5, 0x1f, 0xe1, 0x66, 0xaf, 0xa7, 0xcd, 0x95, 0x6e, 0x1d, 0x9f, 0x94, - 0x51, 0xac, 0xb6, 0xe5, 0x0e, 0xf8, 0xfc, 0xa0, 0xd7, 0x21, 0xbd, 0xd9, 0xe1, 0x47, 0x97, 0xe4, - 0x92, 0x31, 0xc4, 0x26, 0xf3, 0x83, 0xd2, 0x4d, 0xc5, 0x5d, 0xe2, 0x86, 0xf5, 0x3f, 0x48, 0x40, - 0x56, 0x52, 0xea, 0x99, 0x13, 0x55, 0x85, 0xf9, 0x30, 0xd1, 0x93, 0x3c, 0xff, 0xed, 0xcb, 0x39, - 0x79, 0x45, 0x51, 0x68, 0x19, 0x7e, 0xa1, 0x5e, 0xe9, 0x13, 0x28, 0xc6, 0x2b, 0xbe, 0x53, 0xf0, - 0xfd, 0x3a, 0x14, 0x78, 0x7c, 0x87, 0xdc, 0x7c, 0x1d, 0xb2, 0x92, 0xf6, 0x47, 0x5b, 0xe9, 0xe5, - 0x09, 0x82, 0x42, 0xa2, 0x87, 0x30, 0x2f, 0x93, 0x8a, 0xf0, 0x0a, 0x6c, 0xf5, 0xea, 0x55, 0x84, - 0x43, 0xb8, 0xfe, 0x39, 0xa4, 0xbb, 0x94, 0x7a, 0xdc, 0xf7, 0x2e, 0xb3, 0xe8, 0xf4, 0xf4, 0x51, - 0xf9, 0x90, 0x45, 0x5b, 0x0d, 0x9e, 0x0f, 0x59, 0xb4, 0x65, 0x45, 0x37, 0x18, 0xc9, 0xd8, 0x0d, - 0x46, 0x1f, 0x8a, 0x4f, 0xa9, 0x3d, 0xd8, 0x0f, 0xa8, 0x25, 0x0c, 0xbd, 0x0f, 0xe9, 0x11, 0x8d, - 0x3a, 0xbf, 0x32, 0x33, 0xc0, 0x28, 0xf5, 0xb0, 0x40, 0xf1, 0x7d, 0xe4, 0x48, 0x68, 0xab, 0x8b, - 0x57, 0x55, 0xd2, 0xff, 0x2e, 0x09, 0x8b, 0x2d, 0xdf, 0x1f, 0x13, 0xd7, 0x0c, 0x89, 0xc9, 0x67, - 0xe7, 0x89, 0xc9, 0x3b, 0x33, 0x47, 0x78, 0x4e, 0xe5, 0xfc, 0xc5, 0x8c, 0x3a, 0x1c, 0x92, 0xd1, - 0xe1, 0xa0, 0xff, 0x7b, 0x22, 0xbc, 0x7d, 0xb9, 0x1b, 0x5b, 0xee, 0xa5, 0x95, 0xe3, 0x93, 0xf2, - 0x72, 0xdc, 0x12, 0xdd, 0x71, 0x0f, 0x5c, 0x76, 0xe4, 0xa2, 0x37, 0x20, 0x83, 0x9b, 0xed, 0xe6, - 0x53, 0x2d, 0x21, 0xc3, 0xf3, 0x1c, 0x08, 0x53, 0x97, 0x1e, 0x71, 0x4b, 0xdd, 0x66, 0xbb, 0xc1, - 0x89, 0x44, 0x72, 0x86, 0xa5, 0x2e, 0x75, 0x2d, 0xdb, 0x1d, 0xa0, 0x37, 0x21, 0xdb, 0xea, 0xf5, - 0x76, 0x44, 0x7e, 0xfc, 0xea, 0xf1, 0x49, 0xf9, 0xe6, 0x39, 0x14, 0x2f, 0x50, 0x8b, 0x83, 0x38, - 0x8b, 0xe7, 0x14, 0x63, 0x06, 0x88, 0xd3, 0x43, 0x09, 0xc2, 0x9d, 0x3e, 0x4f, 0xde, 0x33, 0x33, - 0x40, 0x98, 0xf1, 0xbf, 0x6a, 0xb9, 0xfd, 0x53, 0x12, 0xb4, 0xaa, 0x69, 0xd2, 0x51, 0xc0, 0xeb, - 0x55, 0xe2, 0xd4, 0x87, 0xdc, 0x88, 0x7f, 0xd9, 0x34, 0x24, 0x01, 0x0f, 0x67, 0x5e, 0xfd, 0x5f, - 0xd0, 0xab, 0x60, 0xe6, 0xd0, 0xaa, 0x35, 0xb4, 0x7d, 0xdf, 0x66, 0xae, 0x94, 0xe1, 0xc8, 0x52, - 0xe9, 0x3f, 0x13, 0x70, 0x73, 0x06, 0x02, 0xdd, 0x83, 0xb4, 0xc7, 0x9c, 0x70, 0x0e, 0xef, 0x5c, - 0x76, 0xb1, 0xc6, 0x55, 0xb1, 0x40, 0xa2, 0x55, 0x00, 0x32, 0x0e, 0x18, 0x11, 0xed, 0x8b, 0xd9, - 0xcb, 0xe1, 0x98, 0x04, 0x3d, 0x85, 0xac, 0x4f, 0x4d, 0x8f, 0x86, 0x54, 0xf1, 0xf3, 0xff, 0x6b, - 0xef, 0x2b, 0x3d, 0x61, 0x06, 0x2b, 0x73, 0xa5, 0x0a, 0x64, 0xa5, 0x84, 0x87, 0xbd, 0x45, 0x02, - 0x22, 0x3a, 0x5d, 0xc4, 0xe2, 0x9b, 0x47, 0x13, 0x71, 0x06, 0x61, 0x34, 0x11, 0x67, 0xa0, 0xff, - 0x75, 0x12, 0xa0, 0xf9, 0x2c, 0xa0, 0x9e, 0x4b, 0x9c, 0x7a, 0x15, 0x35, 0x63, 0xbb, 0xbf, 0x1c, - 0xed, 0xbb, 0x33, 0xaf, 0x5b, 0x23, 0x8d, 0x4a, 0xbd, 0x3a, 0x63, 0xff, 0xbf, 0x0d, 0xa9, 0xb1, - 0xa7, 0x5e, 0x73, 0x24, 0xcd, 0xdb, 0xc1, 0x5b, 0x98, 0xcb, 0x50, 0x73, 0xba, 0x6d, 0xa5, 0x2e, - 0x7f, 0xb3, 0x89, 0x35, 0x30, 0x73, 0xeb, 0xe2, 0x2b, 0xdf, 0x24, 0x86, 0x49, 0xd5, 0xc9, 0x51, - 0x94, 0x2b, 0xbf, 0x5e, 0xad, 0x53, 0x2f, 0xc0, 0x59, 0x93, 0xf0, 0xff, 0xdf, 0x6b, 0x7f, 0x7b, - 0x1f, 0x60, 0x3a, 0x34, 0xb4, 0x0a, 0x99, 0xfa, 0x46, 0xaf, 0xb7, 0xa5, 0xcd, 0xc9, 0x0d, 0x7c, - 0x5a, 0x25, 0xc4, 0xfa, 0x9f, 0x27, 0x21, 0x57, 0xaf, 0xaa, 0x63, 0xb5, 0x0e, 0x9a, 0xd8, 0x95, - 0x78, 0xef, 0x0c, 0xfa, 0x6c, 0x64, 0x7b, 0x13, 0xb5, 0xb1, 0x5c, 0x91, 0xb3, 0x2d, 0x72, 0x15, - 0xde, 0xeb, 0xa6, 0x50, 0x40, 0x18, 0x8a, 0x54, 0x39, 0xc1, 0x30, 0x49, 0xb8, 0xc7, 0xaf, 0x5e, - 0xed, 0x2c, 0xc9, 0xbe, 0xa7, 0x65, 0x1f, 0x17, 0x42, 0x23, 0x75, 0xe2, 0xa3, 0x8f, 0x61, 0xc9, - 0xb7, 0x07, 0xae, 0xed, 0x0e, 0x8c, 0xd0, 0x79, 0x29, 0xe1, 0xbc, 0x1b, 0x67, 0xa7, 0x6b, 0x0b, - 0x3d, 0x59, 0xa5, 0x7c, 0xb8, 0xa0, 0x90, 0x75, 0xe1, 0x4a, 0xf4, 0x11, 0x2c, 0xc6, 0x54, 0xb9, - 0x17, 0xa5, 0xdb, 0xb5, 0xb3, 0xd3, 0xb5, 0x62, 0xa4, 0xf9, 0x98, 0x4e, 0x70, 0x31, 0x52, 0x7c, - 0x4c, 0xc5, 0xf5, 0xc2, 0x1e, 0xf3, 0x4c, 0x6a, 0x78, 0x62, 0x4d, 0x8b, 0x13, 0x3c, 0x8d, 0x0b, - 0x42, 0x26, 0x97, 0xb9, 0xfe, 0x04, 0x6e, 0x76, 0x3c, 0x73, 0x9f, 0xfa, 0x81, 0x74, 0x85, 0xf2, - 0xe2, 0xe7, 0x70, 0x27, 0x20, 0xfe, 0x81, 0xb1, 0x6f, 0xfb, 0x01, 0xf3, 0x26, 0x86, 0x47, 0x03, - 0xea, 0xf2, 0x7a, 0x43, 0xbc, 0x48, 0xa9, 0xfb, 0x9f, 0xdb, 0x1c, 0xb3, 0x29, 0x21, 0x38, 0x44, - 0x6c, 0x71, 0x80, 0xde, 0x82, 0x22, 0x67, 0xe1, 0x0d, 0xba, 0x47, 0xc6, 0x4e, 0xc0, 0x47, 0x0f, - 0x0e, 0x1b, 0x18, 0x2f, 0x7d, 0x4c, 0xe5, 0x1d, 0x36, 0x90, 0x9f, 0xfa, 0x4f, 0x41, 0x6b, 0xd8, - 0xfe, 0x88, 0x04, 0xe6, 0x7e, 0x78, 0xb1, 0x85, 0x1a, 0xa0, 0xed, 0x53, 0xe2, 0x05, 0xbb, 0x94, - 0x04, 0xc6, 0x88, 0x7a, 0x36, 0xb3, 0xae, 0x9f, 0xe5, 0xa5, 0x48, 0xa5, 0x2b, 0x34, 0xf4, 0xff, - 0x4a, 0x00, 0x60, 0xb2, 0x17, 0x32, 0xb2, 0x1f, 0xc2, 0x0d, 0xdf, 0x25, 0x23, 0x7f, 0x9f, 0x05, - 0x86, 0xed, 0x06, 0xd4, 0x3b, 0x24, 0x8e, 0xba, 0x9f, 0xd0, 0xc2, 0x8a, 0x96, 0x92, 0xa3, 0xf7, - 0x01, 0x1d, 0x50, 0x3a, 0x32, 0x98, 0x63, 0x19, 0x61, 0xa5, 0x7c, 0x2f, 0x4b, 0x63, 0x8d, 0xd7, - 0x74, 0x1c, 0xab, 0x17, 0xca, 0x51, 0x0d, 0x56, 0xf9, 0xf0, 0xa9, 0x1b, 0x78, 0x36, 0xf5, 0x8d, - 0x3d, 0xe6, 0x19, 0xbe, 0xc3, 0x8e, 0x8c, 0x3d, 0xe6, 0x38, 0xec, 0x88, 0x7a, 0xe1, 0xd5, 0x4f, - 0xc9, 0x61, 0x83, 0xa6, 0x04, 0x6d, 0x30, 0xaf, 0xe7, 0xb0, 0xa3, 0x8d, 0x10, 0xc1, 0x69, 0xdb, - 0x74, 0xcc, 0x81, 0x6d, 0x1e, 0x84, 0xb4, 0x2d, 0x92, 0xf6, 0x6d, 0xf3, 0x00, 0xbd, 0x09, 0x0b, - 0xd4, 0xa1, 0xe2, 0x06, 0x40, 0xa2, 0x32, 0x02, 0x55, 0x0c, 0x85, 0x1c, 0xa4, 0x7f, 0x01, 0x5a, - 0xd3, 0x35, 0xbd, 0xc9, 0x28, 0x36, 0xe7, 0xef, 0x03, 0xe2, 0x9b, 0xa4, 0xe1, 0x30, 0xf3, 0xc0, - 0x18, 0x12, 0x97, 0x0c, 0x78, 0xbf, 0xe4, 0x1b, 0x8d, 0xc6, 0x6b, 0xb6, 0x98, 0x79, 0xb0, 0xad, - 0xe4, 0xfa, 0xc7, 0x00, 0xbd, 0x91, 0x47, 0x89, 0xd5, 0xe1, 0x6c, 0x82, 0xbb, 0x4e, 0x94, 0x0c, - 0x4b, 0x3d, 0x03, 0x31, 0x4f, 0x2d, 0x75, 0x4d, 0x56, 0x34, 0x22, 0xb9, 0xfe, 0xcb, 0x70, 0xb3, - 0xeb, 0x10, 0x53, 0x3c, 0x89, 0x76, 0xa3, 0x47, 0x07, 0xf4, 0x10, 0xb2, 0x12, 0xaa, 0x66, 0x72, - 0xe6, 0x72, 0x9b, 0xb6, 0xb9, 0x39, 0x87, 0x15, 0xbe, 0x56, 0x04, 0x98, 0xda, 0xd1, 0x9f, 0x41, - 0x3e, 0x32, 0x8f, 0xca, 0xc0, 0x53, 0x60, 0x1e, 0xdd, 0xb6, 0xab, 0x72, 0xd6, 0x3c, 0x8e, 0x8b, - 0x50, 0x0b, 0x0a, 0xa3, 0x48, 0xf9, 0x4a, 0x3a, 0x37, 0xa3, 0xd3, 0x38, 0xae, 0xab, 0x7f, 0x06, - 0xf0, 0x13, 0x66, 0xbb, 0x7d, 0x76, 0x40, 0x5d, 0xf1, 0xce, 0xc5, 0xb3, 0x35, 0x1a, 0x3a, 0x42, - 0x95, 0x44, 0x32, 0x2a, 0xbd, 0x18, 0x3d, 0xf7, 0xc8, 0xa2, 0xfe, 0x57, 0x49, 0xc8, 0x62, 0xc6, - 0x82, 0x7a, 0x15, 0x95, 0x21, 0xab, 0x96, 0xba, 0x38, 0x42, 0x6a, 0xf9, 0xb3, 0xd3, 0xb5, 0x8c, - 0x5c, 0xe3, 0x19, 0x53, 0x2c, 0xee, 0xd8, 0x26, 0x9c, 0xbc, 0x6c, 0x13, 0x46, 0xf7, 0xa0, 0xa8, - 0x40, 0xc6, 0x3e, 0xf1, 0xf7, 0x65, 0x8e, 0x55, 0x5b, 0x3c, 0x3b, 0x5d, 0x03, 0x89, 0xdc, 0x24, - 0xfe, 0x3e, 0x06, 0x89, 0xe6, 0xdf, 0xa8, 0x09, 0x85, 0xaf, 0x98, 0xed, 0x1a, 0x81, 0x18, 0x84, - 0xba, 0xee, 0x9a, 0x39, 0x15, 0xd3, 0xa1, 0xaa, 0x77, 0x51, 0xf8, 0x6a, 0x3a, 0xf8, 0x26, 0x2c, - 0x78, 0x8c, 0x05, 0x72, 0xe7, 0xb1, 0x99, 0xab, 0x32, 0xe9, 0xf2, 0xcc, 0x0b, 0x56, 0xc6, 0x02, - 0xac, 0x70, 0xb8, 0xe8, 0xc5, 0x4a, 0xe8, 0x1e, 0x2c, 0x3b, 0xc4, 0x0f, 0x0c, 0xb1, 0x65, 0x59, - 0x53, 0x6b, 0x59, 0xb1, 0x5a, 0x10, 0xaf, 0xdb, 0x10, 0x55, 0xa1, 0x86, 0xfe, 0x0f, 0x09, 0x28, - 0xf0, 0xc1, 0xd8, 0x7b, 0xb6, 0xc9, 0x79, 0xda, 0x77, 0xa7, 0x0f, 0xb7, 0x21, 0x65, 0xfa, 0x9e, - 0x72, 0xaa, 0x38, 0x3f, 0xeb, 0x3d, 0x8c, 0xb9, 0x0c, 0x7d, 0x01, 0x59, 0x95, 0xd1, 0x4b, 0xe6, - 0xa0, 0x5f, 0xcf, 0x28, 0x95, 0x6f, 0x94, 0x9e, 0x88, 0xc7, 0x69, 0xef, 0xe4, 0x3e, 0x8e, 0xe3, - 0x22, 0x74, 0x0b, 0x92, 0xa6, 0x74, 0x97, 0x7a, 0x78, 0xaf, 0xb7, 0x71, 0xd2, 0x74, 0xf5, 0xbf, - 0x4d, 0xc0, 0xc2, 0x74, 0xcd, 0xf2, 0x08, 0xb8, 0x03, 0x79, 0x7f, 0xbc, 0xeb, 0x4f, 0xfc, 0x80, - 0x0e, 0xc3, 0x37, 0xbc, 0x48, 0x80, 0x5a, 0x90, 0x27, 0xce, 0x80, 0x79, 0x76, 0xb0, 0x3f, 0x54, - 0xc9, 0xe4, 0xec, 0xd3, 0x3e, 0x6e, 0xb3, 0x52, 0x0d, 0x55, 0xf0, 0x54, 0x3b, 0x3c, 0xba, 0xc5, - 0x71, 0x25, 0x8f, 0xee, 0x37, 0xa0, 0xe8, 0x90, 0xa1, 0xb8, 0xe2, 0x08, 0xec, 0xa1, 0x1c, 0x47, - 0x1a, 0x17, 0x94, 0xac, 0x6f, 0x0f, 0xa9, 0xae, 0x43, 0x3e, 0x32, 0x86, 0x96, 0xa0, 0x50, 0x6d, - 0xf6, 0x8c, 0xfb, 0xeb, 0x0f, 0x8d, 0x47, 0xf5, 0x6d, 0x6d, 0x4e, 0xd1, 0xcb, 0x3f, 0x4b, 0xc0, - 0x82, 0xda, 0x51, 0x14, 0x65, 0x7f, 0x13, 0xe6, 0x3d, 0xb2, 0x17, 0x84, 0x49, 0x45, 0x5a, 0x46, - 0x35, 0xdf, 0xa4, 0x79, 0x52, 0xc1, 0xab, 0x66, 0x27, 0x15, 0xb1, 0x57, 0xe5, 0xd4, 0x95, 0xaf, - 0xca, 0xe9, 0xff, 0x97, 0x57, 0x65, 0xfd, 0x4f, 0x92, 0xb0, 0xa4, 0xd8, 0x5f, 0xb4, 0x81, 0xbd, - 0x0b, 0x79, 0x49, 0x04, 0xa7, 0x29, 0x91, 0x78, 0xc8, 0x94, 0xb8, 0x56, 0x03, 0xe7, 0x64, 0x75, - 0xcb, 0xe2, 0x39, 0xba, 0x82, 0xc6, 0x7e, 0x23, 0x01, 0x52, 0xd4, 0xe6, 0x09, 0x66, 0x03, 0xd2, - 0x7b, 0xb6, 0x43, 0x55, 0x9c, 0xcd, 0xbc, 0xbe, 0xbe, 0xd0, 0xbc, 0x78, 0x68, 0xe9, 0x8b, 0x2c, - 0x7f, 0x73, 0x0e, 0x0b, 0xed, 0xd2, 0x6f, 0x02, 0x4c, 0xa5, 0x33, 0x13, 0x59, 0x4e, 0x16, 0xd5, - 0x9d, 0x60, 0x48, 0x16, 0x5b, 0x0d, 0xcc, 0x65, 0xbc, 0x6a, 0x60, 0x5b, 0x6a, 0xcb, 0x10, 0x55, - 0x8f, 0x78, 0xd5, 0xc0, 0xb6, 0xa2, 0xd7, 0x9e, 0xf4, 0x35, 0xaf, 0x3d, 0xb5, 0x5c, 0x78, 0x33, - 0xa5, 0x6f, 0xc1, 0xad, 0x9a, 0x43, 0xcc, 0x03, 0xc7, 0xf6, 0x03, 0x6a, 0xc5, 0x57, 0xe8, 0x3a, - 0x64, 0xcf, 0xf1, 0xb4, 0xab, 0x2e, 0x02, 0x15, 0x52, 0xff, 0xb7, 0x04, 0x14, 0x37, 0x29, 0x71, - 0x82, 0xfd, 0xe9, 0x6d, 0x4a, 0x40, 0xfd, 0x40, 0x6d, 0xf0, 0xe2, 0x1b, 0x7d, 0x08, 0xb9, 0xe8, - 0x18, 0xbf, 0xf6, 0x45, 0x26, 0x82, 0xa2, 0x07, 0x30, 0xcf, 0x63, 0x9a, 0x8d, 0xc3, 0xfc, 0xe0, - 0xaa, 0xcb, 0x7e, 0x85, 0xe4, 0x9b, 0xba, 0x47, 0xc5, 0xb9, 0x2d, 0x9c, 0x92, 0xc1, 0x61, 0x11, - 0xfd, 0x12, 0x14, 0xc5, 0x5d, 0x75, 0x48, 0x53, 0x32, 0xd7, 0xd9, 0x2c, 0xc8, 0xe7, 0x26, 0x49, - 0x51, 0xfe, 0x27, 0x01, 0xcb, 0xdb, 0x64, 0xb2, 0x4b, 0xd5, 0x32, 0xa5, 0x16, 0xa6, 0x26, 0xf3, - 0x2c, 0xd4, 0x8d, 0x2f, 0xef, 0x2b, 0x5e, 0xaf, 0x66, 0x29, 0xcf, 0x5e, 0xe5, 0x61, 0xce, 0x92, - 0x8c, 0xe5, 0x2c, 0xcb, 0x90, 0x71, 0x99, 0x6b, 0x52, 0xb5, 0xf6, 0x65, 0x41, 0xb7, 0xe3, 0x4b, - 0xbb, 0x14, 0x3d, 0x2c, 0x89, 0x67, 0xa1, 0x36, 0x0b, 0xa2, 0xd6, 0xd0, 0x17, 0x50, 0xea, 0x35, - 0xeb, 0xb8, 0xd9, 0xaf, 0x75, 0x7e, 0x6a, 0xf4, 0xaa, 0x5b, 0xbd, 0xea, 0xfa, 0x3d, 0xa3, 0xdb, - 0xd9, 0xfa, 0xf2, 0xfe, 0x83, 0x7b, 0x1f, 0x6a, 0x89, 0x52, 0xf9, 0xf8, 0xa4, 0x7c, 0xa7, 0x5d, - 0xad, 0x6f, 0xc9, 0x58, 0xde, 0x65, 0xcf, 0x7a, 0xc4, 0xf1, 0xc9, 0xfa, 0xbd, 0x2e, 0x73, 0x26, - 0x1c, 0xa3, 0x9f, 0x24, 0xa0, 0x18, 0x3f, 0x1f, 0xe2, 0xc7, 0x5e, 0xe2, 0xd2, 0x63, 0x6f, 0x7a, - 0x7a, 0x26, 0x2f, 0x39, 0x3d, 0x37, 0x60, 0xd9, 0xf4, 0x98, 0xef, 0x1b, 0x9c, 0x30, 0x53, 0xeb, - 0x02, 0x25, 0x7f, 0xe5, 0xec, 0x74, 0xed, 0x46, 0x9d, 0xd7, 0xf7, 0x44, 0xb5, 0x32, 0x7f, 0xc3, - 0x8c, 0x89, 0x44, 0x4b, 0xef, 0xfd, 0x22, 0x05, 0xf9, 0xe8, 0xba, 0x99, 0x2f, 0x19, 0x9e, 0xeb, - 0x2b, 0x57, 0x44, 0xf2, 0x36, 0x3d, 0x42, 0x6f, 0x4c, 0xb3, 0xfc, 0x2f, 0xe4, 0xfb, 0x5a, 0x54, - 0x1d, 0x66, 0xf8, 0x6f, 0x41, 0xae, 0xda, 0xeb, 0xb5, 0x1e, 0xb5, 0x9b, 0x0d, 0xed, 0xeb, 0x44, - 0xe9, 0x95, 0xe3, 0x93, 0xf2, 0x8d, 0x08, 0x54, 0xf5, 0x65, 0x4f, 0x05, 0xaa, 0x5e, 0x6f, 0x76, - 0xfb, 0xcd, 0x86, 0xf6, 0x3c, 0x79, 0x11, 0x25, 0xb2, 0x56, 0xf1, 0x4a, 0x9e, 0xef, 0xe2, 0x66, - 0xb7, 0x8a, 0x79, 0x83, 0x5f, 0x27, 0xe5, 0xe5, 0xc3, 0xb4, 0x45, 0x8f, 0x8e, 0x88, 0xc7, 0xdb, - 0x5c, 0x0d, 0x7f, 0x2d, 0xf2, 0x3c, 0x25, 0x5f, 0x52, 0xa7, 0x77, 0xe7, 0x94, 0x58, 0x13, 0xde, - 0x9a, 0x78, 0xb4, 0x10, 0x66, 0x52, 0x17, 0x5a, 0xeb, 0xf1, 0x40, 0xe5, 0x56, 0x74, 0x98, 0xc7, - 0x3b, 0xed, 0x36, 0x07, 0x3d, 0x4f, 0x5f, 0x18, 0x1d, 0x1e, 0xbb, 0x3c, 0x23, 0x41, 0x77, 0x21, - 0x17, 0xbe, 0x69, 0x68, 0x5f, 0xa7, 0x2f, 0x74, 0xa8, 0x1e, 0x3e, 0xc8, 0x88, 0x06, 0x37, 0x77, - 0xfa, 0xe2, 0xc7, 0x2c, 0xcf, 0x33, 0x17, 0x1b, 0xdc, 0x1f, 0x07, 0x16, 0x3b, 0x72, 0xf9, 0x04, - 0xab, 0x7b, 0x8e, 0xaf, 0x33, 0x32, 0x29, 0x8c, 0x30, 0xea, 0x92, 0xe3, 0x2d, 0xc8, 0xe1, 0xe6, - 0x4f, 0xe4, 0xef, 0x5e, 0x9e, 0x67, 0x2f, 0xd8, 0xc1, 0xf4, 0x2b, 0x6a, 0xaa, 0xd6, 0x3a, 0xb8, - 0xbb, 0x59, 0x15, 0x2e, 0xbf, 0x88, 0xea, 0x78, 0xa3, 0x7d, 0xe2, 0x52, 0x6b, 0xfa, 0x9c, 0x1c, - 0x55, 0xbd, 0xf7, 0x2b, 0x90, 0x0b, 0x69, 0x03, 0x5a, 0x85, 0xec, 0xd3, 0x0e, 0x7e, 0xdc, 0xc4, - 0xda, 0x9c, 0xf4, 0x61, 0x58, 0xf3, 0x54, 0x12, 0xbe, 0x32, 0xcc, 0x6f, 0x57, 0xdb, 0xd5, 0x47, - 0x4d, 0x1c, 0x5e, 0x41, 0x86, 0x00, 0x75, 0xf6, 0x95, 0x34, 0xd5, 0x40, 0x64, 0xb3, 0xb6, 0xf2, - 0xcd, 0xb7, 0xab, 0x73, 0x3f, 0xff, 0x76, 0x75, 0xee, 0xf9, 0xd9, 0x6a, 0xe2, 0x9b, 0xb3, 0xd5, - 0xc4, 0xcf, 0xce, 0x56, 0x13, 0xff, 0x72, 0xb6, 0x9a, 0xd8, 0xcd, 0x8a, 0x1d, 0xe3, 0xc1, 0xff, - 0x06, 0x00, 0x00, 0xff, 0xff, 0x45, 0x07, 0xa3, 0xee, 0x6e, 0x2a, 0x00, 0x00, + // 4643 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xac, 0x5a, 0x4d, 0x6c, 0x23, 0x47, + 0x76, 0x16, 0x7f, 0x45, 0x3e, 0x52, 0x52, 0x4f, 0x8d, 0x76, 0x56, 0xc3, 0x1d, 0x4b, 0x74, 0xdb, + 0xb3, 0xf6, 0x7a, 0x1d, 0x7a, 0x7e, 0x76, 0x17, 0x63, 0x3b, 0x6b, 0x9b, 0x7f, 0x1a, 0x71, 0x47, + 0x22, 0x89, 0x22, 0x35, 0xb3, 0x3e, 0x24, 0x8d, 0x56, 0x77, 0x89, 0x6a, 0xab, 0xd9, 0xc5, 0x74, + 0x17, 0xa5, 0x61, 0x7e, 0x90, 0x41, 0x0e, 0x49, 0xa0, 0x53, 0x72, 0x0b, 0x10, 0x28, 0x97, 0xe4, + 0x14, 0xe4, 0x96, 0x43, 0x90, 0x5c, 0xe2, 0x00, 0x39, 0xf8, 0x96, 0x4d, 0x02, 0x04, 0x8b, 0x04, + 0x50, 0x62, 0x1d, 0x72, 0x0b, 0x92, 0xcb, 0x22, 0x97, 0x04, 0x08, 0xea, 0xa7, 0x9b, 0x4d, 0x0d, + 0x25, 0x8d, 0xe3, 0xbd, 0x48, 0x5d, 0xef, 0x7d, 0xef, 0xd5, 0xab, 0x57, 0xaf, 0xaa, 0xde, 0xab, + 0x22, 0x14, 0xd8, 0x64, 0x44, 0x82, 0xca, 0xc8, 0xa7, 0x8c, 0x22, 0x64, 0x53, 0xeb, 0x90, 0xf8, + 0x95, 0xe0, 0xd8, 0xf4, 0x87, 0x87, 0x0e, 0xab, 0x1c, 0xdd, 0x2f, 0x6d, 0x0c, 0x28, 0x1d, 0xb8, + 0xe4, 0x3d, 0x81, 0xd8, 0x1b, 0xef, 0xbf, 0xc7, 0x9c, 0x21, 0x09, 0x98, 0x39, 0x1c, 0x49, 0xa1, + 0xd2, 0xfa, 0x45, 0x80, 0x3d, 0xf6, 0x4d, 0xe6, 0x50, 0x4f, 0xf1, 0x57, 0x07, 0x74, 0x40, 0xc5, + 0xe7, 0x7b, 0xfc, 0x4b, 0x52, 0xf5, 0x0d, 0x58, 0x7c, 0x4a, 0xfc, 0xc0, 0xa1, 0x1e, 0x5a, 0x85, + 0x8c, 0xe3, 0xd9, 0xe4, 0xf9, 0x5a, 0xa2, 0x9c, 0x78, 0x3b, 0x8d, 0x65, 0x43, 0xbf, 0x07, 0xd0, + 0xe2, 0x1f, 0x4d, 0x8f, 0xf9, 0x13, 0xa4, 0x41, 0xea, 0x90, 0x4c, 0x04, 0x22, 0x8f, 0xf9, 0x27, + 0xa7, 0x1c, 0x99, 0xee, 0x5a, 0x52, 0x52, 0x8e, 0x4c, 0x57, 0xff, 0x32, 0x01, 0x85, 0xaa, 0xe7, + 0x51, 0x26, 0x7a, 0x0f, 0x10, 0x82, 0xb4, 0x67, 0x0e, 0x89, 0x12, 0x12, 0xdf, 0xa8, 0x0e, 0x59, + 0xd7, 0xdc, 0x23, 0x6e, 0xb0, 0x96, 0x2c, 0xa7, 0xde, 0x2e, 0x3c, 0xf8, 0x6e, 0xe5, 0xe5, 0x21, + 0x57, 0x62, 0x4a, 0x2a, 0xdb, 0x02, 0x2d, 0x8c, 0xc0, 0x4a, 0x14, 0x7d, 0x04, 0x8b, 0x8e, 0x67, + 0x3b, 0x16, 0x09, 0xd6, 0xd2, 0x42, 0xcb, 0xfa, 0x3c, 0x2d, 0x53, 0xeb, 0x6b, 0xe9, 0x2f, 0xce, + 0x36, 0x16, 0x70, 0x28, 0x54, 0x7a, 0x1f, 0x0a, 0x31, 0xb5, 0x73, 0xc6, 0xb6, 0x0a, 0x99, 0x23, + 0xd3, 0x1d, 0x13, 0x35, 0x3a, 0xd9, 0xf8, 0x20, 0xf9, 0x28, 0xa1, 0x7f, 0x0a, 0x79, 0x4c, 0x02, + 0x3a, 0xf6, 0x2d, 0x12, 0xa0, 0xef, 0x40, 0xde, 0x33, 0x3d, 0x6a, 0x58, 0xa3, 0x71, 0x20, 0xc4, + 0x53, 0xb5, 0xe2, 0xf9, 0xd9, 0x46, 0xae, 0x6d, 0x7a, 0xb4, 0xde, 0xdd, 0x0d, 0x70, 0x8e, 0xb3, + 0xeb, 0xa3, 0x71, 0x80, 0x5e, 0x87, 0xe2, 0x90, 0x0c, 0xa9, 0x3f, 0x31, 0xf6, 0x26, 0x8c, 0x04, + 0x42, 0x71, 0x0a, 0x17, 0x24, 0xad, 0xc6, 0x49, 0xfa, 0xef, 0x25, 0x60, 0x35, 0xd4, 0x8d, 0xc9, + 0xaf, 0x8c, 0x1d, 0x9f, 0x0c, 0x89, 0xc7, 0x02, 0xf4, 0x7d, 0xc8, 0xba, 0xce, 0xd0, 0x61, 0xb2, + 0x8f, 0xc2, 0x83, 0xd7, 0xe6, 0x8d, 0x36, 0xb2, 0x0a, 0x2b, 0x30, 0xaa, 0x42, 0xd1, 0x27, 0x01, + 0xf1, 0x8f, 0xa4, 0x27, 0x45, 0x97, 0xd7, 0x0a, 0xcf, 0x88, 0xe8, 0x9b, 0x90, 0xeb, 0xba, 0x26, + 0xdb, 0xa7, 0xfe, 0x10, 0xe9, 0x50, 0x34, 0x7d, 0xeb, 0xc0, 0x61, 0xc4, 0x62, 0x63, 0x3f, 0x9c, + 0xd5, 0x19, 0x1a, 0xba, 0x05, 0x49, 0x2a, 0x3b, 0xca, 0xd7, 0xb2, 0xe7, 0x67, 0x1b, 0xc9, 0x4e, + 0x0f, 0x27, 0x69, 0xa0, 0x7f, 0x08, 0x37, 0xba, 0xee, 0x78, 0xe0, 0x78, 0x0d, 0x12, 0x58, 0xbe, + 0x33, 0xe2, 0xda, 0x79, 0x78, 0xf0, 0xd8, 0x0f, 0xc3, 0x83, 0x7f, 0x47, 0x21, 0x93, 0x9c, 0x86, + 0x8c, 0xfe, 0x3b, 0x49, 0xb8, 0xd1, 0xf4, 0x06, 0x8e, 0x47, 0xe2, 0xd2, 0x77, 0x61, 0x99, 0x08, + 0xa2, 0x71, 0x24, 0xc3, 0x58, 0xe9, 0x59, 0x92, 0xd4, 0x30, 0xb6, 0x5b, 0x17, 0xe2, 0xed, 0xfe, + 0xbc, 0xe1, 0xbf, 0xa4, 0x7d, 0x6e, 0xd4, 0x35, 0x61, 0x71, 0x24, 0x06, 0x11, 0xac, 0xa5, 0x84, + 0xae, 0xbb, 0xf3, 0x74, 0xbd, 0x34, 0xce, 0x30, 0xf8, 0x94, 0xec, 0xd7, 0x09, 0xbe, 0x3f, 0x4b, + 0xc2, 0x4a, 0x9b, 0xda, 0x33, 0x7e, 0x28, 0x41, 0xee, 0x80, 0x06, 0x2c, 0xb6, 0xd0, 0xa2, 0x36, + 0x7a, 0x04, 0xb9, 0x91, 0x9a, 0x3e, 0x35, 0xfb, 0x77, 0xe6, 0x9b, 0x2c, 0x31, 0x38, 0x42, 0xa3, + 0x0f, 0x21, 0xef, 0x87, 0x31, 0xb1, 0x96, 0x7a, 0x95, 0xc0, 0x99, 0xe2, 0xd1, 0x0f, 0x21, 0x2b, + 0x27, 0x61, 0x2d, 0x2d, 0x24, 0xef, 0xbe, 0x92, 0xcf, 0xb1, 0x12, 0x42, 0x8f, 0x21, 0xc7, 0xdc, + 0xc0, 0x70, 0xbc, 0x7d, 0xba, 0x96, 0x11, 0x0a, 0x36, 0xe6, 0x29, 0xe0, 0x8e, 0xe8, 0x6f, 0xf7, + 0x5a, 0xde, 0x3e, 0xad, 0x15, 0xce, 0xcf, 0x36, 0x16, 0x55, 0x03, 0x2f, 0x32, 0x37, 0xe0, 0x1f, + 0xfa, 0xef, 0x27, 0xa0, 0x10, 0x43, 0xa1, 0xd7, 0x00, 0x98, 0x3f, 0x0e, 0x98, 0xe1, 0x53, 0xca, + 0x84, 0xb3, 0x8a, 0x38, 0x2f, 0x28, 0x98, 0x52, 0x86, 0x2a, 0x70, 0xd3, 0x22, 0x3e, 0x33, 0x9c, + 0x20, 0x18, 0x13, 0xdf, 0x08, 0xc6, 0x7b, 0x9f, 0x11, 0x8b, 0x09, 0xc7, 0x15, 0xf1, 0x0d, 0xce, + 0x6a, 0x09, 0x4e, 0x4f, 0x32, 0xd0, 0x43, 0xb8, 0x15, 0xc7, 0x8f, 0xc6, 0x7b, 0xae, 0x63, 0x19, + 0x7c, 0x32, 0x53, 0x42, 0xe4, 0xe6, 0x54, 0xa4, 0x2b, 0x78, 0x4f, 0xc8, 0x44, 0xff, 0x69, 0x02, + 0x34, 0x6c, 0xee, 0xb3, 0x1d, 0x32, 0xdc, 0x23, 0x7e, 0x8f, 0x99, 0x6c, 0x1c, 0xa0, 0x5b, 0x90, + 0x75, 0x89, 0x69, 0x13, 0x5f, 0x18, 0x95, 0xc3, 0xaa, 0x85, 0x76, 0xf9, 0x0a, 0x36, 0xad, 0x03, + 0x73, 0xcf, 0x71, 0x1d, 0x36, 0x11, 0xa6, 0x2c, 0xcf, 0x0f, 0xe1, 0x8b, 0x3a, 0x2b, 0x38, 0x26, + 0x88, 0x67, 0xd4, 0xa0, 0x35, 0x58, 0x1c, 0x92, 0x20, 0x30, 0x07, 0x44, 0x58, 0x9a, 0xc7, 0x61, + 0x53, 0xff, 0x10, 0x8a, 0x71, 0x39, 0x54, 0x80, 0xc5, 0xdd, 0xf6, 0x93, 0x76, 0xe7, 0x59, 0x5b, + 0x5b, 0x40, 0x2b, 0x50, 0xd8, 0x6d, 0xe3, 0x66, 0xb5, 0xbe, 0x55, 0xad, 0x6d, 0x37, 0xb5, 0x04, + 0x5a, 0x82, 0xfc, 0xb4, 0x99, 0xd4, 0xff, 0x3c, 0x01, 0xc0, 0xdd, 0xad, 0x06, 0xf5, 0x01, 0x64, + 0x02, 0x66, 0x32, 0x19, 0x95, 0xcb, 0x0f, 0xde, 0xbc, 0x6c, 0x0e, 0x95, 0xbd, 0xfc, 0x1f, 0xc1, + 0x52, 0x24, 0x6e, 0x61, 0x72, 0xc6, 0x42, 0xbe, 0x41, 0x98, 0xb6, 0xed, 0x2b, 0xc3, 0xc5, 0xb7, + 0xfe, 0x21, 0x64, 0x84, 0xf4, 0xac, 0xb9, 0x39, 0x48, 0x37, 0xf8, 0x57, 0x02, 0xe5, 0x21, 0x83, + 0x9b, 0xd5, 0xc6, 0xa7, 0x5a, 0x12, 0x69, 0x50, 0x6c, 0xb4, 0x7a, 0xf5, 0x4e, 0xbb, 0xdd, 0xac, + 0xf7, 0x9b, 0x0d, 0x2d, 0xa5, 0xdf, 0x85, 0x4c, 0x6b, 0xc8, 0x35, 0xdf, 0xe1, 0x21, 0xbf, 0x4f, + 0x7c, 0xe2, 0x59, 0xe1, 0x4a, 0x9a, 0x12, 0xf4, 0x9f, 0xe4, 0x21, 0xb3, 0x43, 0xc7, 0x1e, 0x43, + 0x0f, 0x62, 0xdb, 0xd6, 0xf2, 0xfc, 0x93, 0x47, 0x00, 0x2b, 0xfd, 0xc9, 0x88, 0xa8, 0x6d, 0xed, + 0x16, 0x64, 0xe5, 0xe2, 0x50, 0xc3, 0x51, 0x2d, 0x4e, 0x67, 0xa6, 0x3f, 0x20, 0x4c, 0x8d, 0x47, + 0xb5, 0xd0, 0xdb, 0x90, 0xf3, 0x89, 0x69, 0x53, 0xcf, 0x9d, 0x88, 0x35, 0x94, 0x93, 0xe7, 0x0a, + 0x26, 0xa6, 0xdd, 0xf1, 0xdc, 0x09, 0x8e, 0xb8, 0x68, 0x0b, 0x8a, 0x7b, 0x8e, 0x67, 0x1b, 0x74, + 0x24, 0x37, 0xf9, 0xcc, 0xe5, 0x2b, 0x4e, 0x5a, 0x55, 0x73, 0x3c, 0xbb, 0x23, 0xc1, 0xb8, 0xb0, + 0x37, 0x6d, 0xa0, 0x36, 0x2c, 0x1f, 0x51, 0x77, 0x3c, 0x24, 0x91, 0xae, 0xac, 0xd0, 0xf5, 0xd6, + 0xe5, 0xba, 0x9e, 0x0a, 0x7c, 0xa8, 0x6d, 0xe9, 0x28, 0xde, 0x44, 0x4f, 0x60, 0x89, 0x0d, 0x47, + 0xfb, 0x41, 0xa4, 0x6e, 0x51, 0xa8, 0xfb, 0xf6, 0x15, 0x0e, 0xe3, 0xf0, 0x50, 0x5b, 0x91, 0xc5, + 0x5a, 0xa5, 0xdf, 0x4a, 0x41, 0x21, 0x66, 0x39, 0xea, 0x41, 0x61, 0xe4, 0xd3, 0x91, 0x39, 0x10, + 0x07, 0x95, 0x9a, 0x8b, 0xfb, 0xaf, 0x34, 0xea, 0x4a, 0x77, 0x2a, 0x88, 0xe3, 0x5a, 0xf4, 0xd3, + 0x24, 0x14, 0x62, 0x4c, 0xf4, 0x0e, 0xe4, 0x70, 0x17, 0xb7, 0x9e, 0x56, 0xfb, 0x4d, 0x6d, 0xa1, + 0x74, 0xe7, 0xe4, 0xb4, 0xbc, 0x26, 0xb4, 0xc5, 0x15, 0x74, 0x7d, 0xe7, 0x88, 0x87, 0xde, 0xdb, + 0xb0, 0x18, 0x42, 0x13, 0xa5, 0x6f, 0x9d, 0x9c, 0x96, 0xbf, 0x79, 0x11, 0x1a, 0x43, 0xe2, 0xde, + 0x56, 0x15, 0x37, 0x1b, 0x5a, 0x72, 0x3e, 0x12, 0xf7, 0x0e, 0x4c, 0x9f, 0xd8, 0xe8, 0xdb, 0x90, + 0x55, 0xc0, 0x54, 0xa9, 0x74, 0x72, 0x5a, 0xbe, 0x75, 0x11, 0x38, 0xc5, 0xe1, 0xde, 0x76, 0xf5, + 0x69, 0x53, 0x4b, 0xcf, 0xc7, 0xe1, 0x9e, 0x6b, 0x1e, 0x11, 0xf4, 0x26, 0x64, 0x24, 0x2c, 0x53, + 0xba, 0x7d, 0x72, 0x5a, 0xfe, 0xc6, 0x4b, 0xea, 0x38, 0xaa, 0xb4, 0xf6, 0xbb, 0x7f, 0xbc, 0xbe, + 0xf0, 0x57, 0x7f, 0xb2, 0xae, 0x5d, 0x64, 0x97, 0xfe, 0x27, 0x01, 0x4b, 0x33, 0x53, 0x8e, 0x74, + 0xc8, 0x7a, 0xd4, 0xa2, 0x23, 0x79, 0x7e, 0xe5, 0x6a, 0x70, 0x7e, 0xb6, 0x91, 0x6d, 0xd3, 0x3a, + 0x1d, 0x4d, 0xb0, 0xe2, 0xa0, 0x27, 0x17, 0x4e, 0xe0, 0x87, 0xaf, 0x18, 0x4f, 0x73, 0xcf, 0xe0, + 0x8f, 0x61, 0xc9, 0xf6, 0x9d, 0x23, 0xe2, 0x1b, 0x16, 0xf5, 0xf6, 0x9d, 0x81, 0x3a, 0x9b, 0x4a, + 0xf3, 0x74, 0x36, 0x04, 0x10, 0x17, 0xa5, 0x40, 0x5d, 0xe0, 0xbf, 0xc6, 0xe9, 0x5b, 0x7a, 0x0a, + 0xc5, 0x78, 0x84, 0xf2, 0xe3, 0x24, 0x70, 0x7e, 0x95, 0xa8, 0x84, 0x4e, 0xa4, 0x7f, 0x38, 0xcf, + 0x29, 0x22, 0x9d, 0x43, 0x6f, 0x41, 0x7a, 0x48, 0x6d, 0xa9, 0x67, 0xa9, 0x76, 0x93, 0x27, 0x01, + 0xff, 0x7c, 0xb6, 0x51, 0xa0, 0x41, 0x65, 0xd3, 0x71, 0xc9, 0x0e, 0xb5, 0x09, 0x16, 0x00, 0xfd, + 0x08, 0xd2, 0x7c, 0xab, 0x40, 0xdf, 0x82, 0x74, 0xad, 0xd5, 0x6e, 0x68, 0x0b, 0xa5, 0x1b, 0x27, + 0xa7, 0xe5, 0x25, 0xe1, 0x12, 0xce, 0xe0, 0xb1, 0x8b, 0x36, 0x20, 0xfb, 0xb4, 0xb3, 0xbd, 0xbb, + 0xc3, 0xc3, 0xeb, 0xe6, 0xc9, 0x69, 0x79, 0x25, 0x62, 0x4b, 0xa7, 0xa1, 0xd7, 0x20, 0xd3, 0xdf, + 0xe9, 0x6e, 0xf6, 0xb4, 0x64, 0x09, 0x9d, 0x9c, 0x96, 0x97, 0x23, 0xbe, 0xb0, 0xb9, 0x74, 0x43, + 0xcd, 0x6a, 0x3e, 0xa2, 0xeb, 0x3f, 0x4b, 0xc2, 0x12, 0xe6, 0x95, 0x84, 0xcf, 0xba, 0xd4, 0x75, + 0xac, 0x09, 0xea, 0x42, 0xde, 0xa2, 0x9e, 0xed, 0xc4, 0xd6, 0xd4, 0x83, 0x4b, 0x4e, 0xfd, 0xa9, + 0x54, 0xd8, 0xaa, 0x87, 0x92, 0x78, 0xaa, 0x04, 0xbd, 0x07, 0x19, 0x9b, 0xb8, 0xe6, 0x44, 0xa5, + 0x1f, 0xb7, 0x2b, 0xb2, 0x56, 0xa9, 0x84, 0xb5, 0x4a, 0xa5, 0xa1, 0x6a, 0x15, 0x2c, 0x71, 0x22, + 0x4f, 0x36, 0x9f, 0x1b, 0x26, 0x63, 0x64, 0x38, 0x62, 0x32, 0xf7, 0x48, 0xe3, 0xc2, 0xd0, 0x7c, + 0x5e, 0x55, 0x24, 0x74, 0x1f, 0xb2, 0xc7, 0x8e, 0x67, 0xd3, 0x63, 0x95, 0x5e, 0x5c, 0xa1, 0x54, + 0x01, 0xf5, 0x13, 0x7e, 0xea, 0x5e, 0x30, 0x93, 0xfb, 0xbb, 0xdd, 0x69, 0x37, 0x43, 0x7f, 0x2b, + 0x7e, 0xc7, 0x6b, 0x53, 0x8f, 0xaf, 0x15, 0xe8, 0xb4, 0x8d, 0xcd, 0x6a, 0x6b, 0x7b, 0x17, 0x73, + 0x9f, 0xaf, 0x9e, 0x9c, 0x96, 0xb5, 0x08, 0xb2, 0x69, 0x3a, 0x2e, 0xcf, 0x77, 0x6f, 0x43, 0xaa, + 0xda, 0xfe, 0x54, 0x4b, 0x96, 0xb4, 0x93, 0xd3, 0x72, 0x31, 0x62, 0x57, 0xbd, 0xc9, 0x74, 0x19, + 0x5d, 0xec, 0x57, 0xff, 0xbb, 0x14, 0x14, 0x77, 0x47, 0xb6, 0xc9, 0x88, 0x8c, 0x49, 0x54, 0x86, + 0xc2, 0xc8, 0xf4, 0x4d, 0xd7, 0x25, 0xae, 0x13, 0x0c, 0x55, 0x15, 0x16, 0x27, 0xa1, 0xf7, 0x5f, + 0xd5, 0x8d, 0xb5, 0x1c, 0x8f, 0xb3, 0x3f, 0xf8, 0xd7, 0x8d, 0x44, 0xe8, 0xd0, 0x5d, 0x58, 0xde, + 0x97, 0xd6, 0x1a, 0xa6, 0x25, 0x26, 0x36, 0x25, 0x26, 0xb6, 0x32, 0x6f, 0x62, 0xe3, 0x66, 0x55, + 0xd4, 0x20, 0xab, 0x42, 0x0a, 0x2f, 0xed, 0xc7, 0x9b, 0xe8, 0x21, 0x2c, 0x0e, 0xa9, 0xe7, 0x30, + 0xea, 0x5f, 0x3f, 0x0b, 0x21, 0x12, 0xbd, 0x03, 0x37, 0xf8, 0xe4, 0x86, 0xf6, 0x08, 0xb6, 0x38, + 0xb1, 0x92, 0x78, 0x65, 0x68, 0x3e, 0x57, 0x1d, 0x62, 0x4e, 0x46, 0x35, 0xc8, 0x50, 0x9f, 0xa7, + 0x44, 0x59, 0x61, 0xee, 0xbb, 0xd7, 0x9a, 0x2b, 0x1b, 0x1d, 0x2e, 0x83, 0xa5, 0xa8, 0xfe, 0x03, + 0x58, 0x9a, 0x19, 0x04, 0xcf, 0x04, 0xba, 0xd5, 0xdd, 0x5e, 0x53, 0x5b, 0x40, 0x45, 0xc8, 0xd5, + 0x3b, 0xed, 0x7e, 0xab, 0xbd, 0xcb, 0x53, 0x99, 0x22, 0xe4, 0x70, 0x67, 0x7b, 0xbb, 0x56, 0xad, + 0x3f, 0xd1, 0x92, 0x7a, 0x05, 0x0a, 0x31, 0x6d, 0x68, 0x19, 0xa0, 0xd7, 0xef, 0x74, 0x8d, 0xcd, + 0x16, 0xee, 0xf5, 0x65, 0x22, 0xd4, 0xeb, 0x57, 0x71, 0x5f, 0x11, 0x12, 0xfa, 0x7f, 0x26, 0xc3, + 0x19, 0x55, 0xb9, 0x4f, 0x6d, 0x36, 0xf7, 0xb9, 0xc2, 0x78, 0x95, 0xfd, 0x4c, 0x1b, 0x51, 0x0e, + 0xf4, 0x3e, 0x80, 0x08, 0x1c, 0x62, 0x1b, 0x26, 0x53, 0x13, 0x5f, 0x7a, 0xc9, 0xc9, 0xfd, 0xf0, + 0x32, 0x00, 0xe7, 0x15, 0xba, 0xca, 0xd0, 0x0f, 0xa1, 0x68, 0xd1, 0xe1, 0xc8, 0x25, 0x4a, 0x38, + 0x75, 0xad, 0x70, 0x21, 0xc2, 0x57, 0x59, 0x3c, 0xfb, 0x4a, 0xcf, 0xe6, 0x87, 0xbf, 0x9d, 0x08, + 0x3d, 0x33, 0x27, 0xe1, 0x2a, 0x42, 0x6e, 0xb7, 0xdb, 0xa8, 0xf6, 0x5b, 0xed, 0xc7, 0x5a, 0x02, + 0x01, 0x64, 0x85, 0xab, 0x1b, 0x5a, 0x92, 0x27, 0x8a, 0xf5, 0xce, 0x4e, 0x77, 0xbb, 0x29, 0x52, + 0x2e, 0xb4, 0x0a, 0x5a, 0xe8, 0x6c, 0x43, 0x38, 0xb2, 0xd9, 0xd0, 0xd2, 0xe8, 0x26, 0xac, 0x44, + 0x54, 0x25, 0x99, 0x41, 0xb7, 0x00, 0x45, 0xc4, 0xa9, 0x8a, 0xac, 0xfe, 0x1b, 0xb0, 0x52, 0xa7, + 0x1e, 0x33, 0x1d, 0x2f, 0x4a, 0xa2, 0x1f, 0xf0, 0x41, 0x2b, 0x92, 0xe1, 0xd8, 0x72, 0x4f, 0xaf, + 0xad, 0x9c, 0x9f, 0x6d, 0x14, 0x22, 0x68, 0xab, 0xc1, 0x47, 0x1a, 0x36, 0x6c, 0xbe, 0x7e, 0x47, + 0x8e, 0x2d, 0x9c, 0x9b, 0xa9, 0x2d, 0x9e, 0x9f, 0x6d, 0xa4, 0xba, 0xad, 0x06, 0xe6, 0x34, 0xf4, + 0x2d, 0xc8, 0x93, 0xe7, 0x0e, 0x33, 0x2c, 0xbe, 0x87, 0x73, 0x07, 0x66, 0x70, 0x8e, 0x13, 0xea, + 0x7c, 0xcb, 0xae, 0x01, 0x74, 0xa9, 0xcf, 0x54, 0xcf, 0xdf, 0x83, 0xcc, 0x88, 0xfa, 0xa2, 0x3c, + 0xbf, 0xf4, 0x32, 0x82, 0xc3, 0x65, 0xa0, 0x62, 0x09, 0xd6, 0xff, 0x3a, 0x09, 0xd0, 0x37, 0x83, + 0x43, 0xa5, 0xe4, 0x11, 0xe4, 0xa3, 0x8b, 0x1d, 0x55, 0xe7, 0x5f, 0x39, 0xdb, 0x11, 0x18, 0x3d, + 0x0c, 0x83, 0x4d, 0x96, 0x07, 0x73, 0xeb, 0xb4, 0xb0, 0xa3, 0x79, 0x19, 0xf6, 0x6c, 0x0d, 0xc0, + 0x8f, 0x44, 0xe2, 0xfb, 0x6a, 0xe6, 0xf9, 0x27, 0xaa, 0x8b, 0x63, 0x41, 0x3a, 0x4d, 0x25, 0x98, + 0x6f, 0xcc, 0xeb, 0xe4, 0xc2, 0x8c, 0x6c, 0x2d, 0xe0, 0xa9, 0x1c, 0xfa, 0x18, 0x0a, 0x7c, 0xdc, + 0x46, 0x20, 0x78, 0x2a, 0xb7, 0xbc, 0xd4, 0x55, 0x52, 0x03, 0x86, 0x51, 0xf4, 0x5d, 0xd3, 0x60, + 0xd9, 0x1f, 0x7b, 0x7c, 0xd8, 0x4a, 0x87, 0xee, 0xc0, 0x37, 0xdb, 0x84, 0x1d, 0x53, 0xff, 0xb0, + 0xca, 0x98, 0x69, 0x1d, 0x0c, 0x89, 0xa7, 0x7c, 0x1c, 0x4b, 0xac, 0x13, 0x33, 0x89, 0xf5, 0x1a, + 0x2c, 0x9a, 0xae, 0x63, 0x06, 0x44, 0x66, 0x23, 0x79, 0x1c, 0x36, 0x79, 0xfa, 0xcf, 0x8b, 0x09, + 0x12, 0x04, 0x44, 0xd6, 0xf7, 0x79, 0x3c, 0x25, 0xe8, 0xff, 0x98, 0x04, 0x68, 0x75, 0xab, 0x3b, + 0x4a, 0x7d, 0x03, 0xb2, 0xfb, 0xe6, 0xd0, 0x71, 0x27, 0x57, 0x2d, 0xf0, 0x29, 0xbe, 0x52, 0x95, + 0x8a, 0x36, 0x85, 0x0c, 0x56, 0xb2, 0xa2, 0x2a, 0x18, 0xef, 0x79, 0x84, 0x45, 0x55, 0x81, 0x68, + 0xf1, 0x14, 0xc4, 0x37, 0xbd, 0x68, 0x66, 0x64, 0x83, 0x9b, 0x3e, 0x30, 0x19, 0x39, 0x36, 0x27, + 0xe1, 0xaa, 0x54, 0x4d, 0xb4, 0xc5, 0xab, 0x85, 0x80, 0xf8, 0x47, 0xc4, 0x5e, 0xcb, 0x88, 0x10, + 0xbc, 0xce, 0x1e, 0xac, 0xe0, 0x32, 0xb9, 0x8a, 0xa4, 0x4b, 0x1f, 0x8a, 0x8c, 0x60, 0xca, 0xfa, + 0x4a, 0xb7, 0x13, 0xf7, 0x60, 0x69, 0x66, 0x9c, 0x2f, 0x95, 0x63, 0xad, 0xee, 0xd3, 0xef, 0x69, + 0x69, 0xf5, 0xf5, 0x03, 0x2d, 0xab, 0xff, 0x69, 0x4a, 0xae, 0x23, 0xe5, 0xd5, 0xf9, 0xf7, 0x85, + 0x39, 0x11, 0xfd, 0x16, 0x75, 0x55, 0x7c, 0xbf, 0x75, 0xf5, 0xf2, 0xe2, 0xe9, 0xbd, 0x80, 0xe3, + 0x48, 0x10, 0x6d, 0x40, 0x41, 0xce, 0xbf, 0xc1, 0xe3, 0x49, 0xb8, 0x75, 0x09, 0x83, 0x24, 0x71, + 0x49, 0x74, 0x17, 0x96, 0x45, 0xf9, 0x1e, 0x1c, 0x10, 0x5b, 0x62, 0xd2, 0x02, 0xb3, 0x14, 0x51, + 0x05, 0x6c, 0x07, 0x8a, 0x8a, 0x60, 0x88, 0xd4, 0x2e, 0x23, 0x0c, 0x7a, 0xe7, 0x3a, 0x83, 0xa4, + 0x88, 0xc8, 0xf8, 0x0a, 0xa3, 0x69, 0x43, 0x6f, 0x40, 0x2e, 0x34, 0x16, 0xad, 0x41, 0xaa, 0x5f, + 0xef, 0x6a, 0x0b, 0xa5, 0x95, 0x93, 0xd3, 0x72, 0x21, 0x24, 0xf7, 0xeb, 0x5d, 0xce, 0xd9, 0x6d, + 0x74, 0xb5, 0xc4, 0x2c, 0x67, 0xb7, 0xd1, 0x2d, 0xa5, 0x79, 0x8a, 0xa1, 0xef, 0x43, 0x21, 0xd6, + 0x03, 0x7a, 0x03, 0x16, 0x5b, 0xed, 0xc7, 0xb8, 0xd9, 0xeb, 0x69, 0x0b, 0xa5, 0x5b, 0x27, 0xa7, + 0x65, 0x14, 0xe3, 0xb6, 0xbc, 0x01, 0x9f, 0x1f, 0xf4, 0x1a, 0xa4, 0xb7, 0x3a, 0xfc, 0xe8, 0x92, + 0xb9, 0x64, 0x0c, 0xb1, 0x45, 0x03, 0x56, 0xba, 0xa9, 0x72, 0x97, 0xb8, 0x62, 0xfd, 0x0f, 0x13, + 0x90, 0x95, 0x29, 0xf5, 0xdc, 0x89, 0xaa, 0xc2, 0x62, 0x58, 0xe8, 0xc9, 0x3c, 0xff, 0xad, 0xcb, + 0x73, 0xf2, 0x8a, 0x4a, 0xa1, 0x65, 0xf8, 0x85, 0x72, 0xa5, 0x0f, 0xa0, 0x18, 0x67, 0x7c, 0xa5, + 0xe0, 0xfb, 0x35, 0x28, 0xf0, 0xf8, 0x0e, 0x73, 0xf3, 0x07, 0x90, 0x95, 0x69, 0x7f, 0xb4, 0x95, + 0x5e, 0x5e, 0x20, 0x28, 0x24, 0x7a, 0x04, 0x8b, 0xb2, 0xa8, 0x08, 0xef, 0xf7, 0xd6, 0xaf, 0x5e, + 0x45, 0x38, 0x84, 0xeb, 0x1f, 0x43, 0xba, 0x4b, 0x88, 0xcf, 0x7d, 0xef, 0x51, 0x9b, 0x4c, 0x4f, + 0x1f, 0x55, 0x0f, 0xd9, 0xa4, 0xd5, 0xe0, 0xf5, 0x90, 0x4d, 0x5a, 0x76, 0x74, 0x83, 0x91, 0x8c, + 0xdd, 0x60, 0xf4, 0xa1, 0xf8, 0x8c, 0x38, 0x83, 0x03, 0x46, 0x6c, 0xa1, 0xe8, 0x5d, 0x48, 0x8f, + 0x48, 0x64, 0xfc, 0xda, 0xdc, 0x00, 0x23, 0xc4, 0xc7, 0x02, 0xc5, 0xf7, 0x91, 0x63, 0x21, 0xad, + 0x6e, 0x95, 0x55, 0x4b, 0xff, 0x87, 0x24, 0x2c, 0xb7, 0x82, 0x60, 0x6c, 0x7a, 0x56, 0x98, 0x98, + 0x7c, 0x34, 0x9b, 0x98, 0xbc, 0x3d, 0x77, 0x84, 0x33, 0x22, 0xb3, 0x17, 0x33, 0xea, 0x70, 0x48, + 0x46, 0x87, 0x83, 0xfe, 0x1f, 0x89, 0xf0, 0xf6, 0xe5, 0x6e, 0x6c, 0xb9, 0x97, 0xd6, 0x4e, 0x4e, + 0xcb, 0xab, 0x71, 0x4d, 0x64, 0xd7, 0x3b, 0xf4, 0xe8, 0xb1, 0x87, 0x5e, 0x87, 0x0c, 0x6e, 0xb6, + 0x9b, 0xcf, 0xb4, 0x84, 0x0c, 0xcf, 0x19, 0x10, 0x26, 0x1e, 0x39, 0xe6, 0x9a, 0xba, 0xcd, 0x76, + 0x83, 0x27, 0x12, 0xc9, 0x39, 0x9a, 0xba, 0xc4, 0xb3, 0x1d, 0x6f, 0x80, 0xde, 0x80, 0x6c, 0xab, + 0xd7, 0xdb, 0x15, 0xf5, 0xf1, 0x37, 0x4f, 0x4e, 0xcb, 0x37, 0x67, 0x50, 0xe2, 0xe6, 0xcd, 0xe6, + 0x20, 0x9e, 0xc5, 0xf3, 0x14, 0x63, 0x0e, 0x88, 0xa7, 0x87, 0x12, 0x84, 0x3b, 0x7d, 0x5e, 0xbc, + 0x67, 0xe6, 0x80, 0x30, 0xe5, 0x7f, 0xd5, 0x72, 0xfb, 0x97, 0x24, 0x68, 0x55, 0xcb, 0x22, 0x23, + 0xc6, 0xf9, 0xaa, 0x70, 0xea, 0x43, 0x6e, 0xc4, 0xbf, 0x1c, 0x12, 0x26, 0x01, 0x8f, 0xe6, 0xbe, + 0x6b, 0x5c, 0x90, 0xab, 0x60, 0xea, 0x92, 0xaa, 0x3d, 0x74, 0x82, 0xc0, 0xa1, 0x9e, 0xa4, 0xe1, + 0x48, 0x53, 0xe9, 0xbf, 0x12, 0x70, 0x73, 0x0e, 0x02, 0xdd, 0x83, 0xb4, 0x4f, 0xdd, 0x70, 0x0e, + 0xef, 0x5c, 0x76, 0xb1, 0xc6, 0x45, 0xb1, 0x40, 0xa2, 0x75, 0x00, 0x73, 0xcc, 0xa8, 0x29, 0xfa, + 0x17, 0xb3, 0x97, 0xc3, 0x31, 0x0a, 0x7a, 0x06, 0xd9, 0x80, 0x58, 0x3e, 0x09, 0x53, 0xc5, 0x8f, + 0xff, 0xbf, 0xd6, 0x57, 0x7a, 0x42, 0x0d, 0x56, 0xea, 0x4a, 0x15, 0xc8, 0x4a, 0x0a, 0x0f, 0x7b, + 0xdb, 0x64, 0xa6, 0xba, 0x76, 0x15, 0xdf, 0x3c, 0x9a, 0x4c, 0x77, 0x10, 0x46, 0x93, 0xe9, 0x0e, + 0xf4, 0xbf, 0x4d, 0x02, 0x34, 0x9f, 0x33, 0xe2, 0x7b, 0xa6, 0x5b, 0xaf, 0xa2, 0x66, 0x6c, 0xf7, + 0x97, 0xa3, 0xfd, 0xce, 0xdc, 0xbb, 0xe4, 0x48, 0xa2, 0x52, 0xaf, 0xce, 0xd9, 0xff, 0x6f, 0x43, + 0x6a, 0xec, 0xab, 0xa7, 0x2a, 0x99, 0xe6, 0xed, 0xe2, 0x6d, 0xcc, 0x69, 0xa8, 0x39, 0xdd, 0xb6, + 0x52, 0x97, 0x3f, 0x48, 0xc5, 0x3a, 0x98, 0xbb, 0x75, 0xf1, 0x95, 0x6f, 0x99, 0x86, 0x45, 0xd4, + 0xc9, 0x51, 0x94, 0x2b, 0xbf, 0x5e, 0xad, 0x13, 0x9f, 0xe1, 0xac, 0x65, 0xf2, 0xff, 0x5f, 0x6b, + 0x7f, 0x7b, 0x17, 0x60, 0x3a, 0x34, 0xb4, 0x0e, 0x99, 0xfa, 0x66, 0xaf, 0xb7, 0xad, 0x2d, 0xc8, + 0x0d, 0x7c, 0xca, 0x12, 0x64, 0xfd, 0x2f, 0x93, 0x90, 0xab, 0x57, 0xd5, 0xb1, 0x5a, 0x07, 0x4d, + 0xec, 0x4a, 0xe2, 0xb2, 0x9a, 0x3c, 0x1f, 0x39, 0xfe, 0x44, 0x6d, 0x2c, 0x57, 0xd4, 0x6c, 0xcb, + 0x5c, 0x84, 0x5b, 0xdd, 0x14, 0x02, 0x08, 0x43, 0x91, 0x28, 0x27, 0x18, 0x96, 0x19, 0xee, 0xf1, + 0xeb, 0x57, 0x3b, 0x4b, 0x66, 0xdf, 0xd3, 0x76, 0x80, 0x0b, 0xa1, 0x92, 0xba, 0x19, 0xa0, 0xf7, + 0x61, 0x25, 0x70, 0x06, 0x9e, 0xe3, 0x0d, 0x8c, 0xd0, 0x79, 0xe2, 0xe6, 0xbc, 0x76, 0xe3, 0xfc, + 0x6c, 0x63, 0xa9, 0x27, 0x59, 0xca, 0x87, 0x4b, 0x0a, 0x59, 0x17, 0xae, 0x44, 0x3f, 0x80, 0xe5, + 0x98, 0x28, 0xf7, 0xa2, 0x74, 0xbb, 0x76, 0x7e, 0xb6, 0x51, 0x8c, 0x24, 0x9f, 0x90, 0x09, 0x2e, + 0x46, 0x82, 0x4f, 0x88, 0xb8, 0x5e, 0xd8, 0xa7, 0xbe, 0x45, 0x0c, 0x5f, 0xac, 0x69, 0x71, 0x82, + 0xa7, 0x71, 0x41, 0xd0, 0xe4, 0x32, 0xd7, 0x9f, 0xc2, 0xcd, 0x8e, 0x6f, 0x1d, 0x90, 0x80, 0x49, + 0x57, 0x28, 0x2f, 0x7e, 0x0c, 0x77, 0x98, 0x19, 0x1c, 0x1a, 0x07, 0x4e, 0xc0, 0xa8, 0x3f, 0x31, + 0x7c, 0xc2, 0x88, 0xc7, 0xf9, 0x86, 0x78, 0x6e, 0x53, 0xf7, 0x3f, 0xb7, 0x39, 0x66, 0x4b, 0x42, + 0x70, 0x88, 0xd8, 0xe6, 0x00, 0xbd, 0x05, 0x45, 0x9e, 0x85, 0x37, 0xc8, 0xbe, 0x39, 0x76, 0x19, + 0x1f, 0x3d, 0xb8, 0x74, 0x60, 0xbc, 0xf2, 0x31, 0x95, 0x77, 0xe9, 0x40, 0x7e, 0xea, 0x3f, 0x06, + 0xad, 0xe1, 0x04, 0x23, 0x93, 0x59, 0x07, 0xe1, 0xc5, 0x16, 0x6a, 0x80, 0x76, 0x40, 0x4c, 0x9f, + 0xed, 0x11, 0x93, 0x19, 0x23, 0xe2, 0x3b, 0xd4, 0xbe, 0x7e, 0x96, 0x57, 0x22, 0x91, 0xae, 0x90, + 0xd0, 0xff, 0x3b, 0x01, 0x80, 0xcd, 0xfd, 0x30, 0x23, 0xfb, 0x2e, 0xdc, 0x08, 0x3c, 0x73, 0x14, + 0x1c, 0x50, 0x66, 0x38, 0x1e, 0x23, 0xfe, 0x91, 0xe9, 0xaa, 0xfb, 0x09, 0x2d, 0x64, 0xb4, 0x14, + 0x1d, 0xbd, 0x0b, 0xe8, 0x90, 0x90, 0x91, 0x41, 0x5d, 0xdb, 0x08, 0x99, 0xf2, 0x31, 0x30, 0x8d, + 0x35, 0xce, 0xe9, 0xb8, 0x76, 0x2f, 0xa4, 0xa3, 0x1a, 0xac, 0xf3, 0xe1, 0x13, 0x8f, 0xf9, 0x0e, + 0x09, 0x8c, 0x7d, 0xea, 0x1b, 0x81, 0x4b, 0x8f, 0x8d, 0x7d, 0xea, 0xba, 0xf4, 0x98, 0xf8, 0xe1, + 0xd5, 0x4f, 0xc9, 0xa5, 0x83, 0xa6, 0x04, 0x6d, 0x52, 0xbf, 0xe7, 0xd2, 0xe3, 0xcd, 0x10, 0xc1, + 0xd3, 0xb6, 0xe9, 0x98, 0x99, 0x63, 0x1d, 0x86, 0x69, 0x5b, 0x44, 0xed, 0x3b, 0xd6, 0x21, 0x7a, + 0x03, 0x96, 0x88, 0x4b, 0xc4, 0x0d, 0x80, 0x44, 0x65, 0x04, 0xaa, 0x18, 0x12, 0x39, 0x48, 0xff, + 0x04, 0xb4, 0xa6, 0x67, 0xf9, 0x93, 0x51, 0x6c, 0xce, 0xdf, 0x05, 0xc4, 0x37, 0x49, 0xc3, 0xa5, + 0xd6, 0xa1, 0x31, 0x34, 0x3d, 0x73, 0xc0, 0xed, 0x92, 0x6f, 0x34, 0x1a, 0xe7, 0x6c, 0x53, 0xeb, + 0x70, 0x47, 0xd1, 0xf5, 0xf7, 0x01, 0x7a, 0x23, 0x9f, 0x98, 0x76, 0x87, 0x67, 0x13, 0xdc, 0x75, + 0xa2, 0x65, 0xd8, 0xea, 0x8d, 0x8b, 0xfa, 0x6a, 0xa9, 0x6b, 0x92, 0xd1, 0x88, 0xe8, 0xfa, 0x2f, + 0xc1, 0xcd, 0xae, 0x6b, 0x5a, 0xe2, 0xbd, 0xb7, 0x1b, 0x3d, 0x3a, 0xa0, 0x47, 0x90, 0x95, 0x50, + 0x35, 0x93, 0x73, 0x97, 0xdb, 0xb4, 0xcf, 0xad, 0x05, 0xac, 0xf0, 0xb5, 0x22, 0xc0, 0x54, 0x8f, + 0xfe, 0x1c, 0xf2, 0x91, 0x7a, 0x54, 0x06, 0x5e, 0x02, 0xf3, 0xe8, 0x76, 0x3c, 0x55, 0xb3, 0xe6, + 0x71, 0x9c, 0x84, 0x5a, 0x50, 0x18, 0x45, 0xc2, 0x57, 0xa6, 0x73, 0x73, 0x8c, 0xc6, 0x71, 0x59, + 0xfd, 0x23, 0x80, 0x1f, 0x51, 0xc7, 0xeb, 0xd3, 0x43, 0xe2, 0x89, 0x77, 0x2e, 0x5e, 0xad, 0x91, + 0xd0, 0x11, 0xaa, 0x25, 0x8a, 0x51, 0xe9, 0xc5, 0xe8, 0xb9, 0x47, 0x36, 0xf5, 0xbf, 0x49, 0x42, + 0x16, 0x53, 0xca, 0xea, 0x55, 0x54, 0x86, 0xac, 0x5a, 0xea, 0xe2, 0x08, 0xa9, 0xe5, 0xcf, 0xcf, + 0x36, 0x32, 0x72, 0x8d, 0x67, 0x2c, 0xb1, 0xb8, 0x63, 0x9b, 0x70, 0xf2, 0xb2, 0x4d, 0x18, 0xdd, + 0x83, 0xa2, 0x02, 0x19, 0x07, 0x66, 0x70, 0x20, 0x6b, 0xac, 0xda, 0xf2, 0xf9, 0xd9, 0x06, 0x48, + 0xe4, 0x96, 0x19, 0x1c, 0x60, 0x90, 0x68, 0xfe, 0x8d, 0x9a, 0x50, 0xf8, 0x8c, 0x3a, 0x9e, 0xc1, + 0xc4, 0x20, 0xd4, 0x75, 0xd7, 0xdc, 0xa9, 0x98, 0x0e, 0x55, 0x3d, 0xfa, 0xc2, 0x67, 0xd3, 0xc1, + 0x37, 0x61, 0xc9, 0xa7, 0x94, 0xc9, 0x9d, 0xc7, 0xa1, 0x9e, 0xaa, 0xa4, 0xcb, 0x73, 0x2f, 0x58, + 0x29, 0x65, 0x58, 0xe1, 0x70, 0xd1, 0x8f, 0xb5, 0xd0, 0x3d, 0x58, 0x75, 0xcd, 0x80, 0x19, 0x62, + 0xcb, 0xb2, 0xa7, 0xda, 0xb2, 0x62, 0xb5, 0x20, 0xce, 0xdb, 0x14, 0xac, 0x50, 0x42, 0xff, 0xa7, + 0x04, 0x14, 0xf8, 0x60, 0x9c, 0x7d, 0xc7, 0xe2, 0x79, 0xda, 0x57, 0x4f, 0x1f, 0x6e, 0x43, 0xca, + 0x0a, 0x7c, 0xe5, 0x54, 0x71, 0x7e, 0xd6, 0x7b, 0x18, 0x73, 0x1a, 0xfa, 0x04, 0xb2, 0xaa, 0xa2, + 0x97, 0x99, 0x83, 0x7e, 0x7d, 0x46, 0xa9, 0x7c, 0xa3, 0xe4, 0x44, 0x3c, 0x4e, 0xad, 0x93, 0xfb, + 0x38, 0x8e, 0x93, 0xd0, 0x2d, 0x48, 0x5a, 0xd2, 0x5d, 0xea, 0x57, 0x05, 0xf5, 0x36, 0x4e, 0x5a, + 0x9e, 0xfe, 0xf7, 0x09, 0x58, 0x9a, 0xae, 0x59, 0x1e, 0x01, 0x77, 0x20, 0x1f, 0x8c, 0xf7, 0x82, + 0x49, 0xc0, 0xc8, 0x30, 0x7c, 0xc3, 0x8b, 0x08, 0xa8, 0x05, 0x79, 0xd3, 0x1d, 0x50, 0xdf, 0x61, + 0x07, 0x43, 0x55, 0x4c, 0xce, 0x3f, 0xed, 0xe3, 0x3a, 0x2b, 0xd5, 0x50, 0x04, 0x4f, 0xa5, 0xc3, + 0xa3, 0x5b, 0x3e, 0xf4, 0x8a, 0xa3, 0xfb, 0x75, 0x28, 0xba, 0xe6, 0x50, 0x5c, 0x71, 0x30, 0x67, + 0x28, 0xc7, 0x91, 0xc6, 0x05, 0x45, 0xeb, 0x3b, 0x43, 0xa2, 0xeb, 0x90, 0x8f, 0x94, 0xa1, 0x15, + 0x28, 0x54, 0x9b, 0x3d, 0xe3, 0xfe, 0x83, 0x47, 0xc6, 0xe3, 0xfa, 0x8e, 0xb6, 0xa0, 0xd2, 0xcb, + 0xbf, 0x48, 0xc0, 0x92, 0xda, 0x51, 0x54, 0xca, 0xfe, 0x06, 0x2c, 0xfa, 0xe6, 0x3e, 0x0b, 0x8b, + 0x8a, 0xb4, 0x8c, 0x6a, 0xbe, 0x49, 0xf3, 0xa2, 0x82, 0xb3, 0xe6, 0x17, 0x15, 0xb1, 0x57, 0xe5, + 0xd4, 0x95, 0xaf, 0xca, 0xe9, 0x9f, 0xcb, 0xab, 0xb2, 0xfe, 0x9b, 0x00, 0x9b, 0x8e, 0x4b, 0xfa, + 0xf2, 0xa2, 0x65, 0x5e, 0x89, 0xc8, 0xd3, 0x30, 0x75, 0xdb, 0x16, 0xa6, 0x61, 0xad, 0x06, 0xe6, + 0x34, 0xce, 0x1a, 0x38, 0xb6, 0x5a, 0x8c, 0x82, 0xf5, 0x98, 0xb3, 0x06, 0x8e, 0x1d, 0xbd, 0xa3, + 0xa4, 0xaf, 0x7b, 0x47, 0x39, 0x4d, 0xc0, 0x8a, 0x4a, 0x3f, 0xa3, 0x1d, 0xf4, 0x3b, 0x90, 0x97, + 0x99, 0xe8, 0xb4, 0x26, 0x13, 0x2f, 0xa9, 0x12, 0xd7, 0x6a, 0xe0, 0x9c, 0x64, 0xb7, 0x6c, 0xb4, + 0x01, 0x05, 0x05, 0x8d, 0xfd, 0x02, 0x05, 0x24, 0xa9, 0xcd, 0xcd, 0xff, 0x1e, 0xa4, 0xf7, 0x1d, + 0x97, 0xa8, 0x40, 0x9f, 0xbb, 0x01, 0x4c, 0x1d, 0xb0, 0xb5, 0x80, 0x05, 0xba, 0x96, 0x0b, 0x6f, + 0xa2, 0x84, 0x7d, 0xaa, 0x72, 0x8c, 0xdb, 0x27, 0x8b, 0xc8, 0x0b, 0xf6, 0x49, 0x1c, 0xb7, 0x4f, + 0xb2, 0xa5, 0x7d, 0x0a, 0x1a, 0xb7, 0x4f, 0x92, 0x7e, 0x2e, 0xf6, 0x6d, 0xc3, 0xad, 0x9a, 0x6b, + 0x5a, 0x87, 0xae, 0x13, 0x30, 0x62, 0xc7, 0x77, 0x8c, 0x07, 0x90, 0x9d, 0xc9, 0x1b, 0xaf, 0xba, + 0x98, 0x54, 0x48, 0xfd, 0xdf, 0x13, 0x50, 0xdc, 0x22, 0xa6, 0xcb, 0x0e, 0xa6, 0xb7, 0x3b, 0x8c, + 0x04, 0x4c, 0x1d, 0x38, 0xe2, 0x1b, 0x7d, 0x1f, 0x72, 0x51, 0x5a, 0x71, 0xed, 0x0b, 0x51, 0x04, + 0x45, 0x0f, 0x61, 0x91, 0xaf, 0x31, 0x3a, 0x0e, 0xeb, 0x95, 0xab, 0x1e, 0x1f, 0x14, 0x92, 0x1f, + 0x32, 0x3e, 0x11, 0x79, 0x84, 0x08, 0xa5, 0x0c, 0x0e, 0x9b, 0xe8, 0x17, 0xa1, 0x28, 0xee, 0xce, + 0xc3, 0xb4, 0x29, 0x73, 0x9d, 0xce, 0x82, 0x7c, 0xfe, 0x92, 0x29, 0xd3, 0xff, 0x26, 0x60, 0x75, + 0xc7, 0x9c, 0xec, 0x11, 0xb5, 0x6d, 0x10, 0x1b, 0x13, 0x8b, 0xfa, 0x36, 0xea, 0xc6, 0xb7, 0x9b, + 0x2b, 0x5e, 0xd3, 0xe6, 0x09, 0xcf, 0xdf, 0x75, 0xc2, 0x1a, 0x2a, 0x19, 0xab, 0xa1, 0x56, 0x21, + 0xe3, 0x51, 0xcf, 0x22, 0x6a, 0x2f, 0x92, 0x0d, 0xdd, 0x89, 0x6f, 0x35, 0xa5, 0xe8, 0xa1, 0x4b, + 0x3c, 0x53, 0xb5, 0x29, 0x8b, 0x7a, 0x43, 0x9f, 0x40, 0xa9, 0xd7, 0xac, 0xe3, 0x66, 0xbf, 0xd6, + 0xf9, 0xb1, 0xd1, 0xab, 0x6e, 0xf7, 0xaa, 0x0f, 0xee, 0x19, 0xdd, 0xce, 0xf6, 0xa7, 0xf7, 0x1f, + 0xde, 0xfb, 0xbe, 0x96, 0x28, 0x95, 0x4f, 0x4e, 0xcb, 0x77, 0xda, 0xd5, 0xfa, 0xb6, 0x5c, 0x31, + 0x7b, 0xf4, 0x79, 0xcf, 0x74, 0x03, 0xf3, 0xc1, 0xbd, 0x2e, 0x75, 0x27, 0x1c, 0xc3, 0xc3, 0xba, + 0x18, 0x3f, 0xaf, 0xe2, 0xc7, 0x70, 0xe2, 0xd2, 0x63, 0x78, 0x7a, 0x9a, 0x27, 0x2f, 0x39, 0xcd, + 0x37, 0x61, 0xd5, 0xf2, 0x69, 0x10, 0x18, 0x3c, 0x81, 0x27, 0xf6, 0x85, 0x12, 0xe1, 0x1b, 0xe7, + 0x67, 0x1b, 0x37, 0xea, 0x9c, 0xdf, 0x13, 0x6c, 0xa5, 0xfe, 0x86, 0x15, 0x23, 0x89, 0x9e, 0xf4, + 0x3f, 0x4a, 0xf1, 0x5c, 0xc8, 0x39, 0x72, 0x5c, 0x32, 0x20, 0x01, 0x7a, 0x0a, 0x2b, 0x96, 0x4f, + 0x6c, 0x9e, 0x99, 0x9b, 0xae, 0x11, 0x8c, 0x88, 0xa5, 0x82, 0xfa, 0x17, 0xe6, 0x26, 0x38, 0x91, + 0x60, 0xa5, 0x1e, 0x49, 0xf5, 0x46, 0xc4, 0xc2, 0xcb, 0xd6, 0x4c, 0x1b, 0x7d, 0x06, 0x2b, 0x01, + 0x71, 0x1d, 0x6f, 0xfc, 0xdc, 0xb0, 0xa8, 0xc7, 0xc8, 0xf3, 0xf0, 0xcd, 0xe6, 0x3a, 0xbd, 0xbd, + 0xe6, 0x36, 0x97, 0xaa, 0x4b, 0xa1, 0x1a, 0x3a, 0x3f, 0xdb, 0x58, 0x9e, 0xa5, 0xe1, 0x65, 0xa5, + 0x59, 0xb5, 0x4b, 0x6d, 0x58, 0x9e, 0xb5, 0x06, 0xad, 0xaa, 0xb5, 0x2f, 0xb6, 0x90, 0x70, 0x6d, + 0xa3, 0x3b, 0x90, 0xf3, 0xc9, 0xc0, 0x09, 0x98, 0x2f, 0xdd, 0xcc, 0x39, 0x11, 0x85, 0xaf, 0x7c, + 0xf9, 0x33, 0x94, 0xd2, 0xaf, 0xc3, 0x85, 0x1e, 0xf9, 0x62, 0xb1, 0x9d, 0xc0, 0xdc, 0x53, 0x2a, + 0x73, 0x38, 0x6c, 0xf2, 0x18, 0x1c, 0x07, 0x51, 0xa2, 0x26, 0xbe, 0x39, 0x4d, 0x64, 0x14, 0xea, + 0x47, 0x39, 0x22, 0x67, 0x08, 0x7f, 0xdd, 0x97, 0x8e, 0xfd, 0xba, 0x6f, 0x15, 0x32, 0x2e, 0x39, + 0x22, 0xae, 0x3c, 0xcb, 0xb1, 0x6c, 0xbc, 0xf3, 0xb3, 0x14, 0xe4, 0xa3, 0xf7, 0x09, 0x7e, 0x12, + 0xb4, 0x9b, 0xcf, 0xc2, 0x58, 0x8d, 0xe8, 0x6d, 0x72, 0x8c, 0x5e, 0x9f, 0x5e, 0x0b, 0x7d, 0x22, + 0x1f, 0x64, 0x23, 0x76, 0x78, 0x25, 0xf4, 0x26, 0xe4, 0xaa, 0xbd, 0x5e, 0xeb, 0x71, 0xbb, 0xd9, + 0xd0, 0x3e, 0x4f, 0x94, 0xbe, 0x71, 0x72, 0x5a, 0xbe, 0x11, 0x81, 0xaa, 0x81, 0x0c, 0x25, 0x81, + 0xaa, 0xd7, 0x9b, 0xdd, 0x7e, 0xb3, 0xa1, 0xbd, 0x48, 0x5e, 0x44, 0x89, 0x6b, 0x0e, 0xf1, 0xb3, + 0x8a, 0x7c, 0x17, 0x37, 0xbb, 0x55, 0xcc, 0x3b, 0xfc, 0x3c, 0x29, 0x6f, 0xab, 0xa6, 0x3d, 0xfa, + 0x64, 0x64, 0xfa, 0xbc, 0xcf, 0xf5, 0xf0, 0xe7, 0x45, 0x2f, 0x52, 0xf2, 0xe9, 0x7d, 0xfa, 0xd8, + 0x42, 0x4c, 0x7b, 0xc2, 0x7b, 0x13, 0xaf, 0x5c, 0x42, 0x4d, 0xea, 0x42, 0x6f, 0x3d, 0xbe, 0x93, + 0x70, 0x2d, 0x3a, 0x2c, 0xe2, 0xdd, 0x76, 0x9b, 0x83, 0x5e, 0xa4, 0x2f, 0x8c, 0x0e, 0x8f, 0x3d, + 0x5e, 0xc2, 0xa2, 0xbb, 0x90, 0x0b, 0x1f, 0xc1, 0xb4, 0xcf, 0xd3, 0x17, 0x0c, 0xaa, 0x87, 0x2f, + 0x78, 0xa2, 0xc3, 0xad, 0xdd, 0xbe, 0xf8, 0xf5, 0xd3, 0x8b, 0xcc, 0xc5, 0x0e, 0x0f, 0xc6, 0xcc, + 0xa6, 0xc7, 0x1e, 0x5f, 0x81, 0xea, 0x62, 0xec, 0xf3, 0x8c, 0xbc, 0x45, 0x88, 0x30, 0xea, 0x56, + 0xec, 0x4d, 0xc8, 0xe1, 0xe6, 0x8f, 0xe4, 0x0f, 0xa5, 0x5e, 0x64, 0x2f, 0xe8, 0xc1, 0xe4, 0x33, + 0x62, 0xa9, 0xde, 0x3a, 0xb8, 0xbb, 0x55, 0x15, 0x2e, 0xbf, 0x88, 0xea, 0xf8, 0xa3, 0x03, 0xd3, + 0x23, 0xf6, 0xf4, 0xf7, 0x07, 0x11, 0xeb, 0x9d, 0x5f, 0x86, 0x5c, 0x98, 0x67, 0xa2, 0x75, 0xc8, + 0x3e, 0xeb, 0xe0, 0x27, 0x4d, 0xac, 0x2d, 0x48, 0x1f, 0x86, 0x9c, 0x67, 0xb2, 0x42, 0x28, 0xc3, + 0xe2, 0x4e, 0xb5, 0x5d, 0x7d, 0xdc, 0xc4, 0xe1, 0x9d, 0x75, 0x08, 0x50, 0xc9, 0x52, 0x49, 0x53, + 0x1d, 0x44, 0x3a, 0x6b, 0x6b, 0x5f, 0x7c, 0xb9, 0xbe, 0xf0, 0xd3, 0x2f, 0xd7, 0x17, 0x5e, 0x9c, + 0xaf, 0x27, 0xbe, 0x38, 0x5f, 0x4f, 0xfc, 0xe4, 0x7c, 0x3d, 0xf1, 0x6f, 0xe7, 0xeb, 0x89, 0xbd, + 0xac, 0xd8, 0xd2, 0x1f, 0xfe, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xb2, 0xf3, 0xe4, 0x8f, 0x7c, + 0x2d, 0x00, 0x00, } diff --git a/vendor/github.com/docker/swarmkit/api/types.proto b/vendor/github.com/docker/swarmkit/api/types.proto index 8420ad4839..ef580a9729 100644 --- a/vendor/github.com/docker/swarmkit/api/types.proto +++ b/vendor/github.com/docker/swarmkit/api/types.proto @@ -86,6 +86,18 @@ message NodeDescription { // Information about the Docker Engine on the node. EngineDescription engine = 4; + + // Information on the node's TLS setup + NodeTLSInfo tls_info = 5 [(gogoproto.customname) = "TLSInfo"]; +} + +message NodeTLSInfo { + // Information about which root certs the node trusts + bytes trust_root = 1; + + // Information about the node's current TLS certificate + bytes cert_issuer_subject = 2; + bytes cert_issuer_public_key = 3; } message RaftMemberStatus { @@ -853,6 +865,20 @@ message ManagerStatus { RaftMemberStatus.Reachability reachability = 4; } +// FileTarget represents a specific target that is backed by a file +message FileTarget { + // Name represents the final filename in the filesystem + string name = 1; + + // UID represents the file UID + string uid = 2 [(gogoproto.customname) = "UID"]; + + // GID represents the file GID + string gid = 3 [(gogoproto.customname) = "GID"]; + + // Mode represents the FileMode of the file + uint32 mode = 4 [(gogoproto.customtype) = "os.FileMode", (gogoproto.nullable) = false]; +} // SecretReference is the linkage between a service and a secret that it uses. message SecretReference { @@ -865,20 +891,21 @@ message SecretReference { // lookup/display purposes. The secret in the reference will be identified by its ID. string secret_name = 2; - // FileTarget represents a specific target that is backed by a file - message FileTarget { - // Name represents the final filename in the filesystem - string name = 1; - - // UID represents the file UID - string uid = 2 [(gogoproto.customname) = "UID"]; - - // GID represents the file GID - string gid = 3 [(gogoproto.customname) = "GID"]; - - // Mode represents the FileMode of the file - uint32 mode = 4 [(gogoproto.customtype) = "os.FileMode", (gogoproto.nullable) = false]; + // Target specifies how this secret should be exposed to the task. + oneof target { + FileTarget file = 3; } +} + +// ConfigReference is the linkage between a service and a config that it uses. +message ConfigReference { + // ConfigID represents the ID of the specific Config that we're + // referencing. + string config_id = 1; + + // ConfigName is the name of the config that this references, but this is just provided for + // lookup/display purposes. The config in the reference will be identified by its ID. + string config_name = 2; // Target specifies how this secret should be exposed to the task. oneof target { @@ -943,3 +970,26 @@ message RootRotation { // 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"]; } + +// Privileges specifies security configuration/permissions. +message Privileges { + // CredentialSpec for managed service account (Windows only). + message CredentialSpec { + oneof source { + string file = 1; + string registry = 2; + } + } + CredentialSpec credential_spec = 1; + + // SELinuxContext contains the SELinux labels for the container. + message SELinuxContext { + bool disable = 1; + + string user = 2; + string role = 3; + string type = 4; + string level = 5; + } + SELinuxContext selinux_context = 2 [(gogoproto.customname) = "SELinuxContext"]; +} diff --git a/vendor/github.com/docker/swarmkit/ca/certificates.go b/vendor/github.com/docker/swarmkit/ca/certificates.go index ec7794bf35..8f03640e98 100644 --- a/vendor/github.com/docker/swarmkit/ca/certificates.go +++ b/vendor/github.com/docker/swarmkit/ca/certificates.go @@ -104,6 +104,12 @@ type CertPaths struct { Cert, Key string } +// IssuerInfo contains the subject and public key of the issuer of a certificate +type IssuerInfo struct { + Subject []byte + PublicKey []byte +} + // LocalSigner is a signer that can sign CSRs type LocalSigner struct { cfsigner.Signer @@ -192,39 +198,47 @@ func (rca *RootCA) Signer() (*LocalSigner, error) { } // IssueAndSaveNewCertificates generates a new key-pair, signs it with the local root-ca, and returns a -// tls certificate -func (rca *RootCA) IssueAndSaveNewCertificates(kw KeyWriter, cn, ou, org string) (*tls.Certificate, error) { +// TLS certificate and the issuer information for the certificate. +func (rca *RootCA) IssueAndSaveNewCertificates(kw KeyWriter, cn, ou, org string) (*tls.Certificate, *IssuerInfo, error) { csr, key, err := GenerateNewCSR() if err != nil { - return nil, errors.Wrap(err, "error when generating new node certs") + return nil, nil, errors.Wrap(err, "error when generating new node certs") } // Obtain a signed Certificate certChain, err := rca.ParseValidateAndSignCSR(csr, cn, ou, org) if err != nil { - return nil, errors.Wrap(err, "failed to sign node certificate") + return nil, nil, errors.Wrap(err, "failed to sign node certificate") + } + signer, err := rca.Signer() + if err != nil { // should never happen, since if ParseValidateAndSignCSR did not fail this root CA must have a signer + return nil, nil, err } // Create a valid TLSKeyPair out of the PEM encoded private key and certificate tlsKeyPair, err := tls.X509KeyPair(certChain, key) if err != nil { - return nil, err + return nil, nil, err } - if err := kw.Write(certChain, key, nil); err != nil { - return nil, err + if err := kw.Write(NormalizePEMs(certChain), key, nil); err != nil { + return nil, nil, err } - return &tlsKeyPair, nil + return &tlsKeyPair, &IssuerInfo{ + PublicKey: signer.parsedCert.RawSubjectPublicKeyInfo, + Subject: signer.parsedCert.RawSubject, + }, nil } // RequestAndSaveNewCertificates gets new certificates issued, either by signing them locally if a signer is -// available, or by requesting them from the remote server at remoteAddr. -func (rca *RootCA) RequestAndSaveNewCertificates(ctx context.Context, kw KeyWriter, config CertificateRequestConfig) (*tls.Certificate, error) { +// available, or by requesting them from the remote server at remoteAddr. This function returns the TLS +// certificate and the issuer information for the certificate. +func (rca *RootCA) RequestAndSaveNewCertificates(ctx context.Context, kw KeyWriter, config CertificateRequestConfig) (*tls.Certificate, *IssuerInfo, error) { // Create a new key/pair and CSR csr, key, err := GenerateNewCSR() if err != nil { - return nil, errors.Wrap(err, "error when generating new node certs") + return nil, nil, errors.Wrap(err, "error when generating new node certs") } // Get the remote manager to issue a CA signed certificate for this node @@ -246,41 +260,49 @@ func (rca *RootCA) RequestAndSaveNewCertificates(ctx context.Context, kw KeyWrit config.ForceRemote = true } if err != nil { - return nil, err + return nil, nil, err } // Доверяй, но проверяй. // Before we overwrite our local key + certificate, let's make sure the server gave us one that is valid // Create an X509Cert so we can .Verify() // Check to see if this certificate was signed by our CA, and isn't expired - parsedCerts, err := ValidateCertChain(rca.Pool, signedCert, false) + parsedCerts, chains, err := ValidateCertChain(rca.Pool, signedCert, false) if err != nil { - return nil, err + return nil, nil, err } + // ValidateChain, if successful, will always return at least 1 parsed cert and at least 1 chain containing + // at least 2 certificates: the leaf and the root. + leafCert := parsedCerts[0] + issuer := chains[0][1] + // Create a valid TLSKeyPair out of the PEM encoded private key and certificate tlsKeyPair, err := tls.X509KeyPair(signedCert, key) if err != nil { - return nil, err + return nil, nil, err } var kekUpdate *KEKData for i := 0; i < 5; i++ { // ValidateCertChain will always return at least 1 cert, so indexing at 0 is safe - kekUpdate, err = rca.getKEKUpdate(ctx, parsedCerts[0], tlsKeyPair, config.ConnBroker) + kekUpdate, err = rca.getKEKUpdate(ctx, leafCert, tlsKeyPair, config.ConnBroker) if err == nil { break } } if err != nil { - return nil, err + return nil, nil, err } - if err := kw.Write(signedCert, key, kekUpdate); err != nil { - return nil, err + if err := kw.Write(NormalizePEMs(signedCert), key, kekUpdate); err != nil { + return nil, nil, err } - return &tlsKeyPair, nil + return &tlsKeyPair, &IssuerInfo{ + PublicKey: issuer.RawSubjectPublicKeyInfo, + Subject: issuer.RawSubject, + }, nil } func (rca *RootCA) getKEKUpdate(ctx context.Context, leafCert *x509.Certificate, keypair tls.Certificate, connBroker *connectionbroker.Broker) (*KEKData, error) { @@ -430,7 +452,7 @@ func NewRootCA(rootCertBytes, signCertBytes, signKeyBytes []byte, certExpiry tim var intermediatePool *x509.CertPool var parsedIntermediates []*x509.Certificate if len(intermediates) > 0 { - parsedIntermediates, err = ValidateCertChain(pool, intermediates, false) + parsedIntermediates, _, err = ValidateCertChain(pool, intermediates, false) if err != nil { return RootCA{}, errors.Wrap(err, "invalid intermediate chain") } @@ -469,15 +491,15 @@ func NewRootCA(rootCertBytes, signCertBytes, signKeyBytes []byte, certExpiry tim // intermediate pool), because this function is intended to be used when reading certs from untrusted locations such as // from disk or over a network when a CSR is signed, so it is extra pedantic. // This function always returns all the parsed certificates in the bundle in order, which means there will always be -// at least 1 certificate if there is no error. -func ValidateCertChain(rootPool *x509.CertPool, certs []byte, allowExpired bool) ([]*x509.Certificate, error) { +// at least 1 certificate if there is no error, and the valid chains found by Certificate.Verify +func ValidateCertChain(rootPool *x509.CertPool, certs []byte, allowExpired bool) ([]*x509.Certificate, [][]*x509.Certificate, error) { // Parse all the certificates in the cert bundle parsedCerts, err := helpers.ParseCertificatesPEM(certs) if err != nil { - return nil, err + return nil, nil, err } if len(parsedCerts) == 0 { - return nil, errors.New("no certificates to validate") + return nil, nil, errors.New("no certificates to validate") } now := time.Now() // ensure that they form a chain, each one being signed by the one after it @@ -486,7 +508,7 @@ func ValidateCertChain(rootPool *x509.CertPool, certs []byte, allowExpired bool) // Manual expiry validation because we want more information on which certificate in the chain is expired, and // because this is an easier way to allow expired certs. if now.Before(cert.NotBefore) { - return nil, errors.Wrapf( + return nil, nil, errors.Wrapf( x509.CertificateInvalidError{ Cert: cert, Reason: x509.Expired, @@ -495,7 +517,7 @@ func ValidateCertChain(rootPool *x509.CertPool, certs []byte, allowExpired bool) i+1, cert.Subject.CommonName, cert.NotBefore.UTC().Format(time.RFC1123), now.Format(time.RFC1123)) } if !allowExpired && now.After(cert.NotAfter) { - return nil, errors.Wrapf( + return nil, nil, errors.Wrapf( x509.CertificateInvalidError{ Cert: cert, Reason: x509.Expired, @@ -508,7 +530,7 @@ func ValidateCertChain(rootPool *x509.CertPool, certs []byte, allowExpired bool) // check that the previous cert was signed by this cert prevCert := parsedCerts[i-1] if err := prevCert.CheckSignatureFrom(cert); err != nil { - return nil, errors.Wrapf(err, "certificates do not form a chain: (%d - %s) is not signed by (%d - %s)", + return nil, nil, errors.Wrapf(err, "certificates do not form a chain: (%d - %s) is not signed by (%d - %s)", i, prevCert.Subject.CommonName, i+1, cert.Subject.CommonName) } @@ -526,6 +548,8 @@ func ValidateCertChain(rootPool *x509.CertPool, certs []byte, allowExpired bool) CurrentTime: now, } + var chains [][]*x509.Certificate + // If we accept expired certs, try to build a valid cert chain using some subset of the certs. We start off using the // first certificate's NotAfter as the current time, thus ensuring that the first cert is not expired. If the chain // still fails to validate due to expiry issues, continue iterating over the rest of the certs. @@ -540,22 +564,22 @@ func ValidateCertChain(rootPool *x509.CertPool, certs []byte, allowExpired bool) } verifyOpts.CurrentTime = cert.NotAfter - _, err = parsedCerts[0].Verify(verifyOpts) + chains, err = parsedCerts[0].Verify(verifyOpts) if err == nil { - return parsedCerts, nil + return parsedCerts, chains, nil } } if invalid, ok := err.(x509.CertificateInvalidError); ok && invalid.Reason == x509.Expired { - return nil, errors.New("there is no time span for which all of the certificates, including a root, are valid") + return nil, nil, errors.New("there is no time span for which all of the certificates, including a root, are valid") } - return nil, err + return nil, nil, err } - _, err = parsedCerts[0].Verify(verifyOpts) + chains, err = parsedCerts[0].Verify(verifyOpts) if err != nil { - return nil, err + return nil, nil, err } - return parsedCerts, nil + return parsedCerts, chains, nil } // newLocalSigner validates the signing cert and signing key to create a local signer, which accepts a crypto signer and a cert @@ -930,3 +954,22 @@ func EncryptECPrivateKey(key []byte, passphraseStr string) ([]byte, error) { return pem.EncodeToMemory(encryptedPEMBlock), nil } + +// NormalizePEMs takes a bundle of PEM-encoded certificates in a certificate bundle, +// decodes them, removes headers, and re-encodes them to make sure that they have +// consistent whitespace. Note that this is intended to normalize x509 certificates +// in PEM format, hence the stripping out of headers. +func NormalizePEMs(certs []byte) []byte { + var ( + results []byte + pemBlock *pem.Block + ) + for { + pemBlock, certs = pem.Decode(bytes.TrimSpace(certs)) + if pemBlock == nil { + return results + } + pemBlock.Headers = nil + results = append(results, pem.EncodeToMemory(pemBlock)...) + } +} diff --git a/vendor/github.com/docker/swarmkit/ca/config.go b/vendor/github.com/docker/swarmkit/ca/config.go index 6f469636b7..90db943082 100644 --- a/vendor/github.com/docker/swarmkit/ca/config.go +++ b/vendor/github.com/docker/swarmkit/ca/config.go @@ -19,6 +19,7 @@ import ( "github.com/docker/swarmkit/connectionbroker" "github.com/docker/swarmkit/identity" "github.com/docker/swarmkit/log" + "github.com/docker/swarmkit/watch" "github.com/opencontainers/go-digest" "github.com/pkg/errors" "google.golang.org/grpc/credentials" @@ -71,10 +72,16 @@ type SecurityConfig struct { externalCA *ExternalCA keyReadWriter *KeyReadWriter + certificate *tls.Certificate + issuerInfo *IssuerInfo + externalCAClientRootPool *x509.CertPool ServerTLSCreds *MutableTLSCreds ClientTLSCreds *MutableTLSCreds + + // An optional queue for anyone interested in subscribing to SecurityConfig updates + queue *watch.Queue } // CertificateUpdate represents a change in the underlying TLS configuration being returned by @@ -85,25 +92,41 @@ type CertificateUpdate struct { } // NewSecurityConfig initializes and returns a new SecurityConfig. -func NewSecurityConfig(rootCA *RootCA, krw *KeyReadWriter, clientTLSCreds, serverTLSCreds *MutableTLSCreds) *SecurityConfig { +func NewSecurityConfig(rootCA *RootCA, krw *KeyReadWriter, tlsKeyPair *tls.Certificate, issuerInfo *IssuerInfo) (*SecurityConfig, error) { + // Create the Server TLS Credentials for this node. These will not be used by workers. + serverTLSCreds, err := rootCA.NewServerTLSCredentials(tlsKeyPair) + if err != nil { + return nil, err + } + + // Create a TLSConfig to be used when this node connects as a client to another remote node. + // We're using ManagerRole as remote serverName for TLS host verification because both workers + // and managers always connect to remote managers. + clientTLSCreds, err := rootCA.NewClientTLSCredentials(tlsKeyPair, ManagerRole) + if err != nil { + return nil, err + } + // Make a new TLS config for the external CA client without a // ServerName value set. - clientTLSConfig := clientTLSCreds.Config() - externalCATLSConfig := &tls.Config{ - Certificates: clientTLSConfig.Certificates, - RootCAs: clientTLSConfig.RootCAs, + Certificates: []tls.Certificate{*tlsKeyPair}, + RootCAs: rootCA.Pool, MinVersion: tls.VersionTLS12, } return &SecurityConfig{ - rootCA: rootCA, - keyReadWriter: krw, + rootCA: rootCA, + keyReadWriter: krw, + + certificate: tlsKeyPair, + issuerInfo: issuerInfo, + externalCA: NewExternalCA(rootCA, externalCATLSConfig), ClientTLSCreds: clientTLSCreds, ServerTLSCreds: serverTLSCreds, externalCAClientRootPool: rootCA.Pool, - } + }, nil } // RootCA returns the root CA. @@ -136,19 +159,32 @@ func (s *SecurityConfig) UpdateRootCA(rootCA *RootCA, externalCARootPool *x509.C s.rootCA = rootCA s.externalCAClientRootPool = externalCARootPool - clientTLSConfig := s.ClientTLSCreds.Config() - return s.updateTLSCredentials(clientTLSConfig.Certificates) + return s.updateTLSCredentials(s.certificate, s.issuerInfo) } -// updateTLSCredentials updates the client, server, and TLS credentials on a security config. This function expects -// something else to have taken out a lock on the SecurityConfig. -func (s *SecurityConfig) updateTLSCredentials(certificates []tls.Certificate) error { - clientConfig, err := NewClientTLSConfig(certificates, s.rootCA.Pool, ManagerRole) +// SetWatch allows you to set a watch on the security config, in order to be notified of any changes +func (s *SecurityConfig) SetWatch(q *watch.Queue) { + s.mu.Lock() + defer s.mu.Unlock() + s.queue = q +} + +// IssuerInfo returns the issuer subject and issuer public key +func (s *SecurityConfig) IssuerInfo() *IssuerInfo { + s.mu.Lock() + defer s.mu.Unlock() + return s.issuerInfo +} + +// This function expects something else to have taken out a lock on the SecurityConfig. +func (s *SecurityConfig) updateTLSCredentials(certificate *tls.Certificate, issuerInfo *IssuerInfo) error { + certs := []tls.Certificate{*certificate} + clientConfig, err := NewClientTLSConfig(certs, s.rootCA.Pool, ManagerRole) if err != nil { return errors.Wrap(err, "failed to create a new client config using the new root CA") } - serverConfig, err := NewServerTLSConfig(certificates, s.rootCA.Pool) + serverConfig, err := NewServerTLSConfig(certs, s.rootCA.Pool) if err != nil { return errors.Wrap(err, "failed to create a new server config using the new root CA") } @@ -160,7 +196,7 @@ func (s *SecurityConfig) updateTLSCredentials(certificates []tls.Certificate) er // Update the external CA to use the new client TLS // config using a copy without a serverName specified. s.externalCA.UpdateTLSConfig(&tls.Config{ - Certificates: certificates, + Certificates: certs, RootCAs: s.externalCAClientRootPool, MinVersion: tls.VersionTLS12, }) @@ -169,6 +205,15 @@ func (s *SecurityConfig) updateTLSCredentials(certificates []tls.Certificate) er return errors.Wrap(err, "failed to update the server TLS credentials") } + s.certificate = certificate + s.issuerInfo = issuerInfo + if s.queue != nil { + s.queue.Publish(&api.NodeTLSInfo{ + TrustRoot: s.rootCA.Certs, + CertIssuerPublicKey: s.issuerInfo.PublicKey, + CertIssuerSubject: s.issuerInfo.Subject, + }) + } return nil } @@ -300,9 +345,13 @@ func LoadSecurityConfig(ctx context.Context, rootCA RootCA, krw *KeyReadWriter, } // Check to see if this certificate was signed by our CA, and isn't expired - if _, err := ValidateCertChain(rootCA.Pool, cert, allowExpired); err != nil { + _, chains, err := ValidateCertChain(rootCA.Pool, cert, allowExpired) + if err != nil { return nil, err } + // ValidateChain, if successful, will always return at least 1 chain containing + // at least 2 certificates: the leaf and the root. + issuer := chains[0][1] // Now that we know this certificate is valid, create a TLS Certificate for our // credentials @@ -311,26 +360,17 @@ func LoadSecurityConfig(ctx context.Context, rootCA RootCA, krw *KeyReadWriter, return nil, err } - // Load the Certificates as server credentials - serverTLSCreds, err := rootCA.NewServerTLSCredentials(&keyPair) - if err != nil { - return nil, err + secConfig, err := NewSecurityConfig(&rootCA, krw, &keyPair, &IssuerInfo{ + Subject: issuer.RawSubject, + PublicKey: issuer.RawSubjectPublicKeyInfo, + }) + if err == nil { + log.G(ctx).WithFields(logrus.Fields{ + "node.id": secConfig.ClientTLSCreds.NodeID(), + "node.role": secConfig.ClientTLSCreds.Role(), + }).Debug("loaded node credentials") } - - // Load the Certificates also as client credentials. - // Both workers and managers always connect to remote managers, - // so ServerName is always set to ManagerRole here. - clientTLSCreds, err := rootCA.NewClientTLSCredentials(&keyPair, ManagerRole) - if err != nil { - return nil, err - } - - log.G(ctx).WithFields(logrus.Fields{ - "node.id": clientTLSCreds.NodeID(), - "node.role": clientTLSCreds.Role(), - }).Debug("loaded node credentials") - - return NewSecurityConfig(&rootCA, krw, clientTLSCreds, serverTLSCreds), nil + return secConfig, err } // CertificateRequestConfig contains the information needed to request a @@ -365,12 +405,12 @@ func (rootCA RootCA) CreateSecurityConfig(ctx context.Context, krw *KeyReadWrite org := identity.NewID() proposedRole := ManagerRole - tlsKeyPair, err := rootCA.IssueAndSaveNewCertificates(krw, cn, proposedRole, org) + tlsKeyPair, issuerInfo, err := rootCA.IssueAndSaveNewCertificates(krw, cn, proposedRole, org) switch errors.Cause(err) { case ErrNoValidSigner: // Request certificate issuance from a remote CA. // Last argument is nil because at this point we don't have any valid TLS creds - tlsKeyPair, err = rootCA.RequestAndSaveNewCertificates(ctx, krw, config) + tlsKeyPair, issuerInfo, err = rootCA.RequestAndSaveNewCertificates(ctx, krw, config) if err != nil { log.G(ctx).WithError(err).Error("failed to request save new certificate") return nil, err @@ -388,24 +428,14 @@ func (rootCA RootCA) CreateSecurityConfig(ctx context.Context, krw *KeyReadWrite return nil, err } - // Create the Server TLS Credentials for this node. These will not be used by workers. - serverTLSCreds, err := rootCA.NewServerTLSCredentials(tlsKeyPair) - if err != nil { - return nil, err + secConfig, err := NewSecurityConfig(&rootCA, krw, tlsKeyPair, issuerInfo) + if err == nil { + log.G(ctx).WithFields(logrus.Fields{ + "node.id": secConfig.ClientTLSCreds.NodeID(), + "node.role": secConfig.ClientTLSCreds.Role(), + }).Debugf("new node credentials generated: %s", krw.Target()) } - - // Create a TLSConfig to be used when this node connects as a client to another remote node. - // We're using ManagerRole as remote serverName for TLS host verification - clientTLSCreds, err := rootCA.NewClientTLSCredentials(tlsKeyPair, ManagerRole) - if err != nil { - return nil, err - } - log.G(ctx).WithFields(logrus.Fields{ - "node.id": clientTLSCreds.NodeID(), - "node.role": clientTLSCreds.Role(), - }).Debugf("new node credentials generated: %s", krw.Target()) - - return NewSecurityConfig(&rootCA, krw, clientTLSCreds, serverTLSCreds), nil + return secConfig, err } // RenewTLSConfigNow gets a new TLS cert and key, and updates the security config if provided. This is similar to @@ -422,7 +452,7 @@ func RenewTLSConfigNow(ctx context.Context, s *SecurityConfig, connBroker *conne // Let's request new certs. Renewals don't require a token. rootCA := s.RootCA() - tlsKeyPair, err := rootCA.RequestAndSaveNewCertificates(ctx, + tlsKeyPair, issuerInfo, err := rootCA.RequestAndSaveNewCertificates(ctx, s.KeyWriter(), CertificateRequestConfig{ ConnBroker: connBroker, @@ -432,9 +462,10 @@ func RenewTLSConfigNow(ctx context.Context, s *SecurityConfig, connBroker *conne log.WithError(err).Errorf("failed to renew the certificate") return err } + s.mu.Lock() defer s.mu.Unlock() - return s.updateTLSCredentials([]tls.Certificate{*tlsKeyPair}) + return s.updateTLSCredentials(tlsKeyPair, issuerInfo) } // RenewTLSConfig will continuously monitor for the necessity of renewing the local certificates, either by diff --git a/vendor/github.com/docker/swarmkit/ca/server.go b/vendor/github.com/docker/swarmkit/ca/server.go index 34dc400043..f3fa9cb6c8 100644 --- a/vendor/github.com/docker/swarmkit/ca/server.go +++ b/vendor/github.com/docker/swarmkit/ca/server.go @@ -60,6 +60,9 @@ type Server struct { lastSeenClusterRootCA *api.RootCA lastSeenExternalCAs []*api.ExternalCA secConfigMu sync.Mutex + + // before we update the security config with the new root CA, we need to be able to save the root certs + rootPaths CertPaths } // DefaultCAConfig returns the default CA Config, with a default expiration. @@ -70,13 +73,14 @@ func DefaultCAConfig() api.CAConfig { } // NewServer creates a CA API server. -func NewServer(store *store.MemoryStore, securityConfig *SecurityConfig) *Server { +func NewServer(store *store.MemoryStore, securityConfig *SecurityConfig, rootCAPaths CertPaths) *Server { return &Server{ store: store, securityConfig: securityConfig, pending: make(map[string]*api.Node), started: make(chan struct{}), reconciliationRetryInterval: defaultReconciliationRetryInterval, + rootPaths: rootCAPaths, } } @@ -582,6 +586,9 @@ func (s *Server) UpdateRootCA(ctx context.Context, cluster *api.Cluster) error { if err != nil { return errors.Wrap(err, "invalid Root CA object in cluster") } + if err := SaveRootCA(updatedRootCA, s.rootPaths); err != nil { + return errors.Wrap(err, "unable to save new root CA certificates") + } externalCARootPool := updatedRootCA.Pool if rCA.RootRotation != nil { @@ -609,6 +616,7 @@ func (s *Server) UpdateRootCA(ctx context.Context, cluster *api.Cluster) error { // we're rotating to a new root, so we only want external CAs with the new root cert wantedExternalCACert = rCA.RootRotation.CACert } + wantedExternalCACert = NormalizePEMs(wantedExternalCACert) // Update our security config with the list of External CA URLs // from the new cluster state. @@ -623,6 +631,7 @@ func (s *Server) UpdateRootCA(ctx context.Context, cluster *api.Cluster) error { if len(certForExtCA) == 0 { certForExtCA = rCA.CACert } + certForExtCA = NormalizePEMs(certForExtCA) if extCA.Protocol != api.ExternalCA_CAProtocolCFSSL { logger.Debugf("skipping external CA %d (url: %s) due to unknown protocol type", i, extCA.URL) continue diff --git a/vendor/github.com/docker/swarmkit/manager/controlapi/ca_rotation.go b/vendor/github.com/docker/swarmkit/manager/controlapi/ca_rotation.go index 5e9e83e859..acc0da5182 100644 --- a/vendor/github.com/docker/swarmkit/manager/controlapi/ca_rotation.go +++ b/vendor/github.com/docker/swarmkit/manager/controlapi/ca_rotation.go @@ -24,28 +24,28 @@ var minRootExpiration = 1 * helpers.OneYear // determines whether an api.RootCA, api.RootRotation, or api.CAConfig has a signing key (local signer) func hasSigningKey(a interface{}) bool { switch b := a.(type) { - case api.RootCA: + case *api.RootCA: return len(b.CAKey) > 0 case *api.RootRotation: return b != nil && len(b.CAKey) > 0 - case api.CAConfig: + case *api.CAConfig: return len(b.SigningCACert) > 0 && len(b.SigningCAKey) > 0 default: - panic("needsExternalCAs should be called something of type api.RootCA, *api.RootRotation, or api.CAConfig") + panic("needsExternalCAs should be called something of type *api.RootCA, *api.RootRotation, or *api.CAConfig") } } // Creates a cross-signed intermediate and new api.RootRotation object. // This function assumes that the root cert and key and the external CAs have already been validated. -func newRootRotationObject(ctx context.Context, securityConfig *ca.SecurityConfig, cluster *api.Cluster, newRootCA ca.RootCA, version uint64) (*api.RootCA, error) { +func newRootRotationObject(ctx context.Context, securityConfig *ca.SecurityConfig, apiRootCA *api.RootCA, newCARootCA ca.RootCA, extCAs []*api.ExternalCA, version uint64) (*api.RootCA, error) { var ( rootCert, rootKey, crossSignedCert []byte newRootHasSigner bool err error ) - rootCert = newRootCA.Certs - if s, err := newRootCA.Signer(); err == nil { + rootCert = newCARootCA.Certs + if s, err := newCARootCA.Signer(); err == nil { rootCert, rootKey = s.Cert, s.Key newRootHasSigner = true } @@ -53,9 +53,9 @@ func newRootRotationObject(ctx context.Context, securityConfig *ca.SecurityConfi // we have to sign with the original signer, not whatever is in the SecurityConfig's RootCA (which may have an intermediate signer, if // a root rotation is already in progress) switch { - case hasSigningKey(cluster.RootCA): + case hasSigningKey(apiRootCA): var oldRootCA ca.RootCA - oldRootCA, err = ca.NewRootCA(cluster.RootCA.CACert, cluster.RootCA.CACert, cluster.RootCA.CAKey, ca.DefaultNodeCertExpiration, nil) + oldRootCA, err = ca.NewRootCA(apiRootCA.CACert, apiRootCA.CACert, apiRootCA.CAKey, ca.DefaultNodeCertExpiration, nil) if err == nil { crossSignedCert, err = oldRootCA.CrossSignCACertificate(rootCert) } @@ -65,8 +65,8 @@ 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) externalCA := securityConfig.ExternalCA().Copy() var urls []string - for _, c := range cluster.Spec.CAConfig.ExternalCAs { - if c.Protocol == api.ExternalCA_CAProtocolCFSSL && bytes.Equal(c.CACert, cluster.RootCA.CACert) { + for _, c := range extCAs { + if c.Protocol == api.ExternalCA_CAProtocolCFSSL { urls = append(urls, c.URL) } } @@ -75,7 +75,7 @@ func newRootRotationObject(ctx context.Context, securityConfig *ca.SecurityConfi "must provide an external CA for the current external root CA to generate a cross-signed certificate") } externalCA.UpdateURLs(urls...) - crossSignedCert, err = externalCA.CrossSignRootCA(ctx, newRootCA) + crossSignedCert, err = externalCA.CrossSignRootCA(ctx, newCARootCA) } if err != nil { @@ -83,11 +83,11 @@ func newRootRotationObject(ctx context.Context, securityConfig *ca.SecurityConfi return nil, grpc.Errorf(codes.Internal, "unable to generate a cross-signed certificate for root rotation") } - copied := cluster.RootCA.Copy() + copied := apiRootCA.Copy() copied.RootRotation = &api.RootRotation{ CACert: rootCert, CAKey: rootKey, - CrossSignedCACert: crossSignedCert, + CrossSignedCACert: ca.NormalizePEMs(crossSignedCert), } copied.LastForcedRotation = version return copied, nil @@ -120,58 +120,46 @@ func validateExternalCAURL(dialer *net.Dialer, tlsOpts *tls.Config, caURL string return err } -// Iterates over all the external CAs, and validates that there is at least 1 reachable, valid external CA for the -// given CA certificate. Returns true if there is, false otherwise. -func hasAtLeastOneExternalCA(ctx context.Context, externalCAs []*api.ExternalCA, securityConfig *ca.SecurityConfig, wantedCert []byte) bool { - pool := x509.NewCertPool() - pool.AppendCertsFromPEM(wantedCert) - dialer := net.Dialer{Timeout: 5 * time.Second} - opts := tls.Config{ - RootCAs: pool, - Certificates: securityConfig.ClientTLSCreds.Config().Certificates, - } - for i, ca := range externalCAs { - if ca.Protocol == api.ExternalCA_CAProtocolCFSSL && bytes.Equal(wantedCert, ca.CACert) { - err := validateExternalCAURL(&dialer, &opts, ca.URL) - if err == nil { - return true +// Validates that there is at least 1 reachable, valid external CA for the given CA certificate. Returns true if there is, false otherwise. +// Requires that the wanted cert is already normalized. +func validateHasAtLeastOneExternalCA(ctx context.Context, externalCAs map[string][]*api.ExternalCA, securityConfig *ca.SecurityConfig, + wantedCert []byte, desc string) ([]*api.ExternalCA, error) { + specific, ok := externalCAs[string(wantedCert)] + if ok { + pool := x509.NewCertPool() + pool.AppendCertsFromPEM(wantedCert) + dialer := net.Dialer{Timeout: 5 * time.Second} + opts := tls.Config{ + RootCAs: pool, + Certificates: securityConfig.ClientTLSCreds.Config().Certificates, + } + for i, ca := range specific { + if ca.Protocol == api.ExternalCA_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 { + return specific, nil + } } - log.G(ctx).WithError(err).Warnf("external CA # %d is unreachable or invalid", i+1) } } - return false + return nil, grpc.Errorf(codes.InvalidArgument, "there must be at least one valid, reachable external CA corresponding to the %s CA certificate", desc) } -// All new external CA definitions must include the CA cert associated with the external CA. -// If the current root CA requires an external CA, then at least one, reachable valid external CA must be provided that -// corresponds with the current RootCA's certificate. -// -// Similarly for the desired CA certificate, if one is specified. Similarly for the current outstanding root CA rotation, -// if one is specified and will not be replaced with the desired CA. -func validateHasRequiredExternalCAs(ctx context.Context, securityConfig *ca.SecurityConfig, cluster *api.Cluster) error { - config := cluster.Spec.CAConfig - for _, ca := range config.ExternalCAs { - if len(ca.CACert) == 0 { - return grpc.Errorf(codes.InvalidArgument, "must specify CA certificate for each external CA") +// validates that the list of external CAs have valid certs associated with them, and produce a mapping of subject/pubkey:external +// for later validation of required external CAs +func getNormalizedExtCAs(caConfig *api.CAConfig) (map[string][]*api.ExternalCA, error) { + extCAs := make(map[string][]*api.ExternalCA) + + for _, extCA := range caConfig.ExternalCAs { + if len(extCA.CACert) == 0 { + return nil, grpc.Errorf(codes.InvalidArgument, "must specify CA certificate for each external CA") } + certKey := string(ca.NormalizePEMs(extCA.CACert)) + extCAs[certKey] = append(extCAs[certKey], extCA) } - if !hasSigningKey(cluster.RootCA) && !hasAtLeastOneExternalCA(ctx, config.ExternalCAs, securityConfig, cluster.RootCA.CACert) { - return grpc.Errorf(codes.InvalidArgument, "there must be at least one valid, reachable external CA corresponding to the current CA certificate") - } - - if len(config.SigningCACert) > 0 { // a signing cert is specified - if !hasSigningKey(config) && !hasAtLeastOneExternalCA(ctx, config.ExternalCAs, securityConfig, config.SigningCACert) { - return grpc.Errorf(codes.InvalidArgument, "there must be at least one valid, reachable external CA corresponding to the desired CA certificate") - } - } else if config.ForceRotate == cluster.RootCA.LastForcedRotation && cluster.RootCA.RootRotation != nil { - // no cert is specified but force rotation hasn't changed (so we are happy with the current configuration) and there's an outstanding root rotation - if !hasSigningKey(cluster.RootCA.RootRotation) && !hasAtLeastOneExternalCA(ctx, config.ExternalCAs, securityConfig, cluster.RootCA.RootRotation.CACert) { - return grpc.Errorf(codes.InvalidArgument, "there must be at least one valid, reachable external CA corresponding to the next CA certificate") - } - } - - return nil + return extCAs, nil } // validateAndUpdateCA validates a cluster's desired CA configuration spec, and returns a RootCA value on success representing @@ -196,16 +184,27 @@ func validateHasRequiredExternalCAs(ctx context.Context, securityConfig *ca.Secu // - 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 + newConfig := cluster.Spec.CAConfig.Copy() + newConfig.SigningCACert = ca.NormalizePEMs(newConfig.SigningCACert) // ensure this is normalized before we use it if len(newConfig.SigningCAKey) > 0 && len(newConfig.SigningCACert) == 0 { return nil, grpc.Errorf(codes.InvalidArgument, "if a signing CA key is provided, the signing CA cert must also be provided") } - if err := validateHasRequiredExternalCAs(ctx, securityConfig, cluster); err != nil { + extCAs, err := getNormalizedExtCAs(newConfig) // validate that the list of external CAs is not malformed + if err != nil { return nil, err } + normalizedRootCA := ca.NormalizePEMs(cluster.RootCA.CACert) + var oldCertExtCAs []*api.ExternalCA + if !hasSigningKey(&cluster.RootCA) { + oldCertExtCAs, err = validateHasAtLeastOneExternalCA(ctx, extCAs, securityConfig, normalizedRootCA, "current") + if err != nil { + return nil, err + } + } + // if the desired CA cert and key are not set, then we are happy with the current root CA configuration, unless // the ForceRotate version has changed if len(newConfig.SigningCACert) == 0 { @@ -214,8 +213,18 @@ func validateCAConfig(ctx context.Context, securityConfig *ca.SecurityConfig, cl if err != nil { return nil, grpc.Errorf(codes.Internal, err.Error()) } - return newRootRotationObject(ctx, securityConfig, cluster, newRootCA, 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 + // still valid + if cluster.RootCA.RootRotation != nil && !hasSigningKey(cluster.RootCA.RootRotation) { + _, err := validateHasAtLeastOneExternalCA(ctx, extCAs, securityConfig, ca.NormalizePEMs(cluster.RootCA.RootRotation.CACert), "next") + if err != nil { + return nil, err + } + } + return &cluster.RootCA, nil // no change, return as is } @@ -243,8 +252,14 @@ func validateCAConfig(ctx context.Context, securityConfig *ca.SecurityConfig, cl return nil, grpc.Errorf(codes.InvalidArgument, "CA certificate expires too soon") } + if !hasSigningKey(newConfig) { + if _, err := validateHasAtLeastOneExternalCA(ctx, extCAs, securityConfig, newConfig.SigningCACert, "desired"); err != nil { + return nil, err + } + } + // check if we can abort any existing root rotations - if bytes.Equal(cluster.RootCA.CACert, cluster.Spec.CAConfig.SigningCACert) { + if bytes.Equal(normalizedRootCA, newConfig.SigningCACert) { copied := cluster.RootCA.Copy() copied.CAKey = newConfig.SigningCAKey copied.RootRotation = nil @@ -253,7 +268,7 @@ func validateCAConfig(ctx context.Context, securityConfig *ca.SecurityConfig, cl } // check if this is the same desired cert as an existing root rotation - if r := cluster.RootCA.RootRotation; r != nil && bytes.Equal(r.CACert, cluster.Spec.CAConfig.SigningCACert) { + if r := cluster.RootCA.RootRotation; r != nil && bytes.Equal(ca.NormalizePEMs(r.CACert), newConfig.SigningCACert) { copied := cluster.RootCA.Copy() copied.RootRotation.CAKey = newConfig.SigningCAKey copied.LastForcedRotation = newConfig.ForceRotate @@ -261,5 +276,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, newRootCA, newConfig.ForceRotate) + return newRootRotationObject(ctx, securityConfig, &cluster.RootCA, newRootCA, oldCertExtCAs, newConfig.ForceRotate) } diff --git a/vendor/github.com/docker/swarmkit/manager/controlapi/cluster.go b/vendor/github.com/docker/swarmkit/manager/controlapi/cluster.go index 616d4d2f54..9832272a3f 100644 --- a/vendor/github.com/docker/swarmkit/manager/controlapi/cluster.go +++ b/vendor/github.com/docker/swarmkit/manager/controlapi/cluster.go @@ -38,7 +38,7 @@ func validateClusterSpec(spec *api.ClusterSpec) error { } // Validate that AcceptancePolicies only include Secrets that are bcrypted - // TODO(diogo): Add a global list of acceptace algorithms. We only support bcrypt for now. + // TODO(diogo): Add a global list of acceptance algorithms. We only support bcrypt for now. if len(spec.AcceptancePolicy.Policies) > 0 { for _, policy := range spec.AcceptancePolicy.Policies { if policy.Secret != nil && strings.ToLower(policy.Secret.Alg) != "bcrypt" { diff --git a/vendor/github.com/docker/swarmkit/manager/controlapi/common.go b/vendor/github.com/docker/swarmkit/manager/controlapi/common.go index 984ffe18ad..795fd936d1 100644 --- a/vendor/github.com/docker/swarmkit/manager/controlapi/common.go +++ b/vendor/github.com/docker/swarmkit/manager/controlapi/common.go @@ -13,7 +13,10 @@ import ( "google.golang.org/grpc/codes" ) -var isValidName = regexp.MustCompile(`^[a-zA-Z0-9](?:[-_]*[A-Za-z0-9]+)*$`) +var isValidDNSName = regexp.MustCompile(`^[a-zA-Z0-9](?:[-_]*[A-Za-z0-9]+)*$`) + +// configs and secrets have different naming requirements from tasks and services +var isValidConfigOrSecretName = regexp.MustCompile(`^[a-zA-Z0-9]+(?:[a-zA-Z0-9-_.]*[a-zA-Z0-9])?$`) func buildFilters(by func(string) store.By, values []string) store.By { filters := make([]store.By, 0, len(values)) @@ -68,7 +71,7 @@ func validateAnnotations(m api.Annotations) error { if m.Name == "" { return grpc.Errorf(codes.InvalidArgument, "meta: name must be provided") } - if !isValidName.MatchString(m.Name) { + if !isValidDNSName.MatchString(m.Name) { // if the name doesn't match the regex return grpc.Errorf(codes.InvalidArgument, "name must be valid as a DNS name component") } @@ -79,6 +82,17 @@ func validateAnnotations(m api.Annotations) error { return nil } +func validateConfigOrSecretAnnotations(m api.Annotations) error { + if m.Name == "" { + return grpc.Errorf(codes.InvalidArgument, "name must be provided") + } else if len(m.Name) > 64 || !isValidConfigOrSecretName.MatchString(m.Name) { + // if the name doesn't match the regex + return grpc.Errorf(codes.InvalidArgument, + "invalid name, only 64 [a-zA-Z0-9-_.] characters allowed, and the start and end character must be [a-zA-Z0-9]") + } + return nil +} + func validateDriver(driver *api.Driver, pg plugingetter.PluginGetter, pluginType string) error { if driver == nil { // It is ok to not specify the driver. We will choose diff --git a/vendor/github.com/docker/swarmkit/manager/controlapi/config.go b/vendor/github.com/docker/swarmkit/manager/controlapi/config.go new file mode 100644 index 0000000000..3a6f6a19ee --- /dev/null +++ b/vendor/github.com/docker/swarmkit/manager/controlapi/config.go @@ -0,0 +1,248 @@ +package controlapi + +import ( + "bytes" + "strings" + + "github.com/Sirupsen/logrus" + "github.com/docker/swarmkit/api" + "github.com/docker/swarmkit/identity" + "github.com/docker/swarmkit/log" + "github.com/docker/swarmkit/manager/state/store" + "golang.org/x/net/context" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" +) + +// MaxConfigSize is the maximum byte length of the `Config.Spec.Data` field. +const MaxConfigSize = 500 * 1024 // 500KB + +// assumes spec is not nil +func configFromConfigSpec(spec *api.ConfigSpec) *api.Config { + return &api.Config{ + ID: identity.NewID(), + Spec: *spec, + } +} + +// 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. +func (s *Server) GetConfig(ctx context.Context, request *api.GetConfigRequest) (*api.GetConfigResponse, error) { + if request.ConfigID == "" { + return nil, grpc.Errorf(codes.InvalidArgument, "config ID must be provided") + } + + var config *api.Config + s.store.View(func(tx store.ReadTx) { + config = store.GetConfig(tx, request.ConfigID) + }) + + if config == nil { + return nil, grpc.Errorf(codes.NotFound, "config %s not found", request.ConfigID) + } + + return &api.GetConfigResponse{Config: config}, nil +} + +// UpdateConfig updates a Config referenced by ConfigID with the given ConfigSpec. +// - Returns `NotFound` if the Config is not found. +// - Returns `InvalidArgument` if the ConfigSpec is malformed or anything other than Labels is changed +// - Returns an error if the update fails. +func (s *Server) UpdateConfig(ctx context.Context, request *api.UpdateConfigRequest) (*api.UpdateConfigResponse, error) { + if request.ConfigID == "" || request.ConfigVersion == nil { + return nil, grpc.Errorf(codes.InvalidArgument, errInvalidArgument.Error()) + } + + var config *api.Config + err := s.store.Update(func(tx store.Tx) error { + config = store.GetConfig(tx, request.ConfigID) + if config == nil { + return grpc.Errorf(codes.NotFound, "config %s not found", request.ConfigID) + } + + // Check if the Name is different than the current name, or the config is non-nil and different + // than the current config + if config.Spec.Annotations.Name != request.Spec.Annotations.Name || + (request.Spec.Data != nil && !bytes.Equal(request.Spec.Data, config.Spec.Data)) { + return grpc.Errorf(codes.InvalidArgument, "only updates to Labels are allowed") + } + + // We only allow updating Labels + config.Meta.Version = *request.ConfigVersion + config.Spec.Annotations.Labels = request.Spec.Annotations.Labels + + return store.UpdateConfig(tx, config) + }) + if err != nil { + return nil, err + } + + log.G(ctx).WithFields(logrus.Fields{ + "config.ID": request.ConfigID, + "config.Name": request.Spec.Annotations.Name, + "method": "UpdateConfig", + }).Debugf("config updated") + + return &api.UpdateConfigResponse{ + Config: config, + }, nil +} + +// ListConfigs returns a `ListConfigResponse` with a list all non-internal `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. +func (s *Server) ListConfigs(ctx context.Context, request *api.ListConfigsRequest) (*api.ListConfigsResponse, error) { + var ( + configs []*api.Config + respConfigs []*api.Config + err error + byFilters []store.By + by store.By + labels map[string]string + ) + + // return all configs that match either any of the names or any of the name prefixes (why would you give both?) + if request.Filters != nil { + for _, name := range request.Filters.Names { + byFilters = append(byFilters, store.ByName(name)) + } + for _, prefix := range request.Filters.NamePrefixes { + byFilters = append(byFilters, store.ByNamePrefix(prefix)) + } + for _, prefix := range request.Filters.IDPrefixes { + byFilters = append(byFilters, store.ByIDPrefix(prefix)) + } + labels = request.Filters.Labels + } + + switch len(byFilters) { + case 0: + by = store.All + case 1: + by = byFilters[0] + default: + by = store.Or(byFilters...) + } + + s.store.View(func(tx store.ReadTx) { + configs, err = store.FindConfigs(tx, by) + }) + if err != nil { + return nil, err + } + + // filter by label + for _, config := range configs { + if !filterMatchLabels(config.Spec.Annotations.Labels, labels) { + continue + } + respConfigs = append(respConfigs, config) + } + + return &api.ListConfigsResponse{Configs: respConfigs}, nil +} + +// CreateConfig creates and returns 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. +func (s *Server) CreateConfig(ctx context.Context, request *api.CreateConfigRequest) (*api.CreateConfigResponse, error) { + if err := validateConfigSpec(request.Spec); err != nil { + return nil, err + } + + config := configFromConfigSpec(request.Spec) // the store will handle name conflicts + err := s.store.Update(func(tx store.Tx) error { + return store.CreateConfig(tx, config) + }) + + switch err { + case store.ErrNameConflict: + return nil, grpc.Errorf(codes.AlreadyExists, "config %s already exists", request.Spec.Annotations.Name) + case nil: + log.G(ctx).WithFields(logrus.Fields{ + "config.Name": request.Spec.Annotations.Name, + "method": "CreateConfig", + }).Debugf("config created") + + return &api.CreateConfigResponse{Config: config}, nil + default: + return nil, err + } +} + +// 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 `ConfigInUse` if the config is currently in use +// - Returns an error if the deletion fails. +func (s *Server) RemoveConfig(ctx context.Context, request *api.RemoveConfigRequest) (*api.RemoveConfigResponse, error) { + if request.ConfigID == "" { + return nil, grpc.Errorf(codes.InvalidArgument, "config ID must be provided") + } + + err := s.store.Update(func(tx store.Tx) error { + // Check if the config exists + config := store.GetConfig(tx, request.ConfigID) + if config == nil { + return grpc.Errorf(codes.NotFound, "could not find config %s", request.ConfigID) + } + + // Check if any services currently reference this config, return error if so + services, err := store.FindServices(tx, store.ByReferencedConfigID(request.ConfigID)) + if err != nil { + return grpc.Errorf(codes.Internal, "could not find services using config %s: %v", request.ConfigID, err) + } + + if len(services) != 0 { + serviceNames := make([]string, 0, len(services)) + for _, service := range services { + serviceNames = append(serviceNames, service.Spec.Annotations.Name) + } + + configName := config.Spec.Annotations.Name + serviceNameStr := strings.Join(serviceNames, ", ") + serviceStr := "services" + if len(serviceNames) == 1 { + serviceStr = "service" + } + + return grpc.Errorf(codes.InvalidArgument, "config '%s' is in use by the following %s: %v", configName, serviceStr, serviceNameStr) + } + + return store.DeleteConfig(tx, request.ConfigID) + }) + switch err { + case store.ErrNotExist: + return nil, grpc.Errorf(codes.NotFound, "config %s not found", request.ConfigID) + case nil: + log.G(ctx).WithFields(logrus.Fields{ + "config.ID": request.ConfigID, + "method": "RemoveConfig", + }).Debugf("config removed") + + return &api.RemoveConfigResponse{}, nil + default: + return nil, err + } +} + +func validateConfigSpec(spec *api.ConfigSpec) error { + if spec == nil { + return grpc.Errorf(codes.InvalidArgument, errInvalidArgument.Error()) + } + if err := validateConfigOrSecretAnnotations(spec.Annotations); err != nil { + return err + } + + if len(spec.Data) >= MaxConfigSize || len(spec.Data) < 1 { + return grpc.Errorf(codes.InvalidArgument, "config data must be larger than 0 and less than %d bytes", MaxConfigSize) + } + return nil +} diff --git a/vendor/github.com/docker/swarmkit/manager/controlapi/secret.go b/vendor/github.com/docker/swarmkit/manager/controlapi/secret.go index 7860dcb555..5f125e9c60 100644 --- a/vendor/github.com/docker/swarmkit/manager/controlapi/secret.go +++ b/vendor/github.com/docker/swarmkit/manager/controlapi/secret.go @@ -2,7 +2,6 @@ package controlapi import ( "crypto/subtle" - "regexp" "strings" "github.com/Sirupsen/logrus" @@ -15,13 +14,9 @@ import ( "google.golang.org/grpc/codes" ) -// Currently this is contains the unimplemented secret functions in order to satisfy the interface - // MaxSecretSize is the maximum byte length of the `Secret.Spec.Data` field. const MaxSecretSize = 500 * 1024 // 500KB -var validSecretNameRegexp = regexp.MustCompile(`^[a-zA-Z0-9]+(?:[a-zA-Z0-9-_.]*[a-zA-Z0-9])?$`) - // assumes spec is not nil func secretFromSecretSpec(spec *api.SecretSpec) *api.Secret { return &api.Secret{ @@ -247,7 +242,7 @@ func validateSecretSpec(spec *api.SecretSpec) error { if spec == nil { return grpc.Errorf(codes.InvalidArgument, errInvalidArgument.Error()) } - if err := validateSecretAnnotations(spec.Annotations); err != nil { + if err := validateConfigOrSecretAnnotations(spec.Annotations); err != nil { return err } @@ -256,14 +251,3 @@ func validateSecretSpec(spec *api.SecretSpec) error { } return nil } - -func validateSecretAnnotations(m api.Annotations) error { - if m.Name == "" { - return grpc.Errorf(codes.InvalidArgument, "name must be provided") - } else if len(m.Name) > 64 || !validSecretNameRegexp.MatchString(m.Name) { - // if the name doesn't match the regex - return grpc.Errorf(codes.InvalidArgument, - "invalid name, only 64 [a-zA-Z0-9-_.] characters allowed, and the start and end character must be [a-zA-Z0-9]") - } - return nil -} diff --git a/vendor/github.com/docker/swarmkit/manager/controlapi/service.go b/vendor/github.com/docker/swarmkit/manager/controlapi/service.go index 7cd23d9ee4..d1cf825206 100644 --- a/vendor/github.com/docker/swarmkit/manager/controlapi/service.go +++ b/vendor/github.com/docker/swarmkit/manager/controlapi/service.go @@ -206,11 +206,16 @@ func validateTaskSpec(taskSpec api.TaskSpec) error { return err } - // Check to see if the Secret Reference portion of the spec is valid + // Check to see if the secret reference portion of the spec is valid if err := validateSecretRefsSpec(taskSpec); err != nil { return err } + // Check to see if the config reference portion of the spec is valid + if err := validateConfigRefsSpec(taskSpec); err != nil { + return err + } + if taskSpec.GetRuntime() == nil { return grpc.Errorf(codes.InvalidArgument, "TaskSpec: missing runtime") } @@ -314,6 +319,48 @@ func validateSecretRefsSpec(spec api.TaskSpec) error { return nil } +// validateConfigRefsSpec finds if the configs passed in spec are valid and have no +// conflicting targets. +func validateConfigRefsSpec(spec api.TaskSpec) error { + container := spec.GetContainer() + if container == nil { + return nil + } + + // Keep a map to track all the targets that will be exposed + // The string returned is only used for logging. It could as well be struct{}{} + existingTargets := make(map[string]string) + for _, configRef := range container.Configs { + // ConfigID and ConfigName are mandatory, we have invalid references without them + if configRef.ConfigID == "" || configRef.ConfigName == "" { + return grpc.Errorf(codes.InvalidArgument, "malformed config reference") + } + + // Every config reference requires a Target + if configRef.GetTarget() == nil { + return grpc.Errorf(codes.InvalidArgument, "malformed config reference, no target provided") + } + + // If this is a file target, we will ensure filename uniqueness + if configRef.GetFile() != nil { + fileName := configRef.GetFile().Name + // Validate the file name + if fileName == "" { + return grpc.Errorf(codes.InvalidArgument, "malformed file config reference, invalid target file name provided") + } + + // If this target is already in use, we have conflicting targets + if prevConfigName, ok := existingTargets[fileName]; ok { + return grpc.Errorf(codes.InvalidArgument, "config references '%s' and '%s' have a conflicting target: '%s'", prevConfigName, configRef.ConfigName, fileName) + } + + existingTargets[fileName] = configRef.ConfigName + } + } + + return nil +} + func (s *Server) validateNetworks(networks []*api.NetworkAttachmentConfig) error { for _, na := range networks { var network *api.Network @@ -459,6 +506,35 @@ func (s *Server) checkSecretExistence(tx store.Tx, spec *api.ServiceSpec) error return nil } +// checkConfigExistence finds if the config exists +func (s *Server) checkConfigExistence(tx store.Tx, spec *api.ServiceSpec) error { + container := spec.Task.GetContainer() + if container == nil { + return nil + } + + var failedConfigs []string + for _, configRef := range container.Configs { + config := store.GetConfig(tx, configRef.ConfigID) + // Check to see if the config exists and configRef.ConfigName matches the actual configName + if config == nil || config.Spec.Annotations.Name != configRef.ConfigName { + failedConfigs = append(failedConfigs, configRef.ConfigName) + } + } + + if len(failedConfigs) > 0 { + configStr := "configs" + if len(failedConfigs) == 1 { + configStr = "config" + } + + return grpc.Errorf(codes.InvalidArgument, "%s not found: %v", configStr, strings.Join(failedConfigs, ", ")) + + } + + return nil +} + // CreateService creates and returns a Service based on the provided ServiceSpec. // - Returns `InvalidArgument` if the ServiceSpec is malformed. // - Returns `Unimplemented` if the ServiceSpec references unimplemented features. @@ -498,6 +574,10 @@ func (s *Server) CreateService(ctx context.Context, request *api.CreateServiceRe if err != nil { return err } + err = s.checkConfigExistence(tx, request.Spec) + if err != nil { + return err + } return store.CreateService(tx, service) }) @@ -585,6 +665,11 @@ func (s *Server) UpdateService(ctx context.Context, request *api.UpdateServiceRe return err } + err = s.checkConfigExistence(tx, request.Spec) + if err != nil { + return err + } + // orchestrator is designed to be stateless, so it should not deal // with service mode change (comparing current config with previous config). // proper way to change service mode is to delete and re-add. @@ -621,7 +706,7 @@ func (s *Server) UpdateService(ctx context.Context, request *api.UpdateServiceRe service.Spec = *request.Spec.Copy() // Set spec version. Note that this will not match the // service's Meta.Version after the store update. The - // versionsfor the spec and the service itself are not + // versions for the spec and the service itself are not // meant to be directly comparable. service.SpecVersion = service.Meta.Version.Copy() diff --git a/vendor/github.com/docker/swarmkit/manager/dispatcher/assignments.go b/vendor/github.com/docker/swarmkit/manager/dispatcher/assignments.go new file mode 100644 index 0000000000..871519efa2 --- /dev/null +++ b/vendor/github.com/docker/swarmkit/manager/dispatcher/assignments.go @@ -0,0 +1,247 @@ +package dispatcher + +import ( + "github.com/Sirupsen/logrus" + "github.com/docker/swarmkit/api" + "github.com/docker/swarmkit/api/equality" + "github.com/docker/swarmkit/manager/state/store" +) + +// Used as a key in tasksUsingDependency and changes. Only using the +// ID could cause (rare) collisions between different types of +// objects, so we also include the type of object in the key. +type objectType int + +const ( + typeTask objectType = iota + typeSecret + typeConfig +) + +type typeAndID struct { + id string + objType objectType +} + +type assignmentSet struct { + tasksMap map[string]*api.Task + tasksUsingDependency map[typeAndID]map[string]struct{} + changes map[typeAndID]*api.AssignmentChange + + log *logrus.Entry +} + +func newAssignmentSet(log *logrus.Entry) *assignmentSet { + return &assignmentSet{ + changes: make(map[typeAndID]*api.AssignmentChange), + tasksMap: make(map[string]*api.Task), + tasksUsingDependency: make(map[typeAndID]map[string]struct{}), + log: log, + } +} + +func (a *assignmentSet) addTaskDependencies(readTx store.ReadTx, t *api.Task) { + var secrets []*api.SecretReference + container := t.Spec.GetContainer() + if container != nil { + secrets = container.Secrets + } + for _, secretRef := range secrets { + secretID := secretRef.SecretID + mapKey := typeAndID{objType: typeSecret, id: secretID} + + if len(a.tasksUsingDependency[mapKey]) == 0 { + a.tasksUsingDependency[mapKey] = make(map[string]struct{}) + + secret := store.GetSecret(readTx, secretID) + if secret == nil { + a.log.WithFields(logrus.Fields{ + "secret.id": secretID, + "secret.name": secretRef.SecretName, + }).Debug("secret not found") + continue + } + + // If the secret was found, add this secret to + // our set that we send down. + a.changes[mapKey] = &api.AssignmentChange{ + Assignment: &api.Assignment{ + Item: &api.Assignment_Secret{ + Secret: secret, + }, + }, + Action: api.AssignmentChange_AssignmentActionUpdate, + } + } + a.tasksUsingDependency[mapKey][t.ID] = struct{}{} + } + + var configs []*api.ConfigReference + if container != nil { + configs = container.Configs + } + for _, configRef := range configs { + configID := configRef.ConfigID + mapKey := typeAndID{objType: typeConfig, id: configID} + + if len(a.tasksUsingDependency[mapKey]) == 0 { + a.tasksUsingDependency[mapKey] = make(map[string]struct{}) + + config := store.GetConfig(readTx, configID) + if config == nil { + a.log.WithFields(logrus.Fields{ + "config.id": configID, + "config.name": configRef.ConfigName, + }).Debug("config not found") + continue + } + + // If the config was found, add this config to + // our set that we send down. + a.changes[mapKey] = &api.AssignmentChange{ + Assignment: &api.Assignment{ + Item: &api.Assignment_Config{ + Config: config, + }, + }, + Action: api.AssignmentChange_AssignmentActionUpdate, + } + } + a.tasksUsingDependency[mapKey][t.ID] = struct{}{} + } +} + +func (a *assignmentSet) releaseDependency(mapKey typeAndID, assignment *api.Assignment, taskID string) bool { + delete(a.tasksUsingDependency[mapKey], taskID) + if len(a.tasksUsingDependency[mapKey]) != 0 { + return false + } + // No tasks are using the dependency anymore + delete(a.tasksUsingDependency, mapKey) + a.changes[mapKey] = &api.AssignmentChange{ + Assignment: assignment, + Action: api.AssignmentChange_AssignmentActionRemove, + } + return true +} + +func (a *assignmentSet) releaseTaskDependencies(t *api.Task) bool { + var modified bool + container := t.Spec.GetContainer() + + var secrets []*api.SecretReference + if container != nil { + secrets = container.Secrets + } + + for _, secretRef := range secrets { + secretID := secretRef.SecretID + mapKey := typeAndID{objType: typeSecret, id: secretID} + assignment := &api.Assignment{ + Item: &api.Assignment_Secret{ + Secret: &api.Secret{ID: secretID}, + }, + } + if a.releaseDependency(mapKey, assignment, t.ID) { + modified = true + } + } + + var configs []*api.ConfigReference + if container != nil { + configs = container.Configs + } + + for _, configRef := range configs { + configID := configRef.ConfigID + mapKey := typeAndID{objType: typeConfig, id: configID} + assignment := &api.Assignment{ + Item: &api.Assignment_Config{ + Config: &api.Config{ID: configID}, + }, + } + if a.releaseDependency(mapKey, assignment, t.ID) { + modified = true + } + } + + return modified +} + +func (a *assignmentSet) addOrUpdateTask(readTx store.ReadTx, t *api.Task) bool { + // We only care about tasks that are ASSIGNED or higher. + if t.Status.State < api.TaskStateAssigned { + return false + } + + if oldTask, exists := a.tasksMap[t.ID]; exists { + // 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, t) && t.Status.State > api.TaskStateAssigned { + // this update should not trigger a task change for the agent + a.tasksMap[t.ID] = t + // If this task got updated to a final state, let's release + // the dependencies that are being used by the task + if t.Status.State > api.TaskStateRunning { + // If releasing the dependencies caused us to + // remove something from the assignment set, + // mark one modification. + return a.releaseTaskDependencies(t) + } + return false + } + } else if t.Status.State <= api.TaskStateRunning { + // If this task wasn't part of the assignment set before, and it's <= RUNNING + // add the dependencies it references to the assignment. + // Task states > RUNNING are worker reported only, are never created in + // a > RUNNING state. + a.addTaskDependencies(readTx, t) + } + a.tasksMap[t.ID] = t + a.changes[typeAndID{objType: typeTask, id: t.ID}] = &api.AssignmentChange{ + Assignment: &api.Assignment{ + Item: &api.Assignment_Task{ + Task: t, + }, + }, + Action: api.AssignmentChange_AssignmentActionUpdate, + } + return true +} + +func (a *assignmentSet) removeTask(t *api.Task) bool { + if _, exists := a.tasksMap[t.ID]; !exists { + return false + } + + a.changes[typeAndID{objType: typeTask, id: t.ID}] = &api.AssignmentChange{ + Assignment: &api.Assignment{ + Item: &api.Assignment_Task{ + Task: &api.Task{ID: t.ID}, + }, + }, + Action: api.AssignmentChange_AssignmentActionRemove, + } + + delete(a.tasksMap, t.ID) + + // Release the dependencies being used by this task. + // Ignoring the return here. We will always mark this as a + // modification, since a task is being removed. + a.releaseTaskDependencies(t) + return true +} + +func (a *assignmentSet) message() api.AssignmentsMessage { + var message api.AssignmentsMessage + for _, change := range a.changes { + message.Changes = append(message.Changes, change) + } + + // The the set of changes is reinitialized to prepare for formation + // of the next message. + a.changes = make(map[typeAndID]*api.AssignmentChange) + + return message +} diff --git a/vendor/github.com/docker/swarmkit/manager/dispatcher/dispatcher.go b/vendor/github.com/docker/swarmkit/manager/dispatcher/dispatcher.go index eeec4657b4..7161cf5b2c 100644 --- a/vendor/github.com/docker/swarmkit/manager/dispatcher/dispatcher.go +++ b/vendor/github.com/docker/swarmkit/manager/dispatcher/dispatcher.go @@ -102,20 +102,29 @@ type nodeUpdate struct { description *api.NodeDescription } +// clusterUpdate is an object that stores an update to the cluster that should trigger +// a new session message. These are pointers to indicate the difference between +// "there is no update" and "update this to nil" +type clusterUpdate struct { + managerUpdate *[]*api.WeightedPeer + bootstrapKeyUpdate *[]*api.EncryptionKey + rootCAUpdate *[]byte +} + // Dispatcher is responsible for dispatching tasks and tracking agent health. type Dispatcher struct { mu sync.Mutex wg sync.WaitGroup nodes *nodeStore store *store.MemoryStore - mgrQueue *watch.Queue lastSeenManagers []*api.WeightedPeer networkBootstrapKeys []*api.EncryptionKey - keyMgrQueue *watch.Queue + lastSeenRootCert []byte config *Config cluster Cluster ctx context.Context cancel context.CancelFunc + clusterUpdateQueue *watch.Queue taskUpdates map[string]*api.TaskStatus // indexed by task ID taskUpdatesLock sync.Mutex @@ -196,6 +205,7 @@ func (d *Dispatcher) Run(ctx context.Context) error { if clusters[0].NetworkBootstrapKeys != nil { d.networkBootstrapKeys = clusters[0].NetworkBootstrapKeys } + d.lastSeenRootCert = clusters[0].RootCA.CACert } return nil }, @@ -205,9 +215,8 @@ func (d *Dispatcher) Run(ctx context.Context) error { d.mu.Unlock() return err } - // set queues here to guarantee that Close will close them - d.mgrQueue = watch.NewQueue() - d.keyMgrQueue = watch.NewQueue() + // set queue here to guarantee that Close will close it + d.clusterUpdateQueue = watch.NewQueue() peerWatcher, peerCancel := d.cluster.SubscribePeers() defer peerCancel() @@ -231,7 +240,7 @@ func (d *Dispatcher) Run(ctx context.Context) error { d.mu.Lock() d.lastSeenManagers = mgrs d.mu.Unlock() - d.mgrQueue.Publish(mgrs) + d.clusterUpdateQueue.Publish(clusterUpdate{managerUpdate: &mgrs}) } batchTimer := time.NewTimer(maxBatchInterval) @@ -259,9 +268,13 @@ func (d *Dispatcher) Run(ctx context.Context) error { d.nodes.updatePeriod(d.config.HeartbeatPeriod, d.config.HeartbeatEpsilon, d.config.GracePeriodMultiplier) } } + d.lastSeenRootCert = cluster.Cluster.RootCA.CACert d.networkBootstrapKeys = cluster.Cluster.NetworkBootstrapKeys d.mu.Unlock() - d.keyMgrQueue.Publish(cluster.Cluster.NetworkBootstrapKeys) + d.clusterUpdateQueue.Publish(clusterUpdate{ + bootstrapKeyUpdate: &cluster.Cluster.NetworkBootstrapKeys, + rootCAUpdate: &cluster.Cluster.RootCA.CACert, + }) case <-ctx.Done(): return nil } @@ -286,8 +299,7 @@ func (d *Dispatcher) Stop() error { d.processUpdatesCond.Broadcast() d.processUpdatesLock.Unlock() - d.mgrQueue.Close() - d.keyMgrQueue.Close() + d.clusterUpdateQueue.Close() d.wg.Wait() @@ -812,12 +824,10 @@ func (d *Dispatcher) Assignments(r *api.AssignmentsRequest, stream api.Dispatche } var ( - sequence int64 - appliesTo string - initial api.AssignmentsMessage + sequence int64 + appliesTo string + assignments = newAssignmentSet(log) ) - tasksMap := make(map[string]*api.Task) - tasksUsingSecret := make(map[string]map[string]struct{}) sendMessage := func(msg api.AssignmentsMessage, assignmentType api.AssignmentsMessage_Type) error { sequence++ @@ -832,39 +842,6 @@ func (d *Dispatcher) Assignments(r *api.AssignmentsRequest, stream api.Dispatche return nil } - // returns a slice of new secrets to send down - addSecretsForTask := func(readTx store.ReadTx, t *api.Task) []*api.Secret { - container := t.Spec.GetContainer() - if container == nil { - return nil - } - var newSecrets []*api.Secret - for _, secretRef := range container.Secrets { - secretID := secretRef.SecretID - log := log.WithFields(logrus.Fields{ - "secret.id": secretID, - "secret.name": secretRef.SecretName, - }) - - if len(tasksUsingSecret[secretID]) == 0 { - tasksUsingSecret[secretID] = make(map[string]struct{}) - - secret := store.GetSecret(readTx, secretID) - if secret == nil { - log.Debug("secret not found") - continue - } - - // If the secret was found, add this secret to - // our set that we send down. - newSecrets = append(newSecrets, secret) - } - tasksUsingSecret[secretID][t.ID] = struct{}{} - } - - return newSecrets - } - // TODO(aaronl): Also send node secrets that should be exposed to // this node. nodeTasks, cancel, err := store.ViewAndWatch( @@ -876,57 +853,22 @@ func (d *Dispatcher) Assignments(r *api.AssignmentsRequest, stream api.Dispatche } for _, t := range tasks { - // We only care about tasks that are ASSIGNED or - // higher. If the state is below ASSIGNED, the - // task may not meet the constraints for this - // node, so we have to be careful about sending - // secrets associated with it. - if t.Status.State < api.TaskStateAssigned { - continue - } - - tasksMap[t.ID] = t - taskChange := &api.AssignmentChange{ - Assignment: &api.Assignment{ - Item: &api.Assignment_Task{ - Task: t, - }, - }, - Action: api.AssignmentChange_AssignmentActionUpdate, - } - initial.Changes = append(initial.Changes, taskChange) - // Only send secrets down if these tasks are in < RUNNING - if t.Status.State <= api.TaskStateRunning { - newSecrets := addSecretsForTask(readTx, t) - for _, secret := range newSecrets { - secretChange := &api.AssignmentChange{ - Assignment: &api.Assignment{ - Item: &api.Assignment_Secret{ - Secret: secret, - }, - }, - Action: api.AssignmentChange_AssignmentActionUpdate, - } - - initial.Changes = append(initial.Changes, secretChange) - } - } + assignments.addOrUpdateTask(readTx, t) } + return nil }, api.EventUpdateTask{Task: &api.Task{NodeID: nodeID}, Checks: []api.TaskCheckFunc{api.TaskCheckNodeID}}, api.EventDeleteTask{Task: &api.Task{NodeID: nodeID}, Checks: []api.TaskCheckFunc{api.TaskCheckNodeID}}, - api.EventUpdateSecret{}, - api.EventDeleteSecret{}, ) if err != nil { return err } defer cancel() - if err := sendMessage(initial, api.AssignmentsMessage_COMPLETE); err != nil { + if err := sendMessage(assignments.message(), api.AssignmentsMessage_COMPLETE); err != nil { return err } @@ -938,14 +880,9 @@ func (d *Dispatcher) Assignments(r *api.AssignmentsRequest, stream api.Dispatche // bursty events should be processed in batches and sent out together var ( - update api.AssignmentsMessage modificationCnt int batchingTimer *time.Timer batchingTimeout <-chan time.Time - updateTasks = make(map[string]*api.Task) - updateSecrets = make(map[string]*api.Secret) - removeTasks = make(map[string]struct{}) - removeSecrets = make(map[string]struct{}) ) oneModification := func() { @@ -959,28 +896,6 @@ func (d *Dispatcher) Assignments(r *api.AssignmentsRequest, stream api.Dispatche } } - // Release the secrets references from this task - releaseSecretsForTask := func(t *api.Task) bool { - var modified bool - container := t.Spec.GetContainer() - if container == nil { - return modified - } - - for _, secretRef := range container.Secrets { - secretID := secretRef.SecretID - delete(tasksUsingSecret[secretID], t.ID) - if len(tasksUsingSecret[secretID]) == 0 { - // No tasks are using the secret anymore - delete(tasksUsingSecret, secretID) - removeSecrets[secretID] = struct{}{} - modified = true - } - } - - return modified - } - // The batching loop waits for 50 ms after the most recent // change, or until modificationBatchLimit is reached. The // worst case latency is modificationBatchLimit * batchingWaitTime, @@ -996,78 +911,17 @@ func (d *Dispatcher) Assignments(r *api.AssignmentsRequest, stream api.Dispatche // them to ASSIGNED. If this ever changes, we will need // to monitor task creations as well. case api.EventUpdateTask: - // We only care about tasks that are ASSIGNED or - // higher. - if v.Task.Status.State < api.TaskStateAssigned { - continue - } - - if oldTask, exists := tasksMap[v.Task.ID]; exists { - // 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 { - // this update should not trigger a task change for the agent - tasksMap[v.Task.ID] = v.Task - // If this task got updated to a final state, let's release - // the secrets that are being used by the task - if v.Task.Status.State > api.TaskStateRunning { - // If releasing the secrets caused a secret to be - // removed from an agent, mark one modification - if releaseSecretsForTask(v.Task) { - oneModification() - } - } - continue + d.store.View(func(readTx store.ReadTx) { + if assignments.addOrUpdateTask(readTx, v.Task) { + oneModification() } - } else if v.Task.Status.State <= api.TaskStateRunning { - // If this task wasn't part of the assignment set before, and it's <= RUNNING - // add the secrets it references to the secrets assignment. - // Task states > RUNNING are worker reported only, are never created in - // a > RUNNING state. - var newSecrets []*api.Secret - d.store.View(func(readTx store.ReadTx) { - newSecrets = addSecretsForTask(readTx, v.Task) - }) - for _, secret := range newSecrets { - updateSecrets[secret.ID] = secret - } - } - tasksMap[v.Task.ID] = v.Task - updateTasks[v.Task.ID] = v.Task - - oneModification() + }) case api.EventDeleteTask: - if _, exists := tasksMap[v.Task.ID]; !exists { - continue + if assignments.removeTask(v.Task) { + oneModification() } - - removeTasks[v.Task.ID] = struct{}{} - - delete(tasksMap, v.Task.ID) - - // Release the secrets being used by this task - // Ignoring the return here. We will always mark - // this as a modification, since a task is being - // removed. - releaseSecretsForTask(v.Task) - - oneModification() - // TODO(aaronl): For node secrets, we'll need to handle - // EventCreateSecret. - case api.EventUpdateSecret: - if _, exists := tasksUsingSecret[v.Secret.ID]; !exists { - continue - } - log.Debugf("Secret %s (ID: %d) was updated though it was still referenced by one or more tasks", - v.Secret.Spec.Annotations.Name, v.Secret.ID) - - case api.EventDeleteSecret: - if _, exists := tasksUsingSecret[v.Secret.ID]; !exists { - continue - } - log.Debugf("Secret %s (ID: %d) was deleted though it was still referenced by one or more tasks", - v.Secret.Spec.Annotations.Name, v.Secret.ID) + // TODO(aaronl): For node secrets, we'll need to handle + // EventCreateSecret. } case <-batchingTimeout: break batchingLoop @@ -1083,72 +937,7 @@ func (d *Dispatcher) Assignments(r *api.AssignmentsRequest, stream api.Dispatche } if modificationCnt > 0 { - for id, task := range updateTasks { - if _, ok := removeTasks[id]; !ok { - taskChange := &api.AssignmentChange{ - Assignment: &api.Assignment{ - Item: &api.Assignment_Task{ - Task: task, - }, - }, - Action: api.AssignmentChange_AssignmentActionUpdate, - } - - update.Changes = append(update.Changes, taskChange) - } - } - for id, secret := range updateSecrets { - // If, due to multiple updates, this secret is no longer in use, - // don't send it down. - if len(tasksUsingSecret[id]) == 0 { - // delete this secret for the secrets to be updated - // so that deleteSecrets knows the current list - delete(updateSecrets, id) - continue - } - secretChange := &api.AssignmentChange{ - Assignment: &api.Assignment{ - Item: &api.Assignment_Secret{ - Secret: secret, - }, - }, - Action: api.AssignmentChange_AssignmentActionUpdate, - } - - update.Changes = append(update.Changes, secretChange) - } - for id := range removeTasks { - taskChange := &api.AssignmentChange{ - Assignment: &api.Assignment{ - Item: &api.Assignment_Task{ - Task: &api.Task{ID: id}, - }, - }, - Action: api.AssignmentChange_AssignmentActionRemove, - } - - update.Changes = append(update.Changes, taskChange) - } - for id := range removeSecrets { - // If this secret is also being sent on the updated set - // don't also add it to the removed set - if _, ok := updateSecrets[id]; ok { - continue - } - - secretChange := &api.AssignmentChange{ - Assignment: &api.Assignment{ - Item: &api.Assignment_Secret{ - Secret: &api.Secret{ID: id}, - }, - }, - Action: api.AssignmentChange_AssignmentActionRemove, - } - - update.Changes = append(update.Changes, secretChange) - } - - if err := sendMessage(update, api.AssignmentsMessage_INCREMENTAL); err != nil { + if err := sendMessage(assignments.message(), api.AssignmentsMessage_INCREMENTAL); err != nil { return err } } @@ -1284,6 +1073,12 @@ func (d *Dispatcher) getNetworkBootstrapKeys() []*api.EncryptionKey { return d.networkBootstrapKeys } +func (d *Dispatcher) getRootCACert() []byte { + d.mu.Lock() + defer d.mu.Unlock() + return d.lastSeenRootCert +} + // Session is a stream which controls agent connection. // Each message contains list of backup Managers with weights. Also there is // a special boolean field Disconnect which if true indicates that node should @@ -1355,14 +1150,13 @@ func (d *Dispatcher) Session(r *api.SessionRequest, stream api.Dispatcher_Sessio Node: nodeObj, Managers: d.getManagers(), NetworkBootstrapKeys: d.getNetworkBootstrapKeys(), + RootCA: d.getRootCACert(), }); err != nil { return err } - managerUpdates, mgrCancel := d.mgrQueue.Watch() - defer mgrCancel() - keyMgrUpdates, keyMgrCancel := d.keyMgrQueue.Watch() - defer keyMgrCancel() + clusterUpdatesCh, clusterCancel := d.clusterUpdateQueue.Watch() + defer clusterCancel() // disconnectNode is a helper forcibly shutdown connection disconnectNode := func() error { @@ -1396,11 +1190,21 @@ func (d *Dispatcher) Session(r *api.SessionRequest, stream api.Dispatcher_Sessio disconnect bool mgrs []*api.WeightedPeer netKeys []*api.EncryptionKey + rootCert []byte ) select { - case ev := <-managerUpdates: - mgrs = ev.([]*api.WeightedPeer) + case ev := <-clusterUpdatesCh: + update := ev.(clusterUpdate) + if update.managerUpdate != nil { + mgrs = *update.managerUpdate + } + if update.bootstrapKeyUpdate != nil { + netKeys = *update.bootstrapKeyUpdate + } + if update.rootCAUpdate != nil { + rootCert = *update.rootCAUpdate + } case ev := <-nodeUpdates: nodeObj = ev.(api.EventUpdateNode).Node case <-stream.Context().Done(): @@ -1409,8 +1213,6 @@ func (d *Dispatcher) Session(r *api.SessionRequest, stream api.Dispatcher_Sessio disconnect = true case <-dctx.Done(): disconnect = true - case ev := <-keyMgrUpdates: - netKeys = ev.([]*api.EncryptionKey) } if mgrs == nil { mgrs = d.getManagers() @@ -1418,12 +1220,16 @@ func (d *Dispatcher) Session(r *api.SessionRequest, stream api.Dispatcher_Sessio if netKeys == nil { netKeys = d.getNetworkBootstrapKeys() } + if rootCert == nil { + rootCert = d.getRootCACert() + } if err := stream.Send(&api.SessionMessage{ SessionID: sessionID, Node: nodeObj, Managers: mgrs, NetworkBootstrapKeys: netKeys, + RootCA: rootCert, }); err != nil { return err } diff --git a/vendor/github.com/docker/swarmkit/manager/manager.go b/vendor/github.com/docker/swarmkit/manager/manager.go index cb3cb43fdb..7b436b16f2 100644 --- a/vendor/github.com/docker/swarmkit/manager/manager.go +++ b/vendor/github.com/docker/swarmkit/manager/manager.go @@ -65,6 +65,9 @@ type RemoteAddrs struct { type Config struct { SecurityConfig *ca.SecurityConfig + // RootCAPaths is the path to which new root certs should be save + RootCAPaths ca.CertPaths + // ExternalCAs is a list of initial CAs to which a manager node // will make certificate signing requests for node certificates. ExternalCAs []*api.ExternalCA @@ -210,7 +213,7 @@ func New(config *Config) (*Manager, error) { m := &Manager{ config: *config, - caserver: ca.NewServer(raftNode.MemoryStore(), config.SecurityConfig), + caserver: ca.NewServer(raftNode.MemoryStore(), config.SecurityConfig, config.RootCAPaths), dispatcher: dispatcher.New(raftNode, dispatcher.DefaultConfig()), logbroker: logbroker.New(raftNode.MemoryStore()), server: grpc.NewServer(opts...), diff --git a/vendor/github.com/docker/swarmkit/manager/orchestrator/task.go b/vendor/github.com/docker/swarmkit/manager/orchestrator/task.go index 565cf53d3b..54a069e199 100644 --- a/vendor/github.com/docker/swarmkit/manager/orchestrator/task.go +++ b/vendor/github.com/docker/swarmkit/manager/orchestrator/task.go @@ -5,6 +5,7 @@ import ( "time" "github.com/docker/swarmkit/api" + "github.com/docker/swarmkit/api/defaults" "github.com/docker/swarmkit/identity" "github.com/docker/swarmkit/protobuf/ptypes" ) @@ -50,7 +51,7 @@ 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 { - restartCondition := api.RestartOnAny + restartCondition := defaults.Service.Task.Restart.Condition if task.Spec.Restart != nil { restartCondition = task.Spec.Restart.Condition } diff --git a/vendor/github.com/docker/swarmkit/manager/orchestrator/update/updater.go b/vendor/github.com/docker/swarmkit/manager/orchestrator/update/updater.go index d4bdba5af6..0ced407f18 100644 --- a/vendor/github.com/docker/swarmkit/manager/orchestrator/update/updater.go +++ b/vendor/github.com/docker/swarmkit/manager/orchestrator/update/updater.go @@ -155,31 +155,25 @@ func (u *Updater) Run(ctx context.Context, slots []orchestrator.Slot) { u.startUpdate(ctx, service.ID) } - delay := defaults.Service.Update.Delay - parallelism := int(defaults.Service.Update.Parallelism) - failureAction := defaults.Service.Update.FailureAction - allowedFailureFraction := defaults.Service.Update.MaxFailureRatio - monitoringPeriod, _ := gogotypes.DurationFromProto(defaults.Service.Update.Monitor) - order := defaults.Service.Update.Order + var monitoringPeriod time.Duration updateConfig := service.Spec.Update if service.UpdateStatus != nil && service.UpdateStatus.State == api.UpdateStatus_ROLLBACK_STARTED { + monitoringPeriod, _ = gogotypes.DurationFromProto(defaults.Service.Rollback.Monitor) updateConfig = service.Spec.Rollback + if updateConfig == nil { + updateConfig = defaults.Service.Rollback + } + } else if updateConfig == nil { + monitoringPeriod, _ = gogotypes.DurationFromProto(defaults.Service.Update.Monitor) + updateConfig = defaults.Service.Update } - if updateConfig != nil { - failureAction = updateConfig.FailureAction - allowedFailureFraction = updateConfig.MaxFailureRatio - parallelism = int(updateConfig.Parallelism) - delay = updateConfig.Delay - order = updateConfig.Order - - var err error - if updateConfig.Monitor != nil { - monitoringPeriod, err = gogotypes.DurationFromProto(updateConfig.Monitor) - if err != nil { - monitoringPeriod, _ = gogotypes.DurationFromProto(defaults.Service.Update.Monitor) - } + parallelism := int(updateConfig.Parallelism) + if updateConfig.Monitor != nil { + newMonitoringPeriod, err := gogotypes.DurationFromProto(updateConfig.Monitor) + if err == nil { + monitoringPeriod = newMonitoringPeriod } } @@ -195,14 +189,14 @@ func (u *Updater) Run(ctx context.Context, slots []orchestrator.Slot) { wg.Add(parallelism) for i := 0; i < parallelism; i++ { go func() { - u.worker(ctx, slotQueue, delay, order) + u.worker(ctx, slotQueue, updateConfig) wg.Done() }() } var failedTaskWatch chan events.Event - if failureAction != api.UpdateConfig_CONTINUE { + if updateConfig.FailureAction != api.UpdateConfig_CONTINUE { var cancelWatch func() failedTaskWatch, cancelWatch = state.Watch( u.store.WatchQueue(), @@ -234,8 +228,8 @@ func (u *Updater) Run(ctx context.Context, slots []orchestrator.Slot) { if found && (startedAt.IsZero() || time.Since(startedAt) <= monitoringPeriod) { failedTasks[failedTask.ID] = struct{}{} totalFailures++ - if float32(totalFailures)/float32(len(dirtySlots)) > allowedFailureFraction { - switch failureAction { + if float32(totalFailures)/float32(len(dirtySlots)) > updateConfig.MaxFailureRatio { + switch updateConfig.FailureAction { case api.UpdateConfig_PAUSE: stopped = true message := fmt.Sprintf("update paused due to failure or early termination of task %s", failedTask.ID) @@ -309,7 +303,7 @@ slotsLoop: } } -func (u *Updater) worker(ctx context.Context, queue <-chan orchestrator.Slot, delay time.Duration, order api.UpdateConfig_UpdateOrder) { +func (u *Updater) worker(ctx context.Context, queue <-chan orchestrator.Slot, updateConfig *api.UpdateConfig) { for slot := range queue { // Do we have a task with the new spec in desired state = RUNNING? // If so, all we have to do to complete the update is remove the @@ -346,14 +340,14 @@ func (u *Updater) worker(ctx context.Context, queue <-chan orchestrator.Slot, de } updated.DesiredState = api.TaskStateReady - if err := u.updateTask(ctx, slot, updated, order); err != nil { + if err := u.updateTask(ctx, slot, updated, updateConfig.Order); err != nil { log.G(ctx).WithError(err).WithField("task.id", updated.ID).Error("update failed") } } - if delay != 0 { + if updateConfig.Delay != 0 { select { - case <-time.After(delay): + case <-time.After(updateConfig.Delay): case <-u.stopChan: return } diff --git a/vendor/github.com/docker/swarmkit/manager/state/store/by.go b/vendor/github.com/docker/swarmkit/manager/state/store/by.go index cafde7db64..f785d79513 100644 --- a/vendor/github.com/docker/swarmkit/manager/state/store/by.go +++ b/vendor/github.com/docker/swarmkit/manager/state/store/by.go @@ -154,6 +154,17 @@ func ByReferencedSecretID(secretID string) By { return byReferencedSecretID(secretID) } +type byReferencedConfigID string + +func (b byReferencedConfigID) isBy() { +} + +// ByReferencedConfigID creates an object to pass to Find to search for a +// service or task that references a config with the given ID. +func ByReferencedConfigID(configID string) By { + return byReferencedConfigID(configID) +} + type byKind string func (b byKind) isBy() { diff --git a/vendor/github.com/docker/swarmkit/manager/state/store/configs.go b/vendor/github.com/docker/swarmkit/manager/state/store/configs.go new file mode 100644 index 0000000000..2bd44ae1bd --- /dev/null +++ b/vendor/github.com/docker/swarmkit/manager/state/store/configs.go @@ -0,0 +1,132 @@ +package store + +import ( + "strings" + + "github.com/docker/swarmkit/api" + memdb "github.com/hashicorp/go-memdb" +) + +const tableConfig = "config" + +func init() { + register(ObjectStoreConfig{ + Table: &memdb.TableSchema{ + Name: tableConfig, + Indexes: map[string]*memdb.IndexSchema{ + indexID: { + Name: indexID, + Unique: true, + Indexer: api.ConfigIndexerByID{}, + }, + indexName: { + Name: indexName, + Unique: true, + Indexer: api.ConfigIndexerByName{}, + }, + indexCustom: { + Name: indexCustom, + Indexer: api.ConfigCustomIndexer{}, + AllowMissing: true, + }, + }, + }, + Save: func(tx ReadTx, snapshot *api.StoreSnapshot) error { + var err error + snapshot.Configs, err = FindConfigs(tx, All) + return err + }, + Restore: func(tx Tx, snapshot *api.StoreSnapshot) error { + configs, err := FindConfigs(tx, All) + if err != nil { + return err + } + for _, s := range configs { + if err := DeleteConfig(tx, s.ID); err != nil { + return err + } + } + for _, s := range snapshot.Configs { + if err := CreateConfig(tx, s); err != nil { + return err + } + } + return nil + }, + ApplyStoreAction: func(tx Tx, sa api.StoreAction) error { + switch v := sa.Target.(type) { + case *api.StoreAction_Config: + obj := v.Config + switch sa.Action { + case api.StoreActionKindCreate: + return CreateConfig(tx, obj) + case api.StoreActionKindUpdate: + return UpdateConfig(tx, obj) + case api.StoreActionKindRemove: + return DeleteConfig(tx, obj.ID) + } + } + return errUnknownStoreAction + }, + }) +} + +// CreateConfig adds a new config to the store. +// 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 { + return ErrNameConflict + } + + return tx.create(tableConfig, c) +} + +// UpdateConfig updates an existing config in the store. +// 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.GetID() != c.ID { + return ErrNameConflict + } + } + + return tx.update(tableConfig, c) +} + +// DeleteConfig removes a config from the store. +// Returns ErrNotExist if the config doesn't exist. +func DeleteConfig(tx Tx, id string) error { + return tx.delete(tableConfig, id) +} + +// GetConfig looks up a config by ID. +// Returns nil if the config doesn't exist. +func GetConfig(tx ReadTx, id string) *api.Config { + c := tx.get(tableConfig, id) + if c == nil { + return nil + } + return c.(*api.Config) +} + +// FindConfigs selects a set of configs and returns them. +func FindConfigs(tx ReadTx, by By) ([]*api.Config, error) { + checkType := func(by By) error { + switch by.(type) { + case byName, byNamePrefix, byIDPrefix, byCustom, byCustomPrefix: + return nil + default: + return ErrInvalidFindBy + } + } + + configList := []*api.Config{} + appendResult := func(o api.StoreObject) { + configList = append(configList, o.(*api.Config)) + } + + err := tx.find(tableConfig, by, checkType, appendResult) + return configList, err +} diff --git a/vendor/github.com/docker/swarmkit/manager/state/store/memory.go b/vendor/github.com/docker/swarmkit/manager/state/store/memory.go index 8912e47465..4b82d48f9f 100644 --- a/vendor/github.com/docker/swarmkit/manager/state/store/memory.go +++ b/vendor/github.com/docker/swarmkit/manager/state/store/memory.go @@ -33,6 +33,7 @@ const ( indexMembership = "membership" indexNetwork = "network" indexSecret = "secret" + indexConfig = "config" indexKind = "kind" indexCustom = "custom" @@ -696,6 +697,12 @@ func (tx readTx) findIterators(table string, by By, checkType func(By) error) ([ return nil, err } return []memdb.ResultIterator{it}, nil + case byReferencedConfigID: + it, err := tx.memDBTx.Get(table, indexConfig, string(v)) + if err != nil { + return nil, err + } + return []memdb.ResultIterator{it}, nil case byKind: it, err := tx.memDBTx.Get(table, indexKind, string(v)) if err != nil { diff --git a/vendor/github.com/docker/swarmkit/manager/state/store/services.go b/vendor/github.com/docker/swarmkit/manager/state/store/services.go index 65cf226818..884bc3533d 100644 --- a/vendor/github.com/docker/swarmkit/manager/state/store/services.go +++ b/vendor/github.com/docker/swarmkit/manager/state/store/services.go @@ -40,6 +40,11 @@ func init() { AllowMissing: true, Indexer: serviceIndexerBySecret{}, }, + indexConfig: { + Name: indexConfig, + AllowMissing: true, + Indexer: serviceIndexerByConfig{}, + }, indexCustom: { Name: indexCustom, Indexer: api.ServiceCustomIndexer{}, @@ -131,7 +136,7 @@ func GetService(tx ReadTx, id string) *api.Service { func FindServices(tx ReadTx, by By) ([]*api.Service, error) { checkType := func(by By) error { switch by.(type) { - case byName, byNamePrefix, byIDPrefix, byRuntime, byReferencedNetworkID, byReferencedSecretID, byCustom, byCustomPrefix: + case byName, byNamePrefix, byIDPrefix, byRuntime, byReferencedNetworkID, byReferencedSecretID, byReferencedConfigID, byCustom, byCustomPrefix: return nil default: return ErrInvalidFindBy @@ -214,3 +219,30 @@ func (si serviceIndexerBySecret) FromObject(obj interface{}) (bool, [][]byte, er return len(secretIDs) != 0, secretIDs, nil } + +type serviceIndexerByConfig struct{} + +func (si serviceIndexerByConfig) FromArgs(args ...interface{}) ([]byte, error) { + return fromArgs(args...) +} + +func (si serviceIndexerByConfig) FromObject(obj interface{}) (bool, [][]byte, error) { + s, ok := obj.(*api.Service) + if !ok { + panic("unexpected type passed to FromObject") + } + + container := s.Spec.Task.GetContainer() + if container == nil { + return false, nil, nil + } + + var configIDs [][]byte + + for _, configRef := range container.Configs { + // Add the null character as a terminator + configIDs = append(configIDs, []byte(configRef.ConfigID+"\x00")) + } + + return len(configIDs) != 0, configIDs, nil +} diff --git a/vendor/github.com/docker/swarmkit/manager/state/store/tasks.go b/vendor/github.com/docker/swarmkit/manager/state/store/tasks.go index 2b5fec9fb5..b8d8a731c9 100644 --- a/vendor/github.com/docker/swarmkit/manager/state/store/tasks.go +++ b/vendor/github.com/docker/swarmkit/manager/state/store/tasks.go @@ -64,6 +64,11 @@ func init() { AllowMissing: true, Indexer: taskIndexerBySecret{}, }, + indexConfig: { + Name: indexConfig, + AllowMissing: true, + Indexer: taskIndexerByConfig{}, + }, indexCustom: { Name: indexCustom, Indexer: api.TaskCustomIndexer{}, @@ -143,7 +148,7 @@ func GetTask(tx ReadTx, id string) *api.Task { func FindTasks(tx ReadTx, by By) ([]*api.Task, error) { checkType := func(by By) error { switch by.(type) { - case byName, byNamePrefix, byIDPrefix, byRuntime, byDesiredState, byTaskState, byNode, byService, bySlot, byReferencedNetworkID, byReferencedSecretID, byCustom, byCustomPrefix: + case byName, byNamePrefix, byIDPrefix, byRuntime, byDesiredState, byTaskState, byNode, byService, bySlot, byReferencedNetworkID, byReferencedSecretID, byReferencedConfigID, byCustom, byCustomPrefix: return nil default: return ErrInvalidFindBy @@ -295,6 +300,33 @@ func (ti taskIndexerBySecret) FromObject(obj interface{}) (bool, [][]byte, error return len(secretIDs) != 0, secretIDs, nil } +type taskIndexerByConfig struct{} + +func (ti taskIndexerByConfig) FromArgs(args ...interface{}) ([]byte, error) { + return fromArgs(args...) +} + +func (ti taskIndexerByConfig) FromObject(obj interface{}) (bool, [][]byte, error) { + t, ok := obj.(*api.Task) + if !ok { + panic("unexpected type passed to FromObject") + } + + container := t.Spec.GetContainer() + if container == nil { + return false, nil, nil + } + + var configIDs [][]byte + + for _, configRef := range container.Configs { + // Add the null character as a terminator + configIDs = append(configIDs, []byte(configRef.ConfigID+"\x00")) + } + + return len(configIDs) != 0, configIDs, nil +} + type taskIndexerByTaskState struct{} func (ts taskIndexerByTaskState) FromArgs(args ...interface{}) ([]byte, error) { diff --git a/vendor/github.com/docker/swarmkit/node/node.go b/vendor/github.com/docker/swarmkit/node/node.go index 0551d5b93f..efa75504e9 100644 --- a/vendor/github.com/docker/swarmkit/node/node.go +++ b/vendor/github.com/docker/swarmkit/node/node.go @@ -1,6 +1,7 @@ package node import ( + "bytes" "crypto/tls" "encoding/json" "io/ioutil" @@ -25,6 +26,7 @@ import ( "github.com/docker/swarmkit/manager" "github.com/docker/swarmkit/manager/encryption" "github.com/docker/swarmkit/remotes" + "github.com/docker/swarmkit/watch" "github.com/docker/swarmkit/xnet" grpc_prometheus "github.com/grpc-ecosystem/go-grpc-prometheus" "github.com/pkg/errors" @@ -129,7 +131,7 @@ type Node struct { err error agent *agent.Agent manager *manager.Manager - notifyNodeChange chan *api.Node // used to send role updates from the dispatcher api on promotion/demotion + notifyNodeChange chan *agent.NodeChanges // used by the agent to relay node updates from the dispatcher Session stream to (*Node).run unlockKey []byte } @@ -172,7 +174,7 @@ func New(c *Config) (*Node, error) { stopped: make(chan struct{}), closed: make(chan struct{}), ready: make(chan struct{}), - notifyNodeChange: make(chan *api.Node, 1), + notifyNodeChange: make(chan *agent.NodeChanges, 1), unlockKey: c.UnlockKey, } @@ -235,7 +237,8 @@ func (n *Node) run(ctx context.Context) (err error) { } }(ctx) - securityConfig, err := n.loadSecurityConfig(ctx) + paths := ca.NewConfigPaths(filepath.Join(n.config.StateDir, certDirectory)) + securityConfig, err := n.loadSecurityConfig(ctx, paths) if err != nil { return err } @@ -274,24 +277,44 @@ func (n *Node) run(ctx context.Context) (err error) { select { case <-agentDone: return - case node := <-n.notifyNodeChange: - // If the server is sending us a ForceRenewal State, renew - if node.Certificate.Status.State == api.IssuanceStateRotate { - renewCert() - continue - } + case nodeChanges := <-n.notifyNodeChange: n.Lock() - // If we got a role change, renew - role := ca.WorkerRole - if node.Role == api.NodeRoleManager { - role = ca.ManagerRole - } - if n.role == role { - n.Unlock() - continue - } + currentRole := n.role n.Unlock() - renewCert() + + if nodeChanges.Node != nil { + role := ca.WorkerRole + if nodeChanges.Node.Role == api.NodeRoleManager { + role = ca.ManagerRole + } + + // If the server is sending us a ForceRenewal State, or if the new node role doesn't match our current role, renew + if currentRole != role || nodeChanges.Node.Certificate.Status.State == api.IssuanceStateRotate { + renewCert() + } + } + + if nodeChanges.RootCert != nil { + // We only want to update the root CA if this is a worker node. Manager nodes directly watch the raft + // store and update the root CA, with the necessary signer, from the raft store (since the managers + // need the CA key as well to potentially issue new TLS certificates). + if currentRole == ca.ManagerRole || bytes.Equal(nodeChanges.RootCert, securityConfig.RootCA().Certs) { + continue + } + newRootCA, err := ca.NewRootCA(nodeChanges.RootCert, nil, nil, ca.DefaultNodeCertExpiration, nil) + if err != nil { + log.G(ctx).WithError(err).Error("invalid new root certificate from the dispatcher") + continue + } + if err := ca.SaveRootCA(newRootCA, paths.RootCA); err != nil { + log.G(ctx).WithError(err).Error("could not save new root certificate from the dispatcher") + continue + } + if err := securityConfig.UpdateRootCA(&newRootCA, newRootCA.Pool); err != nil { + log.G(ctx).WithError(err).Error("could not use new root CA from dispatcher") + continue + } + } } } }() @@ -322,12 +345,12 @@ func (n *Node) run(ctx context.Context) (err error) { var managerErr error var agentErr error go func() { - managerErr = n.superviseManager(ctx, securityConfig, managerReady, forceCertRenewal) // store err and loop + managerErr = n.superviseManager(ctx, securityConfig, paths.RootCA, managerReady, forceCertRenewal) // store err and loop wg.Done() cancel() }() go func() { - agentErr = n.runAgent(ctx, db, securityConfig.ClientTLSCreds, agentReady) + agentErr = n.runAgent(ctx, db, securityConfig, agentReady) wg.Done() cancel() close(agentDone) @@ -401,7 +424,7 @@ func (n *Node) Err(ctx context.Context) error { } } -func (n *Node) runAgent(ctx context.Context, db *bolt.DB, creds credentials.TransportCredentials, ready chan<- struct{}) error { +func (n *Node) runAgent(ctx context.Context, db *bolt.DB, securityConfig *ca.SecurityConfig, ready chan<- struct{}) error { waitCtx, waitCancel := context.WithCancel(ctx) remotesCh := n.remotes.WaitSelect(ctx) controlCh := n.ListenControlSocket(waitCtx) @@ -428,13 +451,28 @@ waitPeer: default: } + secChangeQueue := watch.NewQueue() + defer secChangeQueue.Close() + secChangesCh, secChangesCancel := secChangeQueue.Watch() + defer secChangesCancel() + securityConfig.SetWatch(secChangeQueue) + + rootCA := securityConfig.RootCA() + issuer := securityConfig.IssuerInfo() + a, err := agent.New(&agent.Config{ Hostname: n.config.Hostname, ConnBroker: n.connBroker, Executor: n.config.Executor, DB: db, NotifyNodeChange: n.notifyNodeChange, - Credentials: creds, + NotifyTLSChange: secChangesCh, + Credentials: securityConfig.ClientTLSCreds, + NodeTLSInfo: &api.NodeTLSInfo{ + TrustRoot: rootCA.Certs, + CertIssuerPublicKey: issuer.PublicKey, + CertIssuerSubject: issuer.Subject, + }, }) if err != nil { return err @@ -565,8 +603,7 @@ func (n *Node) Remotes() []api.Peer { return remotes } -func (n *Node) loadSecurityConfig(ctx context.Context) (*ca.SecurityConfig, error) { - paths := ca.NewConfigPaths(filepath.Join(n.config.StateDir, certDirectory)) +func (n *Node) loadSecurityConfig(ctx context.Context, paths *ca.SecurityConfigPaths) (*ca.SecurityConfig, error) { var securityConfig *ca.SecurityConfig krw := ca.NewKeyReadWriter(paths.Node, n.unlockKey, &manager.RaftDEKData{}) @@ -717,7 +754,7 @@ func (n *Node) waitRole(ctx context.Context, role string) error { return nil } -func (n *Node) runManager(ctx context.Context, securityConfig *ca.SecurityConfig, ready chan struct{}, workerRole <-chan struct{}) (bool, error) { +func (n *Node) runManager(ctx context.Context, securityConfig *ca.SecurityConfig, rootPaths ca.CertPaths, ready chan struct{}, workerRole <-chan struct{}) (bool, error) { var remoteAPI *manager.RemoteAddrs if n.config.ListenRemoteAPI != "" { remoteAPI = &manager.RemoteAddrs{ @@ -741,6 +778,7 @@ func (n *Node) runManager(ctx context.Context, securityConfig *ca.SecurityConfig UnlockKey: n.unlockKey, Availability: n.config.Availability, PluginGetter: n.config.PluginGetter, + RootCAPaths: rootPaths, }) if err != nil { return false, err @@ -789,7 +827,7 @@ func (n *Node) runManager(ctx context.Context, securityConfig *ca.SecurityConfig return clearData, nil } -func (n *Node) superviseManager(ctx context.Context, securityConfig *ca.SecurityConfig, ready chan struct{}, forceCertRenewal chan struct{}) error { +func (n *Node) superviseManager(ctx context.Context, securityConfig *ca.SecurityConfig, rootPaths ca.CertPaths, ready chan struct{}, forceCertRenewal chan struct{}) error { for { if err := n.waitRole(ctx, ca.ManagerRole); err != nil { return err @@ -803,7 +841,7 @@ func (n *Node) superviseManager(ctx context.Context, securityConfig *ca.Security } }() - wasRemoved, err := n.runManager(ctx, securityConfig, ready, workerRole) + wasRemoved, err := n.runManager(ctx, securityConfig, rootPaths, ready, workerRole) if err != nil { waitRoleCancel() return errors.Wrap(err, "manager stopped")