| ... | ... |
@@ -5,6 +5,7 @@ package main |
| 5 | 5 |
import ( |
| 6 | 6 |
"encoding/json" |
| 7 | 7 |
"fmt" |
| 8 |
+ "io/ioutil" |
|
| 8 | 9 |
"net" |
| 9 | 10 |
"net/http" |
| 10 | 11 |
"os" |
| ... | ... |
@@ -13,6 +14,7 @@ import ( |
| 13 | 13 |
"sync" |
| 14 | 14 |
"time" |
| 15 | 15 |
|
| 16 |
+ "github.com/cloudflare/cfssl/helpers" |
|
| 16 | 17 |
"github.com/docker/docker/api/types" |
| 17 | 18 |
"github.com/docker/docker/api/types/container" |
| 18 | 19 |
"github.com/docker/docker/api/types/swarm" |
| ... | ... |
@@ -176,6 +178,24 @@ func (s *DockerSwarmSuite) TestAPISwarmPromoteDemote(c *check.C) {
|
| 176 | 176 |
|
| 177 | 177 |
waitAndAssert(c, defaultReconciliationTimeout, d2.CheckControlAvailable, checker.False) |
| 178 | 178 |
|
| 179 |
+ // Wait for the role to change to worker in the cert. This is partially |
|
| 180 |
+ // done because it's something worth testing in its own right, and |
|
| 181 |
+ // partially because changing the role from manager to worker and then |
|
| 182 |
+ // back to manager quickly might cause the node to pause for awhile |
|
| 183 |
+ // while waiting for the role to change to worker, and the test can |
|
| 184 |
+ // time out during this interval. |
|
| 185 |
+ waitAndAssert(c, defaultReconciliationTimeout, func(c *check.C) (interface{}, check.CommentInterface) {
|
|
| 186 |
+ certBytes, err := ioutil.ReadFile(filepath.Join(d2.Folder, "root", "swarm", "certificates", "swarm-node.crt")) |
|
| 187 |
+ if err != nil {
|
|
| 188 |
+ return "", check.Commentf("error: %v", err)
|
|
| 189 |
+ } |
|
| 190 |
+ certs, err := helpers.ParseCertificatesPEM(certBytes) |
|
| 191 |
+ if err == nil && len(certs) > 0 && len(certs[0].Subject.OrganizationalUnit) > 0 {
|
|
| 192 |
+ return certs[0].Subject.OrganizationalUnit[0], nil |
|
| 193 |
+ } |
|
| 194 |
+ return "", check.Commentf("could not get organizational unit from certificate")
|
|
| 195 |
+ }, checker.Equals, "swarm-worker") |
|
| 196 |
+ |
|
| 179 | 197 |
// Demoting last node should fail |
| 180 | 198 |
node := d1.GetNode(c, d1.NodeID) |
| 181 | 199 |
node.Spec.Role = swarm.NodeRoleWorker |
| ... | ... |
@@ -38,7 +38,8 @@ func (s *DockerSwarmSuite) TestServiceLogs(c *check.C) {
|
| 38 | 38 |
|
| 39 | 39 |
// make sure task has been deployed. |
| 40 | 40 |
waitAndAssert(c, defaultReconciliationTimeout, |
| 41 |
- d.CheckActiveContainerCount, checker.Equals, len(services)) |
|
| 41 |
+ d.CheckRunningTaskImages, checker.DeepEquals, |
|
| 42 |
+ map[string]int{"busybox": len(services)})
|
|
| 42 | 43 |
|
| 43 | 44 |
for name, message := range services {
|
| 44 | 45 |
out, err := d.Cmd("service", "logs", name)
|
| ... | ... |
@@ -104,7 +104,7 @@ github.com/docker/containerd 665e84e6c28653a9c29a6db601636a92d46896f3 |
| 104 | 104 |
github.com/tonistiigi/fifo 1405643975692217d6720f8b54aeee1bf2cd5cf4 |
| 105 | 105 |
|
| 106 | 106 |
# cluster |
| 107 |
-github.com/docker/swarmkit 46bbd41a00b996a13840607772f661a7f5096ca0 |
|
| 107 |
+github.com/docker/swarmkit d60ccf366a6758c7857db968857b72202cb2f902 |
|
| 108 | 108 |
github.com/golang/mock bd3c8e81be01eef76d4b503f5e687d2d1354d2d9 |
| 109 | 109 |
github.com/gogo/protobuf 8d70fb3182befc465c4a1eac8ad4d38ff49778e2 |
| 110 | 110 |
github.com/cloudflare/cfssl 7fb22c8cba7ecaf98e4082d22d65800cf45e042a |
| ... | ... |
@@ -266,6 +266,7 @@ func (a *Agent) run(ctx context.Context) {
|
| 266 | 266 |
|
| 267 | 267 |
subCtx, subCancel := context.WithCancel(ctx) |
| 268 | 268 |
subscriptions[sub.ID] = subCancel |
| 269 |
+ // TODO(dperny) we're tossing the error here, that seems wrong |
|
| 269 | 270 |
go a.worker.Subscribe(subCtx, sub) |
| 270 | 271 |
case <-registered: |
| 271 | 272 |
log.G(ctx).Debugln("agent: registered")
|
| ... | ... |
@@ -487,10 +488,21 @@ func (a *Agent) Publisher(ctx context.Context, subscriptionID string) (exec.LogP |
| 487 | 487 |
return nil, nil, err |
| 488 | 488 |
} |
| 489 | 489 |
|
| 490 |
+ // make little closure for ending the log stream |
|
| 491 |
+ sendCloseMsg := func() {
|
|
| 492 |
+ // send a close message, to tell the manager our logs are done |
|
| 493 |
+ publisher.Send(&api.PublishLogsMessage{
|
|
| 494 |
+ SubscriptionID: subscriptionID, |
|
| 495 |
+ Close: true, |
|
| 496 |
+ }) |
|
| 497 |
+ // close the stream forreal |
|
| 498 |
+ publisher.CloseSend() |
|
| 499 |
+ } |
|
| 500 |
+ |
|
| 490 | 501 |
return exec.LogPublisherFunc(func(ctx context.Context, message api.LogMessage) error {
|
| 491 | 502 |
select {
|
| 492 | 503 |
case <-ctx.Done(): |
| 493 |
- publisher.CloseSend() |
|
| 504 |
+ sendCloseMsg() |
|
| 494 | 505 |
return ctx.Err() |
| 495 | 506 |
default: |
| 496 | 507 |
} |
| ... | ... |
@@ -500,7 +512,7 @@ func (a *Agent) Publisher(ctx context.Context, subscriptionID string) (exec.LogP |
| 500 | 500 |
Messages: []api.LogMessage{message},
|
| 501 | 501 |
}) |
| 502 | 502 |
}), func() {
|
| 503 |
- publisher.CloseSend() |
|
| 503 |
+ sendCloseMsg() |
|
| 504 | 504 |
}, nil |
| 505 | 505 |
} |
| 506 | 506 |
|
| ... | ... |
@@ -195,6 +195,11 @@ type ListTasksRequest_Filters struct {
|
| 195 | 195 |
DesiredStates []TaskState `protobuf:"varint,6,rep,packed,name=desired_states,json=desiredStates,enum=docker.swarmkit.v1.TaskState" json:"desired_states,omitempty"` |
| 196 | 196 |
// NamePrefixes matches all objects with the given prefixes |
| 197 | 197 |
NamePrefixes []string `protobuf:"bytes,7,rep,name=name_prefixes,json=namePrefixes" json:"name_prefixes,omitempty"` |
| 198 |
+ // UpToDate matches tasks that are consistent with the current |
|
| 199 |
+ // service definition. |
|
| 200 |
+ // Note: this is intended for internal status reporting rather |
|
| 201 |
+ // than being exposed to users. It may be removed in the future. |
|
| 202 |
+ UpToDate bool `protobuf:"varint,8,opt,name=up_to_date,json=upToDate,proto3" json:"up_to_date,omitempty"` |
|
| 198 | 203 |
} |
| 199 | 204 |
|
| 200 | 205 |
func (m *ListTasksRequest_Filters) Reset() { *m = ListTasksRequest_Filters{} }
|
| ... | ... |
@@ -3452,6 +3457,16 @@ func (m *ListTasksRequest_Filters) MarshalTo(dAtA []byte) (int, error) {
|
| 3452 | 3452 |
i += copy(dAtA[i:], s) |
| 3453 | 3453 |
} |
| 3454 | 3454 |
} |
| 3455 |
+ if m.UpToDate {
|
|
| 3456 |
+ dAtA[i] = 0x40 |
|
| 3457 |
+ i++ |
|
| 3458 |
+ if m.UpToDate {
|
|
| 3459 |
+ dAtA[i] = 1 |
|
| 3460 |
+ } else {
|
|
| 3461 |
+ dAtA[i] = 0 |
|
| 3462 |
+ } |
|
| 3463 |
+ i++ |
|
| 3464 |
+ } |
|
| 3455 | 3465 |
return i, nil |
| 3456 | 3466 |
} |
| 3457 | 3467 |
|
| ... | ... |
@@ -5997,6 +6012,9 @@ func (m *ListTasksRequest_Filters) Size() (n int) {
|
| 5997 | 5997 |
n += 1 + l + sovControl(uint64(l)) |
| 5998 | 5998 |
} |
| 5999 | 5999 |
} |
| 6000 |
+ if m.UpToDate {
|
|
| 6001 |
+ n += 2 |
|
| 6002 |
+ } |
|
| 6000 | 6003 |
return n |
| 6001 | 6004 |
} |
| 6002 | 6005 |
|
| ... | ... |
@@ -6719,6 +6737,7 @@ func (this *ListTasksRequest_Filters) String() string {
|
| 6719 | 6719 |
`NodeIDs:` + fmt.Sprintf("%v", this.NodeIDs) + `,`,
|
| 6720 | 6720 |
`DesiredStates:` + fmt.Sprintf("%v", this.DesiredStates) + `,`,
|
| 6721 | 6721 |
`NamePrefixes:` + fmt.Sprintf("%v", this.NamePrefixes) + `,`,
|
| 6722 |
+ `UpToDate:` + fmt.Sprintf("%v", this.UpToDate) + `,`,
|
|
| 6722 | 6723 |
`}`, |
| 6723 | 6724 |
}, "") |
| 6724 | 6725 |
return s |
| ... | ... |
@@ -8998,6 +9017,26 @@ func (m *ListTasksRequest_Filters) Unmarshal(dAtA []byte) error {
|
| 8998 | 8998 |
} |
| 8999 | 8999 |
m.NamePrefixes = append(m.NamePrefixes, string(dAtA[iNdEx:postIndex])) |
| 9000 | 9000 |
iNdEx = postIndex |
| 9001 |
+ case 8: |
|
| 9002 |
+ if wireType != 0 {
|
|
| 9003 |
+ return fmt.Errorf("proto: wrong wireType = %d for field UpToDate", wireType)
|
|
| 9004 |
+ } |
|
| 9005 |
+ var v int |
|
| 9006 |
+ for shift := uint(0); ; shift += 7 {
|
|
| 9007 |
+ if shift >= 64 {
|
|
| 9008 |
+ return ErrIntOverflowControl |
|
| 9009 |
+ } |
|
| 9010 |
+ if iNdEx >= l {
|
|
| 9011 |
+ return io.ErrUnexpectedEOF |
|
| 9012 |
+ } |
|
| 9013 |
+ b := dAtA[iNdEx] |
|
| 9014 |
+ iNdEx++ |
|
| 9015 |
+ v |= (int(b) & 0x7F) << shift |
|
| 9016 |
+ if b < 0x80 {
|
|
| 9017 |
+ break |
|
| 9018 |
+ } |
|
| 9019 |
+ } |
|
| 9020 |
+ m.UpToDate = bool(v != 0) |
|
| 9001 | 9021 |
default: |
| 9002 | 9022 |
iNdEx = preIndex |
| 9003 | 9023 |
skippy, err := skipControl(dAtA[iNdEx:]) |
| ... | ... |
@@ -13310,120 +13349,122 @@ var ( |
| 13310 | 13310 |
func init() { proto.RegisterFile("control.proto", fileDescriptorControl) }
|
| 13311 | 13311 |
|
| 13312 | 13312 |
var fileDescriptorControl = []byte{
|
| 13313 |
- // 1838 bytes of a gzipped FileDescriptorProto |
|
| 13314 |
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xcc, 0x5a, 0x4d, 0x4f, 0x1b, 0x57, |
|
| 13315 |
- 0x17, 0xc6, 0x1f, 0x60, 0x73, 0x8c, 0x0d, 0x5c, 0x9c, 0xbc, 0x96, 0x93, 0x17, 0xd0, 0xe4, 0x0d, |
|
| 13316 |
- 0x31, 0xaf, 0xa8, 0x69, 0x9c, 0x46, 0x4d, 0x53, 0xf5, 0x23, 0x40, 0x92, 0x3a, 0x24, 0x24, 0x1a, |
|
| 13317 |
- 0x42, 0xd4, 0x1d, 0x1a, 0xec, 0x1b, 0x3a, 0xb1, 0xf1, 0xb8, 0x33, 0x03, 0x09, 0xea, 0xa6, 0xad, |
|
| 13318 |
- 0xda, 0x9f, 0x50, 0xa9, 0xdb, 0x6e, 0x5b, 0xa9, 0x8b, 0xae, 0xfa, 0x13, 0xa2, 0xae, 0xba, 0xec, |
|
| 13319 |
- 0x0a, 0x35, 0x96, 0x2a, 0x75, 0xd5, 0x9f, 0x50, 0x55, 0xf7, 0x6b, 0xbe, 0x7c, 0x67, 0xc6, 0x06, |
|
| 13320 |
- 0x2a, 0xb2, 0xca, 0xcc, 0x9d, 0xe7, 0xdc, 0x73, 0xee, 0x3d, 0xcf, 0x7d, 0x7c, 0xee, 0x09, 0x90, |
|
| 13321 |
- 0x6f, 0x18, 0x1d, 0xdb, 0x34, 0xda, 0xd5, 0xae, 0x69, 0xd8, 0x06, 0x42, 0x4d, 0xa3, 0xd1, 0xc2, |
|
| 13322 |
- 0x66, 0xd5, 0x7a, 0xae, 0x99, 0x7b, 0x2d, 0xdd, 0xae, 0x1e, 0x5c, 0x2d, 0xe7, 0xac, 0x2e, 0x6e, |
|
| 13323 |
- 0x58, 0x0c, 0x50, 0xce, 0x1b, 0x3b, 0xcf, 0x70, 0xc3, 0x16, 0xaf, 0x39, 0xfb, 0xb0, 0x8b, 0xc5, |
|
| 13324 |
- 0x4b, 0x71, 0xd7, 0xd8, 0x35, 0xe8, 0xe3, 0x32, 0x79, 0xe2, 0xa3, 0x33, 0xdd, 0xf6, 0xfe, 0xae, |
|
| 13325 |
- 0xde, 0x59, 0x66, 0xff, 0xb0, 0x41, 0xe5, 0x3a, 0x14, 0xee, 0x62, 0x7b, 0xc3, 0x68, 0x62, 0x15, |
|
| 13326 |
- 0x7f, 0xba, 0x8f, 0x2d, 0x1b, 0x5d, 0x82, 0x4c, 0xc7, 0x68, 0xe2, 0x6d, 0xbd, 0x59, 0x4a, 0xcc, |
|
| 13327 |
- 0x27, 0x2a, 0xe3, 0x2b, 0xd0, 0x3b, 0x9a, 0x1b, 0x23, 0x88, 0xfa, 0x9a, 0x3a, 0x46, 0x3e, 0xd5, |
|
| 13328 |
- 0x9b, 0xca, 0x07, 0x30, 0xe9, 0x98, 0x59, 0x5d, 0xa3, 0x63, 0x61, 0xb4, 0x04, 0x69, 0xf2, 0x91, |
|
| 13329 |
- 0x1a, 0xe5, 0x6a, 0xa5, 0x6a, 0xff, 0x02, 0xaa, 0x14, 0x4f, 0x51, 0xca, 0x51, 0x0a, 0xa6, 0xee, |
|
| 13330 |
- 0xeb, 0x16, 0x9d, 0xc2, 0x12, 0xae, 0xef, 0x40, 0xe6, 0xa9, 0xde, 0xb6, 0xb1, 0x69, 0xf1, 0x59, |
|
| 13331 |
- 0x96, 0x64, 0xb3, 0x04, 0xcd, 0xaa, 0x77, 0x98, 0x8d, 0x2a, 0x8c, 0xcb, 0x5f, 0xa4, 0x20, 0xc3, |
|
| 13332 |
- 0x07, 0x51, 0x11, 0x46, 0x3b, 0xda, 0x1e, 0x26, 0x33, 0xa6, 0x2a, 0xe3, 0x2a, 0x7b, 0x41, 0xcb, |
|
| 13333 |
- 0x90, 0xd3, 0x9b, 0xdb, 0x5d, 0x13, 0x3f, 0xd5, 0x5f, 0x60, 0xab, 0x94, 0x24, 0xdf, 0x56, 0x0a, |
|
| 13334 |
- 0xbd, 0xa3, 0x39, 0xa8, 0xaf, 0x3d, 0xe2, 0xa3, 0x2a, 0xe8, 0x4d, 0xf1, 0x8c, 0x1e, 0xc1, 0x58, |
|
| 13335 |
- 0x5b, 0xdb, 0xc1, 0x6d, 0xab, 0x94, 0x9a, 0x4f, 0x55, 0x72, 0xb5, 0x1b, 0xc3, 0x44, 0x56, 0xbd, |
|
| 13336 |
- 0x4f, 0x4d, 0x6f, 0x77, 0x6c, 0xf3, 0x50, 0xe5, 0xf3, 0xa0, 0x3a, 0xe4, 0xf6, 0xf0, 0xde, 0x0e, |
|
| 13337 |
- 0x36, 0xad, 0x4f, 0xf4, 0xae, 0x55, 0x4a, 0xcf, 0xa7, 0x2a, 0x85, 0xda, 0x95, 0xb0, 0x6d, 0xdb, |
|
| 13338 |
- 0xec, 0xe2, 0x46, 0xf5, 0x81, 0x83, 0x57, 0xbd, 0xb6, 0xa8, 0x06, 0xa3, 0xa6, 0xd1, 0xc6, 0x56, |
|
| 13339 |
- 0x69, 0x94, 0x4e, 0x72, 0x31, 0x74, 0xef, 0x8d, 0x36, 0x56, 0x19, 0x14, 0x5d, 0x82, 0x3c, 0xd9, |
|
| 13340 |
- 0x0a, 0x77, 0x0f, 0xc6, 0xe8, 0xfe, 0x4c, 0x90, 0x41, 0xb1, 0xea, 0xf2, 0x3b, 0x90, 0xf3, 0x84, |
|
| 13341 |
- 0x8e, 0xa6, 0x20, 0xd5, 0xc2, 0x87, 0x8c, 0x16, 0x2a, 0x79, 0x24, 0xbb, 0x7b, 0xa0, 0xb5, 0xf7, |
|
| 13342 |
- 0x71, 0x29, 0x49, 0xc7, 0xd8, 0xcb, 0xcd, 0xe4, 0x8d, 0x84, 0xb2, 0x0a, 0xd3, 0x9e, 0xed, 0xe0, |
|
| 13343 |
- 0x1c, 0xa9, 0xc2, 0x28, 0xc9, 0x3e, 0x4b, 0x46, 0x14, 0x49, 0x18, 0x4c, 0xf9, 0x3e, 0x01, 0xd3, |
|
| 13344 |
- 0x5b, 0xdd, 0xa6, 0x66, 0xe3, 0x61, 0x19, 0x8a, 0xde, 0x87, 0x09, 0x0a, 0x3a, 0xc0, 0xa6, 0xa5, |
|
| 13345 |
- 0x1b, 0x1d, 0x1a, 0x60, 0xae, 0x76, 0x41, 0xe6, 0xf1, 0x09, 0x83, 0xa8, 0x39, 0x62, 0xc0, 0x5f, |
|
| 13346 |
- 0xd0, 0x9b, 0x90, 0x26, 0xc7, 0xad, 0x94, 0xa2, 0x76, 0x17, 0xa3, 0xf2, 0xa2, 0x52, 0xa4, 0xb2, |
|
| 13347 |
- 0x02, 0xc8, 0x1b, 0xeb, 0xb1, 0x8e, 0xc5, 0x06, 0x4c, 0xab, 0x78, 0xcf, 0x38, 0x18, 0x7e, 0xbd, |
|
| 13348 |
- 0x45, 0x18, 0x7d, 0x6a, 0x98, 0x0d, 0x96, 0x89, 0xac, 0xca, 0x5e, 0x94, 0x22, 0x20, 0xef, 0x7c, |
|
| 13349 |
- 0x2c, 0x26, 0x7e, 0xe8, 0x1f, 0x6b, 0x56, 0xcb, 0xe3, 0xc2, 0xd6, 0xac, 0x56, 0xc0, 0x05, 0x41, |
|
| 13350 |
- 0x10, 0x17, 0xe4, 0x93, 0x73, 0xe8, 0x99, 0x99, 0xbb, 0x3a, 0xf2, 0x31, 0x6a, 0x75, 0x14, 0x4f, |
|
| 13351 |
- 0x51, 0xca, 0x0d, 0xb1, 0xba, 0xa1, 0x5d, 0x3b, 0xeb, 0xf0, 0x7a, 0x57, 0xfe, 0xe6, 0x22, 0x42, |
|
| 13352 |
- 0x06, 0x8f, 0x21, 0x22, 0x5e, 0xb3, 0x7e, 0x11, 0xf9, 0xee, 0x0c, 0x45, 0x44, 0x16, 0x99, 0x54, |
|
| 13353 |
- 0x44, 0x96, 0x21, 0x67, 0x61, 0xf3, 0x40, 0x6f, 0x10, 0x76, 0x30, 0x11, 0xe1, 0x21, 0x6c, 0xb2, |
|
| 13354 |
- 0xe1, 0xfa, 0x9a, 0xa5, 0x02, 0x87, 0xd4, 0x9b, 0x16, 0x5a, 0x80, 0x2c, 0xe7, 0x12, 0x53, 0x8b, |
|
| 13355 |
- 0xf1, 0x95, 0x5c, 0xef, 0x68, 0x2e, 0xc3, 0xc8, 0x64, 0xa9, 0x19, 0xc6, 0x26, 0x0b, 0xad, 0x41, |
|
| 13356 |
- 0xa1, 0x89, 0x2d, 0xdd, 0xc4, 0xcd, 0x6d, 0xcb, 0xd6, 0x6c, 0xae, 0x0f, 0x85, 0xda, 0x7f, 0xc3, |
|
| 13357 |
- 0x52, 0xbc, 0x49, 0x50, 0x6a, 0x9e, 0x1b, 0xd1, 0x37, 0x89, 0xc8, 0x64, 0xfe, 0x15, 0x91, 0xe1, |
|
| 13358 |
- 0xdb, 0xe5, 0x8a, 0x0c, 0x61, 0x4d, 0xa4, 0xc8, 0x50, 0x1a, 0x31, 0x98, 0xb2, 0x0e, 0xc5, 0x55, |
|
| 13359 |
- 0x13, 0x6b, 0x36, 0xe6, 0x5b, 0x26, 0x88, 0x74, 0x8d, 0x2b, 0x00, 0x63, 0xd1, 0x9c, 0x6c, 0x1a, |
|
| 13360 |
- 0x6e, 0xe1, 0x11, 0x81, 0x0d, 0x38, 0x17, 0x98, 0x8c, 0x47, 0x75, 0x1d, 0x32, 0x3c, 0x0d, 0x7c, |
|
| 13361 |
- 0xc2, 0x0b, 0x11, 0x13, 0xaa, 0x02, 0xab, 0xdc, 0x82, 0xe9, 0xbb, 0xd8, 0x0e, 0x44, 0xb6, 0x04, |
|
| 13362 |
- 0xe0, 0x66, 0x9d, 0x9f, 0x9a, 0x7c, 0xef, 0x68, 0x6e, 0xdc, 0x49, 0xba, 0x3a, 0xee, 0xe4, 0x5c, |
|
| 13363 |
- 0x59, 0x07, 0xe4, 0x9d, 0xe2, 0x64, 0xf1, 0xfc, 0x94, 0x84, 0x22, 0x53, 0xb9, 0x93, 0xc4, 0x84, |
|
| 13364 |
- 0xd6, 0x60, 0x52, 0xa0, 0x87, 0x10, 0xe8, 0x02, 0xb7, 0x11, 0x1a, 0x7d, 0xcd, 0xa7, 0xd1, 0x83, |
|
| 13365 |
- 0x65, 0x08, 0x3d, 0x80, 0xac, 0x69, 0xb4, 0xdb, 0x3b, 0x5a, 0xa3, 0x55, 0x4a, 0xcf, 0x27, 0x2a, |
|
| 13366 |
- 0x85, 0xda, 0x55, 0x99, 0xa1, 0x6c, 0x91, 0x55, 0x95, 0x1b, 0xaa, 0xce, 0x14, 0x8a, 0x02, 0x59, |
|
| 13367 |
- 0x31, 0x8a, 0xb2, 0x90, 0xde, 0x78, 0xb8, 0x71, 0x7b, 0x6a, 0x04, 0x4d, 0x40, 0xf6, 0x91, 0x7a, |
|
| 13368 |
- 0xfb, 0x49, 0xfd, 0xe1, 0xd6, 0xe6, 0x54, 0x82, 0x90, 0x22, 0x30, 0xdd, 0xc9, 0x92, 0xb0, 0x06, |
|
| 13369 |
- 0x45, 0xa6, 0x86, 0x27, 0xe2, 0xc5, 0x7f, 0xe0, 0x5c, 0x60, 0x16, 0x2e, 0xab, 0x7f, 0x26, 0x61, |
|
| 13370 |
- 0x86, 0x1c, 0x2b, 0x3e, 0xee, 0x28, 0x6b, 0x3d, 0xa8, 0xac, 0xcb, 0x61, 0xfa, 0x15, 0xb0, 0xec, |
|
| 13371 |
- 0x17, 0xd7, 0xaf, 0x93, 0xa7, 0x2e, 0xae, 0x9b, 0x01, 0x71, 0x7d, 0x77, 0xc8, 0xe0, 0xa4, 0xfa, |
|
| 13372 |
- 0xda, 0x27, 0x60, 0xe9, 0xd3, 0x15, 0xb0, 0x87, 0x50, 0xf4, 0x87, 0xc4, 0x89, 0xf1, 0x36, 0x64, |
|
| 13373 |
- 0x79, 0xa2, 0x84, 0x8c, 0x45, 0x32, 0xc3, 0x01, 0xbb, 0x62, 0xb6, 0x81, 0xed, 0xe7, 0x86, 0xd9, |
|
| 13374 |
- 0x1a, 0x42, 0xcc, 0xb8, 0x85, 0x4c, 0xcc, 0x9c, 0xc9, 0x5c, 0xde, 0x76, 0xd8, 0x50, 0x14, 0x6f, |
|
| 13375 |
- 0x85, 0x95, 0xc0, 0x2a, 0x5b, 0x54, 0xcc, 0x02, 0x91, 0x21, 0x48, 0x93, 0xdd, 0xe4, 0xfb, 0x45, |
|
| 13376 |
- 0x9f, 0x09, 0x91, 0xb9, 0x0d, 0x21, 0x72, 0xd2, 0x25, 0x32, 0xb7, 0x25, 0x44, 0xe6, 0x00, 0x47, |
|
| 13377 |
- 0xe0, 0x4e, 0x29, 0xc6, 0x8f, 0xc5, 0xd9, 0x3a, 0xf5, 0x30, 0x9d, 0xf3, 0x16, 0x88, 0xd4, 0x39, |
|
| 13378 |
- 0x6f, 0x7c, 0xfc, 0x18, 0xe7, 0x2d, 0x60, 0xf9, 0x7a, 0x9d, 0xb7, 0x90, 0xe0, 0xce, 0xf2, 0xbc, |
|
| 13379 |
- 0xb9, 0x21, 0xb9, 0xe7, 0x8d, 0x27, 0x2a, 0xf2, 0xbc, 0x89, 0xcc, 0x39, 0x60, 0xfe, 0xfb, 0xbc, |
|
| 13380 |
- 0xda, 0xde, 0xb7, 0x6c, 0x6c, 0x7a, 0x74, 0xb8, 0xc1, 0x46, 0x02, 0x3a, 0xcc, 0x71, 0x84, 0x17, |
|
| 13381 |
- 0x1c, 0xe0, 0xd0, 0xd7, 0x99, 0xc2, 0xa5, 0x2f, 0x87, 0x44, 0xd1, 0x57, 0x58, 0x09, 0xac, 0xc3, |
|
| 13382 |
- 0x25, 0xfe, 0xe1, 0x18, 0x5c, 0x0a, 0x58, 0xbe, 0x5e, 0x5c, 0x0a, 0x09, 0xee, 0x2c, 0xb9, 0xe4, |
|
| 13383 |
- 0x86, 0xe4, 0x72, 0x89, 0x67, 0x23, 0x92, 0x4b, 0x22, 0x75, 0x0e, 0x58, 0xf9, 0x26, 0x01, 0xb9, |
|
| 13384 |
- 0x75, 0x7c, 0xa8, 0x1a, 0xb6, 0x66, 0x93, 0xf2, 0xe6, 0xff, 0x30, 0x4d, 0x48, 0x86, 0xcd, 0xed, |
|
| 13385 |
- 0x67, 0x86, 0xde, 0xd9, 0xb6, 0x8d, 0x16, 0xee, 0xd0, 0xd0, 0xb2, 0xea, 0x24, 0xfb, 0x70, 0xcf, |
|
| 13386 |
- 0xd0, 0x3b, 0x8f, 0xc9, 0x30, 0x5a, 0x02, 0xb4, 0xa7, 0x75, 0xb4, 0x5d, 0x3f, 0x98, 0xdd, 0x05, |
|
| 13387 |
- 0xa7, 0xf8, 0x17, 0x29, 0x7a, 0xbf, 0xd3, 0x36, 0x1a, 0xad, 0x6d, 0xb2, 0xea, 0x94, 0x0f, 0xbd, |
|
| 13388 |
- 0x45, 0x3f, 0xac, 0xe3, 0x43, 0xe5, 0x4b, 0xa7, 0xe6, 0x3b, 0x09, 0xcf, 0x49, 0xcd, 0x27, 0xd0, |
|
| 13389 |
- 0xc3, 0xd4, 0x7c, 0xdc, 0x66, 0x88, 0x9a, 0x8f, 0x7b, 0xf7, 0xd4, 0x7c, 0xb7, 0x48, 0xcd, 0xc7, |
|
| 13390 |
- 0x76, 0x95, 0xd6, 0x7c, 0x21, 0x86, 0x9e, 0xcd, 0x5f, 0x49, 0xbf, 0x3c, 0x9a, 0x1b, 0x51, 0x1d, |
|
| 13391 |
- 0x33, 0xb7, 0x86, 0x3b, 0xa5, 0x83, 0xfa, 0x1e, 0x4c, 0xd1, 0xaa, 0xbc, 0x61, 0x62, 0x5b, 0xec, |
|
| 13392 |
- 0xe7, 0x22, 0x8c, 0x5b, 0x74, 0xc0, 0xdd, 0xce, 0x89, 0xde, 0xd1, 0x5c, 0x96, 0xa1, 0xea, 0x6b, |
|
| 13393 |
- 0xe4, 0x77, 0x9e, 0x3e, 0x35, 0x95, 0xbb, 0xfc, 0x5e, 0xc0, 0xcc, 0x79, 0x28, 0x35, 0x18, 0x63, |
|
| 13394 |
- 0x00, 0x1e, 0x49, 0x59, 0x5e, 0x33, 0x50, 0x1b, 0x8e, 0x54, 0x7e, 0x4e, 0xc0, 0x8c, 0x28, 0x4e, |
|
| 13395 |
- 0x8f, 0x17, 0x0b, 0x5a, 0x81, 0x02, 0x87, 0x0e, 0x91, 0xd7, 0x3c, 0x33, 0x11, 0x69, 0xad, 0xf9, |
|
| 13396 |
- 0xd2, 0x3a, 0x1b, 0x1e, 0xb8, 0xa7, 0x3c, 0xb9, 0xe7, 0x5e, 0x45, 0x4e, 0xbc, 0x0d, 0x7f, 0x24, |
|
| 13397 |
- 0x01, 0xb1, 0x4a, 0x8c, 0xbc, 0x3a, 0xb2, 0xf9, 0x51, 0x50, 0x36, 0xab, 0xe1, 0x55, 0xa5, 0xd7, |
|
| 13398 |
- 0xb0, 0x5f, 0x35, 0xbf, 0x3a, 0x7d, 0xd5, 0x54, 0x03, 0xaa, 0x79, 0x73, 0xb8, 0xd8, 0xce, 0x44, |
|
| 13399 |
- 0x34, 0xd7, 0xc5, 0xd5, 0x82, 0x47, 0xc4, 0x53, 0xf6, 0x16, 0xb9, 0x08, 0xd1, 0x21, 0x2e, 0x99, |
|
| 13400 |
- 0x51, 0x39, 0x13, 0x50, 0xa5, 0x0e, 0x33, 0xe2, 0xb2, 0xed, 0xa5, 0x6e, 0xcd, 0x57, 0xeb, 0x0e, |
|
| 13401 |
- 0xcc, 0x25, 0xff, 0x54, 0x27, 0xe0, 0xd2, 0x87, 0x30, 0x23, 0x2e, 0x56, 0xc7, 0x3c, 0xdd, 0xe7, |
|
| 13402 |
- 0xdd, 0x0b, 0x9e, 0x37, 0x9a, 0xda, 0x0f, 0xe7, 0x21, 0xb3, 0xca, 0xfe, 0x9f, 0x00, 0xe9, 0x90, |
|
| 13403 |
- 0xe1, 0x2d, 0x78, 0xa4, 0xc8, 0x82, 0xf2, 0xb7, 0xf5, 0xcb, 0x97, 0x22, 0x31, 0xbc, 0x12, 0x3d, |
|
| 13404 |
- 0xf7, 0xcb, 0x8f, 0x7f, 0x7d, 0x9b, 0x9c, 0x84, 0x3c, 0x05, 0xbd, 0xc1, 0x7f, 0x09, 0x90, 0x01, |
|
| 13405 |
- 0xe3, 0x4e, 0x2f, 0x17, 0xfd, 0x6f, 0x90, 0xce, 0x77, 0xf9, 0x72, 0x0c, 0x2a, 0xda, 0xa1, 0x09, |
|
| 13406 |
- 0xe0, 0xb6, 0x52, 0xd1, 0xe5, 0xf0, 0xfb, 0xb9, 0x77, 0x85, 0x0b, 0x71, 0xb0, 0x58, 0x9f, 0x6e, |
|
| 13407 |
- 0xab, 0x54, 0xee, 0xb3, 0xaf, 0x35, 0x2b, 0xf7, 0x29, 0xe9, 0xb8, 0x86, 0xf8, 0x64, 0x39, 0x7c, |
|
| 13408 |
- 0xac, 0x59, 0xad, 0xd0, 0x1c, 0x7a, 0x5a, 0xa5, 0xa1, 0x39, 0xf4, 0x35, 0x45, 0xa3, 0x73, 0x48, |
|
| 13409 |
- 0x5b, 0x65, 0xe1, 0x39, 0xf4, 0x36, 0x1e, 0xc3, 0x73, 0xe8, 0xeb, 0xb7, 0xc5, 0xee, 0x27, 0x5d, |
|
| 13410 |
- 0x5e, 0xc4, 0x7e, 0x7a, 0x57, 0xb8, 0x10, 0x07, 0x8b, 0xf5, 0xe9, 0xb6, 0xba, 0xe4, 0x3e, 0xfb, |
|
| 13411 |
- 0xba, 0x69, 0x72, 0x9f, 0xfd, 0x1d, 0xb3, 0x30, 0x9f, 0x2f, 0x60, 0xc2, 0x7b, 0x85, 0x47, 0x57, |
|
| 13412 |
- 0x06, 0xec, 0x3b, 0x94, 0x2b, 0xf1, 0xc0, 0x68, 0xcf, 0x9f, 0x41, 0xde, 0xd7, 0x6b, 0x44, 0xd2, |
|
| 13413 |
- 0x19, 0x65, 0xbd, 0xcd, 0xf2, 0xe2, 0x00, 0xc8, 0x58, 0xe7, 0xbe, 0x9e, 0x96, 0xdc, 0xb9, 0xac, |
|
| 13414 |
- 0x8b, 0x26, 0x77, 0x2e, 0x6d, 0x90, 0x45, 0x38, 0xf7, 0xb5, 0xae, 0xe4, 0xce, 0x65, 0x3d, 0x32, |
|
| 13415 |
- 0xb9, 0x73, 0x79, 0x1f, 0x2c, 0x92, 0x64, 0xfc, 0x2a, 0x18, 0x4a, 0x32, 0x7f, 0xfb, 0x20, 0x94, |
|
| 13416 |
- 0x64, 0xc1, 0x5e, 0x40, 0x34, 0xc9, 0xc4, 0xbd, 0x35, 0x9c, 0x64, 0x81, 0xcb, 0x76, 0x38, 0xc9, |
|
| 13417 |
- 0x82, 0x57, 0xe0, 0x58, 0x92, 0x89, 0x05, 0x47, 0x90, 0x2c, 0xb0, 0xe6, 0xc5, 0x01, 0x90, 0x03, |
|
| 13418 |
- 0xe6, 0x39, 0xd2, 0xb9, 0xac, 0x5f, 0x13, 0x95, 0xe7, 0x01, 0x9d, 0xb3, 0x3c, 0xf3, 0xc2, 0x3d, |
|
| 13419 |
- 0x34, 0xcf, 0xfe, 0x2b, 0x51, 0x68, 0x9e, 0x03, 0xb7, 0x86, 0x98, 0x3c, 0x8b, 0x3b, 0x65, 0x78, |
|
| 13420 |
- 0x9e, 0x03, 0x17, 0xe1, 0xf0, 0x3c, 0x07, 0xaf, 0xa7, 0xb1, 0xe7, 0x59, 0x2c, 0x38, 0xe2, 0x3c, |
|
| 13421 |
- 0x07, 0xd6, 0xbc, 0x38, 0x00, 0x32, 0xf6, 0xc7, 0xc9, 0xb9, 0xcd, 0xc8, 0x7f, 0x9c, 0x82, 0x77, |
|
| 13422 |
- 0xa5, 0xf2, 0xe5, 0x18, 0x54, 0xec, 0x3e, 0x7b, 0xaf, 0x0e, 0xf2, 0x7d, 0x96, 0x5c, 0x8b, 0xca, |
|
| 13423 |
- 0x95, 0x78, 0x60, 0xb4, 0xe7, 0x7d, 0xc8, 0x79, 0x0a, 0x60, 0xb4, 0x30, 0x58, 0xcd, 0x5e, 0xbe, |
|
| 13424 |
- 0x12, 0x8b, 0x8b, 0x5d, 0xb0, 0xb7, 0xbe, 0x95, 0x2f, 0x58, 0x52, 0x4c, 0x97, 0x2b, 0xf1, 0xc0, |
|
| 13425 |
- 0x58, 0xcf, 0xde, 0x5a, 0x56, 0xee, 0x59, 0x52, 0x2f, 0x97, 0x2b, 0xf1, 0xc0, 0x48, 0xcf, 0x2b, |
|
| 13426 |
- 0xa5, 0x97, 0xaf, 0x66, 0x47, 0x7e, 0x7b, 0x35, 0x3b, 0xf2, 0x79, 0x6f, 0x36, 0xf1, 0xb2, 0x37, |
|
| 13427 |
- 0x9b, 0xf8, 0xb5, 0x37, 0x9b, 0xf8, 0xbd, 0x37, 0x9b, 0xd8, 0x19, 0xa3, 0x7f, 0xfc, 0x72, 0xed, |
|
| 13428 |
- 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf7, 0xd5, 0x67, 0xd5, 0x75, 0x23, 0x00, 0x00, |
|
| 13313 |
+ // 1865 bytes of a gzipped FileDescriptorProto |
|
| 13314 |
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xcc, 0x5a, 0x4b, 0x6f, 0x1b, 0x47, |
|
| 13315 |
+ 0x12, 0x16, 0x1f, 0x12, 0xa9, 0xa2, 0x48, 0x49, 0x2d, 0xda, 0x4b, 0xd0, 0x5e, 0x49, 0x18, 0xaf, |
|
| 13316 |
+ 0x65, 0x6a, 0xa1, 0xa5, 0xd6, 0xf4, 0x1a, 0xeb, 0xf5, 0x62, 0x1f, 0x96, 0x68, 0x3b, 0xb4, 0x6c, |
|
| 13317 |
+ 0xd9, 0x18, 0x49, 0x46, 0x6e, 0x04, 0x45, 0xb6, 0x95, 0x31, 0x29, 0x0e, 0x33, 0x33, 0x94, 0x2d, |
|
| 13318 |
+ 0xe4, 0x92, 0x04, 0xc9, 0x4f, 0x08, 0x90, 0x43, 0x7e, 0x41, 0x02, 0xe4, 0x90, 0x53, 0x6e, 0xb9, |
|
| 13319 |
+ 0x1a, 0x39, 0xe5, 0x98, 0x93, 0x10, 0x13, 0x08, 0x90, 0x53, 0x7e, 0x43, 0xd0, 0xaf, 0x79, 0xb1, |
|
| 13320 |
+ 0x67, 0x86, 0x94, 0x04, 0xc8, 0x27, 0xcf, 0xf4, 0x7c, 0xd5, 0x55, 0xdd, 0xf5, 0xf5, 0xc7, 0xea, |
|
| 13321 |
+ 0xb2, 0x20, 0xdb, 0xd4, 0xbb, 0x96, 0xa1, 0x77, 0xca, 0x3d, 0x43, 0xb7, 0x74, 0x84, 0x5a, 0x7a, |
|
| 13322 |
+ 0xb3, 0x8d, 0x8d, 0xb2, 0xf9, 0xaa, 0x61, 0x1c, 0xb6, 0x35, 0xab, 0x7c, 0x74, 0xb3, 0x98, 0x31, |
|
| 13323 |
+ 0x7b, 0xb8, 0x69, 0x32, 0x40, 0x31, 0xab, 0xef, 0xbf, 0xc4, 0x4d, 0x4b, 0xbc, 0x66, 0xac, 0xe3, |
|
| 13324 |
+ 0x1e, 0x16, 0x2f, 0xf9, 0x03, 0xfd, 0x40, 0xa7, 0x8f, 0xeb, 0xe4, 0x89, 0x8f, 0x2e, 0xf4, 0x3a, |
|
| 13325 |
+ 0xfd, 0x03, 0xad, 0xbb, 0xce, 0xfe, 0x61, 0x83, 0xca, 0x6d, 0xc8, 0x3d, 0xc4, 0xd6, 0xb6, 0xde, |
|
| 13326 |
+ 0xc2, 0x2a, 0xfe, 0xb0, 0x8f, 0x4d, 0x0b, 0x5d, 0x83, 0x54, 0x57, 0x6f, 0xe1, 0xba, 0xd6, 0x2a, |
|
| 13327 |
+ 0xc4, 0x96, 0x63, 0xa5, 0xe9, 0x0d, 0x18, 0x9c, 0x2c, 0x4d, 0x11, 0x44, 0xad, 0xaa, 0x4e, 0x91, |
|
| 13328 |
+ 0x4f, 0xb5, 0x96, 0xf2, 0x3f, 0x98, 0xb5, 0xcd, 0xcc, 0x9e, 0xde, 0x35, 0x31, 0x5a, 0x83, 0x24, |
|
| 13329 |
+ 0xf9, 0x48, 0x8d, 0x32, 0x95, 0x42, 0x79, 0x78, 0x01, 0x65, 0x8a, 0xa7, 0x28, 0xe5, 0x24, 0x01, |
|
| 13330 |
+ 0x73, 0x8f, 0x35, 0x93, 0x4e, 0x61, 0x0a, 0xd7, 0x0f, 0x20, 0xf5, 0x42, 0xeb, 0x58, 0xd8, 0x30, |
|
| 13331 |
+ 0xf9, 0x2c, 0x6b, 0xb2, 0x59, 0xfc, 0x66, 0xe5, 0x07, 0xcc, 0x46, 0x15, 0xc6, 0xc5, 0x4f, 0x12, |
|
| 13332 |
+ 0x90, 0xe2, 0x83, 0x28, 0x0f, 0x93, 0xdd, 0xc6, 0x21, 0x26, 0x33, 0x26, 0x4a, 0xd3, 0x2a, 0x7b, |
|
| 13333 |
+ 0x41, 0xeb, 0x90, 0xd1, 0x5a, 0xf5, 0x9e, 0x81, 0x5f, 0x68, 0xaf, 0xb1, 0x59, 0x88, 0x93, 0x6f, |
|
| 13334 |
+ 0x1b, 0xb9, 0xc1, 0xc9, 0x12, 0xd4, 0xaa, 0xcf, 0xf8, 0xa8, 0x0a, 0x5a, 0x4b, 0x3c, 0xa3, 0x67, |
|
| 13335 |
+ 0x30, 0xd5, 0x69, 0xec, 0xe3, 0x8e, 0x59, 0x48, 0x2c, 0x27, 0x4a, 0x99, 0xca, 0x9d, 0x71, 0x22, |
|
| 13336 |
+ 0x2b, 0x3f, 0xa6, 0xa6, 0xf7, 0xbb, 0x96, 0x71, 0xac, 0xf2, 0x79, 0x50, 0x0d, 0x32, 0x87, 0xf8, |
|
| 13337 |
+ 0x70, 0x1f, 0x1b, 0xe6, 0x07, 0x5a, 0xcf, 0x2c, 0x24, 0x97, 0x13, 0xa5, 0x5c, 0xe5, 0x46, 0xd0, |
|
| 13338 |
+ 0xb6, 0xed, 0xf4, 0x70, 0xb3, 0xfc, 0xc4, 0xc6, 0xab, 0x6e, 0x5b, 0x54, 0x81, 0x49, 0x43, 0xef, |
|
| 13339 |
+ 0x60, 0xb3, 0x30, 0x49, 0x27, 0xb9, 0x1a, 0xb8, 0xf7, 0x7a, 0x07, 0xab, 0x0c, 0x8a, 0xae, 0x41, |
|
| 13340 |
+ 0x96, 0x6c, 0x85, 0xb3, 0x07, 0x53, 0x74, 0x7f, 0x66, 0xc8, 0xa0, 0x58, 0x75, 0xf1, 0x5f, 0x90, |
|
| 13341 |
+ 0x71, 0x85, 0x8e, 0xe6, 0x20, 0xd1, 0xc6, 0xc7, 0x8c, 0x16, 0x2a, 0x79, 0x24, 0xbb, 0x7b, 0xd4, |
|
| 13342 |
+ 0xe8, 0xf4, 0x71, 0x21, 0x4e, 0xc7, 0xd8, 0xcb, 0xdd, 0xf8, 0x9d, 0x98, 0xb2, 0x09, 0xf3, 0xae, |
|
| 13343 |
+ 0xed, 0xe0, 0x1c, 0x29, 0xc3, 0x24, 0xc9, 0x3e, 0x4b, 0x46, 0x18, 0x49, 0x18, 0x4c, 0xf9, 0x3a, |
|
| 13344 |
+ 0x06, 0xf3, 0x7b, 0xbd, 0x56, 0xc3, 0xc2, 0xe3, 0x32, 0x14, 0xfd, 0x17, 0x66, 0x28, 0xe8, 0x08, |
|
| 13345 |
+ 0x1b, 0xa6, 0xa6, 0x77, 0x69, 0x80, 0x99, 0xca, 0x15, 0x99, 0xc7, 0xe7, 0x0c, 0xa2, 0x66, 0x88, |
|
| 13346 |
+ 0x01, 0x7f, 0x41, 0x7f, 0x87, 0x24, 0x39, 0x6e, 0x85, 0x04, 0xb5, 0xbb, 0x1a, 0x96, 0x17, 0x95, |
|
| 13347 |
+ 0x22, 0x95, 0x0d, 0x40, 0xee, 0x58, 0x4f, 0x75, 0x2c, 0xb6, 0x61, 0x5e, 0xc5, 0x87, 0xfa, 0xd1, |
|
| 13348 |
+ 0xf8, 0xeb, 0xcd, 0xc3, 0xe4, 0x0b, 0xdd, 0x68, 0xb2, 0x4c, 0xa4, 0x55, 0xf6, 0xa2, 0xe4, 0x01, |
|
| 13349 |
+ 0xb9, 0xe7, 0x63, 0x31, 0xf1, 0x43, 0xbf, 0xdb, 0x30, 0xdb, 0x2e, 0x17, 0x56, 0xc3, 0x6c, 0xfb, |
|
| 13350 |
+ 0x5c, 0x10, 0x04, 0x71, 0x41, 0x3e, 0xd9, 0x87, 0x9e, 0x99, 0x39, 0xab, 0x23, 0x1f, 0xc3, 0x56, |
|
| 13351 |
+ 0x47, 0xf1, 0x14, 0xa5, 0xdc, 0x11, 0xab, 0x1b, 0xdb, 0xb5, 0xbd, 0x0e, 0xb7, 0x77, 0xe5, 0xab, |
|
| 13352 |
+ 0x24, 0x13, 0x11, 0x32, 0x78, 0x0a, 0x11, 0x71, 0x9b, 0x0d, 0x8b, 0xc8, 0x0f, 0x17, 0x28, 0x22, |
|
| 13353 |
+ 0xb2, 0xc8, 0xa4, 0x22, 0xb2, 0x0e, 0x19, 0x13, 0x1b, 0x47, 0x5a, 0x93, 0xb0, 0x83, 0x89, 0x08, |
|
| 13354 |
+ 0x0f, 0x61, 0x87, 0x0d, 0xd7, 0xaa, 0xa6, 0x0a, 0x1c, 0x52, 0x6b, 0x99, 0x68, 0x05, 0xd2, 0x9c, |
|
| 13355 |
+ 0x4b, 0x4c, 0x2d, 0xa6, 0x37, 0x32, 0x83, 0x93, 0xa5, 0x14, 0x23, 0x93, 0xa9, 0xa6, 0x18, 0x9b, |
|
| 13356 |
+ 0x4c, 0x54, 0x85, 0x5c, 0x0b, 0x9b, 0x9a, 0x81, 0x5b, 0x75, 0xd3, 0x6a, 0x58, 0x5c, 0x1f, 0x72, |
|
| 13357 |
+ 0x95, 0x3f, 0x07, 0xa5, 0x78, 0x87, 0xa0, 0xd4, 0x2c, 0x37, 0xa2, 0x6f, 0x12, 0x91, 0x49, 0x0d, |
|
| 13358 |
+ 0x8b, 0x0c, 0xba, 0x0a, 0xd0, 0xef, 0xd5, 0x2d, 0xbd, 0x4e, 0xce, 0x4e, 0x21, 0x4d, 0xe9, 0x9b, |
|
| 13359 |
+ 0xee, 0xf7, 0x76, 0xf5, 0x6a, 0xc3, 0xc2, 0xe7, 0x20, 0x41, 0x7c, 0x33, 0x1d, 0x09, 0x22, 0x9c, |
|
| 13360 |
+ 0x0a, 0x95, 0x20, 0x4a, 0x32, 0x06, 0x53, 0xb6, 0x20, 0xbf, 0x69, 0xe0, 0x86, 0x85, 0xf9, 0x86, |
|
| 13361 |
+ 0x0a, 0x9a, 0xdd, 0xe2, 0xfa, 0xc0, 0x38, 0xb6, 0x24, 0x9b, 0x86, 0x5b, 0xb8, 0x24, 0x62, 0x1b, |
|
| 13362 |
+ 0x2e, 0xf9, 0x26, 0xe3, 0x51, 0xdd, 0x86, 0x14, 0x4f, 0x12, 0x9f, 0xf0, 0x4a, 0xc8, 0x84, 0xaa, |
|
| 13363 |
+ 0xc0, 0x2a, 0xf7, 0x60, 0xfe, 0x21, 0xb6, 0x7c, 0x91, 0xad, 0x01, 0x38, 0x9c, 0xe0, 0x67, 0x2a, |
|
| 13364 |
+ 0x3b, 0x38, 0x59, 0x9a, 0xb6, 0x29, 0xa1, 0x4e, 0xdb, 0x8c, 0x50, 0xb6, 0x00, 0xb9, 0xa7, 0x38, |
|
| 13365 |
+ 0x5b, 0x3c, 0xdf, 0xc5, 0x21, 0xcf, 0x34, 0xf0, 0x2c, 0x31, 0xa1, 0x2a, 0xcc, 0x0a, 0xf4, 0x18, |
|
| 13366 |
+ 0xf2, 0x9d, 0xe3, 0x36, 0x42, 0xc1, 0x6f, 0x79, 0x14, 0x7c, 0xb4, 0x0c, 0xa1, 0x27, 0x90, 0x36, |
|
| 13367 |
+ 0xf4, 0x4e, 0x67, 0xbf, 0xd1, 0x6c, 0x17, 0x92, 0xcb, 0xb1, 0x52, 0xae, 0x72, 0x53, 0x66, 0x28, |
|
| 13368 |
+ 0x5b, 0x64, 0x59, 0xe5, 0x86, 0xaa, 0x3d, 0x85, 0xa2, 0x40, 0x5a, 0x8c, 0xa2, 0x34, 0x24, 0xb7, |
|
| 13369 |
+ 0x9f, 0x6e, 0xdf, 0x9f, 0x9b, 0x40, 0x33, 0x90, 0x7e, 0xa6, 0xde, 0x7f, 0x5e, 0x7b, 0xba, 0xb7, |
|
| 13370 |
+ 0x33, 0x17, 0x23, 0xa4, 0xf0, 0x4d, 0x77, 0xb6, 0x24, 0x54, 0x21, 0xcf, 0xb4, 0xf2, 0x4c, 0xbc, |
|
| 13371 |
+ 0xf8, 0x13, 0x5c, 0xf2, 0xcd, 0xc2, 0x45, 0xf7, 0xb7, 0x38, 0x2c, 0x90, 0x63, 0xc5, 0xc7, 0x6d, |
|
| 13372 |
+ 0xdd, 0xad, 0xf9, 0x75, 0x77, 0x3d, 0x48, 0xdd, 0x7c, 0x96, 0xc3, 0xd2, 0xfb, 0x79, 0xfc, 0xdc, |
|
| 13373 |
+ 0xa5, 0x77, 0xc7, 0x27, 0xbd, 0xff, 0x1e, 0x33, 0x38, 0xa9, 0xfa, 0x0e, 0xc9, 0x5b, 0xf2, 0x7c, |
|
| 13374 |
+ 0x6b, 0xa8, 0xa7, 0x90, 0xf7, 0x86, 0xc4, 0x89, 0xf1, 0x4f, 0x48, 0xf3, 0x44, 0x09, 0x19, 0x0b, |
|
| 13375 |
+ 0x65, 0x86, 0x0d, 0x76, 0xc4, 0x6c, 0x1b, 0x5b, 0xaf, 0x74, 0xa3, 0x3d, 0x86, 0x98, 0x71, 0x0b, |
|
| 13376 |
+ 0x99, 0x98, 0xd9, 0x93, 0x39, 0xbc, 0xed, 0xb2, 0xa1, 0x30, 0xde, 0x0a, 0x2b, 0x81, 0x55, 0xf6, |
|
| 13377 |
+ 0xa8, 0x98, 0xf9, 0x22, 0x43, 0x90, 0x24, 0xbb, 0xc9, 0xf7, 0x8b, 0x3e, 0x13, 0x22, 0x73, 0x1b, |
|
| 13378 |
+ 0x42, 0xe4, 0xb8, 0x43, 0x64, 0x6e, 0x4b, 0x88, 0xcc, 0x01, 0xb6, 0xc0, 0x9d, 0x53, 0x8c, 0xef, |
|
| 13379 |
+ 0x8b, 0xb3, 0x75, 0xee, 0x61, 0xda, 0xe7, 0xcd, 0x17, 0xa9, 0x7d, 0xde, 0xf8, 0xf8, 0x29, 0xce, |
|
| 13380 |
+ 0x9b, 0xcf, 0xf2, 0xdd, 0x3a, 0x6f, 0x01, 0xc1, 0x5d, 0xe4, 0x79, 0x73, 0x42, 0x72, 0xce, 0x1b, |
|
| 13381 |
+ 0x4f, 0x54, 0xe8, 0x79, 0x13, 0x99, 0xb3, 0xc1, 0xfc, 0xf7, 0x79, 0xb3, 0xd3, 0x37, 0x2d, 0x6c, |
|
| 13382 |
+ 0xb8, 0x74, 0xb8, 0xc9, 0x46, 0x7c, 0x3a, 0xcc, 0x71, 0x84, 0x17, 0x1c, 0x60, 0xd3, 0xd7, 0x9e, |
|
| 13383 |
+ 0xc2, 0xa1, 0x2f, 0x87, 0x84, 0xd1, 0x57, 0x58, 0x09, 0xac, 0xcd, 0x25, 0xfe, 0xe1, 0x14, 0x5c, |
|
| 13384 |
+ 0xf2, 0x59, 0xbe, 0x5b, 0x5c, 0x0a, 0x08, 0xee, 0x22, 0xb9, 0xe4, 0x84, 0xe4, 0x70, 0x89, 0x67, |
|
| 13385 |
+ 0x23, 0x94, 0x4b, 0x22, 0x75, 0x36, 0x58, 0xf9, 0x22, 0x06, 0x99, 0x2d, 0x7c, 0xac, 0xea, 0x56, |
|
| 13386 |
+ 0xc3, 0x22, 0xe5, 0xcd, 0x5f, 0x61, 0x9e, 0x90, 0x0c, 0x1b, 0xf5, 0x97, 0xba, 0xd6, 0xad, 0x5b, |
|
| 13387 |
+ 0x7a, 0x1b, 0x77, 0x69, 0x68, 0x69, 0x75, 0x96, 0x7d, 0x78, 0xa4, 0x6b, 0xdd, 0x5d, 0x32, 0x8c, |
|
| 13388 |
+ 0xd6, 0x00, 0x1d, 0x36, 0xba, 0x8d, 0x03, 0x2f, 0x98, 0xdd, 0x14, 0xe7, 0xf8, 0x17, 0x29, 0xba, |
|
| 13389 |
+ 0xdf, 0xed, 0xe8, 0xcd, 0x76, 0x9d, 0xac, 0x3a, 0xe1, 0x41, 0xef, 0xd1, 0x0f, 0x5b, 0xf8, 0x58, |
|
| 13390 |
+ 0xf9, 0xd4, 0xae, 0xf9, 0xce, 0xc2, 0x73, 0x52, 0xf3, 0x09, 0xf4, 0x38, 0x35, 0x1f, 0xb7, 0x19, |
|
| 13391 |
+ 0xa3, 0xe6, 0xe3, 0xde, 0x5d, 0x35, 0xdf, 0x3d, 0x52, 0xf3, 0xb1, 0x5d, 0xa5, 0x35, 0x5f, 0x80, |
|
| 13392 |
+ 0xa1, 0x6b, 0xf3, 0x37, 0x92, 0x6f, 0x4e, 0x96, 0x26, 0x54, 0xdb, 0xcc, 0xa9, 0xe1, 0xce, 0xe9, |
|
| 13393 |
+ 0xa0, 0xfe, 0x07, 0xe6, 0x68, 0x55, 0xde, 0x34, 0xb0, 0x25, 0xf6, 0x73, 0x15, 0xa6, 0x4d, 0x3a, |
|
| 13394 |
+ 0xe0, 0x6c, 0xe7, 0xcc, 0xe0, 0x64, 0x29, 0xcd, 0x50, 0xb5, 0x2a, 0xf9, 0x9d, 0xa7, 0x4f, 0x2d, |
|
| 13395 |
+ 0xe5, 0x21, 0xbf, 0x17, 0x30, 0x73, 0x1e, 0x4a, 0x05, 0xa6, 0x18, 0x80, 0x47, 0x52, 0x94, 0xd7, |
|
| 13396 |
+ 0x0c, 0xd4, 0x86, 0x23, 0x95, 0xef, 0x63, 0xb0, 0x20, 0x8a, 0xd3, 0xd3, 0xc5, 0x82, 0x36, 0x20, |
|
| 13397 |
+ 0xc7, 0xa1, 0x63, 0xe4, 0x35, 0xcb, 0x4c, 0x44, 0x5a, 0x2b, 0x9e, 0xb4, 0x2e, 0x06, 0x07, 0xee, |
|
| 13398 |
+ 0x2a, 0x4f, 0x1e, 0x39, 0x57, 0x91, 0x33, 0x6f, 0xc3, 0xaf, 0x71, 0x40, 0xac, 0x12, 0x23, 0xaf, |
|
| 13399 |
+ 0xb6, 0x6c, 0xbe, 0xe7, 0x97, 0xcd, 0x72, 0x70, 0x55, 0xe9, 0x36, 0x1c, 0x56, 0xcd, 0xcf, 0xce, |
|
| 13400 |
+ 0x5f, 0x35, 0x55, 0x9f, 0x6a, 0xde, 0x1d, 0x2f, 0xb6, 0x0b, 0x11, 0xcd, 0x2d, 0x71, 0xb5, 0xe0, |
|
| 13401 |
+ 0x11, 0xf1, 0x94, 0xfd, 0x83, 0x5c, 0x84, 0xe8, 0x10, 0x97, 0xcc, 0xb0, 0x9c, 0x09, 0xa8, 0x52, |
|
| 13402 |
+ 0x83, 0x05, 0x71, 0xd9, 0x76, 0x53, 0xb7, 0xe2, 0xa9, 0x75, 0x47, 0xe6, 0x92, 0x77, 0xaa, 0x33, |
|
| 13403 |
+ 0x70, 0xe9, 0xff, 0xb0, 0x20, 0x2e, 0x56, 0xa7, 0x3c, 0xdd, 0x97, 0x9d, 0x0b, 0x9e, 0x3b, 0x9a, |
|
| 13404 |
+ 0xca, 0x37, 0x97, 0x21, 0xb5, 0xc9, 0xfe, 0x17, 0x01, 0x69, 0x90, 0xe2, 0x0d, 0x7a, 0xa4, 0xc8, |
|
| 13405 |
+ 0x82, 0xf2, 0x36, 0xfd, 0x8b, 0xd7, 0x42, 0x31, 0xbc, 0x12, 0xbd, 0xf4, 0xe3, 0xb7, 0xbf, 0x7f, |
|
| 13406 |
+ 0x19, 0x9f, 0x85, 0x2c, 0x05, 0xfd, 0x8d, 0xff, 0x12, 0x20, 0x1d, 0xa6, 0xed, 0x4e, 0x2f, 0xfa, |
|
| 13407 |
+ 0xcb, 0x28, 0x7d, 0xf1, 0xe2, 0xf5, 0x08, 0x54, 0xb8, 0x43, 0x03, 0xc0, 0x69, 0xb4, 0xa2, 0xeb, |
|
| 13408 |
+ 0xc1, 0xf7, 0x73, 0xf7, 0x0a, 0x57, 0xa2, 0x60, 0x91, 0x3e, 0x9d, 0x46, 0xaa, 0xdc, 0xe7, 0x50, |
|
| 13409 |
+ 0xe3, 0x56, 0xee, 0x53, 0xd2, 0x8f, 0x0d, 0xf0, 0xc9, 0x72, 0xb8, 0xdb, 0x30, 0xdb, 0x81, 0x39, |
|
| 13410 |
+ 0x74, 0x35, 0x52, 0x03, 0x73, 0xe8, 0x69, 0x99, 0x86, 0xe7, 0x90, 0xb6, 0xca, 0x82, 0x73, 0xe8, |
|
| 13411 |
+ 0x6e, 0x4b, 0x06, 0xe7, 0xd0, 0xd3, 0x6f, 0x8b, 0xdc, 0x4f, 0xba, 0xbc, 0x90, 0xfd, 0x74, 0xaf, |
|
| 13412 |
+ 0x70, 0x25, 0x0a, 0x16, 0xe9, 0xd3, 0x69, 0x75, 0xc9, 0x7d, 0x0e, 0x75, 0xd3, 0xe4, 0x3e, 0x87, |
|
| 13413 |
+ 0x3b, 0x66, 0x41, 0x3e, 0x5f, 0xc3, 0x8c, 0xfb, 0x0a, 0x8f, 0x6e, 0x8c, 0xd8, 0x77, 0x28, 0x96, |
|
| 13414 |
+ 0xa2, 0x81, 0xe1, 0x9e, 0x3f, 0x82, 0xac, 0xa7, 0xd7, 0x88, 0xa4, 0x33, 0xca, 0x7a, 0x9b, 0xc5, |
|
| 13415 |
+ 0xd5, 0x11, 0x90, 0x91, 0xce, 0x3d, 0x3d, 0x2d, 0xb9, 0x73, 0x59, 0x17, 0x4d, 0xee, 0x5c, 0xda, |
|
| 13416 |
+ 0x20, 0x0b, 0x71, 0xee, 0x69, 0x5d, 0xc9, 0x9d, 0xcb, 0x7a, 0x64, 0x72, 0xe7, 0xf2, 0x3e, 0x58, |
|
| 13417 |
+ 0x28, 0xc9, 0xf8, 0x55, 0x30, 0x90, 0x64, 0xde, 0xf6, 0x41, 0x20, 0xc9, 0xfc, 0xbd, 0x80, 0x70, |
|
| 13418 |
+ 0x92, 0x89, 0x7b, 0x6b, 0x30, 0xc9, 0x7c, 0x97, 0xed, 0x60, 0x92, 0xf9, 0xaf, 0xc0, 0x91, 0x24, |
|
| 13419 |
+ 0x13, 0x0b, 0x0e, 0x21, 0x99, 0x6f, 0xcd, 0xab, 0x23, 0x20, 0x47, 0xcc, 0x73, 0xa8, 0x73, 0x59, |
|
| 13420 |
+ 0xbf, 0x26, 0x2c, 0xcf, 0x23, 0x3a, 0x67, 0x79, 0xe6, 0x85, 0x7b, 0x60, 0x9e, 0xbd, 0x57, 0xa2, |
|
| 13421 |
+ 0xc0, 0x3c, 0xfb, 0x6e, 0x0d, 0x11, 0x79, 0x16, 0x77, 0xca, 0xe0, 0x3c, 0xfb, 0x2e, 0xc2, 0xc1, |
|
| 13422 |
+ 0x79, 0xf6, 0x5f, 0x4f, 0x23, 0xcf, 0xb3, 0x58, 0x70, 0xc8, 0x79, 0xf6, 0xad, 0x79, 0x75, 0x04, |
|
| 13423 |
+ 0x64, 0xe4, 0x8f, 0x93, 0x7d, 0x9b, 0x91, 0xff, 0x38, 0xf9, 0xef, 0x4a, 0xc5, 0xeb, 0x11, 0xa8, |
|
| 13424 |
+ 0xc8, 0x7d, 0x76, 0x5f, 0x1d, 0xe4, 0xfb, 0x2c, 0xb9, 0x16, 0x15, 0x4b, 0xd1, 0xc0, 0x70, 0xcf, |
|
| 13425 |
+ 0x7d, 0xc8, 0xb8, 0x0a, 0x60, 0xb4, 0x32, 0x5a, 0xcd, 0x5e, 0xbc, 0x11, 0x89, 0x8b, 0x5c, 0xb0, |
|
| 13426 |
+ 0xbb, 0xbe, 0x95, 0x2f, 0x58, 0x52, 0x4c, 0x17, 0x4b, 0xd1, 0xc0, 0x48, 0xcf, 0xee, 0x5a, 0x56, |
|
| 13427 |
+ 0xee, 0x59, 0x52, 0x2f, 0x17, 0x4b, 0xd1, 0xc0, 0x50, 0xcf, 0x1b, 0x85, 0x37, 0x6f, 0x17, 0x27, |
|
| 13428 |
+ 0x7e, 0x7e, 0xbb, 0x38, 0xf1, 0xf1, 0x60, 0x31, 0xf6, 0x66, 0xb0, 0x18, 0xfb, 0x69, 0xb0, 0x18, |
|
| 13429 |
+ 0xfb, 0x65, 0xb0, 0x18, 0xdb, 0x9f, 0xa2, 0x7f, 0x1a, 0x73, 0xeb, 0x8f, 0x00, 0x00, 0x00, 0xff, |
|
| 13430 |
+ 0xff, 0xcc, 0x5c, 0xf3, 0xfa, 0x93, 0x23, 0x00, 0x00, |
|
| 13429 | 13431 |
} |
| ... | ... |
@@ -191,6 +191,11 @@ message ListTasksRequest {
|
| 191 | 191 |
repeated docker.swarmkit.v1.TaskState desired_states = 6; |
| 192 | 192 |
// NamePrefixes matches all objects with the given prefixes |
| 193 | 193 |
repeated string name_prefixes = 7; |
| 194 |
+ // UpToDate matches tasks that are consistent with the current |
|
| 195 |
+ // service definition. |
|
| 196 |
+ // Note: this is intended for internal status reporting rather |
|
| 197 |
+ // than being exposed to users. It may be removed in the future. |
|
| 198 |
+ bool up_to_date = 8; |
|
| 194 | 199 |
} |
| 195 | 200 |
|
| 196 | 201 |
Filters filters = 1; |
| ... | ... |
@@ -190,6 +190,11 @@ type PublishLogsMessage struct {
|
| 190 | 190 |
SubscriptionID string `protobuf:"bytes,1,opt,name=subscription_id,json=subscriptionId,proto3" json:"subscription_id,omitempty"` |
| 191 | 191 |
// Messages is the log message for publishing. |
| 192 | 192 |
Messages []LogMessage `protobuf:"bytes,2,rep,name=messages" json:"messages"` |
| 193 |
+ // Close is a boolean for whether or not the client has completed its log |
|
| 194 |
+ // stream. When close is called, the manager can hang up the subscription. |
|
| 195 |
+ // Any further logs from this subscription are an error condition. Any |
|
| 196 |
+ // messages included when close is set can be discarded |
|
| 197 |
+ Close bool `protobuf:"varint,3,opt,name=close,proto3" json:"close,omitempty"` |
|
| 193 | 198 |
} |
| 194 | 199 |
|
| 195 | 200 |
func (m *PublishLogsMessage) Reset() { *m = PublishLogsMessage{} }
|
| ... | ... |
@@ -1127,6 +1132,16 @@ func (m *PublishLogsMessage) MarshalTo(dAtA []byte) (int, error) {
|
| 1127 | 1127 |
i += n |
| 1128 | 1128 |
} |
| 1129 | 1129 |
} |
| 1130 |
+ if m.Close {
|
|
| 1131 |
+ dAtA[i] = 0x18 |
|
| 1132 |
+ i++ |
|
| 1133 |
+ if m.Close {
|
|
| 1134 |
+ dAtA[i] = 1 |
|
| 1135 |
+ } else {
|
|
| 1136 |
+ dAtA[i] = 0 |
|
| 1137 |
+ } |
|
| 1138 |
+ i++ |
|
| 1139 |
+ } |
|
| 1130 | 1140 |
return i, nil |
| 1131 | 1141 |
} |
| 1132 | 1142 |
|
| ... | ... |
@@ -1629,6 +1644,9 @@ func (m *PublishLogsMessage) Size() (n int) {
|
| 1629 | 1629 |
n += 1 + l + sovLogbroker(uint64(l)) |
| 1630 | 1630 |
} |
| 1631 | 1631 |
} |
| 1632 |
+ if m.Close {
|
|
| 1633 |
+ n += 2 |
|
| 1634 |
+ } |
|
| 1632 | 1635 |
return n |
| 1633 | 1636 |
} |
| 1634 | 1637 |
|
| ... | ... |
@@ -1751,6 +1769,7 @@ func (this *PublishLogsMessage) String() string {
|
| 1751 | 1751 |
s := strings.Join([]string{`&PublishLogsMessage{`,
|
| 1752 | 1752 |
`SubscriptionID:` + fmt.Sprintf("%v", this.SubscriptionID) + `,`,
|
| 1753 | 1753 |
`Messages:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Messages), "LogMessage", "LogMessage", 1), `&`, ``, 1) + `,`,
|
| 1754 |
+ `Close:` + fmt.Sprintf("%v", this.Close) + `,`,
|
|
| 1754 | 1755 |
`}`, |
| 1755 | 1756 |
}, "") |
| 1756 | 1757 |
return s |
| ... | ... |
@@ -2894,6 +2913,26 @@ func (m *PublishLogsMessage) Unmarshal(dAtA []byte) error {
|
| 2894 | 2894 |
return err |
| 2895 | 2895 |
} |
| 2896 | 2896 |
iNdEx = postIndex |
| 2897 |
+ case 3: |
|
| 2898 |
+ if wireType != 0 {
|
|
| 2899 |
+ return fmt.Errorf("proto: wrong wireType = %d for field Close", wireType)
|
|
| 2900 |
+ } |
|
| 2901 |
+ var v int |
|
| 2902 |
+ for shift := uint(0); ; shift += 7 {
|
|
| 2903 |
+ if shift >= 64 {
|
|
| 2904 |
+ return ErrIntOverflowLogbroker |
|
| 2905 |
+ } |
|
| 2906 |
+ if iNdEx >= l {
|
|
| 2907 |
+ return io.ErrUnexpectedEOF |
|
| 2908 |
+ } |
|
| 2909 |
+ b := dAtA[iNdEx] |
|
| 2910 |
+ iNdEx++ |
|
| 2911 |
+ v |= (int(b) & 0x7F) << shift |
|
| 2912 |
+ if b < 0x80 {
|
|
| 2913 |
+ break |
|
| 2914 |
+ } |
|
| 2915 |
+ } |
|
| 2916 |
+ m.Close = bool(v != 0) |
|
| 2897 | 2917 |
default: |
| 2898 | 2918 |
iNdEx = preIndex |
| 2899 | 2919 |
skippy, err := skipLogbroker(dAtA[iNdEx:]) |
| ... | ... |
@@ -3073,14 +3112,14 @@ var ( |
| 3073 | 3073 |
func init() { proto.RegisterFile("logbroker.proto", fileDescriptorLogbroker) }
|
| 3074 | 3074 |
|
| 3075 | 3075 |
var fileDescriptorLogbroker = []byte{
|
| 3076 |
- // 881 bytes of a gzipped FileDescriptorProto |
|
| 3076 |
+ // 886 bytes of a gzipped FileDescriptorProto |
|
| 3077 | 3077 |
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xa4, 0x95, 0x4f, 0x8f, 0xdb, 0x44, |
| 3078 | 3078 |
0x18, 0xc6, 0x33, 0xce, 0x36, 0x7f, 0xde, 0x74, 0xff, 0x74, 0xb2, 0x5d, 0x45, 0x11, 0xb5, 0x23, |
| 3079 | 3079 |
0x57, 0x2a, 0xd1, 0xaa, 0x24, 0x25, 0x08, 0x81, 0x54, 0x09, 0x41, 0x48, 0x85, 0x22, 0xd2, 0x5d, |
| 3080 | 3080 |
0x34, 0xc9, 0x0a, 0x6e, 0x2b, 0x27, 0x9e, 0x1a, 0x2b, 0x8e, 0x27, 0x78, 0x9c, 0x2e, 0x07, 0x0e, |
| 3081 |
- 0x1c, 0x8a, 0x84, 0x7a, 0xe0, 0x82, 0x90, 0xe0, 0xd0, 0x13, 0xbd, 0x21, 0xc1, 0x9d, 0x0f, 0x80, |
|
| 3081 |
+ 0x1c, 0x8a, 0x84, 0x7a, 0xe0, 0x86, 0x04, 0x87, 0x9e, 0xe8, 0x05, 0x21, 0xc1, 0x9d, 0x0f, 0x80, |
|
| 3082 | 3082 |
0x56, 0x9c, 0xe0, 0xc6, 0x29, 0xa2, 0xfe, 0x00, 0x7c, 0x06, 0xe4, 0x99, 0x89, 0xe3, 0x25, 0x49, |
| 3083 |
- 0x8b, 0xb6, 0x97, 0x64, 0xc6, 0xf3, 0xbc, 0x9e, 0xdf, 0xfb, 0xcc, 0x33, 0x09, 0xec, 0x7a, 0xcc, |
|
| 3083 |
+ 0x8b, 0xb6, 0x97, 0x64, 0xc6, 0xf3, 0xbc, 0x9e, 0xdf, 0x3c, 0xf3, 0xbc, 0x09, 0xec, 0x7a, 0xcc, |
|
| 3084 | 3084 |
0x19, 0x06, 0x6c, 0x4c, 0x83, 0xc6, 0x34, 0x60, 0x21, 0xc3, 0xd8, 0x66, 0xa3, 0x78, 0xc6, 0xcf, |
| 3085 | 3085 |
0xac, 0x60, 0x32, 0x76, 0xc3, 0xc6, 0xc3, 0xd7, 0xab, 0xfb, 0x0e, 0x73, 0x98, 0x58, 0x6e, 0xc6, |
| 3086 | 3086 |
0x23, 0xa9, 0xac, 0x1a, 0x0e, 0x63, 0x8e, 0x47, 0x9b, 0x62, 0x36, 0x9c, 0x3d, 0x68, 0x86, 0xee, |
| ... | ... |
@@ -3090,44 +3129,44 @@ var fileDescriptorLogbroker = []byte{
|
| 3090 | 3090 |
0x9d, 0xd6, 0x8d, 0xc6, 0x2a, 0x4c, 0x23, 0x2e, 0x16, 0x2a, 0xb2, 0x50, 0xe3, 0x03, 0xc8, 0x3d, |
| 3091 | 3091 |
0x60, 0x9e, 0xc7, 0xce, 0x2a, 0x5a, 0x0d, 0xd5, 0x0b, 0x44, 0xcd, 0x30, 0x86, 0xad, 0xd0, 0x72, |
| 3092 | 3092 |
0xbd, 0x4a, 0xb6, 0x86, 0xea, 0x59, 0x22, 0xc6, 0xf8, 0x0e, 0x5c, 0xe1, 0xae, 0x3f, 0xa2, 0x95, |
| 3093 |
- 0xad, 0x1a, 0xaa, 0x97, 0x5a, 0xd5, 0x86, 0xec, 0xa2, 0xb1, 0xe8, 0xa2, 0x31, 0x58, 0x74, 0x41, |
|
| 3094 |
- 0xa4, 0xd0, 0xfc, 0x06, 0x41, 0x29, 0xde, 0x94, 0x7a, 0x74, 0x14, 0xb2, 0x00, 0x37, 0xa1, 0xc4, |
|
| 3095 |
- 0x69, 0xf0, 0xd0, 0x1d, 0xd1, 0x53, 0xd7, 0x96, 0xa8, 0xc5, 0xf6, 0x4e, 0x34, 0x37, 0xa0, 0x2f, |
|
| 3096 |
- 0x1f, 0x77, 0x3b, 0x9c, 0x80, 0x92, 0x74, 0x6d, 0x8e, 0x6f, 0x41, 0xc1, 0x67, 0xb6, 0x54, 0x6b, |
|
| 3097 |
- 0x42, 0x5d, 0x8a, 0xe6, 0x46, 0xfe, 0x88, 0xd9, 0x42, 0x9a, 0x8f, 0x17, 0x95, 0x2e, 0xb4, 0xf8, |
|
| 3098 |
- 0x58, 0xe8, 0xb2, 0x4b, 0xdd, 0xc0, 0xe2, 0x63, 0xa1, 0x8b, 0x17, 0xbb, 0x36, 0x37, 0x1f, 0x21, |
|
| 3099 |
- 0x80, 0x1e, 0x73, 0xde, 0x67, 0x7e, 0x48, 0x3f, 0x0f, 0xf1, 0x6d, 0x80, 0x25, 0x4f, 0x05, 0xd5, |
|
| 3100 |
- 0x50, 0xbd, 0xd8, 0xde, 0x8e, 0xe6, 0x46, 0x31, 0xc1, 0x21, 0xc5, 0x84, 0x06, 0xdf, 0x84, 0xbc, |
|
| 3101 |
- 0x82, 0x11, 0x66, 0x15, 0xdb, 0x10, 0xcd, 0x8d, 0x9c, 0x64, 0x21, 0x39, 0x89, 0x12, 0x8b, 0x14, |
|
| 3102 |
- 0x89, 0xf0, 0x4e, 0x89, 0x24, 0x08, 0xc9, 0x49, 0x0e, 0xf3, 0x4f, 0x89, 0x71, 0x9f, 0x72, 0x6e, |
|
| 3103 |
- 0x39, 0x14, 0xbf, 0x03, 0xf9, 0x91, 0x24, 0x12, 0x0c, 0xa5, 0x96, 0xbe, 0xe1, 0xf4, 0x14, 0x77, |
|
| 3104 |
- 0x7b, 0xeb, 0x7c, 0x6e, 0x64, 0xc8, 0xa2, 0x08, 0xbf, 0x0d, 0xc5, 0x24, 0x40, 0x02, 0xed, 0xf9, |
|
| 3105 |
- 0x87, 0xb3, 0x14, 0xe3, 0x37, 0x21, 0x27, 0x93, 0x20, 0x60, 0x5f, 0x18, 0x1b, 0x25, 0x8e, 0xd3, |
|
| 3106 |
- 0x61, 0x5b, 0xa1, 0x25, 0x82, 0x70, 0x95, 0x88, 0xb1, 0xf9, 0x03, 0x82, 0x7d, 0x15, 0xcd, 0x21, |
|
| 3107 |
- 0xed, 0x31, 0x87, 0x13, 0xfa, 0xd9, 0x8c, 0xf2, 0x10, 0xdf, 0x85, 0x02, 0x57, 0x01, 0x50, 0xed, |
|
| 3108 |
- 0x19, 0x9b, 0x76, 0x51, 0x32, 0x92, 0x14, 0xe0, 0x0e, 0xe4, 0x99, 0xcc, 0xb8, 0x6a, 0xec, 0x70, |
|
| 3109 |
- 0x53, 0xed, 0xea, 0xad, 0x20, 0x8b, 0x52, 0xf3, 0x93, 0xff, 0xa0, 0x2d, 0x8c, 0x7f, 0x17, 0x0a, |
|
| 3110 |
- 0x13, 0x39, 0x94, 0x61, 0xdc, 0xec, 0xbc, 0xaa, 0x50, 0xce, 0x27, 0x55, 0xe6, 0x2b, 0x50, 0xed, |
|
| 3111 |
- 0xb9, 0x3c, 0xa4, 0x7e, 0x7a, 0xff, 0x45, 0xeb, 0xe6, 0x6f, 0x08, 0xca, 0xe9, 0x85, 0xc5, 0xbe, |
|
| 3112 |
- 0x07, 0xa0, 0x25, 0x79, 0xcb, 0x45, 0x73, 0x43, 0xeb, 0x76, 0x88, 0xe6, 0xda, 0x17, 0xac, 0xd2, |
|
| 3113 |
- 0x5e, 0xc2, 0xaa, 0xec, 0xa5, 0xad, 0xc2, 0xfb, 0x70, 0x65, 0xe4, 0x31, 0x2e, 0x2f, 0x79, 0x81, |
|
| 3114 |
- 0xc8, 0x89, 0xf9, 0x2d, 0x02, 0xfc, 0xd1, 0x6c, 0xe8, 0xb9, 0xfc, 0xd3, 0xb4, 0x7f, 0x77, 0x61, |
|
| 3115 |
- 0x97, 0xa7, 0x5e, 0xb6, 0xbc, 0x44, 0x38, 0x9a, 0x1b, 0x3b, 0xe9, 0x7d, 0xba, 0x1d, 0xb2, 0x93, |
|
| 3116 |
- 0x96, 0x76, 0xed, 0x0b, 0xe6, 0x6b, 0x97, 0x32, 0xff, 0x3a, 0x94, 0x53, 0x50, 0x84, 0xf2, 0x29, |
|
| 3117 |
- 0xf3, 0x39, 0x3d, 0x7c, 0x8a, 0xa0, 0x98, 0x64, 0x16, 0xdf, 0x06, 0xdc, 0x3b, 0xfe, 0xe0, 0xb4, |
|
| 3118 |
- 0x3f, 0x20, 0xf7, 0xde, 0xbb, 0x7f, 0x7a, 0x72, 0xf4, 0xe1, 0xd1, 0xf1, 0xc7, 0x47, 0x7b, 0x99, |
|
| 3119 |
- 0xea, 0xfe, 0xe3, 0x27, 0xb5, 0xbd, 0x44, 0x76, 0xe2, 0x8f, 0x7d, 0x76, 0xe6, 0xe3, 0x43, 0xb8, |
|
| 3120 |
- 0x96, 0x52, 0xf7, 0x07, 0x9d, 0xe3, 0x93, 0xc1, 0x1e, 0xaa, 0x96, 0x1f, 0x3f, 0xa9, 0xed, 0x26, |
|
| 3121 |
- 0xe2, 0x7e, 0x68, 0xb3, 0x59, 0xb8, 0xaa, 0xbd, 0x47, 0xc8, 0x9e, 0xb6, 0xaa, 0xa5, 0x41, 0x50, |
|
| 3122 |
- 0xbd, 0xf6, 0xf5, 0x8f, 0x7a, 0xe6, 0xd7, 0xa7, 0xfa, 0x12, 0xac, 0xf5, 0x08, 0xc1, 0x56, 0xcc, |
|
| 3123 |
- 0x8d, 0xbf, 0x80, 0xed, 0x0b, 0xe9, 0xc4, 0xf5, 0x75, 0x3e, 0xac, 0xbb, 0x5b, 0xd5, 0x17, 0x2b, |
|
| 3124 |
- 0x95, 0x77, 0xe6, 0xf5, 0xdf, 0x7f, 0xfe, 0xe7, 0x7b, 0x6d, 0x17, 0xb6, 0x85, 0xf2, 0xb5, 0x89, |
|
| 3125 |
- 0xe5, 0x5b, 0x0e, 0x0d, 0xee, 0xa0, 0xd6, 0x4f, 0x9a, 0x70, 0xab, 0x2d, 0xfe, 0xc9, 0xf0, 0x77, |
|
| 3126 |
- 0x08, 0xca, 0x6b, 0x02, 0x8d, 0x1b, 0x6b, 0x8f, 0x66, 0x63, 0xf2, 0xab, 0xaf, 0x3e, 0x07, 0x2c, |
|
| 3127 |
- 0x7d, 0x15, 0xcc, 0x9b, 0x82, 0xeb, 0x06, 0x5c, 0x95, 0x5c, 0x67, 0x2c, 0x18, 0xd3, 0x60, 0x85, |
|
| 3128 |
- 0x12, 0x7f, 0x85, 0xa0, 0x94, 0x3a, 0x6b, 0x7c, 0x6b, 0xdd, 0xfb, 0x57, 0x13, 0xba, 0x9e, 0x63, |
|
| 3129 |
- 0x4d, 0x68, 0xfe, 0x17, 0x47, 0x1d, 0xb5, 0x2b, 0xe7, 0xcf, 0xf4, 0xcc, 0x5f, 0xcf, 0xf4, 0xcc, |
|
| 3130 |
- 0x97, 0x91, 0x8e, 0xce, 0x23, 0x1d, 0xfd, 0x11, 0xe9, 0xe8, 0xef, 0x48, 0x47, 0xc3, 0x9c, 0xf8, |
|
| 3131 |
- 0xa5, 0x7d, 0xe3, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x11, 0x82, 0x16, 0xad, 0x17, 0x08, 0x00, |
|
| 3132 |
- 0x00, |
|
| 3093 |
+ 0xad, 0x1a, 0xaa, 0x97, 0x5a, 0xd5, 0x86, 0x3c, 0x45, 0x63, 0x71, 0x8a, 0xc6, 0x60, 0x71, 0x0a, |
|
| 3094 |
+ 0x22, 0x85, 0xe6, 0x37, 0x08, 0x4a, 0xf1, 0xa6, 0xd4, 0xa3, 0xa3, 0x90, 0x05, 0xb8, 0x09, 0x25, |
|
| 3095 |
+ 0x4e, 0x83, 0x87, 0xee, 0x88, 0x9e, 0xba, 0xb6, 0x44, 0x2d, 0xb6, 0x77, 0xa2, 0xb9, 0x01, 0x7d, |
|
| 3096 |
+ 0xf9, 0xb8, 0xdb, 0xe1, 0x04, 0x94, 0xa4, 0x6b, 0x73, 0x7c, 0x0b, 0x0a, 0x3e, 0xb3, 0xa5, 0x5a, |
|
| 3097 |
+ 0x13, 0xea, 0x52, 0x34, 0x37, 0xf2, 0x47, 0xcc, 0x16, 0xd2, 0x7c, 0xbc, 0xa8, 0x74, 0xa1, 0xc5, |
|
| 3098 |
+ 0xc7, 0x42, 0x97, 0x5d, 0xea, 0x06, 0x16, 0x1f, 0x0b, 0x5d, 0xbc, 0xd8, 0xb5, 0xb9, 0xf9, 0x08, |
|
| 3099 |
+ 0x01, 0xf4, 0x98, 0xf3, 0x3e, 0xf3, 0x43, 0xfa, 0x79, 0x88, 0x6f, 0x03, 0x2c, 0x79, 0x2a, 0xa8, |
|
| 3100 |
+ 0x86, 0xea, 0xc5, 0xf6, 0x76, 0x34, 0x37, 0x8a, 0x09, 0x0e, 0x29, 0x26, 0x34, 0xf8, 0x26, 0xe4, |
|
| 3101 |
+ 0x15, 0x8c, 0x30, 0xab, 0xd8, 0x86, 0x68, 0x6e, 0xe4, 0x24, 0x0b, 0xc9, 0x49, 0x94, 0x58, 0xa4, |
|
| 3102 |
+ 0x48, 0x84, 0x77, 0x4a, 0x24, 0x41, 0x48, 0x4e, 0x72, 0x98, 0x7f, 0x4a, 0x8c, 0xfb, 0x94, 0x73, |
|
| 3103 |
+ 0xcb, 0xa1, 0xf8, 0x1d, 0xc8, 0x8f, 0x24, 0x91, 0x60, 0x28, 0xb5, 0xf4, 0x0d, 0xb7, 0xa7, 0xb8, |
|
| 3104 |
+ 0xdb, 0x5b, 0xe7, 0x73, 0x23, 0x43, 0x16, 0x45, 0xf8, 0x6d, 0x28, 0x26, 0x01, 0x12, 0x68, 0xcf, |
|
| 3105 |
+ 0xbf, 0x9c, 0xa5, 0x18, 0xbf, 0x09, 0x39, 0x99, 0x04, 0x01, 0xfb, 0xc2, 0xd8, 0x28, 0x71, 0x9c, |
|
| 3106 |
+ 0x0e, 0xdb, 0x0a, 0x2d, 0x11, 0x84, 0xab, 0x44, 0x8c, 0xcd, 0xef, 0x11, 0xec, 0xab, 0x68, 0x0e, |
|
| 3107 |
+ 0x69, 0x8f, 0x39, 0x9c, 0xd0, 0xcf, 0x66, 0x94, 0x87, 0xf8, 0x2e, 0x14, 0xb8, 0x0a, 0x80, 0x3a, |
|
| 3108 |
+ 0x9e, 0xb1, 0x69, 0x17, 0x25, 0x23, 0x49, 0x01, 0xee, 0x40, 0x9e, 0xc9, 0x8c, 0xab, 0x83, 0x1d, |
|
| 3109 |
+ 0x6e, 0xaa, 0x5d, 0xed, 0x0a, 0xb2, 0x28, 0x35, 0x3f, 0xf9, 0x0f, 0xda, 0xc2, 0xf8, 0x77, 0xa1, |
|
| 3110 |
+ 0x30, 0x91, 0x43, 0x19, 0xc6, 0xcd, 0xce, 0xab, 0x0a, 0xe5, 0x7c, 0x52, 0x65, 0xbe, 0x02, 0xd5, |
|
| 3111 |
+ 0x9e, 0xcb, 0x43, 0xea, 0xa7, 0xf7, 0x5f, 0x1c, 0xdd, 0xfc, 0x0d, 0x41, 0x39, 0xbd, 0xb0, 0xd8, |
|
| 3112 |
+ 0xf7, 0x00, 0xb4, 0x24, 0x6f, 0xb9, 0x68, 0x6e, 0x68, 0xdd, 0x0e, 0xd1, 0x5c, 0xfb, 0x82, 0x55, |
|
| 3113 |
+ 0xda, 0x4b, 0x58, 0x95, 0xbd, 0xb4, 0x55, 0x78, 0x1f, 0xae, 0x8c, 0x3c, 0xc6, 0x65, 0x93, 0x17, |
|
| 3114 |
+ 0x88, 0x9c, 0x98, 0x3f, 0x22, 0xc0, 0x1f, 0xcd, 0x86, 0x9e, 0xcb, 0x3f, 0x4d, 0xfb, 0x77, 0x17, |
|
| 3115 |
+ 0x76, 0x79, 0xea, 0x65, 0xcb, 0x26, 0xc2, 0xd1, 0xdc, 0xd8, 0x49, 0xef, 0xd3, 0xed, 0x90, 0x9d, |
|
| 3116 |
+ 0xb4, 0xb4, 0x6b, 0x5f, 0x30, 0x5f, 0xbb, 0x8c, 0xf9, 0x4b, 0xd6, 0x6c, 0x9a, 0xf5, 0x3a, 0x94, |
|
| 3117 |
+ 0x53, 0xa8, 0x84, 0xf2, 0x29, 0xf3, 0x39, 0x3d, 0x7c, 0x8a, 0xa0, 0x98, 0x24, 0x19, 0xdf, 0x06, |
|
| 3118 |
+ 0xdc, 0x3b, 0xfe, 0xe0, 0xb4, 0x3f, 0x20, 0xf7, 0xde, 0xbb, 0x7f, 0x7a, 0x72, 0xf4, 0xe1, 0xd1, |
|
| 3119 |
+ 0xf1, 0xc7, 0x47, 0x7b, 0x99, 0xea, 0xfe, 0xe3, 0x27, 0xb5, 0xbd, 0x44, 0x76, 0xe2, 0x8f, 0x7d, |
|
| 3120 |
+ 0x76, 0xe6, 0xe3, 0x43, 0xb8, 0x96, 0x52, 0xf7, 0x07, 0x9d, 0xe3, 0x93, 0xc1, 0x1e, 0xaa, 0x96, |
|
| 3121 |
+ 0x1f, 0x3f, 0xa9, 0xed, 0x26, 0xe2, 0x7e, 0x68, 0xb3, 0x59, 0xb8, 0xaa, 0xbd, 0x47, 0xc8, 0x9e, |
|
| 3122 |
+ 0xb6, 0xaa, 0xa5, 0x41, 0x50, 0xbd, 0xf6, 0xf5, 0x0f, 0x7a, 0xe6, 0xd7, 0xa7, 0xfa, 0x12, 0xac, |
|
| 3123 |
+ 0xf5, 0x08, 0xc1, 0x56, 0xcc, 0x8d, 0xbf, 0x80, 0xed, 0x0b, 0x99, 0xc5, 0xf5, 0x75, 0xee, 0xac, |
|
| 3124 |
+ 0xeb, 0xb8, 0xea, 0x8b, 0x95, 0xca, 0x51, 0xf3, 0xfa, 0xef, 0x3f, 0xff, 0xf3, 0x9d, 0xb6, 0x0b, |
|
| 3125 |
+ 0xdb, 0x42, 0xf9, 0xda, 0xc4, 0xf2, 0x2d, 0x87, 0x06, 0x77, 0x50, 0xeb, 0x27, 0x4d, 0xb8, 0xd5, |
|
| 3126 |
+ 0x16, 0xff, 0x6f, 0xf8, 0x5b, 0x04, 0xe5, 0x35, 0x31, 0xc7, 0x8d, 0xb5, 0x17, 0xb6, 0xb1, 0x1f, |
|
| 3127 |
+ 0xaa, 0xaf, 0x3e, 0x07, 0x2c, 0xdd, 0x20, 0xe6, 0x4d, 0xc1, 0x75, 0x03, 0xae, 0x4a, 0xae, 0x33, |
|
| 3128 |
+ 0x16, 0x8c, 0x69, 0xb0, 0x42, 0x89, 0xbf, 0x42, 0x50, 0x4a, 0xdd, 0x35, 0xbe, 0xb5, 0xee, 0xfd, |
|
| 3129 |
+ 0xab, 0xb9, 0x5d, 0xcf, 0xb1, 0x26, 0x34, 0xff, 0x8b, 0xa3, 0x8e, 0xda, 0x95, 0xf3, 0x67, 0x7a, |
|
| 3130 |
+ 0xe6, 0xaf, 0x67, 0x7a, 0xe6, 0xcb, 0x48, 0x47, 0xe7, 0x91, 0x8e, 0xfe, 0x88, 0x74, 0xf4, 0x77, |
|
| 3131 |
+ 0xa4, 0xa3, 0x61, 0x4e, 0xfc, 0xfe, 0xbe, 0xf1, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xa3, 0x37, |
|
| 3132 |
+ 0x34, 0x6f, 0x2d, 0x08, 0x00, 0x00, |
|
| 3133 | 3133 |
} |
| ... | ... |
@@ -167,6 +167,12 @@ message PublishLogsMessage {
|
| 167 | 167 |
|
| 168 | 168 |
// Messages is the log message for publishing. |
| 169 | 169 |
repeated LogMessage messages = 2 [(gogoproto.nullable) = false]; |
| 170 |
+ |
|
| 171 |
+ // Close is a boolean for whether or not the client has completed its log |
|
| 172 |
+ // stream. When close is called, the manager can hang up the subscription. |
|
| 173 |
+ // Any further logs from this subscription are an error condition. Any |
|
| 174 |
+ // messages included when close is set can be discarded |
|
| 175 |
+ bool close = 3; |
|
| 170 | 176 |
} |
| 171 | 177 |
|
| 172 | 178 |
message PublishLogsResponse { }
|
| ... | ... |
@@ -106,7 +106,7 @@ func (x EndpointSpec_ResolutionMode) String() string {
|
| 106 | 106 |
return proto.EnumName(EndpointSpec_ResolutionMode_name, int32(x)) |
| 107 | 107 |
} |
| 108 | 108 |
func (EndpointSpec_ResolutionMode) EnumDescriptor() ([]byte, []int) {
|
| 109 |
- return fileDescriptorSpecs, []int{8, 0}
|
|
| 109 |
+ return fileDescriptorSpecs, []int{7, 0}
|
|
| 110 | 110 |
} |
| 111 | 111 |
|
| 112 | 112 |
type NodeSpec struct {
|
| ... | ... |
@@ -289,7 +289,6 @@ type TaskSpec struct {
|
| 289 | 289 |
// Types that are valid to be assigned to Runtime: |
| 290 | 290 |
// *TaskSpec_Attachment |
| 291 | 291 |
// *TaskSpec_Container |
| 292 |
- // *TaskSpec_Plugin |
|
| 293 | 292 |
Runtime isTaskSpec_Runtime `protobuf_oneof:"runtime"` |
| 294 | 293 |
// Resource requirements for the container. |
| 295 | 294 |
Resources *ResourceRequirements `protobuf:"bytes,2,opt,name=resources" json:"resources,omitempty"` |
| ... | ... |
@@ -327,13 +326,9 @@ type TaskSpec_Attachment struct {
|
| 327 | 327 |
type TaskSpec_Container struct {
|
| 328 | 328 |
Container *ContainerSpec `protobuf:"bytes,1,opt,name=container,oneof"` |
| 329 | 329 |
} |
| 330 |
-type TaskSpec_Plugin struct {
|
|
| 331 |
- Plugin *PluginSpec `protobuf:"bytes,10,opt,name=plugin,oneof"` |
|
| 332 |
-} |
|
| 333 | 330 |
|
| 334 | 331 |
func (*TaskSpec_Attachment) isTaskSpec_Runtime() {}
|
| 335 | 332 |
func (*TaskSpec_Container) isTaskSpec_Runtime() {}
|
| 336 |
-func (*TaskSpec_Plugin) isTaskSpec_Runtime() {}
|
|
| 337 | 333 |
|
| 338 | 334 |
func (m *TaskSpec) GetRuntime() isTaskSpec_Runtime {
|
| 339 | 335 |
if m != nil {
|
| ... | ... |
@@ -356,19 +351,11 @@ func (m *TaskSpec) GetContainer() *ContainerSpec {
|
| 356 | 356 |
return nil |
| 357 | 357 |
} |
| 358 | 358 |
|
| 359 |
-func (m *TaskSpec) GetPlugin() *PluginSpec {
|
|
| 360 |
- if x, ok := m.GetRuntime().(*TaskSpec_Plugin); ok {
|
|
| 361 |
- return x.Plugin |
|
| 362 |
- } |
|
| 363 |
- return nil |
|
| 364 |
-} |
|
| 365 |
- |
|
| 366 | 359 |
// XXX_OneofFuncs is for the internal use of the proto package. |
| 367 | 360 |
func (*TaskSpec) 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{}) {
|
| 368 | 361 |
return _TaskSpec_OneofMarshaler, _TaskSpec_OneofUnmarshaler, _TaskSpec_OneofSizer, []interface{}{
|
| 369 | 362 |
(*TaskSpec_Attachment)(nil), |
| 370 | 363 |
(*TaskSpec_Container)(nil), |
| 371 |
- (*TaskSpec_Plugin)(nil), |
|
| 372 | 364 |
} |
| 373 | 365 |
} |
| 374 | 366 |
|
| ... | ... |
@@ -386,11 +373,6 @@ func _TaskSpec_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
|
| 386 | 386 |
if err := b.EncodeMessage(x.Container); err != nil {
|
| 387 | 387 |
return err |
| 388 | 388 |
} |
| 389 |
- case *TaskSpec_Plugin: |
|
| 390 |
- _ = b.EncodeVarint(10<<3 | proto.WireBytes) |
|
| 391 |
- if err := b.EncodeMessage(x.Plugin); err != nil {
|
|
| 392 |
- return err |
|
| 393 |
- } |
|
| 394 | 389 |
case nil: |
| 395 | 390 |
default: |
| 396 | 391 |
return fmt.Errorf("TaskSpec.Runtime has unexpected type %T", x)
|
| ... | ... |
@@ -417,14 +399,6 @@ func _TaskSpec_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffe |
| 417 | 417 |
err := b.DecodeMessage(msg) |
| 418 | 418 |
m.Runtime = &TaskSpec_Container{msg}
|
| 419 | 419 |
return true, err |
| 420 |
- case 10: // runtime.plugin |
|
| 421 |
- if wire != proto.WireBytes {
|
|
| 422 |
- return true, proto.ErrInternalBadWireType |
|
| 423 |
- } |
|
| 424 |
- msg := new(PluginSpec) |
|
| 425 |
- err := b.DecodeMessage(msg) |
|
| 426 |
- m.Runtime = &TaskSpec_Plugin{msg}
|
|
| 427 |
- return true, err |
|
| 428 | 420 |
default: |
| 429 | 421 |
return false, nil |
| 430 | 422 |
} |
| ... | ... |
@@ -444,11 +418,6 @@ func _TaskSpec_OneofSizer(msg proto.Message) (n int) {
|
| 444 | 444 |
n += proto.SizeVarint(1<<3 | proto.WireBytes) |
| 445 | 445 |
n += proto.SizeVarint(uint64(s)) |
| 446 | 446 |
n += s |
| 447 |
- case *TaskSpec_Plugin: |
|
| 448 |
- s := proto.Size(x.Plugin) |
|
| 449 |
- n += proto.SizeVarint(10<<3 | proto.WireBytes) |
|
| 450 |
- n += proto.SizeVarint(uint64(s)) |
|
| 451 |
- n += s |
|
| 452 | 447 |
case nil: |
| 453 | 448 |
default: |
| 454 | 449 |
panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
|
| ... | ... |
@@ -590,18 +559,6 @@ func (m *ContainerSpec_DNSConfig) Reset() { *m = ContainerSpe
|
| 590 | 590 |
func (*ContainerSpec_DNSConfig) ProtoMessage() {}
|
| 591 | 591 |
func (*ContainerSpec_DNSConfig) Descriptor() ([]byte, []int) { return fileDescriptorSpecs, []int{6, 2} }
|
| 592 | 592 |
|
| 593 |
-// PluginSpec specifies runtime parameters for a plugin. |
|
| 594 |
-type PluginSpec struct {
|
|
| 595 |
- // image defines the image reference, as specified in the |
|
| 596 |
- // distribution/reference package. This may include a registry host, name, |
|
| 597 |
- // tag or digest. |
|
| 598 |
- Image string `protobuf:"bytes,1,opt,name=image,proto3" json:"image,omitempty"` |
|
| 599 |
-} |
|
| 600 |
- |
|
| 601 |
-func (m *PluginSpec) Reset() { *m = PluginSpec{} }
|
|
| 602 |
-func (*PluginSpec) ProtoMessage() {}
|
|
| 603 |
-func (*PluginSpec) Descriptor() ([]byte, []int) { return fileDescriptorSpecs, []int{7} }
|
|
| 604 |
- |
|
| 605 | 593 |
// EndpointSpec defines the properties that can be configured to |
| 606 | 594 |
// access and loadbalance the service. |
| 607 | 595 |
type EndpointSpec struct {
|
| ... | ... |
@@ -613,7 +570,7 @@ type EndpointSpec struct {
|
| 613 | 613 |
|
| 614 | 614 |
func (m *EndpointSpec) Reset() { *m = EndpointSpec{} }
|
| 615 | 615 |
func (*EndpointSpec) ProtoMessage() {}
|
| 616 |
-func (*EndpointSpec) Descriptor() ([]byte, []int) { return fileDescriptorSpecs, []int{8} }
|
|
| 616 |
+func (*EndpointSpec) Descriptor() ([]byte, []int) { return fileDescriptorSpecs, []int{7} }
|
|
| 617 | 617 |
|
| 618 | 618 |
// NetworkSpec specifies user defined network parameters. |
| 619 | 619 |
type NetworkSpec struct {
|
| ... | ... |
@@ -638,7 +595,7 @@ type NetworkSpec struct {
|
| 638 | 638 |
|
| 639 | 639 |
func (m *NetworkSpec) Reset() { *m = NetworkSpec{} }
|
| 640 | 640 |
func (*NetworkSpec) ProtoMessage() {}
|
| 641 |
-func (*NetworkSpec) Descriptor() ([]byte, []int) { return fileDescriptorSpecs, []int{9} }
|
|
| 641 |
+func (*NetworkSpec) Descriptor() ([]byte, []int) { return fileDescriptorSpecs, []int{8} }
|
|
| 642 | 642 |
|
| 643 | 643 |
// ClusterSpec specifies global cluster settings. |
| 644 | 644 |
type ClusterSpec struct {
|
| ... | ... |
@@ -663,7 +620,7 @@ type ClusterSpec struct {
|
| 663 | 663 |
|
| 664 | 664 |
func (m *ClusterSpec) Reset() { *m = ClusterSpec{} }
|
| 665 | 665 |
func (*ClusterSpec) ProtoMessage() {}
|
| 666 |
-func (*ClusterSpec) Descriptor() ([]byte, []int) { return fileDescriptorSpecs, []int{10} }
|
|
| 666 |
+func (*ClusterSpec) Descriptor() ([]byte, []int) { return fileDescriptorSpecs, []int{9} }
|
|
| 667 | 667 |
|
| 668 | 668 |
// SecretSpec specifies a user-provided secret. |
| 669 | 669 |
type SecretSpec struct {
|
| ... | ... |
@@ -674,7 +631,7 @@ type SecretSpec struct {
|
| 674 | 674 |
|
| 675 | 675 |
func (m *SecretSpec) Reset() { *m = SecretSpec{} }
|
| 676 | 676 |
func (*SecretSpec) ProtoMessage() {}
|
| 677 |
-func (*SecretSpec) Descriptor() ([]byte, []int) { return fileDescriptorSpecs, []int{11} }
|
|
| 677 |
+func (*SecretSpec) Descriptor() ([]byte, []int) { return fileDescriptorSpecs, []int{10} }
|
|
| 678 | 678 |
|
| 679 | 679 |
func init() {
|
| 680 | 680 |
proto.RegisterType((*NodeSpec)(nil), "docker.swarmkit.v1.NodeSpec") |
| ... | ... |
@@ -686,7 +643,6 @@ func init() {
|
| 686 | 686 |
proto.RegisterType((*ContainerSpec)(nil), "docker.swarmkit.v1.ContainerSpec") |
| 687 | 687 |
proto.RegisterType((*ContainerSpec_PullOptions)(nil), "docker.swarmkit.v1.ContainerSpec.PullOptions") |
| 688 | 688 |
proto.RegisterType((*ContainerSpec_DNSConfig)(nil), "docker.swarmkit.v1.ContainerSpec.DNSConfig") |
| 689 |
- proto.RegisterType((*PluginSpec)(nil), "docker.swarmkit.v1.PluginSpec") |
|
| 690 | 689 |
proto.RegisterType((*EndpointSpec)(nil), "docker.swarmkit.v1.EndpointSpec") |
| 691 | 690 |
proto.RegisterType((*NetworkSpec)(nil), "docker.swarmkit.v1.NetworkSpec") |
| 692 | 691 |
proto.RegisterType((*ClusterSpec)(nil), "docker.swarmkit.v1.ClusterSpec") |
| ... | ... |
@@ -842,12 +798,6 @@ func (m *TaskSpec) CopyFrom(src interface{}) {
|
| 842 | 842 |
} |
| 843 | 843 |
github_com_docker_swarmkit_api_deepcopy.Copy(v.Container, o.GetContainer()) |
| 844 | 844 |
m.Runtime = &v |
| 845 |
- case *TaskSpec_Plugin: |
|
| 846 |
- v := TaskSpec_Plugin{
|
|
| 847 |
- Plugin: &PluginSpec{},
|
|
| 848 |
- } |
|
| 849 |
- github_com_docker_swarmkit_api_deepcopy.Copy(v.Plugin, o.GetPlugin()) |
|
| 850 |
- m.Runtime = &v |
|
| 851 | 845 |
} |
| 852 | 846 |
} |
| 853 | 847 |
|
| ... | ... |
@@ -991,21 +941,6 @@ func (m *ContainerSpec_DNSConfig) CopyFrom(src interface{}) {
|
| 991 | 991 |
|
| 992 | 992 |
} |
| 993 | 993 |
|
| 994 |
-func (m *PluginSpec) Copy() *PluginSpec {
|
|
| 995 |
- if m == nil {
|
|
| 996 |
- return nil |
|
| 997 |
- } |
|
| 998 |
- o := &PluginSpec{}
|
|
| 999 |
- o.CopyFrom(m) |
|
| 1000 |
- return o |
|
| 1001 |
-} |
|
| 1002 |
- |
|
| 1003 |
-func (m *PluginSpec) CopyFrom(src interface{}) {
|
|
| 1004 |
- |
|
| 1005 |
- o := src.(*PluginSpec) |
|
| 1006 |
- *m = *o |
|
| 1007 |
-} |
|
| 1008 |
- |
|
| 1009 | 994 |
func (m *EndpointSpec) Copy() *EndpointSpec {
|
| 1010 | 995 |
if m == nil {
|
| 1011 | 996 |
return nil |
| ... | ... |
@@ -1395,20 +1330,6 @@ func (m *TaskSpec_Attachment) MarshalTo(dAtA []byte) (int, error) {
|
| 1395 | 1395 |
} |
| 1396 | 1396 |
return i, nil |
| 1397 | 1397 |
} |
| 1398 |
-func (m *TaskSpec_Plugin) MarshalTo(dAtA []byte) (int, error) {
|
|
| 1399 |
- i := 0 |
|
| 1400 |
- if m.Plugin != nil {
|
|
| 1401 |
- dAtA[i] = 0x52 |
|
| 1402 |
- i++ |
|
| 1403 |
- i = encodeVarintSpecs(dAtA, i, uint64(m.Plugin.Size())) |
|
| 1404 |
- n17, err := m.Plugin.MarshalTo(dAtA[i:]) |
|
| 1405 |
- if err != nil {
|
|
| 1406 |
- return 0, err |
|
| 1407 |
- } |
|
| 1408 |
- i += n17 |
|
| 1409 |
- } |
|
| 1410 |
- return i, nil |
|
| 1411 |
-} |
|
| 1412 | 1398 |
func (m *NetworkAttachmentSpec) Marshal() (dAtA []byte, err error) {
|
| 1413 | 1399 |
size := m.Size() |
| 1414 | 1400 |
dAtA = make([]byte, size) |
| ... | ... |
@@ -1544,21 +1465,21 @@ func (m *ContainerSpec) MarshalTo(dAtA []byte) (int, error) {
|
| 1544 | 1544 |
dAtA[i] = 0x4a |
| 1545 | 1545 |
i++ |
| 1546 | 1546 |
i = encodeVarintSpecs(dAtA, i, uint64(m.StopGracePeriod.Size())) |
| 1547 |
- n18, err := m.StopGracePeriod.MarshalTo(dAtA[i:]) |
|
| 1547 |
+ n17, err := m.StopGracePeriod.MarshalTo(dAtA[i:]) |
|
| 1548 | 1548 |
if err != nil {
|
| 1549 | 1549 |
return 0, err |
| 1550 | 1550 |
} |
| 1551 |
- i += n18 |
|
| 1551 |
+ i += n17 |
|
| 1552 | 1552 |
} |
| 1553 | 1553 |
if m.PullOptions != nil {
|
| 1554 | 1554 |
dAtA[i] = 0x52 |
| 1555 | 1555 |
i++ |
| 1556 | 1556 |
i = encodeVarintSpecs(dAtA, i, uint64(m.PullOptions.Size())) |
| 1557 |
- n19, err := m.PullOptions.MarshalTo(dAtA[i:]) |
|
| 1557 |
+ n18, err := m.PullOptions.MarshalTo(dAtA[i:]) |
|
| 1558 | 1558 |
if err != nil {
|
| 1559 | 1559 |
return 0, err |
| 1560 | 1560 |
} |
| 1561 |
- i += n19 |
|
| 1561 |
+ i += n18 |
|
| 1562 | 1562 |
} |
| 1563 | 1563 |
if len(m.Groups) > 0 {
|
| 1564 | 1564 |
for _, s := range m.Groups {
|
| ... | ... |
@@ -1607,11 +1528,11 @@ func (m *ContainerSpec) MarshalTo(dAtA []byte) (int, error) {
|
| 1607 | 1607 |
dAtA[i] = 0x7a |
| 1608 | 1608 |
i++ |
| 1609 | 1609 |
i = encodeVarintSpecs(dAtA, i, uint64(m.DNSConfig.Size())) |
| 1610 |
- n20, err := m.DNSConfig.MarshalTo(dAtA[i:]) |
|
| 1610 |
+ n19, err := m.DNSConfig.MarshalTo(dAtA[i:]) |
|
| 1611 | 1611 |
if err != nil {
|
| 1612 | 1612 |
return 0, err |
| 1613 | 1613 |
} |
| 1614 |
- i += n20 |
|
| 1614 |
+ i += n19 |
|
| 1615 | 1615 |
} |
| 1616 | 1616 |
if m.Healthcheck != nil {
|
| 1617 | 1617 |
dAtA[i] = 0x82 |
| ... | ... |
@@ -1619,11 +1540,11 @@ func (m *ContainerSpec) MarshalTo(dAtA []byte) (int, error) {
|
| 1619 | 1619 |
dAtA[i] = 0x1 |
| 1620 | 1620 |
i++ |
| 1621 | 1621 |
i = encodeVarintSpecs(dAtA, i, uint64(m.Healthcheck.Size())) |
| 1622 |
- n21, err := m.Healthcheck.MarshalTo(dAtA[i:]) |
|
| 1622 |
+ n20, err := m.Healthcheck.MarshalTo(dAtA[i:]) |
|
| 1623 | 1623 |
if err != nil {
|
| 1624 | 1624 |
return 0, err |
| 1625 | 1625 |
} |
| 1626 |
- i += n21 |
|
| 1626 |
+ i += n20 |
|
| 1627 | 1627 |
} |
| 1628 | 1628 |
if len(m.Hosts) > 0 {
|
| 1629 | 1629 |
for _, s := range m.Hosts {
|
| ... | ... |
@@ -1766,30 +1687,6 @@ func (m *ContainerSpec_DNSConfig) MarshalTo(dAtA []byte) (int, error) {
|
| 1766 | 1766 |
return i, nil |
| 1767 | 1767 |
} |
| 1768 | 1768 |
|
| 1769 |
-func (m *PluginSpec) Marshal() (dAtA []byte, err error) {
|
|
| 1770 |
- size := m.Size() |
|
| 1771 |
- dAtA = make([]byte, size) |
|
| 1772 |
- n, err := m.MarshalTo(dAtA) |
|
| 1773 |
- if err != nil {
|
|
| 1774 |
- return nil, err |
|
| 1775 |
- } |
|
| 1776 |
- return dAtA[:n], nil |
|
| 1777 |
-} |
|
| 1778 |
- |
|
| 1779 |
-func (m *PluginSpec) MarshalTo(dAtA []byte) (int, error) {
|
|
| 1780 |
- var i int |
|
| 1781 |
- _ = i |
|
| 1782 |
- var l int |
|
| 1783 |
- _ = l |
|
| 1784 |
- if len(m.Image) > 0 {
|
|
| 1785 |
- dAtA[i] = 0xa |
|
| 1786 |
- i++ |
|
| 1787 |
- i = encodeVarintSpecs(dAtA, i, uint64(len(m.Image))) |
|
| 1788 |
- i += copy(dAtA[i:], m.Image) |
|
| 1789 |
- } |
|
| 1790 |
- return i, nil |
|
| 1791 |
-} |
|
| 1792 |
- |
|
| 1793 | 1769 |
func (m *EndpointSpec) Marshal() (dAtA []byte, err error) {
|
| 1794 | 1770 |
size := m.Size() |
| 1795 | 1771 |
dAtA = make([]byte, size) |
| ... | ... |
@@ -1843,20 +1740,20 @@ func (m *NetworkSpec) MarshalTo(dAtA []byte) (int, error) {
|
| 1843 | 1843 |
dAtA[i] = 0xa |
| 1844 | 1844 |
i++ |
| 1845 | 1845 |
i = encodeVarintSpecs(dAtA, i, uint64(m.Annotations.Size())) |
| 1846 |
- n22, err := m.Annotations.MarshalTo(dAtA[i:]) |
|
| 1846 |
+ n21, err := m.Annotations.MarshalTo(dAtA[i:]) |
|
| 1847 | 1847 |
if err != nil {
|
| 1848 | 1848 |
return 0, err |
| 1849 | 1849 |
} |
| 1850 |
- i += n22 |
|
| 1850 |
+ i += n21 |
|
| 1851 | 1851 |
if m.DriverConfig != nil {
|
| 1852 | 1852 |
dAtA[i] = 0x12 |
| 1853 | 1853 |
i++ |
| 1854 | 1854 |
i = encodeVarintSpecs(dAtA, i, uint64(m.DriverConfig.Size())) |
| 1855 |
- n23, err := m.DriverConfig.MarshalTo(dAtA[i:]) |
|
| 1855 |
+ n22, err := m.DriverConfig.MarshalTo(dAtA[i:]) |
|
| 1856 | 1856 |
if err != nil {
|
| 1857 | 1857 |
return 0, err |
| 1858 | 1858 |
} |
| 1859 |
- i += n23 |
|
| 1859 |
+ i += n22 |
|
| 1860 | 1860 |
} |
| 1861 | 1861 |
if m.Ipv6Enabled {
|
| 1862 | 1862 |
dAtA[i] = 0x18 |
| ... | ... |
@@ -1882,11 +1779,11 @@ func (m *NetworkSpec) MarshalTo(dAtA []byte) (int, error) {
|
| 1882 | 1882 |
dAtA[i] = 0x2a |
| 1883 | 1883 |
i++ |
| 1884 | 1884 |
i = encodeVarintSpecs(dAtA, i, uint64(m.IPAM.Size())) |
| 1885 |
- n24, err := m.IPAM.MarshalTo(dAtA[i:]) |
|
| 1885 |
+ n23, err := m.IPAM.MarshalTo(dAtA[i:]) |
|
| 1886 | 1886 |
if err != nil {
|
| 1887 | 1887 |
return 0, err |
| 1888 | 1888 |
} |
| 1889 |
- i += n24 |
|
| 1889 |
+ i += n23 |
|
| 1890 | 1890 |
} |
| 1891 | 1891 |
if m.Attachable {
|
| 1892 | 1892 |
dAtA[i] = 0x30 |
| ... | ... |
@@ -1919,67 +1816,67 @@ func (m *ClusterSpec) MarshalTo(dAtA []byte) (int, error) {
|
| 1919 | 1919 |
dAtA[i] = 0xa |
| 1920 | 1920 |
i++ |
| 1921 | 1921 |
i = encodeVarintSpecs(dAtA, i, uint64(m.Annotations.Size())) |
| 1922 |
- n25, err := m.Annotations.MarshalTo(dAtA[i:]) |
|
| 1922 |
+ n24, err := m.Annotations.MarshalTo(dAtA[i:]) |
|
| 1923 | 1923 |
if err != nil {
|
| 1924 | 1924 |
return 0, err |
| 1925 | 1925 |
} |
| 1926 |
- i += n25 |
|
| 1926 |
+ i += n24 |
|
| 1927 | 1927 |
dAtA[i] = 0x12 |
| 1928 | 1928 |
i++ |
| 1929 | 1929 |
i = encodeVarintSpecs(dAtA, i, uint64(m.AcceptancePolicy.Size())) |
| 1930 |
- n26, err := m.AcceptancePolicy.MarshalTo(dAtA[i:]) |
|
| 1930 |
+ n25, err := m.AcceptancePolicy.MarshalTo(dAtA[i:]) |
|
| 1931 | 1931 |
if err != nil {
|
| 1932 | 1932 |
return 0, err |
| 1933 | 1933 |
} |
| 1934 |
- i += n26 |
|
| 1934 |
+ i += n25 |
|
| 1935 | 1935 |
dAtA[i] = 0x1a |
| 1936 | 1936 |
i++ |
| 1937 | 1937 |
i = encodeVarintSpecs(dAtA, i, uint64(m.Orchestration.Size())) |
| 1938 |
- n27, err := m.Orchestration.MarshalTo(dAtA[i:]) |
|
| 1938 |
+ n26, err := m.Orchestration.MarshalTo(dAtA[i:]) |
|
| 1939 | 1939 |
if err != nil {
|
| 1940 | 1940 |
return 0, err |
| 1941 | 1941 |
} |
| 1942 |
- i += n27 |
|
| 1942 |
+ i += n26 |
|
| 1943 | 1943 |
dAtA[i] = 0x22 |
| 1944 | 1944 |
i++ |
| 1945 | 1945 |
i = encodeVarintSpecs(dAtA, i, uint64(m.Raft.Size())) |
| 1946 |
- n28, err := m.Raft.MarshalTo(dAtA[i:]) |
|
| 1946 |
+ n27, err := m.Raft.MarshalTo(dAtA[i:]) |
|
| 1947 | 1947 |
if err != nil {
|
| 1948 | 1948 |
return 0, err |
| 1949 | 1949 |
} |
| 1950 |
- i += n28 |
|
| 1950 |
+ i += n27 |
|
| 1951 | 1951 |
dAtA[i] = 0x2a |
| 1952 | 1952 |
i++ |
| 1953 | 1953 |
i = encodeVarintSpecs(dAtA, i, uint64(m.Dispatcher.Size())) |
| 1954 |
- n29, err := m.Dispatcher.MarshalTo(dAtA[i:]) |
|
| 1954 |
+ n28, err := m.Dispatcher.MarshalTo(dAtA[i:]) |
|
| 1955 | 1955 |
if err != nil {
|
| 1956 | 1956 |
return 0, err |
| 1957 | 1957 |
} |
| 1958 |
- i += n29 |
|
| 1958 |
+ i += n28 |
|
| 1959 | 1959 |
dAtA[i] = 0x32 |
| 1960 | 1960 |
i++ |
| 1961 | 1961 |
i = encodeVarintSpecs(dAtA, i, uint64(m.CAConfig.Size())) |
| 1962 |
- n30, err := m.CAConfig.MarshalTo(dAtA[i:]) |
|
| 1962 |
+ n29, err := m.CAConfig.MarshalTo(dAtA[i:]) |
|
| 1963 | 1963 |
if err != nil {
|
| 1964 | 1964 |
return 0, err |
| 1965 | 1965 |
} |
| 1966 |
- i += n30 |
|
| 1966 |
+ i += n29 |
|
| 1967 | 1967 |
dAtA[i] = 0x3a |
| 1968 | 1968 |
i++ |
| 1969 | 1969 |
i = encodeVarintSpecs(dAtA, i, uint64(m.TaskDefaults.Size())) |
| 1970 |
- n31, err := m.TaskDefaults.MarshalTo(dAtA[i:]) |
|
| 1970 |
+ n30, err := m.TaskDefaults.MarshalTo(dAtA[i:]) |
|
| 1971 | 1971 |
if err != nil {
|
| 1972 | 1972 |
return 0, err |
| 1973 | 1973 |
} |
| 1974 |
- i += n31 |
|
| 1974 |
+ i += n30 |
|
| 1975 | 1975 |
dAtA[i] = 0x42 |
| 1976 | 1976 |
i++ |
| 1977 | 1977 |
i = encodeVarintSpecs(dAtA, i, uint64(m.EncryptionConfig.Size())) |
| 1978 |
- n32, err := m.EncryptionConfig.MarshalTo(dAtA[i:]) |
|
| 1978 |
+ n31, err := m.EncryptionConfig.MarshalTo(dAtA[i:]) |
|
| 1979 | 1979 |
if err != nil {
|
| 1980 | 1980 |
return 0, err |
| 1981 | 1981 |
} |
| 1982 |
- i += n32 |
|
| 1982 |
+ i += n31 |
|
| 1983 | 1983 |
return i, nil |
| 1984 | 1984 |
} |
| 1985 | 1985 |
|
| ... | ... |
@@ -2001,11 +1898,11 @@ func (m *SecretSpec) MarshalTo(dAtA []byte) (int, error) {
|
| 2001 | 2001 |
dAtA[i] = 0xa |
| 2002 | 2002 |
i++ |
| 2003 | 2003 |
i = encodeVarintSpecs(dAtA, i, uint64(m.Annotations.Size())) |
| 2004 |
- n33, err := m.Annotations.MarshalTo(dAtA[i:]) |
|
| 2004 |
+ n32, err := m.Annotations.MarshalTo(dAtA[i:]) |
|
| 2005 | 2005 |
if err != nil {
|
| 2006 | 2006 |
return 0, err |
| 2007 | 2007 |
} |
| 2008 |
- i += n33 |
|
| 2008 |
+ i += n32 |
|
| 2009 | 2009 |
if len(m.Data) > 0 {
|
| 2010 | 2010 |
dAtA[i] = 0x12 |
| 2011 | 2011 |
i++ |
| ... | ... |
@@ -2176,15 +2073,6 @@ func (m *TaskSpec_Attachment) Size() (n int) {
|
| 2176 | 2176 |
} |
| 2177 | 2177 |
return n |
| 2178 | 2178 |
} |
| 2179 |
-func (m *TaskSpec_Plugin) Size() (n int) {
|
|
| 2180 |
- var l int |
|
| 2181 |
- _ = l |
|
| 2182 |
- if m.Plugin != nil {
|
|
| 2183 |
- l = m.Plugin.Size() |
|
| 2184 |
- n += 1 + l + sovSpecs(uint64(l)) |
|
| 2185 |
- } |
|
| 2186 |
- return n |
|
| 2187 |
-} |
|
| 2188 | 2179 |
func (m *NetworkAttachmentSpec) Size() (n int) {
|
| 2189 | 2180 |
var l int |
| 2190 | 2181 |
_ = l |
| ... | ... |
@@ -2330,16 +2218,6 @@ func (m *ContainerSpec_DNSConfig) Size() (n int) {
|
| 2330 | 2330 |
return n |
| 2331 | 2331 |
} |
| 2332 | 2332 |
|
| 2333 |
-func (m *PluginSpec) Size() (n int) {
|
|
| 2334 |
- var l int |
|
| 2335 |
- _ = l |
|
| 2336 |
- l = len(m.Image) |
|
| 2337 |
- if l > 0 {
|
|
| 2338 |
- n += 1 + l + sovSpecs(uint64(l)) |
|
| 2339 |
- } |
|
| 2340 |
- return n |
|
| 2341 |
-} |
|
| 2342 |
- |
|
| 2343 | 2333 |
func (m *EndpointSpec) Size() (n int) {
|
| 2344 | 2334 |
var l int |
| 2345 | 2335 |
_ = l |
| ... | ... |
@@ -2531,16 +2409,6 @@ func (this *TaskSpec_Attachment) String() string {
|
| 2531 | 2531 |
}, "") |
| 2532 | 2532 |
return s |
| 2533 | 2533 |
} |
| 2534 |
-func (this *TaskSpec_Plugin) String() string {
|
|
| 2535 |
- if this == nil {
|
|
| 2536 |
- return "nil" |
|
| 2537 |
- } |
|
| 2538 |
- s := strings.Join([]string{`&TaskSpec_Plugin{`,
|
|
| 2539 |
- `Plugin:` + strings.Replace(fmt.Sprintf("%v", this.Plugin), "PluginSpec", "PluginSpec", 1) + `,`,
|
|
| 2540 |
- `}`, |
|
| 2541 |
- }, "") |
|
| 2542 |
- return s |
|
| 2543 |
-} |
|
| 2544 | 2534 |
func (this *NetworkAttachmentSpec) String() string {
|
| 2545 | 2535 |
if this == nil {
|
| 2546 | 2536 |
return "nil" |
| ... | ... |
@@ -2612,16 +2480,6 @@ func (this *ContainerSpec_DNSConfig) String() string {
|
| 2612 | 2612 |
}, "") |
| 2613 | 2613 |
return s |
| 2614 | 2614 |
} |
| 2615 |
-func (this *PluginSpec) String() string {
|
|
| 2616 |
- if this == nil {
|
|
| 2617 |
- return "nil" |
|
| 2618 |
- } |
|
| 2619 |
- s := strings.Join([]string{`&PluginSpec{`,
|
|
| 2620 |
- `Image:` + fmt.Sprintf("%v", this.Image) + `,`,
|
|
| 2621 |
- `}`, |
|
| 2622 |
- }, "") |
|
| 2623 |
- return s |
|
| 2624 |
-} |
|
| 2625 | 2615 |
func (this *EndpointSpec) String() string {
|
| 2626 | 2616 |
if this == nil {
|
| 2627 | 2617 |
return "nil" |
| ... | ... |
@@ -3519,38 +3377,6 @@ func (m *TaskSpec) Unmarshal(dAtA []byte) error {
|
| 3519 | 3519 |
break |
| 3520 | 3520 |
} |
| 3521 | 3521 |
} |
| 3522 |
- case 10: |
|
| 3523 |
- if wireType != 2 {
|
|
| 3524 |
- return fmt.Errorf("proto: wrong wireType = %d for field Plugin", wireType)
|
|
| 3525 |
- } |
|
| 3526 |
- var msglen int |
|
| 3527 |
- for shift := uint(0); ; shift += 7 {
|
|
| 3528 |
- if shift >= 64 {
|
|
| 3529 |
- return ErrIntOverflowSpecs |
|
| 3530 |
- } |
|
| 3531 |
- if iNdEx >= l {
|
|
| 3532 |
- return io.ErrUnexpectedEOF |
|
| 3533 |
- } |
|
| 3534 |
- b := dAtA[iNdEx] |
|
| 3535 |
- iNdEx++ |
|
| 3536 |
- msglen |= (int(b) & 0x7F) << shift |
|
| 3537 |
- if b < 0x80 {
|
|
| 3538 |
- break |
|
| 3539 |
- } |
|
| 3540 |
- } |
|
| 3541 |
- if msglen < 0 {
|
|
| 3542 |
- return ErrInvalidLengthSpecs |
|
| 3543 |
- } |
|
| 3544 |
- postIndex := iNdEx + msglen |
|
| 3545 |
- if postIndex > l {
|
|
| 3546 |
- return io.ErrUnexpectedEOF |
|
| 3547 |
- } |
|
| 3548 |
- v := &PluginSpec{}
|
|
| 3549 |
- if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
|
|
| 3550 |
- return err |
|
| 3551 |
- } |
|
| 3552 |
- m.Runtime = &TaskSpec_Plugin{v}
|
|
| 3553 |
- iNdEx = postIndex |
|
| 3554 | 3522 |
default: |
| 3555 | 3523 |
iNdEx = preIndex |
| 3556 | 3524 |
skippy, err := skipSpecs(dAtA[iNdEx:]) |
| ... | ... |
@@ -4577,85 +4403,6 @@ func (m *ContainerSpec_DNSConfig) Unmarshal(dAtA []byte) error {
|
| 4577 | 4577 |
} |
| 4578 | 4578 |
return nil |
| 4579 | 4579 |
} |
| 4580 |
-func (m *PluginSpec) Unmarshal(dAtA []byte) error {
|
|
| 4581 |
- l := len(dAtA) |
|
| 4582 |
- iNdEx := 0 |
|
| 4583 |
- for iNdEx < l {
|
|
| 4584 |
- preIndex := iNdEx |
|
| 4585 |
- var wire uint64 |
|
| 4586 |
- for shift := uint(0); ; shift += 7 {
|
|
| 4587 |
- if shift >= 64 {
|
|
| 4588 |
- return ErrIntOverflowSpecs |
|
| 4589 |
- } |
|
| 4590 |
- if iNdEx >= l {
|
|
| 4591 |
- return io.ErrUnexpectedEOF |
|
| 4592 |
- } |
|
| 4593 |
- b := dAtA[iNdEx] |
|
| 4594 |
- iNdEx++ |
|
| 4595 |
- wire |= (uint64(b) & 0x7F) << shift |
|
| 4596 |
- if b < 0x80 {
|
|
| 4597 |
- break |
|
| 4598 |
- } |
|
| 4599 |
- } |
|
| 4600 |
- fieldNum := int32(wire >> 3) |
|
| 4601 |
- wireType := int(wire & 0x7) |
|
| 4602 |
- if wireType == 4 {
|
|
| 4603 |
- return fmt.Errorf("proto: PluginSpec: wiretype end group for non-group")
|
|
| 4604 |
- } |
|
| 4605 |
- if fieldNum <= 0 {
|
|
| 4606 |
- return fmt.Errorf("proto: PluginSpec: illegal tag %d (wire type %d)", fieldNum, wire)
|
|
| 4607 |
- } |
|
| 4608 |
- switch fieldNum {
|
|
| 4609 |
- case 1: |
|
| 4610 |
- if wireType != 2 {
|
|
| 4611 |
- return fmt.Errorf("proto: wrong wireType = %d for field Image", wireType)
|
|
| 4612 |
- } |
|
| 4613 |
- var stringLen uint64 |
|
| 4614 |
- for shift := uint(0); ; shift += 7 {
|
|
| 4615 |
- if shift >= 64 {
|
|
| 4616 |
- return ErrIntOverflowSpecs |
|
| 4617 |
- } |
|
| 4618 |
- if iNdEx >= l {
|
|
| 4619 |
- return io.ErrUnexpectedEOF |
|
| 4620 |
- } |
|
| 4621 |
- b := dAtA[iNdEx] |
|
| 4622 |
- iNdEx++ |
|
| 4623 |
- stringLen |= (uint64(b) & 0x7F) << shift |
|
| 4624 |
- if b < 0x80 {
|
|
| 4625 |
- break |
|
| 4626 |
- } |
|
| 4627 |
- } |
|
| 4628 |
- intStringLen := int(stringLen) |
|
| 4629 |
- if intStringLen < 0 {
|
|
| 4630 |
- return ErrInvalidLengthSpecs |
|
| 4631 |
- } |
|
| 4632 |
- postIndex := iNdEx + intStringLen |
|
| 4633 |
- if postIndex > l {
|
|
| 4634 |
- return io.ErrUnexpectedEOF |
|
| 4635 |
- } |
|
| 4636 |
- m.Image = string(dAtA[iNdEx:postIndex]) |
|
| 4637 |
- iNdEx = postIndex |
|
| 4638 |
- default: |
|
| 4639 |
- iNdEx = preIndex |
|
| 4640 |
- skippy, err := skipSpecs(dAtA[iNdEx:]) |
|
| 4641 |
- if err != nil {
|
|
| 4642 |
- return err |
|
| 4643 |
- } |
|
| 4644 |
- if skippy < 0 {
|
|
| 4645 |
- return ErrInvalidLengthSpecs |
|
| 4646 |
- } |
|
| 4647 |
- if (iNdEx + skippy) > l {
|
|
| 4648 |
- return io.ErrUnexpectedEOF |
|
| 4649 |
- } |
|
| 4650 |
- iNdEx += skippy |
|
| 4651 |
- } |
|
| 4652 |
- } |
|
| 4653 |
- |
|
| 4654 |
- if iNdEx > l {
|
|
| 4655 |
- return io.ErrUnexpectedEOF |
|
| 4656 |
- } |
|
| 4657 |
- return nil |
|
| 4658 |
-} |
|
| 4659 | 4580 |
func (m *EndpointSpec) Unmarshal(dAtA []byte) error {
|
| 4660 | 4581 |
l := len(dAtA) |
| 4661 | 4582 |
iNdEx := 0 |
| ... | ... |
@@ -5471,114 +5218,112 @@ var ( |
| 5471 | 5471 |
func init() { proto.RegisterFile("specs.proto", fileDescriptorSpecs) }
|
| 5472 | 5472 |
|
| 5473 | 5473 |
var fileDescriptorSpecs = []byte{
|
| 5474 |
- // 1730 bytes of a gzipped FileDescriptorProto |
|
| 5474 |
+ // 1707 bytes of a gzipped FileDescriptorProto |
|
| 5475 | 5475 |
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xac, 0x57, 0x41, 0x73, 0x1b, 0xb7, |
| 5476 |
- 0x15, 0x26, 0x25, 0x8a, 0x5a, 0xbe, 0xa5, 0x6c, 0x0a, 0x4d, 0xd2, 0x35, 0xdd, 0x90, 0x34, 0xe3, |
|
| 5476 |
+ 0x15, 0x26, 0x25, 0x8a, 0x5a, 0xbe, 0xa5, 0x6c, 0x1a, 0x75, 0xd2, 0x35, 0xdd, 0x90, 0x34, 0xe3, |
|
| 5477 | 5477 |
0xa6, 0x4a, 0x33, 0xa5, 0xa6, 0x6a, 0x27, 0x75, 0xea, 0x66, 0x5a, 0x52, 0x64, 0x65, 0x55, 0x95, |
| 5478 | 5478 |
0xcc, 0x01, 0x15, 0x77, 0x7c, 0xe2, 0x80, 0xbb, 0x10, 0xb9, 0xa3, 0xe5, 0x62, 0x0b, 0x60, 0x99, |
| 5479 |
- 0xe1, 0xad, 0xc7, 0x8c, 0xcf, 0xbd, 0x6a, 0x7a, 0xe8, 0x6f, 0xe8, 0x7f, 0xf0, 0xb1, 0xc7, 0x9e, |
|
| 5480 |
- 0x34, 0x0d, 0xff, 0x42, 0x7f, 0x40, 0x3b, 0xc0, 0x82, 0xe4, 0x32, 0x59, 0xc5, 0x9e, 0xa9, 0x6f, |
|
| 5481 |
- 0xc0, 0xdb, 0xef, 0x7b, 0x78, 0x78, 0xf8, 0xf0, 0xf0, 0x16, 0x6c, 0x11, 0x51, 0x57, 0xb4, 0x22, |
|
| 5482 |
- 0xce, 0x24, 0x43, 0xc8, 0x63, 0xee, 0x35, 0xe5, 0x2d, 0xf1, 0x15, 0xe1, 0xd3, 0x6b, 0x5f, 0xb6, |
|
| 5483 |
- 0x66, 0x3f, 0xaf, 0xda, 0x72, 0x1e, 0x51, 0x03, 0xa8, 0xbe, 0x37, 0x66, 0x63, 0xa6, 0x87, 0x87, |
|
| 5484 |
- 0x6a, 0x64, 0xac, 0xb5, 0x31, 0x63, 0xe3, 0x80, 0x1e, 0xea, 0xd9, 0x28, 0xbe, 0x3a, 0xf4, 0x62, |
|
| 5485 |
- 0x4e, 0xa4, 0xcf, 0xc2, 0xe4, 0x7b, 0xf3, 0xa6, 0x00, 0xd6, 0x05, 0xf3, 0xe8, 0x20, 0xa2, 0x2e, |
|
| 5486 |
- 0x3a, 0x01, 0x9b, 0x84, 0x21, 0x93, 0x1a, 0x20, 0x9c, 0x7c, 0x23, 0x7f, 0x60, 0x1f, 0xd5, 0x5b, |
|
| 5487 |
- 0xdf, 0x5d, 0xb9, 0xd5, 0x5e, 0xc3, 0x3a, 0x85, 0xd7, 0xb7, 0xf5, 0x1c, 0x4e, 0x33, 0xd1, 0x6f, |
|
| 5488 |
- 0xa1, 0xec, 0x51, 0xe1, 0x73, 0xea, 0x0d, 0x39, 0x0b, 0xa8, 0xb3, 0xd5, 0xc8, 0x1f, 0xdc, 0x3b, |
|
| 5489 |
- 0xfa, 0x51, 0x96, 0x27, 0xb5, 0x38, 0x66, 0x01, 0xc5, 0xb6, 0x61, 0xa8, 0x09, 0x3a, 0x01, 0x98, |
|
| 5490 |
- 0xd2, 0xe9, 0x88, 0x72, 0x31, 0xf1, 0x23, 0x67, 0x5b, 0xd3, 0x7f, 0x72, 0x17, 0x5d, 0xc5, 0xde, |
|
| 5491 |
- 0x3a, 0x5f, 0xc1, 0x71, 0x8a, 0x8a, 0xce, 0xa1, 0x4c, 0x66, 0xc4, 0x0f, 0xc8, 0xc8, 0x0f, 0x7c, |
|
| 5492 |
- 0x39, 0x77, 0x0a, 0xda, 0xd5, 0x27, 0xdf, 0xeb, 0xaa, 0x9d, 0x22, 0xe0, 0x0d, 0x7a, 0xd3, 0x03, |
|
| 5493 |
- 0x58, 0x2f, 0x84, 0x3e, 0x86, 0xdd, 0x7e, 0xef, 0xa2, 0x7b, 0x7a, 0x71, 0x52, 0xc9, 0x55, 0x1f, |
|
| 5494 |
- 0xbc, 0xba, 0x69, 0xbc, 0xaf, 0x7c, 0xac, 0x01, 0x7d, 0x1a, 0x7a, 0x7e, 0x38, 0x46, 0x07, 0x60, |
|
| 5495 |
- 0xb5, 0x8f, 0x8f, 0x7b, 0xfd, 0xcb, 0x5e, 0xb7, 0x92, 0xaf, 0x56, 0x5f, 0xdd, 0x34, 0x3e, 0xd8, |
|
| 5496 |
- 0x04, 0xb6, 0x5d, 0x97, 0x46, 0x92, 0x7a, 0xd5, 0xc2, 0xd7, 0x7f, 0xaf, 0xe5, 0x9a, 0x5f, 0xe7, |
|
| 5497 |
- 0xa1, 0x9c, 0x0e, 0x02, 0x7d, 0x0c, 0xc5, 0xf6, 0xf1, 0xe5, 0xe9, 0x8b, 0x5e, 0x25, 0xb7, 0xa6, |
|
| 5498 |
- 0xa7, 0x11, 0x6d, 0x57, 0xfa, 0x33, 0x8a, 0x1e, 0xc3, 0x4e, 0xbf, 0xfd, 0xe5, 0xa0, 0x57, 0xc9, |
|
| 5499 |
- 0xaf, 0xc3, 0x49, 0xc3, 0xfa, 0x24, 0x16, 0x1a, 0xd5, 0xc5, 0xed, 0xd3, 0x8b, 0xca, 0x56, 0x36, |
|
| 5500 |
- 0xaa, 0xcb, 0x89, 0x1f, 0x9a, 0x50, 0xfe, 0x56, 0x00, 0x7b, 0x40, 0xf9, 0xcc, 0x77, 0xdf, 0xb1, |
|
| 5501 |
- 0x44, 0x3e, 0x83, 0x82, 0x24, 0xe2, 0x5a, 0x4b, 0xc3, 0xce, 0x96, 0xc6, 0x25, 0x11, 0xd7, 0x6a, |
|
| 5502 |
- 0x51, 0x43, 0xd7, 0x78, 0xa5, 0x0c, 0x4e, 0xa3, 0xc0, 0x77, 0x89, 0xa4, 0x9e, 0x56, 0x86, 0x7d, |
|
| 5503 |
- 0xf4, 0xe3, 0x2c, 0x36, 0x5e, 0xa1, 0x4c, 0xfc, 0xcf, 0x72, 0x38, 0x45, 0x45, 0x4f, 0xa1, 0x38, |
|
| 5504 |
- 0x0e, 0xd8, 0x88, 0x04, 0x5a, 0x13, 0xf6, 0xd1, 0xa3, 0x2c, 0x27, 0x27, 0x1a, 0xb1, 0x76, 0x60, |
|
| 5505 |
- 0x28, 0xe8, 0x09, 0x14, 0xe3, 0xc8, 0x23, 0x92, 0x3a, 0x45, 0x4d, 0x6e, 0x64, 0x91, 0xbf, 0xd4, |
|
| 5506 |
- 0x88, 0x63, 0x16, 0x5e, 0xf9, 0x63, 0x6c, 0xf0, 0xe8, 0x0c, 0xac, 0x90, 0xca, 0xaf, 0x18, 0xbf, |
|
| 5507 |
- 0x16, 0xce, 0x6e, 0x63, 0xfb, 0xc0, 0x3e, 0xfa, 0x34, 0x53, 0x8c, 0x09, 0xa6, 0x2d, 0x25, 0x71, |
|
| 5508 |
- 0x27, 0x53, 0x1a, 0xca, 0xc4, 0x4d, 0x67, 0xcb, 0xc9, 0xe3, 0x95, 0x03, 0xf4, 0x1b, 0xb0, 0x68, |
|
| 5509 |
- 0xe8, 0x45, 0xcc, 0x0f, 0xa5, 0x63, 0xdd, 0x1d, 0x48, 0xcf, 0x60, 0x54, 0x32, 0xf1, 0x8a, 0xa1, |
|
| 5510 |
- 0xd8, 0x9c, 0x05, 0xc1, 0x88, 0xb8, 0xd7, 0x4e, 0xe9, 0x2d, 0xb7, 0xb1, 0x62, 0x74, 0x8a, 0x50, |
|
| 5511 |
- 0x98, 0x32, 0x8f, 0x36, 0x0f, 0x61, 0xff, 0x3b, 0xa9, 0x46, 0x55, 0xb0, 0x4c, 0xaa, 0x13, 0x8d, |
|
| 5512 |
- 0x14, 0xf0, 0x6a, 0xde, 0xbc, 0x0f, 0x7b, 0x1b, 0x69, 0x6d, 0xbe, 0x2e, 0x80, 0xb5, 0x3c, 0x6b, |
|
| 5513 |
- 0xd4, 0x86, 0x92, 0xcb, 0x42, 0x49, 0xfc, 0x90, 0x72, 0x23, 0xaf, 0xcc, 0x93, 0x39, 0x5e, 0x82, |
|
| 5514 |
- 0x14, 0xeb, 0x59, 0x0e, 0xaf, 0x59, 0xe8, 0xf7, 0x50, 0xe2, 0x54, 0xb0, 0x98, 0xbb, 0x54, 0x18, |
|
| 5515 |
- 0x7d, 0x1d, 0x64, 0x2b, 0x24, 0x01, 0x61, 0xfa, 0xe7, 0xd8, 0xe7, 0x54, 0x65, 0x59, 0xe0, 0x35, |
|
| 5516 |
- 0x15, 0x3d, 0x85, 0x5d, 0x4e, 0x85, 0x24, 0x5c, 0x7e, 0x9f, 0x44, 0x70, 0x02, 0xe9, 0xb3, 0xc0, |
|
| 5517 |
- 0x77, 0xe7, 0x78, 0xc9, 0x40, 0x4f, 0xa1, 0x14, 0x05, 0xc4, 0xd5, 0x5e, 0x9d, 0x1d, 0x4d, 0xff, |
|
| 5518 |
- 0x30, 0x8b, 0xde, 0x5f, 0x82, 0xf0, 0x1a, 0x8f, 0x3e, 0x07, 0x08, 0xd8, 0x78, 0xe8, 0x71, 0x7f, |
|
| 5519 |
- 0x46, 0xb9, 0x91, 0x58, 0x35, 0x8b, 0xdd, 0xd5, 0x08, 0x5c, 0x0a, 0xd8, 0x38, 0x19, 0xa2, 0x93, |
|
| 5520 |
- 0xff, 0x4b, 0x5f, 0x29, 0x6d, 0x9d, 0x01, 0x90, 0xd5, 0x57, 0xa3, 0xae, 0x4f, 0xde, 0xca, 0x95, |
|
| 5521 |
- 0x39, 0x91, 0x14, 0x1d, 0x3d, 0x82, 0xf2, 0x15, 0xe3, 0x2e, 0x1d, 0x9a, 0x5b, 0x53, 0xd2, 0x9a, |
|
| 5522 |
- 0xb0, 0xb5, 0x2d, 0xd1, 0x97, 0xba, 0x52, 0x51, 0x10, 0x8f, 0xfd, 0xd0, 0x01, 0xbd, 0x56, 0x2d, |
|
| 5523 |
- 0x3b, 0x5b, 0x0a, 0x61, 0x16, 0x30, 0xf8, 0x4e, 0x09, 0x76, 0x79, 0x1c, 0x4a, 0x7f, 0x4a, 0x9b, |
|
| 5524 |
- 0x67, 0xf0, 0x7e, 0x66, 0x38, 0xe8, 0x08, 0xca, 0x2b, 0x81, 0x0c, 0x7d, 0x4f, 0x2b, 0xab, 0xd4, |
|
| 5525 |
- 0xb9, 0xbf, 0xb8, 0xad, 0xdb, 0x2b, 0x25, 0x9d, 0x76, 0xb1, 0xbd, 0x02, 0x9d, 0x7a, 0xcd, 0xbf, |
|
| 5526 |
- 0x5a, 0xb0, 0xb7, 0x21, 0x33, 0xf4, 0x1e, 0xec, 0xf8, 0x53, 0x32, 0xa6, 0x09, 0x1d, 0x27, 0x13, |
|
| 5527 |
- 0xd4, 0x83, 0x62, 0x40, 0x46, 0x34, 0x50, 0x62, 0x53, 0x09, 0xff, 0xd9, 0x1b, 0xf5, 0xda, 0xfa, |
|
| 5528 |
- 0xa3, 0xc6, 0xf7, 0x42, 0xc9, 0xe7, 0xd8, 0x90, 0x91, 0x03, 0xbb, 0x2e, 0x9b, 0x4e, 0x49, 0xa8, |
|
| 5529 |
- 0xca, 0xda, 0xf6, 0x41, 0x09, 0x2f, 0xa7, 0x08, 0x41, 0x81, 0xf0, 0xb1, 0x70, 0x0a, 0xda, 0xac, |
|
| 5530 |
- 0xc7, 0xa8, 0x02, 0xdb, 0x34, 0x9c, 0x39, 0x3b, 0xda, 0xa4, 0x86, 0xca, 0xe2, 0xf9, 0x89, 0x5a, |
|
| 5531 |
- 0x4a, 0x58, 0x0d, 0x15, 0x2f, 0x16, 0x94, 0x3b, 0xbb, 0xda, 0xa4, 0xc7, 0xe8, 0x57, 0x50, 0x9c, |
|
| 5532 |
- 0xb2, 0x38, 0x94, 0xc2, 0xb1, 0x74, 0xb0, 0x0f, 0xb2, 0x82, 0x3d, 0x57, 0x08, 0x53, 0x76, 0x0d, |
|
| 5533 |
- 0x1c, 0xf5, 0x60, 0x5f, 0x48, 0x16, 0x0d, 0xc7, 0x9c, 0xb8, 0x74, 0x18, 0x51, 0xee, 0x33, 0xcf, |
|
| 5534 |
- 0x94, 0x8d, 0x07, 0xad, 0xa4, 0xcb, 0x68, 0x2d, 0xbb, 0x8c, 0x56, 0xd7, 0x74, 0x19, 0xf8, 0xbe, |
|
| 5535 |
- 0xe2, 0x9c, 0x28, 0x4a, 0x5f, 0x33, 0x50, 0x1f, 0xca, 0x51, 0x1c, 0x04, 0x43, 0x16, 0x25, 0x2f, |
|
| 5536 |
- 0x48, 0x72, 0xd8, 0x6f, 0x91, 0xb2, 0x7e, 0x1c, 0x04, 0xcf, 0x13, 0x12, 0xb6, 0xa3, 0xf5, 0x04, |
|
| 5537 |
- 0x7d, 0x00, 0xc5, 0x31, 0x67, 0x71, 0x24, 0x1c, 0x5b, 0x27, 0xc3, 0xcc, 0xd0, 0x17, 0xb0, 0x2b, |
|
| 5538 |
- 0xa8, 0xcb, 0xa9, 0x14, 0x4e, 0x59, 0x6f, 0xf5, 0xa3, 0xac, 0x45, 0x06, 0x1a, 0x82, 0xe9, 0x15, |
|
| 5539 |
- 0xe5, 0x34, 0x74, 0x29, 0x5e, 0x72, 0xd0, 0x03, 0xd8, 0x96, 0x72, 0xee, 0xec, 0x35, 0xf2, 0x07, |
|
| 5540 |
- 0x56, 0x67, 0x77, 0x71, 0x5b, 0xdf, 0xbe, 0xbc, 0x7c, 0x89, 0x95, 0x4d, 0x55, 0xb7, 0x09, 0x13, |
|
| 5541 |
- 0x32, 0x24, 0x53, 0xea, 0xdc, 0xd3, 0xb9, 0x5d, 0xcd, 0xd1, 0x4b, 0x00, 0x2f, 0x14, 0x43, 0x57, |
|
| 5542 |
- 0x5f, 0x27, 0xe7, 0xbe, 0xde, 0xdd, 0xa7, 0x6f, 0xde, 0x5d, 0xf7, 0x62, 0x60, 0x2a, 0xfc, 0xde, |
|
| 5543 |
- 0xe2, 0xb6, 0x5e, 0x5a, 0x4d, 0x71, 0xc9, 0x0b, 0x45, 0x32, 0x44, 0x1d, 0xb0, 0x27, 0x94, 0x04, |
|
| 5544 |
- 0x72, 0xe2, 0x4e, 0xa8, 0x7b, 0xed, 0x54, 0xee, 0x2e, 0xd9, 0xcf, 0x34, 0xcc, 0x78, 0x48, 0x93, |
|
| 5545 |
- 0x94, 0x82, 0x55, 0xa8, 0xc2, 0xd9, 0xd7, 0xb9, 0x4a, 0x26, 0xe8, 0x43, 0x00, 0x16, 0xd1, 0x70, |
|
| 5546 |
- 0x28, 0xa4, 0xe7, 0x87, 0x0e, 0x52, 0x5b, 0xc6, 0x25, 0x65, 0x19, 0x28, 0x03, 0x7a, 0xa8, 0x0a, |
|
| 5547 |
- 0x2a, 0xf1, 0x86, 0x2c, 0x0c, 0xe6, 0xce, 0x0f, 0xf4, 0x57, 0x4b, 0x19, 0x9e, 0x87, 0xc1, 0x1c, |
|
| 5548 |
- 0xd5, 0xc1, 0xd6, 0xba, 0x10, 0xfe, 0x38, 0x24, 0x81, 0xf3, 0x9e, 0xce, 0x07, 0x28, 0xd3, 0x40, |
|
| 5549 |
- 0x5b, 0xaa, 0x9f, 0x83, 0x9d, 0x92, 0xbb, 0x92, 0xe9, 0x35, 0x9d, 0x9b, 0x1b, 0xa4, 0x86, 0x2a, |
|
| 5550 |
- 0xa6, 0x19, 0x09, 0xe2, 0xa4, 0x4d, 0x2c, 0xe1, 0x64, 0xf2, 0xeb, 0xad, 0x27, 0xf9, 0xea, 0x11, |
|
| 5551 |
- 0xd8, 0xa9, 0x63, 0x47, 0x1f, 0xc1, 0x1e, 0xa7, 0x63, 0x5f, 0x48, 0x3e, 0x1f, 0x92, 0x58, 0x4e, |
|
| 5552 |
- 0x9c, 0xdf, 0x69, 0x42, 0x79, 0x69, 0x6c, 0xc7, 0x72, 0x52, 0x1d, 0xc2, 0x3a, 0x7b, 0xa8, 0x01, |
|
| 5553 |
- 0xb6, 0x3a, 0x15, 0x41, 0xf9, 0x8c, 0x72, 0xf5, 0x14, 0xa9, 0x4d, 0xa7, 0x4d, 0x4a, 0x3d, 0x82, |
|
| 5554 |
- 0x12, 0xee, 0x4e, 0xf4, 0xe5, 0x2d, 0x61, 0x33, 0x53, 0xb7, 0x71, 0x29, 0x51, 0x73, 0x1b, 0xcd, |
|
| 5555 |
- 0xb4, 0xd9, 0x04, 0x58, 0x97, 0xa1, 0xec, 0x92, 0xd0, 0xfc, 0x4f, 0x1e, 0xca, 0xe9, 0x57, 0x17, |
|
| 5556 |
- 0x1d, 0x27, 0xaf, 0xa5, 0x46, 0xdd, 0x3b, 0x3a, 0x7c, 0xd3, 0x2b, 0xad, 0xdf, 0xa6, 0x20, 0x56, |
|
| 5557 |
- 0x0b, 0x9e, 0xab, 0x06, 0x59, 0x93, 0xd1, 0x2f, 0x61, 0x27, 0x62, 0x5c, 0x2e, 0xeb, 0x4c, 0x76, |
|
| 5558 |
- 0x85, 0x64, 0x7c, 0x59, 0xcb, 0x13, 0x70, 0x73, 0x02, 0xf7, 0x36, 0xbd, 0xa1, 0xc7, 0xb0, 0xfd, |
|
| 5559 |
- 0xe2, 0xb4, 0x5f, 0xc9, 0x55, 0x1f, 0xbe, 0xba, 0x69, 0xfc, 0x70, 0xf3, 0xe3, 0x0b, 0x9f, 0xcb, |
|
| 5560 |
- 0x98, 0x04, 0xa7, 0x7d, 0xf4, 0x53, 0xd8, 0xe9, 0x5e, 0x0c, 0x30, 0xae, 0xe4, 0xab, 0xf5, 0x57, |
|
| 5561 |
- 0x37, 0x8d, 0x87, 0x9b, 0x38, 0xf5, 0x89, 0xc5, 0xa1, 0x87, 0xd9, 0x68, 0xd5, 0x2c, 0xfe, 0x63, |
|
| 5562 |
- 0x0b, 0x6c, 0x53, 0x7e, 0xdf, 0xf5, 0xff, 0xc4, 0x5e, 0xf2, 0x16, 0x2e, 0xef, 0xd5, 0xd6, 0x1b, |
|
| 5563 |
- 0x9f, 0xc4, 0x72, 0x42, 0x30, 0x3a, 0x78, 0x04, 0x65, 0x3f, 0x9a, 0x7d, 0x36, 0xa4, 0x21, 0x19, |
|
| 5564 |
- 0x05, 0xa6, 0x6f, 0xb4, 0xb0, 0xad, 0x6c, 0xbd, 0xc4, 0xa4, 0x2e, 0xb5, 0x1f, 0x4a, 0xca, 0x43, |
|
| 5565 |
- 0xd3, 0x11, 0x5a, 0x78, 0x35, 0x47, 0x5f, 0x40, 0xc1, 0x8f, 0xc8, 0xd4, 0xbc, 0xe3, 0x99, 0x3b, |
|
| 5566 |
- 0x38, 0xed, 0xb7, 0xcf, 0x8d, 0x4e, 0x3b, 0xd6, 0xe2, 0xb6, 0x5e, 0x50, 0x06, 0xac, 0x69, 0xa8, |
|
| 5567 |
- 0xb6, 0x7c, 0x4a, 0xd5, 0x4a, 0xba, 0x40, 0x5b, 0x38, 0x65, 0x69, 0xfe, 0xb7, 0x00, 0xf6, 0x71, |
|
| 5568 |
- 0x10, 0x0b, 0x69, 0x9e, 0x99, 0x77, 0x96, 0xb7, 0x97, 0xb0, 0x4f, 0xf4, 0xaf, 0x05, 0x09, 0x55, |
|
| 5569 |
- 0xcd, 0xd6, 0x2d, 0x8a, 0xc9, 0xdd, 0xe3, 0x4c, 0x77, 0x2b, 0x70, 0xd2, 0xce, 0x74, 0x8a, 0xca, |
|
| 5570 |
- 0xa7, 0x93, 0xc7, 0x15, 0xf2, 0xad, 0x2f, 0x68, 0x00, 0x7b, 0x8c, 0xbb, 0x13, 0x2a, 0x64, 0x52, |
|
| 5571 |
- 0xe9, 0x4d, 0x2b, 0x9e, 0xf9, 0x93, 0xf6, 0x3c, 0x0d, 0x34, 0x65, 0x2e, 0x89, 0x76, 0xd3, 0x07, |
|
| 5572 |
- 0x7a, 0x02, 0x05, 0x4e, 0xae, 0x96, 0xed, 0x56, 0xa6, 0xbe, 0x31, 0xb9, 0x92, 0x1b, 0x2e, 0x34, |
|
| 5573 |
- 0x03, 0xfd, 0x01, 0xc0, 0xf3, 0x45, 0x44, 0xa4, 0x3b, 0xa1, 0xdc, 0x9c, 0x53, 0xe6, 0x16, 0xbb, |
|
| 5574 |
- 0x2b, 0xd4, 0x86, 0x97, 0x14, 0x1b, 0x9d, 0x41, 0xc9, 0x25, 0x4b, 0xa5, 0x15, 0xef, 0xfe, 0x3f, |
|
| 5575 |
- 0x39, 0x6e, 0x1b, 0x17, 0x15, 0xe5, 0x62, 0x71, 0x5b, 0xb7, 0x96, 0x16, 0x6c, 0xb9, 0xc4, 0x28, |
|
| 5576 |
- 0xef, 0x0c, 0xf6, 0xd4, 0x7f, 0xcb, 0xd0, 0xa3, 0x57, 0x24, 0x0e, 0xa4, 0xd0, 0x8f, 0xf1, 0x1d, |
|
| 5577 |
- 0x65, 0x5b, 0x35, 0xc1, 0x5d, 0x83, 0x33, 0x71, 0x95, 0x65, 0xca, 0x86, 0xfe, 0x04, 0xfb, 0x34, |
|
| 5578 |
- 0x74, 0xf9, 0x5c, 0xeb, 0x6c, 0x19, 0xa1, 0x75, 0xf7, 0x66, 0x7b, 0x2b, 0xf0, 0xc6, 0x66, 0x2b, |
|
| 5579 |
- 0xf4, 0x5b, 0xf6, 0xa6, 0x0f, 0x90, 0x3c, 0x84, 0xef, 0x56, 0x7f, 0x08, 0x0a, 0x1e, 0x91, 0x44, |
|
| 5580 |
- 0x4b, 0xae, 0x8c, 0xf5, 0xb8, 0xe3, 0xbc, 0xfe, 0xa6, 0x96, 0xfb, 0xd7, 0x37, 0xb5, 0xdc, 0x5f, |
|
| 5581 |
- 0x16, 0xb5, 0xfc, 0xeb, 0x45, 0x2d, 0xff, 0xcf, 0x45, 0x2d, 0xff, 0xef, 0x45, 0x2d, 0x3f, 0x2a, |
|
| 5582 |
- 0xea, 0xf6, 0xe1, 0x17, 0xff, 0x0b, 0x00, 0x00, 0xff, 0xff, 0x91, 0xbf, 0x5e, 0xca, 0xf8, 0x10, |
|
| 5583 |
- 0x00, 0x00, |
|
| 5479 |
+ 0xe1, 0xad, 0xc7, 0x8c, 0x0f, 0x3d, 0xf5, 0xaa, 0xe9, 0xa1, 0xbf, 0xa1, 0xff, 0xc1, 0xc7, 0x1e, |
|
| 5480 |
+ 0x7b, 0xd2, 0x34, 0xfc, 0x0b, 0xfd, 0x01, 0xed, 0x00, 0x0b, 0x92, 0xcb, 0x64, 0x15, 0x7b, 0x26, |
|
| 5481 |
+ 0xbe, 0xe1, 0xbd, 0xfd, 0xbe, 0x07, 0xe0, 0xe1, 0xc3, 0xc3, 0x5b, 0xb0, 0x45, 0x44, 0x5d, 0xd1, |
|
| 5482 |
+ 0x8a, 0x38, 0x93, 0x0c, 0x21, 0x8f, 0xb9, 0x57, 0x94, 0xb7, 0xc4, 0x97, 0x84, 0x4f, 0xaf, 0x7c, |
|
| 5483 |
+ 0xd9, 0x9a, 0xfd, 0xbc, 0x6a, 0xcb, 0x79, 0x44, 0x0d, 0xa0, 0x7a, 0x7f, 0xcc, 0xc6, 0x4c, 0x0f, |
|
| 5484 |
+ 0x0f, 0xd4, 0xc8, 0x78, 0x6b, 0x63, 0xc6, 0xc6, 0x01, 0x3d, 0xd0, 0xd6, 0x28, 0xbe, 0x3c, 0xf0, |
|
| 5485 |
+ 0x62, 0x4e, 0xa4, 0xcf, 0xc2, 0xe4, 0x7b, 0xf3, 0xba, 0x00, 0xd6, 0x39, 0xf3, 0xe8, 0x20, 0xa2, |
|
| 5486 |
+ 0x2e, 0x3a, 0x06, 0x9b, 0x84, 0x21, 0x93, 0x1a, 0x20, 0x9c, 0x7c, 0x23, 0xbf, 0x6f, 0x1f, 0xd6, |
|
| 5487 |
+ 0x5b, 0xdf, 0x9e, 0xb9, 0xd5, 0x5e, 0xc3, 0x3a, 0x85, 0xd7, 0x37, 0xf5, 0x1c, 0x4e, 0x33, 0xd1, |
|
| 5488 |
+ 0x6f, 0xa1, 0xec, 0x51, 0xe1, 0x73, 0xea, 0x0d, 0x39, 0x0b, 0xa8, 0xb3, 0xd5, 0xc8, 0xef, 0xdf, |
|
| 5489 |
+ 0x39, 0xfc, 0x51, 0x56, 0x24, 0x35, 0x39, 0x66, 0x01, 0xc5, 0xb6, 0x61, 0x28, 0x03, 0x1d, 0x03, |
|
| 5490 |
+ 0x4c, 0xe9, 0x74, 0x44, 0xb9, 0x98, 0xf8, 0x91, 0xb3, 0xad, 0xe9, 0x3f, 0xb9, 0x8d, 0xae, 0xd6, |
|
| 5491 |
+ 0xde, 0x3a, 0x5b, 0xc1, 0x71, 0x8a, 0x8a, 0xce, 0xa0, 0x4c, 0x66, 0xc4, 0x0f, 0xc8, 0xc8, 0x0f, |
|
| 5492 |
+ 0x7c, 0x39, 0x77, 0x0a, 0x3a, 0xd4, 0xc7, 0xdf, 0x19, 0xaa, 0x9d, 0x22, 0xe0, 0x0d, 0x7a, 0xd3, |
|
| 5493 |
+ 0x03, 0x58, 0x4f, 0x84, 0x3e, 0x82, 0xdd, 0x7e, 0xef, 0xbc, 0x7b, 0x72, 0x7e, 0x5c, 0xc9, 0x55, |
|
| 5494 |
+ 0x1f, 0xbc, 0xba, 0x6e, 0xbc, 0xa7, 0x62, 0xac, 0x01, 0x7d, 0x1a, 0x7a, 0x7e, 0x38, 0x46, 0xfb, |
|
| 5495 |
+ 0x60, 0xb5, 0x8f, 0x8e, 0x7a, 0xfd, 0x8b, 0x5e, 0xb7, 0x92, 0xaf, 0x56, 0x5f, 0x5d, 0x37, 0xde, |
|
| 5496 |
+ 0xdf, 0x04, 0xb6, 0x5d, 0x97, 0x46, 0x92, 0x7a, 0xd5, 0xc2, 0x57, 0xff, 0xa8, 0xe5, 0x9a, 0x5f, |
|
| 5497 |
+ 0xe5, 0xa1, 0x9c, 0x5e, 0x04, 0xfa, 0x08, 0x8a, 0xed, 0xa3, 0x8b, 0x93, 0x17, 0xbd, 0x4a, 0x6e, |
|
| 5498 |
+ 0x4d, 0x4f, 0x23, 0xda, 0xae, 0xf4, 0x67, 0x14, 0x3d, 0x86, 0x9d, 0x7e, 0xfb, 0x8b, 0x41, 0xaf, |
|
| 5499 |
+ 0x92, 0x5f, 0x2f, 0x27, 0x0d, 0xeb, 0x93, 0x58, 0x68, 0x54, 0x17, 0xb7, 0x4f, 0xce, 0x2b, 0x5b, |
|
| 5500 |
+ 0xd9, 0xa8, 0x2e, 0x27, 0x7e, 0x68, 0x96, 0xf2, 0xf7, 0x02, 0xd8, 0x03, 0xca, 0x67, 0xbe, 0xfb, |
|
| 5501 |
+ 0x8e, 0x25, 0xf2, 0x29, 0x14, 0x24, 0x11, 0x57, 0x5a, 0x1a, 0x76, 0xb6, 0x34, 0x2e, 0x88, 0xb8, |
|
| 5502 |
+ 0x52, 0x93, 0x1a, 0xba, 0xc6, 0x2b, 0x65, 0x70, 0x1a, 0x05, 0xbe, 0x4b, 0x24, 0xf5, 0xb4, 0x32, |
|
| 5503 |
+ 0xec, 0xc3, 0x1f, 0x67, 0xb1, 0xf1, 0x0a, 0x65, 0xd6, 0xff, 0x2c, 0x87, 0x53, 0x54, 0xf4, 0x14, |
|
| 5504 |
+ 0x8a, 0xe3, 0x80, 0x8d, 0x48, 0xa0, 0x35, 0x61, 0x1f, 0x3e, 0xca, 0x0a, 0x72, 0xac, 0x11, 0xeb, |
|
| 5505 |
+ 0x00, 0x86, 0x82, 0x9e, 0x40, 0x31, 0x8e, 0x3c, 0x22, 0xa9, 0x53, 0xd4, 0xe4, 0x46, 0x16, 0xf9, |
|
| 5506 |
+ 0x0b, 0x8d, 0x38, 0x62, 0xe1, 0xa5, 0x3f, 0xc6, 0x06, 0x8f, 0x4e, 0xc1, 0x0a, 0xa9, 0xfc, 0x92, |
|
| 5507 |
+ 0xf1, 0x2b, 0xe1, 0xec, 0x36, 0xb6, 0xf7, 0xed, 0xc3, 0x4f, 0x32, 0xc5, 0x98, 0x60, 0xda, 0x52, |
|
| 5508 |
+ 0x12, 0x77, 0x32, 0xa5, 0xa1, 0x4c, 0xc2, 0x74, 0xb6, 0x9c, 0x3c, 0x5e, 0x05, 0x40, 0xbf, 0x01, |
|
| 5509 |
+ 0x8b, 0x86, 0x5e, 0xc4, 0xfc, 0x50, 0x3a, 0xd6, 0xed, 0x0b, 0xe9, 0x19, 0x8c, 0x4a, 0x26, 0x5e, |
|
| 5510 |
+ 0x31, 0x14, 0x9b, 0xb3, 0x20, 0x18, 0x11, 0xf7, 0xca, 0x29, 0xbd, 0xe5, 0x36, 0x56, 0x8c, 0x4e, |
|
| 5511 |
+ 0x11, 0x0a, 0x53, 0xe6, 0xd1, 0xe6, 0x01, 0xdc, 0xfb, 0x56, 0xaa, 0x51, 0x15, 0x2c, 0x93, 0xea, |
|
| 5512 |
+ 0x44, 0x23, 0x05, 0xbc, 0xb2, 0x9b, 0x77, 0x61, 0x6f, 0x23, 0xad, 0xcd, 0xbf, 0x16, 0xc0, 0x5a, |
|
| 5513 |
+ 0x9e, 0x35, 0x6a, 0x43, 0xc9, 0x65, 0xa1, 0x24, 0x7e, 0x48, 0xb9, 0x91, 0x57, 0xe6, 0xc9, 0x1c, |
|
| 5514 |
+ 0x2d, 0x41, 0x8a, 0xf5, 0x2c, 0x87, 0xd7, 0x2c, 0xf4, 0x7b, 0x28, 0x71, 0x2a, 0x58, 0xcc, 0x5d, |
|
| 5515 |
+ 0x2a, 0x8c, 0xbe, 0xf6, 0xb3, 0x15, 0x92, 0x80, 0x30, 0xfd, 0x73, 0xec, 0x73, 0xaa, 0xb2, 0x2c, |
|
| 5516 |
+ 0xf0, 0x9a, 0x8a, 0x9e, 0xc2, 0x2e, 0xa7, 0x42, 0x12, 0x2e, 0xbf, 0x4b, 0x22, 0x38, 0x81, 0xf4, |
|
| 5517 |
+ 0x59, 0xe0, 0xbb, 0x73, 0xbc, 0x64, 0xa0, 0xa7, 0x50, 0x8a, 0x02, 0xe2, 0xea, 0xa8, 0xce, 0x8e, |
|
| 5518 |
+ 0xa6, 0x7f, 0x90, 0x45, 0xef, 0x2f, 0x41, 0x78, 0x8d, 0x47, 0x9f, 0x01, 0x04, 0x6c, 0x3c, 0xf4, |
|
| 5519 |
+ 0xb8, 0x3f, 0xa3, 0xdc, 0x48, 0xac, 0x9a, 0xc5, 0xee, 0x6a, 0x04, 0x2e, 0x05, 0x6c, 0x9c, 0x0c, |
|
| 5520 |
+ 0xd1, 0xf1, 0xf7, 0xd2, 0x57, 0x4a, 0x5b, 0xa7, 0x00, 0x64, 0xf5, 0xd5, 0xa8, 0xeb, 0xe3, 0xb7, |
|
| 5521 |
+ 0x0a, 0x65, 0x4e, 0x24, 0x45, 0x47, 0x8f, 0xa0, 0x7c, 0xc9, 0xb8, 0x4b, 0x87, 0xe6, 0xd6, 0x94, |
|
| 5522 |
+ 0xb4, 0x26, 0x6c, 0xed, 0x4b, 0xf4, 0xd5, 0x29, 0xc1, 0x2e, 0x8f, 0x43, 0xe9, 0x4f, 0x69, 0xf3, |
|
| 5523 |
+ 0x14, 0xde, 0xcb, 0x0c, 0x8a, 0x0e, 0xa1, 0xbc, 0x3a, 0xe6, 0xa1, 0xef, 0x69, 0x7d, 0x94, 0x3a, |
|
| 5524 |
+ 0x77, 0x17, 0x37, 0x75, 0x7b, 0xa5, 0x87, 0x93, 0x2e, 0xb6, 0x57, 0xa0, 0x13, 0xaf, 0xf9, 0x37, |
|
| 5525 |
+ 0x0b, 0xf6, 0x36, 0xc4, 0x82, 0xee, 0xc3, 0x8e, 0x3f, 0x25, 0x63, 0x9a, 0xd0, 0x71, 0x62, 0xa0, |
|
| 5526 |
+ 0x1e, 0x14, 0x03, 0x32, 0xa2, 0x81, 0x92, 0x8c, 0x4a, 0xdb, 0xcf, 0xde, 0xa8, 0xba, 0xd6, 0x1f, |
|
| 5527 |
+ 0x35, 0xbe, 0x17, 0x4a, 0x3e, 0xc7, 0x86, 0x8c, 0x1c, 0xd8, 0x75, 0xd9, 0x74, 0x4a, 0x42, 0x55, |
|
| 5528 |
+ 0x9c, 0xb6, 0xf7, 0x4b, 0x78, 0x69, 0x22, 0x04, 0x05, 0xc2, 0xc7, 0xc2, 0x29, 0x68, 0xb7, 0x1e, |
|
| 5529 |
+ 0xa3, 0x0a, 0x6c, 0xd3, 0x70, 0xe6, 0xec, 0x68, 0x97, 0x1a, 0x2a, 0x8f, 0xe7, 0x27, 0x67, 0x5e, |
|
| 5530 |
+ 0xc2, 0x6a, 0xa8, 0x78, 0xb1, 0xa0, 0xdc, 0xd9, 0xd5, 0x2e, 0x3d, 0x46, 0xbf, 0x82, 0xe2, 0x94, |
|
| 5531 |
+ 0xc5, 0xa1, 0x14, 0x8e, 0xa5, 0x17, 0xfb, 0x20, 0x6b, 0xb1, 0x67, 0x0a, 0x61, 0x8a, 0xa7, 0x81, |
|
| 5532 |
+ 0xa3, 0x1e, 0xdc, 0x13, 0x92, 0x45, 0xc3, 0x31, 0x27, 0x2e, 0x1d, 0x46, 0x94, 0xfb, 0xcc, 0x33, |
|
| 5533 |
+ 0x97, 0xff, 0x41, 0x2b, 0xe9, 0x15, 0x5a, 0xcb, 0x5e, 0xa1, 0xd5, 0x35, 0xbd, 0x02, 0xbe, 0xab, |
|
| 5534 |
+ 0x38, 0xc7, 0x8a, 0xd2, 0xd7, 0x0c, 0xd4, 0x87, 0x72, 0x14, 0x07, 0xc1, 0x90, 0x45, 0xc9, 0x3b, |
|
| 5535 |
+ 0x00, 0x3a, 0xc2, 0x5b, 0xa4, 0xac, 0x1f, 0x07, 0xc1, 0xf3, 0x84, 0x84, 0xed, 0x68, 0x6d, 0xa0, |
|
| 5536 |
+ 0xf7, 0xa1, 0x38, 0xe6, 0x2c, 0x8e, 0x84, 0x63, 0xeb, 0x64, 0x18, 0x0b, 0x7d, 0x0e, 0xbb, 0x82, |
|
| 5537 |
+ 0xba, 0x9c, 0x4a, 0xe1, 0x94, 0xf5, 0x56, 0x3f, 0xcc, 0x9a, 0x64, 0xa0, 0x21, 0x98, 0x5e, 0x52, |
|
| 5538 |
+ 0x4e, 0x43, 0x97, 0xe2, 0x25, 0x07, 0x3d, 0x80, 0x6d, 0x29, 0xe7, 0xce, 0x5e, 0x23, 0xbf, 0x6f, |
|
| 5539 |
+ 0x75, 0x76, 0x17, 0x37, 0xf5, 0xed, 0x8b, 0x8b, 0x97, 0x58, 0xf9, 0x54, 0x8d, 0x9a, 0x30, 0x21, |
|
| 5540 |
+ 0x43, 0x32, 0xa5, 0xce, 0x1d, 0x9d, 0xdb, 0x95, 0x8d, 0x5e, 0x02, 0x78, 0xa1, 0x18, 0xba, 0xfa, |
|
| 5541 |
+ 0x52, 0x38, 0x77, 0xf5, 0xee, 0x3e, 0x79, 0xf3, 0xee, 0xba, 0xe7, 0x03, 0x53, 0xa7, 0xf7, 0x16, |
|
| 5542 |
+ 0x37, 0xf5, 0xd2, 0xca, 0xc4, 0x25, 0x2f, 0x14, 0xc9, 0x10, 0x75, 0xc0, 0x9e, 0x50, 0x12, 0xc8, |
|
| 5543 |
+ 0x89, 0x3b, 0xa1, 0xee, 0x95, 0x53, 0xb9, 0xbd, 0xf0, 0x3e, 0xd3, 0x30, 0x13, 0x21, 0x4d, 0x52, |
|
| 5544 |
+ 0x0a, 0x56, 0x4b, 0x15, 0xce, 0x3d, 0x9d, 0xab, 0xc4, 0x40, 0x1f, 0x00, 0xb0, 0x88, 0x86, 0x43, |
|
| 5545 |
+ 0x21, 0x3d, 0x3f, 0x74, 0x90, 0xda, 0x32, 0x2e, 0x29, 0xcf, 0x40, 0x39, 0xd0, 0x43, 0x55, 0x16, |
|
| 5546 |
+ 0x89, 0x37, 0x64, 0x61, 0x30, 0x77, 0x7e, 0xa0, 0xbf, 0x5a, 0xca, 0xf1, 0x3c, 0x0c, 0xe6, 0xa8, |
|
| 5547 |
+ 0x0e, 0xb6, 0xd6, 0x85, 0xf0, 0xc7, 0x21, 0x09, 0x9c, 0xfb, 0x3a, 0x1f, 0xa0, 0x5c, 0x03, 0xed, |
|
| 5548 |
+ 0xa9, 0x7e, 0x06, 0x76, 0x4a, 0xee, 0x4a, 0xa6, 0x57, 0x74, 0x6e, 0x6e, 0x90, 0x1a, 0xaa, 0x35, |
|
| 5549 |
+ 0xcd, 0x48, 0x10, 0x27, 0xcd, 0x5e, 0x09, 0x27, 0xc6, 0xaf, 0xb7, 0x9e, 0xe4, 0xab, 0x87, 0x60, |
|
| 5550 |
+ 0xa7, 0x8e, 0x1d, 0x7d, 0x08, 0x7b, 0x9c, 0x8e, 0x7d, 0x21, 0xf9, 0x7c, 0x48, 0x62, 0x39, 0x71, |
|
| 5551 |
+ 0x7e, 0xa7, 0x09, 0xe5, 0xa5, 0xb3, 0x1d, 0xcb, 0x49, 0x75, 0x08, 0xeb, 0xec, 0xa1, 0x06, 0xd8, |
|
| 5552 |
+ 0xea, 0x54, 0x04, 0xe5, 0x33, 0xca, 0xd5, 0x83, 0xa2, 0x36, 0x9d, 0x76, 0x29, 0xf5, 0x08, 0x4a, |
|
| 5553 |
+ 0xb8, 0x3b, 0xd1, 0x97, 0xb7, 0x84, 0x8d, 0xa5, 0x6e, 0xe3, 0x52, 0xa2, 0xe6, 0x36, 0x1a, 0xb3, |
|
| 5554 |
+ 0xf9, 0xdf, 0x3c, 0x94, 0xd3, 0xef, 0x22, 0x3a, 0x4a, 0xde, 0x33, 0xbd, 0xa5, 0x3b, 0x87, 0x07, |
|
| 5555 |
+ 0x6f, 0x7a, 0x47, 0xf5, 0xeb, 0x11, 0xc4, 0x2a, 0xd8, 0x99, 0x6a, 0x61, 0x35, 0x19, 0xfd, 0x12, |
|
| 5556 |
+ 0x76, 0x22, 0xc6, 0xe5, 0xb2, 0x86, 0xd4, 0x32, 0x2b, 0x3e, 0xe3, 0xcb, 0x6a, 0x9b, 0x80, 0x9b, |
|
| 5557 |
+ 0x13, 0xb8, 0xb3, 0x19, 0x0d, 0x3d, 0x86, 0xed, 0x17, 0x27, 0xfd, 0x4a, 0xae, 0xfa, 0xf0, 0xd5, |
|
| 5558 |
+ 0x75, 0xe3, 0x87, 0x9b, 0x1f, 0x5f, 0xf8, 0x5c, 0xc6, 0x24, 0x38, 0xe9, 0xa3, 0x9f, 0xc2, 0x4e, |
|
| 5559 |
+ 0xf7, 0x7c, 0x80, 0x71, 0x25, 0x5f, 0xad, 0xbf, 0xba, 0x6e, 0x3c, 0xdc, 0xc4, 0xa9, 0x4f, 0x2c, |
|
| 5560 |
+ 0x0e, 0x3d, 0xcc, 0x46, 0xab, 0x76, 0xee, 0x9f, 0x5b, 0x60, 0x9b, 0xd2, 0xfa, 0xae, 0x3b, 0xfe, |
|
| 5561 |
+ 0xbd, 0xe4, 0xb5, 0x5a, 0xde, 0x99, 0xad, 0x37, 0x3e, 0x5a, 0xe5, 0x84, 0x60, 0xce, 0xf8, 0x11, |
|
| 5562 |
+ 0x94, 0xfd, 0x68, 0xf6, 0xe9, 0x90, 0x86, 0x64, 0x14, 0x98, 0xce, 0xce, 0xc2, 0xb6, 0xf2, 0xf5, |
|
| 5563 |
+ 0x12, 0x97, 0xba, 0xb0, 0x7e, 0x28, 0x29, 0x0f, 0x4d, 0xcf, 0x66, 0xe1, 0x95, 0x8d, 0x3e, 0x87, |
|
| 5564 |
+ 0x82, 0x1f, 0x91, 0xa9, 0x79, 0x69, 0x33, 0x77, 0x70, 0xd2, 0x6f, 0x9f, 0x19, 0x0d, 0x76, 0xac, |
|
| 5565 |
+ 0xc5, 0x4d, 0xbd, 0xa0, 0x1c, 0x58, 0xd3, 0x50, 0x6d, 0xf9, 0xd8, 0xa9, 0x99, 0x74, 0xf1, 0xb5, |
|
| 5566 |
+ 0x70, 0xca, 0xd3, 0xfc, 0x5f, 0x01, 0xec, 0xa3, 0x20, 0x16, 0xd2, 0x3c, 0x21, 0xef, 0x2c, 0x6f, |
|
| 5567 |
+ 0x2f, 0xe1, 0x1e, 0xd1, 0xcd, 0x3f, 0x09, 0x55, 0x3d, 0xd6, 0x4d, 0x84, 0xc9, 0xdd, 0xe3, 0xcc, |
|
| 5568 |
+ 0x70, 0x2b, 0x70, 0xd2, 0x70, 0x74, 0x8a, 0x2a, 0xa6, 0x93, 0xc7, 0x15, 0xf2, 0x8d, 0x2f, 0x68, |
|
| 5569 |
+ 0x00, 0x7b, 0x8c, 0xbb, 0x13, 0x2a, 0x64, 0x52, 0xc5, 0x4d, 0xb3, 0x9c, 0xf9, 0x1b, 0xf5, 0x3c, |
|
| 5570 |
+ 0x0d, 0x34, 0x25, 0x2c, 0x59, 0xed, 0x66, 0x0c, 0xf4, 0x04, 0x0a, 0x9c, 0x5c, 0x2e, 0x1b, 0xa2, |
|
| 5571 |
+ 0x4c, 0x7d, 0x63, 0x72, 0x29, 0x37, 0x42, 0x68, 0x06, 0xfa, 0x03, 0x80, 0xe7, 0x8b, 0x88, 0x48, |
|
| 5572 |
+ 0x77, 0x42, 0xb9, 0x39, 0xa7, 0xcc, 0x2d, 0x76, 0x57, 0xa8, 0x8d, 0x28, 0x29, 0x36, 0x3a, 0x85, |
|
| 5573 |
+ 0x92, 0x4b, 0x96, 0x4a, 0x2b, 0xde, 0xfe, 0x07, 0x71, 0xd4, 0x36, 0x21, 0x2a, 0x2a, 0xc4, 0xe2, |
|
| 5574 |
+ 0xa6, 0x6e, 0x2d, 0x3d, 0xd8, 0x72, 0x89, 0x51, 0xde, 0x29, 0xec, 0xa9, 0x3f, 0x8b, 0xa1, 0x47, |
|
| 5575 |
+ 0x2f, 0x49, 0x1c, 0x48, 0xa1, 0x1f, 0xda, 0x5b, 0x4a, 0xb2, 0x6a, 0x53, 0xbb, 0x06, 0x67, 0xd6, |
|
| 5576 |
+ 0x55, 0x96, 0x29, 0x1f, 0xfa, 0x13, 0xdc, 0xa3, 0xa1, 0xcb, 0xe7, 0x5a, 0x67, 0xcb, 0x15, 0x5a, |
|
| 5577 |
+ 0xb7, 0x6f, 0xb6, 0xb7, 0x02, 0x6f, 0x6c, 0xb6, 0x42, 0xbf, 0xe1, 0x6f, 0xfa, 0x00, 0xc9, 0x23, |
|
| 5578 |
+ 0xf7, 0x6e, 0xf5, 0x87, 0xa0, 0xe0, 0x11, 0x49, 0xb4, 0xe4, 0xca, 0x58, 0x8f, 0x3b, 0xce, 0xeb, |
|
| 5579 |
+ 0xaf, 0x6b, 0xb9, 0x7f, 0x7f, 0x5d, 0xcb, 0xfd, 0x65, 0x51, 0xcb, 0xbf, 0x5e, 0xd4, 0xf2, 0xff, |
|
| 5580 |
+ 0x5a, 0xd4, 0xf2, 0xff, 0x59, 0xd4, 0xf2, 0xa3, 0xa2, 0x6e, 0x0d, 0x7e, 0xf1, 0xff, 0x00, 0x00, |
|
| 5581 |
+ 0x00, 0xff, 0xff, 0xed, 0xbe, 0x26, 0xe6, 0x9a, 0x10, 0x00, 0x00, |
|
| 5584 | 5582 |
} |
| ... | ... |
@@ -101,7 +101,6 @@ message TaskSpec {
|
| 101 | 101 |
oneof runtime {
|
| 102 | 102 |
NetworkAttachmentSpec attachment = 8; |
| 103 | 103 |
ContainerSpec container = 1; |
| 104 |
- PluginSpec plugin = 10; |
|
| 105 | 104 |
} |
| 106 | 105 |
|
| 107 | 106 |
// Resource requirements for the container. |
| ... | ... |
@@ -267,14 +266,6 @@ message ContainerSpec {
|
| 267 | 267 |
HealthConfig healthcheck = 16; |
| 268 | 268 |
} |
| 269 | 269 |
|
| 270 |
-// PluginSpec specifies runtime parameters for a plugin. |
|
| 271 |
-message PluginSpec {
|
|
| 272 |
- // image defines the image reference, as specified in the |
|
| 273 |
- // distribution/reference package. This may include a registry host, name, |
|
| 274 |
- // tag or digest. |
|
| 275 |
- string image = 1; |
|
| 276 |
-} |
|
| 277 |
- |
|
| 278 | 270 |
// EndpointSpec defines the properties that can be configured to |
| 279 | 271 |
// access and loadbalance the service. |
| 280 | 272 |
message EndpointSpec {
|
| ... | ... |
@@ -5,7 +5,7 @@ import ( |
| 5 | 5 |
"crypto" |
| 6 | 6 |
"crypto/ecdsa" |
| 7 | 7 |
"crypto/elliptic" |
| 8 |
- "crypto/rand" |
|
| 8 |
+ cryptorand "crypto/rand" |
|
| 9 | 9 |
"crypto/rsa" |
| 10 | 10 |
"crypto/tls" |
| 11 | 11 |
"crypto/x509" |
| ... | ... |
@@ -100,18 +100,29 @@ type CertPaths struct {
|
| 100 | 100 |
Cert, Key string |
| 101 | 101 |
} |
| 102 | 102 |
|
| 103 |
-// RootCA is the representation of everything we need to sign certificates |
|
| 104 |
-type RootCA struct {
|
|
| 103 |
+// LocalSigner is a signer that can sign CSRs |
|
| 104 |
+type LocalSigner struct {
|
|
| 105 |
+ cfsigner.Signer |
|
| 106 |
+ |
|
| 105 | 107 |
// Key will only be used by the original manager to put the private |
| 106 | 108 |
// key-material in raft, no signing operations depend on it. |
| 107 | 109 |
Key []byte |
| 108 |
- // Cert includes the PEM encoded Certificate for the Root CA |
|
| 110 |
+} |
|
| 111 |
+ |
|
| 112 |
+// RootCA is the representation of everything we need to sign certificates |
|
| 113 |
+type RootCA struct {
|
|
| 114 |
+ // Cert contains a bundle of PEM encoded Certificate for the Root CA, the first one of which |
|
| 115 |
+ // must correspond to the key in the local signer, if provided |
|
| 109 | 116 |
Cert []byte |
| 117 |
+ |
|
| 118 |
+ // Pool is the root pool used to validate TLS certificates |
|
| 110 | 119 |
Pool *x509.CertPool |
| 111 |
- // Digest of the serialized bytes of the certificate |
|
| 120 |
+ |
|
| 121 |
+ // Digest of the serialized bytes of the certificate(s) |
|
| 112 | 122 |
Digest digest.Digest |
| 123 |
+ |
|
| 113 | 124 |
// This signer will be nil if the node doesn't have the appropriate key material |
| 114 |
- Signer cfsigner.Signer |
|
| 125 |
+ Signer *LocalSigner |
|
| 115 | 126 |
} |
| 116 | 127 |
|
| 117 | 128 |
// CanSign ensures that the signer has all three necessary elements needed to operate |
| ... | ... |
@@ -154,25 +165,6 @@ func (rca *RootCA) IssueAndSaveNewCertificates(kw KeyWriter, cn, ou, org string) |
| 154 | 154 |
return &tlsKeyPair, nil |
| 155 | 155 |
} |
| 156 | 156 |
|
| 157 |
-// Normally we can just call cert.Verify(opts), but since we actually want more information about |
|
| 158 |
-// whether a certificate is not yet valid or expired, we also need to perform the expiry checks ourselves. |
|
| 159 |
-func verifyCertificate(cert *x509.Certificate, opts x509.VerifyOptions, allowExpired bool) error {
|
|
| 160 |
- _, err := cert.Verify(opts) |
|
| 161 |
- if invalidErr, ok := err.(x509.CertificateInvalidError); ok && invalidErr.Reason == x509.Expired {
|
|
| 162 |
- now := time.Now().UTC() |
|
| 163 |
- if now.Before(cert.NotBefore) {
|
|
| 164 |
- return errors.Wrapf(err, "certificate not valid before %s, and it is currently %s", |
|
| 165 |
- cert.NotBefore.UTC().Format(time.RFC1123), now.Format(time.RFC1123)) |
|
| 166 |
- } |
|
| 167 |
- if allowExpired {
|
|
| 168 |
- return nil |
|
| 169 |
- } |
|
| 170 |
- return errors.Wrapf(err, "certificate expires at %s, and it is currently %s", |
|
| 171 |
- cert.NotAfter.UTC().Format(time.RFC1123), now.Format(time.RFC1123)) |
|
| 172 |
- } |
|
| 173 |
- return err |
|
| 174 |
-} |
|
| 175 |
- |
|
| 176 | 157 |
// RequestAndSaveNewCertificates gets new certificates issued, either by signing them locally if a signer is |
| 177 | 158 |
// available, or by requesting them from the remote server at remoteAddr. |
| 178 | 159 |
func (rca *RootCA) RequestAndSaveNewCertificates(ctx context.Context, kw KeyWriter, config CertificateRequestConfig) (*tls.Certificate, error) {
|
| ... | ... |
@@ -208,20 +200,9 @@ func (rca *RootCA) RequestAndSaveNewCertificates(ctx context.Context, kw KeyWrit |
| 208 | 208 |
// Доверяй, но проверяй. |
| 209 | 209 |
// Before we overwrite our local key + certificate, let's make sure the server gave us one that is valid |
| 210 | 210 |
// Create an X509Cert so we can .Verify() |
| 211 |
- certBlock, _ := pem.Decode(signedCert) |
|
| 212 |
- if certBlock == nil {
|
|
| 213 |
- return nil, errors.New("failed to parse certificate PEM")
|
|
| 214 |
- } |
|
| 215 |
- X509Cert, err := x509.ParseCertificate(certBlock.Bytes) |
|
| 216 |
- if err != nil {
|
|
| 217 |
- return nil, err |
|
| 218 |
- } |
|
| 219 |
- // Include our current root pool |
|
| 220 |
- opts := x509.VerifyOptions{
|
|
| 221 |
- Roots: rca.Pool, |
|
| 222 |
- } |
|
| 223 | 211 |
// Check to see if this certificate was signed by our CA, and isn't expired |
| 224 |
- if err := verifyCertificate(X509Cert, opts, false); err != nil {
|
|
| 212 |
+ parsedCerts, err := ValidateCertChain(rca.Pool, signedCert, false) |
|
| 213 |
+ if err != nil {
|
|
| 225 | 214 |
return nil, err |
| 226 | 215 |
} |
| 227 | 216 |
|
| ... | ... |
@@ -233,7 +214,8 @@ func (rca *RootCA) RequestAndSaveNewCertificates(ctx context.Context, kw KeyWrit |
| 233 | 233 |
|
| 234 | 234 |
var kekUpdate *KEKData |
| 235 | 235 |
for i := 0; i < 5; i++ {
|
| 236 |
- kekUpdate, err = rca.getKEKUpdate(ctx, X509Cert, tlsKeyPair, config.ConnBroker) |
|
| 236 |
+ // ValidateCertChain will always return at least 1 cert, so indexing at 0 is safe |
|
| 237 |
+ kekUpdate, err = rca.getKEKUpdate(ctx, parsedCerts[0], tlsKeyPair, config.ConnBroker) |
|
| 237 | 238 |
if err == nil {
|
| 238 | 239 |
break |
| 239 | 240 |
} |
| ... | ... |
@@ -412,7 +394,104 @@ func NewRootCA(certBytes, keyBytes []byte, certExpiry time.Duration) (RootCA, er |
| 412 | 412 |
} |
| 413 | 413 |
} |
| 414 | 414 |
|
| 415 |
- return RootCA{Signer: signer, Key: keyBytes, Digest: digest, Cert: certBytes, Pool: pool}, nil
|
|
| 415 |
+ return RootCA{Signer: &LocalSigner{Signer: signer, Key: keyBytes}, Digest: digest, Cert: certBytes, Pool: pool}, nil
|
|
| 416 |
+} |
|
| 417 |
+ |
|
| 418 |
+// ValidateCertChain checks checks that the certificates provided chain up to the root pool provided. In addition |
|
| 419 |
+// it also enforces that every cert in the bundle certificates form a chain, each one certifying the one above, |
|
| 420 |
+// as per RFC5246 section 7.4.2, and that every certificate (whether or not it is necessary to form a chain to the root |
|
| 421 |
+// pool) is currently valid and not yet expired (unless allowExpiry is set to true). |
|
| 422 |
+// This is additional validation not required by go's Certificate.Verify (which allows invalid certs in the |
|
| 423 |
+// intermediate pool), because this function is intended to be used when reading certs from untrusted locations such as |
|
| 424 |
+// from disk or over a network when a CSR is signed, so it is extra pedantic. |
|
| 425 |
+// This function always returns all the parsed certificates in the bundle in order, which means there will always be |
|
| 426 |
+// at least 1 certificate if there is no error. |
|
| 427 |
+func ValidateCertChain(rootPool *x509.CertPool, certs []byte, allowExpired bool) ([]*x509.Certificate, error) {
|
|
| 428 |
+ // Parse all the certificates in the cert bundle |
|
| 429 |
+ parsedCerts, err := helpers.ParseCertificatesPEM(certs) |
|
| 430 |
+ if err != nil {
|
|
| 431 |
+ return nil, err |
|
| 432 |
+ } |
|
| 433 |
+ if len(parsedCerts) == 0 {
|
|
| 434 |
+ return nil, errors.New("no certificates to validate")
|
|
| 435 |
+ } |
|
| 436 |
+ now := time.Now() |
|
| 437 |
+ // ensure that they form a chain, each one being signed by the one after it |
|
| 438 |
+ var intermediatePool *x509.CertPool |
|
| 439 |
+ for i, cert := range parsedCerts {
|
|
| 440 |
+ // Manual expiry validation because we want more information on which certificate in the chain is expired, and |
|
| 441 |
+ // because this is an easier way to allow expired certs. |
|
| 442 |
+ if now.Before(cert.NotBefore) {
|
|
| 443 |
+ return nil, errors.Wrapf( |
|
| 444 |
+ x509.CertificateInvalidError{
|
|
| 445 |
+ Cert: cert, |
|
| 446 |
+ Reason: x509.Expired, |
|
| 447 |
+ }, |
|
| 448 |
+ "certificate (%d - %s) not valid before %s, and it is currently %s", |
|
| 449 |
+ i+1, cert.Subject.CommonName, cert.NotBefore.UTC().Format(time.RFC1123), now.Format(time.RFC1123)) |
|
| 450 |
+ } |
|
| 451 |
+ if !allowExpired && now.After(cert.NotAfter) {
|
|
| 452 |
+ return nil, errors.Wrapf( |
|
| 453 |
+ x509.CertificateInvalidError{
|
|
| 454 |
+ Cert: cert, |
|
| 455 |
+ Reason: x509.Expired, |
|
| 456 |
+ }, |
|
| 457 |
+ "certificate (%d - %s) not valid after %s, and it is currently %s", |
|
| 458 |
+ i+1, cert.Subject.CommonName, cert.NotAfter.UTC().Format(time.RFC1123), now.Format(time.RFC1123)) |
|
| 459 |
+ } |
|
| 460 |
+ |
|
| 461 |
+ if i > 0 {
|
|
| 462 |
+ // check that the previous cert was signed by this cert |
|
| 463 |
+ prevCert := parsedCerts[i-1] |
|
| 464 |
+ if err := prevCert.CheckSignatureFrom(cert); err != nil {
|
|
| 465 |
+ return nil, errors.Wrapf(err, "certificates do not form a chain: (%d - %s) is not signed by (%d - %s)", |
|
| 466 |
+ i, prevCert.Subject.CommonName, i+1, cert.Subject.CommonName) |
|
| 467 |
+ } |
|
| 468 |
+ |
|
| 469 |
+ if intermediatePool == nil {
|
|
| 470 |
+ intermediatePool = x509.NewCertPool() |
|
| 471 |
+ } |
|
| 472 |
+ intermediatePool.AddCert(cert) |
|
| 473 |
+ |
|
| 474 |
+ } |
|
| 475 |
+ } |
|
| 476 |
+ |
|
| 477 |
+ verifyOpts := x509.VerifyOptions{
|
|
| 478 |
+ Roots: rootPool, |
|
| 479 |
+ Intermediates: intermediatePool, |
|
| 480 |
+ CurrentTime: now, |
|
| 481 |
+ } |
|
| 482 |
+ |
|
| 483 |
+ // If we accept expired certs, try to build a valid cert chain using some subset of the certs. We start off using the |
|
| 484 |
+ // first certificate's NotAfter as the current time, thus ensuring that the first cert is not expired. If the chain |
|
| 485 |
+ // still fails to validate due to expiry issues, continue iterating over the rest of the certs. |
|
| 486 |
+ // If any of the other certs has an earlier NotAfter time, use that time as the current time instead. This insures that |
|
| 487 |
+ // particular cert, and any that came before it, are not expired. Note that the root that the certs chain up to |
|
| 488 |
+ // should also not be expired at that "current" time. |
|
| 489 |
+ if allowExpired {
|
|
| 490 |
+ verifyOpts.CurrentTime = parsedCerts[0].NotAfter.Add(time.Hour) |
|
| 491 |
+ for _, cert := range parsedCerts {
|
|
| 492 |
+ if !cert.NotAfter.Before(verifyOpts.CurrentTime) {
|
|
| 493 |
+ continue |
|
| 494 |
+ } |
|
| 495 |
+ verifyOpts.CurrentTime = cert.NotAfter |
|
| 496 |
+ |
|
| 497 |
+ _, err = parsedCerts[0].Verify(verifyOpts) |
|
| 498 |
+ if err == nil {
|
|
| 499 |
+ return parsedCerts, nil |
|
| 500 |
+ } |
|
| 501 |
+ } |
|
| 502 |
+ if invalid, ok := err.(x509.CertificateInvalidError); ok && invalid.Reason == x509.Expired {
|
|
| 503 |
+ return nil, errors.New("there is no time span for which all of the certificates, including a root, are valid")
|
|
| 504 |
+ } |
|
| 505 |
+ return nil, err |
|
| 506 |
+ } |
|
| 507 |
+ |
|
| 508 |
+ _, err = parsedCerts[0].Verify(verifyOpts) |
|
| 509 |
+ if err != nil {
|
|
| 510 |
+ return nil, err |
|
| 511 |
+ } |
|
| 512 |
+ return parsedCerts, nil |
|
| 416 | 513 |
} |
| 417 | 514 |
|
| 418 | 515 |
func ensureCertKeyMatch(cert *x509.Certificate, key crypto.PublicKey) error {
|
| ... | ... |
@@ -666,17 +745,11 @@ func saveRootCA(rootCA RootCA, paths CertPaths) error {
|
| 666 | 666 |
} |
| 667 | 667 |
|
| 668 | 668 |
// GenerateNewCSR returns a newly generated key and CSR signed with said key |
| 669 |
-func GenerateNewCSR() (csr, key []byte, err error) {
|
|
| 669 |
+func GenerateNewCSR() ([]byte, []byte, error) {
|
|
| 670 | 670 |
req := &cfcsr.CertificateRequest{
|
| 671 | 671 |
KeyRequest: cfcsr.NewBasicKeyRequest(), |
| 672 | 672 |
} |
| 673 |
- |
|
| 674 |
- csr, key, err = cfcsr.ParseRequest(req) |
|
| 675 |
- if err != nil {
|
|
| 676 |
- return |
|
| 677 |
- } |
|
| 678 |
- |
|
| 679 |
- return |
|
| 673 |
+ return cfcsr.ParseRequest(req) |
|
| 680 | 674 |
} |
| 681 | 675 |
|
| 682 | 676 |
// EncryptECPrivateKey receives a PEM encoded private key and returns an encrypted |
| ... | ... |
@@ -692,7 +765,7 @@ func EncryptECPrivateKey(key []byte, passphraseStr string) ([]byte, error) {
|
| 692 | 692 |
return nil, errors.New("error while decoding PEM key")
|
| 693 | 693 |
} |
| 694 | 694 |
|
| 695 |
- encryptedPEMBlock, err := x509.EncryptPEMBlock(rand.Reader, |
|
| 695 |
+ encryptedPEMBlock, err := x509.EncryptPEMBlock(cryptorand.Reader, |
|
| 696 | 696 |
"EC PRIVATE KEY", |
| 697 | 697 |
keyBlock.Bytes, |
| 698 | 698 |
passphrase, |
| ... | ... |
@@ -4,7 +4,6 @@ import ( |
| 4 | 4 |
cryptorand "crypto/rand" |
| 5 | 5 |
"crypto/tls" |
| 6 | 6 |
"crypto/x509" |
| 7 |
- "encoding/pem" |
|
| 8 | 7 |
"fmt" |
| 9 | 8 |
"math/big" |
| 10 | 9 |
"math/rand" |
| ... | ... |
@@ -112,6 +111,11 @@ func (s *SecurityConfig) RootCA() *RootCA {
|
| 112 | 112 |
return s.rootCA |
| 113 | 113 |
} |
| 114 | 114 |
|
| 115 |
+// ExternalCA returns the external CA. |
|
| 116 |
+func (s *SecurityConfig) ExternalCA() *ExternalCA {
|
|
| 117 |
+ return s.externalCA |
|
| 118 |
+} |
|
| 119 |
+ |
|
| 115 | 120 |
// KeyWriter returns the object that can write keys to disk |
| 116 | 121 |
func (s *SecurityConfig) KeyWriter() KeyWriter {
|
| 117 | 122 |
return s.keyReadWriter |
| ... | ... |
@@ -129,11 +133,45 @@ func (s *SecurityConfig) UpdateRootCA(cert, key []byte, certExpiry time.Duration |
| 129 | 129 |
defer s.mu.Unlock() |
| 130 | 130 |
|
| 131 | 131 |
rootCA, err := NewRootCA(cert, key, certExpiry) |
| 132 |
- if err == nil {
|
|
| 133 |
- s.rootCA = &rootCA |
|
| 132 |
+ if err != nil {
|
|
| 133 |
+ return err |
|
| 134 |
+ } |
|
| 135 |
+ |
|
| 136 |
+ s.rootCA = &rootCA |
|
| 137 |
+ clientTLSConfig := s.ClientTLSCreds.Config() |
|
| 138 |
+ return s.updateTLSCredentials(clientTLSConfig.Certificates) |
|
| 139 |
+} |
|
| 140 |
+ |
|
| 141 |
+// updateTLSCredentials updates the client, server, and TLS credentials on a security config. This function expects |
|
| 142 |
+// something else to have taken out a lock on the SecurityConfig. |
|
| 143 |
+func (s *SecurityConfig) updateTLSCredentials(certificates []tls.Certificate) error {
|
|
| 144 |
+ clientConfig, err := NewClientTLSConfig(certificates, s.rootCA.Pool, ManagerRole) |
|
| 145 |
+ if err != nil {
|
|
| 146 |
+ return errors.Wrap(err, "failed to create a new client config using the new root CA") |
|
| 147 |
+ } |
|
| 148 |
+ |
|
| 149 |
+ serverConfig, err := NewServerTLSConfig(certificates, s.rootCA.Pool) |
|
| 150 |
+ if err != nil {
|
|
| 151 |
+ return errors.Wrap(err, "failed to create a new server config using the new root CA") |
|
| 152 |
+ } |
|
| 153 |
+ |
|
| 154 |
+ if err := s.ClientTLSCreds.loadNewTLSConfig(clientConfig); err != nil {
|
|
| 155 |
+ return errors.Wrap(err, "failed to update the client credentials") |
|
| 134 | 156 |
} |
| 135 | 157 |
|
| 136 |
- return err |
|
| 158 |
+ // Update the external CA to use the new client TLS |
|
| 159 |
+ // config using a copy without a serverName specified. |
|
| 160 |
+ s.externalCA.UpdateTLSConfig(&tls.Config{
|
|
| 161 |
+ Certificates: certificates, |
|
| 162 |
+ RootCAs: s.rootCA.Pool, |
|
| 163 |
+ MinVersion: tls.VersionTLS12, |
|
| 164 |
+ }) |
|
| 165 |
+ |
|
| 166 |
+ if err := s.ServerTLSCreds.loadNewTLSConfig(serverConfig); err != nil {
|
|
| 167 |
+ return errors.Wrap(err, "failed to update the server TLS credentials") |
|
| 168 |
+ } |
|
| 169 |
+ |
|
| 170 |
+ return nil |
|
| 137 | 171 |
} |
| 138 | 172 |
|
| 139 | 173 |
// SigningPolicy creates a policy used by the signer to ensure that the only fields |
| ... | ... |
@@ -263,25 +301,8 @@ func LoadSecurityConfig(ctx context.Context, rootCA RootCA, krw *KeyReadWriter, |
| 263 | 263 |
return nil, err |
| 264 | 264 |
} |
| 265 | 265 |
|
| 266 |
- // Create an x509 certificate out of the contents on disk |
|
| 267 |
- certBlock, _ := pem.Decode([]byte(cert)) |
|
| 268 |
- if certBlock == nil {
|
|
| 269 |
- return nil, errors.New("failed to parse certificate PEM")
|
|
| 270 |
- } |
|
| 271 |
- |
|
| 272 |
- // Create an X509Cert so we can .Verify() |
|
| 273 |
- X509Cert, err := x509.ParseCertificate(certBlock.Bytes) |
|
| 274 |
- if err != nil {
|
|
| 275 |
- return nil, err |
|
| 276 |
- } |
|
| 277 |
- |
|
| 278 |
- // Include our root pool |
|
| 279 |
- opts := x509.VerifyOptions{
|
|
| 280 |
- Roots: rootCA.Pool, |
|
| 281 |
- } |
|
| 282 |
- |
|
| 283 | 266 |
// Check to see if this certificate was signed by our CA, and isn't expired |
| 284 |
- if err := verifyCertificate(X509Cert, opts, allowExpired); err != nil {
|
|
| 267 |
+ if _, err := ValidateCertChain(rootCA.Pool, cert, allowExpired); err != nil {
|
|
| 285 | 268 |
return nil, err |
| 286 | 269 |
} |
| 287 | 270 |
|
| ... | ... |
@@ -415,37 +436,9 @@ func RenewTLSConfigNow(ctx context.Context, s *SecurityConfig, connBroker *conne |
| 415 | 415 |
log.WithError(err).Errorf("failed to renew the certificate")
|
| 416 | 416 |
return err |
| 417 | 417 |
} |
| 418 |
- |
|
| 419 |
- clientTLSConfig, err := NewClientTLSConfig(tlsKeyPair, rootCA.Pool, CARole) |
|
| 420 |
- if err != nil {
|
|
| 421 |
- log.WithError(err).Errorf("failed to create a new client config")
|
|
| 422 |
- return err |
|
| 423 |
- } |
|
| 424 |
- serverTLSConfig, err := NewServerTLSConfig(tlsKeyPair, rootCA.Pool) |
|
| 425 |
- if err != nil {
|
|
| 426 |
- log.WithError(err).Errorf("failed to create a new server config")
|
|
| 427 |
- return err |
|
| 428 |
- } |
|
| 429 |
- |
|
| 430 |
- if err = s.ClientTLSCreds.LoadNewTLSConfig(clientTLSConfig); err != nil {
|
|
| 431 |
- log.WithError(err).Errorf("failed to update the client credentials")
|
|
| 432 |
- return err |
|
| 433 |
- } |
|
| 434 |
- |
|
| 435 |
- // Update the external CA to use the new client TLS |
|
| 436 |
- // config using a copy without a serverName specified. |
|
| 437 |
- s.externalCA.UpdateTLSConfig(&tls.Config{
|
|
| 438 |
- Certificates: clientTLSConfig.Certificates, |
|
| 439 |
- RootCAs: clientTLSConfig.RootCAs, |
|
| 440 |
- MinVersion: tls.VersionTLS12, |
|
| 441 |
- }) |
|
| 442 |
- |
|
| 443 |
- if err = s.ServerTLSCreds.LoadNewTLSConfig(serverTLSConfig); err != nil {
|
|
| 444 |
- log.WithError(err).Errorf("failed to update the server TLS credentials")
|
|
| 445 |
- return err |
|
| 446 |
- } |
|
| 447 |
- |
|
| 448 |
- return nil |
|
| 418 |
+ s.mu.Lock() |
|
| 419 |
+ defer s.mu.Unlock() |
|
| 420 |
+ return s.updateTLSCredentials([]tls.Certificate{*tlsKeyPair})
|
|
| 449 | 421 |
} |
| 450 | 422 |
|
| 451 | 423 |
// RenewTLSConfig will continuously monitor for the necessity of renewing the local certificates, either by |
| ... | ... |
@@ -565,13 +558,13 @@ func calculateRandomExpiry(validFrom, validUntil time.Time) time.Duration {
|
| 565 | 565 |
|
| 566 | 566 |
// NewServerTLSConfig returns a tls.Config configured for a TLS Server, given a tls.Certificate |
| 567 | 567 |
// and the PEM-encoded root CA Certificate |
| 568 |
-func NewServerTLSConfig(cert *tls.Certificate, rootCAPool *x509.CertPool) (*tls.Config, error) {
|
|
| 568 |
+func NewServerTLSConfig(certs []tls.Certificate, rootCAPool *x509.CertPool) (*tls.Config, error) {
|
|
| 569 | 569 |
if rootCAPool == nil {
|
| 570 | 570 |
return nil, errors.New("valid root CA pool required")
|
| 571 | 571 |
} |
| 572 | 572 |
|
| 573 | 573 |
return &tls.Config{
|
| 574 |
- Certificates: []tls.Certificate{*cert},
|
|
| 574 |
+ Certificates: certs, |
|
| 575 | 575 |
// Since we're using the same CA server to issue Certificates to new nodes, we can't |
| 576 | 576 |
// use tls.RequireAndVerifyClientCert |
| 577 | 577 |
ClientAuth: tls.VerifyClientCertIfGiven, |
| ... | ... |
@@ -584,14 +577,14 @@ func NewServerTLSConfig(cert *tls.Certificate, rootCAPool *x509.CertPool) (*tls. |
| 584 | 584 |
|
| 585 | 585 |
// NewClientTLSConfig returns a tls.Config configured for a TLS Client, given a tls.Certificate |
| 586 | 586 |
// the PEM-encoded root CA Certificate, and the name of the remote server the client wants to connect to. |
| 587 |
-func NewClientTLSConfig(cert *tls.Certificate, rootCAPool *x509.CertPool, serverName string) (*tls.Config, error) {
|
|
| 587 |
+func NewClientTLSConfig(certs []tls.Certificate, rootCAPool *x509.CertPool, serverName string) (*tls.Config, error) {
|
|
| 588 | 588 |
if rootCAPool == nil {
|
| 589 | 589 |
return nil, errors.New("valid root CA pool required")
|
| 590 | 590 |
} |
| 591 | 591 |
|
| 592 | 592 |
return &tls.Config{
|
| 593 | 593 |
ServerName: serverName, |
| 594 |
- Certificates: []tls.Certificate{*cert},
|
|
| 594 |
+ Certificates: certs, |
|
| 595 | 595 |
RootCAs: rootCAPool, |
| 596 | 596 |
MinVersion: tls.VersionTLS12, |
| 597 | 597 |
}, nil |
| ... | ... |
@@ -600,7 +593,7 @@ func NewClientTLSConfig(cert *tls.Certificate, rootCAPool *x509.CertPool, server |
| 600 | 600 |
// NewClientTLSCredentials returns GRPC credentials for a TLS GRPC client, given a tls.Certificate |
| 601 | 601 |
// a PEM-Encoded root CA Certificate, and the name of the remote server the client wants to connect to. |
| 602 | 602 |
func (rootCA *RootCA) NewClientTLSCredentials(cert *tls.Certificate, serverName string) (*MutableTLSCreds, error) {
|
| 603 |
- tlsConfig, err := NewClientTLSConfig(cert, rootCA.Pool, serverName) |
|
| 603 |
+ tlsConfig, err := NewClientTLSConfig([]tls.Certificate{*cert}, rootCA.Pool, serverName)
|
|
| 604 | 604 |
if err != nil {
|
| 605 | 605 |
return nil, err |
| 606 | 606 |
} |
| ... | ... |
@@ -613,7 +606,7 @@ func (rootCA *RootCA) NewClientTLSCredentials(cert *tls.Certificate, serverName |
| 613 | 613 |
// NewServerTLSCredentials returns GRPC credentials for a TLS GRPC client, given a tls.Certificate |
| 614 | 614 |
// a PEM-Encoded root CA Certificate, and the name of the remote server the client wants to connect to. |
| 615 | 615 |
func (rootCA *RootCA) NewServerTLSCredentials(cert *tls.Certificate) (*MutableTLSCreds, error) {
|
| 616 |
- tlsConfig, err := NewServerTLSConfig(cert, rootCA.Pool) |
|
| 616 |
+ tlsConfig, err := NewServerTLSConfig([]tls.Certificate{*cert}, rootCA.Pool)
|
|
| 617 | 617 |
if err != nil {
|
| 618 | 618 |
return nil, err |
| 619 | 619 |
} |
| ... | ... |
@@ -1,7 +1,7 @@ |
| 1 | 1 |
package ca |
| 2 | 2 |
|
| 3 | 3 |
import ( |
| 4 |
- "crypto/rand" |
|
| 4 |
+ cryptorand "crypto/rand" |
|
| 5 | 5 |
"crypto/x509" |
| 6 | 6 |
"encoding/pem" |
| 7 | 7 |
"io/ioutil" |
| ... | ... |
@@ -345,7 +345,7 @@ func (k *KeyReadWriter) readKey() (*pem.Block, error) {
|
| 345 | 345 |
// writing it to disk. If the kek is nil, writes it to disk unencrypted. |
| 346 | 346 |
func (k *KeyReadWriter) writeKey(keyBlock *pem.Block, kekData KEKData, pkh PEMKeyHeaders) error {
|
| 347 | 347 |
if kekData.KEK != nil {
|
| 348 |
- encryptedPEMBlock, err := x509.EncryptPEMBlock(rand.Reader, |
|
| 348 |
+ encryptedPEMBlock, err := x509.EncryptPEMBlock(cryptorand.Reader, |
|
| 349 | 349 |
keyBlock.Type, |
| 350 | 350 |
keyBlock.Bytes, |
| 351 | 351 |
kekData.KEK, |
| ... | ... |
@@ -392,14 +392,12 @@ func (s *Server) Run(ctx context.Context) error {
|
| 392 | 392 |
if len(clusters) != 1 {
|
| 393 | 393 |
return errors.New("could not find cluster object")
|
| 394 | 394 |
} |
| 395 |
- s.updateCluster(ctx, clusters[0]) |
|
| 396 |
- |
|
| 395 |
+ s.UpdateRootCA(ctx, clusters[0]) // call once to ensure that the join tokens are always set |
|
| 397 | 396 |
nodes, err = store.FindNodes(readTx, store.All) |
| 398 | 397 |
return err |
| 399 | 398 |
}, |
| 400 | 399 |
state.EventCreateNode{},
|
| 401 | 400 |
state.EventUpdateNode{},
|
| 402 |
- state.EventUpdateCluster{},
|
|
| 403 | 401 |
) |
| 404 | 402 |
|
| 405 | 403 |
// Do this after updateCluster has been called, so isRunning never |
| ... | ... |
@@ -435,6 +433,12 @@ func (s *Server) Run(ctx context.Context) error {
|
| 435 | 435 |
// to the cluster |
| 436 | 436 |
for {
|
| 437 | 437 |
select {
|
| 438 |
+ case <-ctx.Done(): |
|
| 439 |
+ return nil |
|
| 440 |
+ default: |
|
| 441 |
+ } |
|
| 442 |
+ |
|
| 443 |
+ select {
|
|
| 438 | 444 |
case event := <-updates: |
| 439 | 445 |
switch v := event.(type) {
|
| 440 | 446 |
case state.EventCreateNode: |
| ... | ... |
@@ -445,8 +449,6 @@ func (s *Server) Run(ctx context.Context) error {
|
| 445 | 445 |
if !isFinalState(v.Node.Certificate.Status) {
|
| 446 | 446 |
s.evaluateAndSignNodeCert(ctx, v.Node) |
| 447 | 447 |
} |
| 448 |
- case state.EventUpdateCluster: |
|
| 449 |
- s.updateCluster(ctx, v.Cluster) |
|
| 450 | 448 |
} |
| 451 | 449 |
case <-ticker.C: |
| 452 | 450 |
for _, node := range s.pending {
|
| ... | ... |
@@ -512,9 +514,10 @@ func (s *Server) isRunning() bool {
|
| 512 | 512 |
return true |
| 513 | 513 |
} |
| 514 | 514 |
|
| 515 |
-// updateCluster is called when there are cluster changes, and it ensures that the local RootCA is |
|
| 516 |
-// always aware of changes in clusterExpiry and the Root CA key material |
|
| 517 |
-func (s *Server) updateCluster(ctx context.Context, cluster *api.Cluster) {
|
|
| 515 |
+// UpdateRootCA is called when there are cluster changes, and it ensures that the local RootCA is |
|
| 516 |
+// always aware of changes in clusterExpiry and the Root CA key material - this can be called by |
|
| 517 |
+// anything to update the root CA material |
|
| 518 |
+func (s *Server) UpdateRootCA(ctx context.Context, cluster *api.Cluster) {
|
|
| 518 | 519 |
s.mu.Lock() |
| 519 | 520 |
s.joinTokens = cluster.RootCA.JoinTokens.Copy() |
| 520 | 521 |
s.mu.Unlock() |
| ... | ... |
@@ -120,8 +120,8 @@ func (c *MutableTLSCreds) ServerHandshake(rawConn net.Conn) (net.Conn, credentia |
| 120 | 120 |
return conn, credentials.TLSInfo{State: conn.ConnectionState()}, nil
|
| 121 | 121 |
} |
| 122 | 122 |
|
| 123 |
-// LoadNewTLSConfig replaces the currently loaded TLS config with a new one |
|
| 124 |
-func (c *MutableTLSCreds) LoadNewTLSConfig(newConfig *tls.Config) error {
|
|
| 123 |
+// loadNewTLSConfig replaces the currently loaded TLS config with a new one |
|
| 124 |
+func (c *MutableTLSCreds) loadNewTLSConfig(newConfig *tls.Config) error {
|
|
| 125 | 125 |
newSubject, err := GetAndValidateCertificateSubject(newConfig.Certificates) |
| 126 | 126 |
if err != nil {
|
| 127 | 127 |
return err |
| ... | ... |
@@ -1,7 +1,7 @@ |
| 1 | 1 |
package identity |
| 2 | 2 |
|
| 3 | 3 |
import ( |
| 4 |
- "crypto/rand" |
|
| 4 |
+ cryptorand "crypto/rand" |
|
| 5 | 5 |
"fmt" |
| 6 | 6 |
"io" |
| 7 | 7 |
"math/big" |
| ... | ... |
@@ -10,7 +10,7 @@ import ( |
| 10 | 10 |
var ( |
| 11 | 11 |
// idReader is used for random id generation. This declaration allows us to |
| 12 | 12 |
// replace it for testing. |
| 13 |
- idReader = rand.Reader |
|
| 13 |
+ idReader = cryptorand.Reader |
|
| 14 | 14 |
) |
| 15 | 15 |
|
| 16 | 16 |
// parameters for random identifier generation. We can tweak this when there is |
| ... | ... |
@@ -454,7 +454,7 @@ func (na *NetworkAllocator) releaseEndpoints(networks []*api.NetworkAttachment) |
| 454 | 454 |
func (na *NetworkAllocator) allocateVIP(vip *api.Endpoint_VirtualIP) error {
|
| 455 | 455 |
localNet := na.getNetwork(vip.NetworkID) |
| 456 | 456 |
if localNet == nil {
|
| 457 |
- return fmt.Errorf("networkallocator: could not find local network state")
|
|
| 457 |
+ return errors.New("networkallocator: could not find local network state")
|
|
| 458 | 458 |
} |
| 459 | 459 |
|
| 460 | 460 |
// If this IP is already allocated in memory we don't need to |
| ... | ... |
@@ -682,7 +682,7 @@ func (na *NetworkAllocator) resolveDriver(n *api.Network) (driverapi.Driver, str |
| 682 | 682 |
func (na *NetworkAllocator) loadDriver(name string) error {
|
| 683 | 683 |
pg := na.drvRegistry.GetPluginGetter() |
| 684 | 684 |
if pg == nil {
|
| 685 |
- return fmt.Errorf("plugin store is uninitialized")
|
|
| 685 |
+ return errors.New("plugin store is uninitialized")
|
|
| 686 | 686 |
} |
| 687 | 687 |
_, err := pg.Get(name, driverapi.NetworkPluginEndpointType, plugingetter.Lookup) |
| 688 | 688 |
return err |
| ... | ... |
@@ -739,7 +739,7 @@ func (na *NetworkAllocator) allocatePools(n *api.Network) (map[string]string, er |
| 739 | 739 |
} |
| 740 | 740 |
|
| 741 | 741 |
// We don't support user defined address spaces yet so just |
| 742 |
- // retrive default address space names for the driver. |
|
| 742 |
+ // retrieve default address space names for the driver. |
|
| 743 | 743 |
_, asName, err := na.drvRegistry.IPAMDefaultAddressSpaces(dName) |
| 744 | 744 |
if err != nil {
|
| 745 | 745 |
return nil, err |
| ... | ... |
@@ -94,6 +94,10 @@ func validateDriver(driver *api.Driver, pg plugingetter.PluginGetter, pluginType |
| 94 | 94 |
return nil |
| 95 | 95 |
} |
| 96 | 96 |
|
| 97 |
+ if pg == nil {
|
|
| 98 |
+ return grpc.Errorf(codes.InvalidArgument, "plugin %s not supported", driver.Name) |
|
| 99 |
+ } |
|
| 100 |
+ |
|
| 97 | 101 |
p, err := pg.Get(driver.Name, pluginType, plugingetter.Lookup) |
| 98 | 102 |
if err != nil {
|
| 99 | 103 |
return grpc.Errorf(codes.InvalidArgument, "error during lookup of plugin %s", driver.Name) |
| ... | ... |
@@ -117,29 +117,7 @@ func validateUpdate(uc *api.UpdateConfig) error {
|
| 117 | 117 |
return nil |
| 118 | 118 |
} |
| 119 | 119 |
|
| 120 |
-func validateContainerSpec(taskSpec api.TaskSpec) error {
|
|
| 121 |
- // Building a empty/dummy Task to validate the templating and |
|
| 122 |
- // the resulting container spec as well. This is a *best effort* |
|
| 123 |
- // validation. |
|
| 124 |
- container, err := template.ExpandContainerSpec(&api.Task{
|
|
| 125 |
- Spec: taskSpec, |
|
| 126 |
- ServiceID: "serviceid", |
|
| 127 |
- Slot: 1, |
|
| 128 |
- NodeID: "nodeid", |
|
| 129 |
- Networks: []*api.NetworkAttachment{},
|
|
| 130 |
- Annotations: api.Annotations{
|
|
| 131 |
- Name: "taskname", |
|
| 132 |
- }, |
|
| 133 |
- ServiceAnnotations: api.Annotations{
|
|
| 134 |
- Name: "servicename", |
|
| 135 |
- }, |
|
| 136 |
- Endpoint: &api.Endpoint{},
|
|
| 137 |
- LogDriver: taskSpec.LogDriver, |
|
| 138 |
- }) |
|
| 139 |
- if err != nil {
|
|
| 140 |
- return grpc.Errorf(codes.InvalidArgument, err.Error()) |
|
| 141 |
- } |
|
| 142 |
- |
|
| 120 |
+func validateContainerSpec(container *api.ContainerSpec) error {
|
|
| 143 | 121 |
if container == nil {
|
| 144 | 122 |
return grpc.Errorf(codes.InvalidArgument, "ContainerSpec: missing in service spec") |
| 145 | 123 |
} |
| ... | ... |
@@ -163,18 +141,6 @@ func validateContainerSpec(taskSpec api.TaskSpec) error {
|
| 163 | 163 |
return nil |
| 164 | 164 |
} |
| 165 | 165 |
|
| 166 |
-func validatePluginSpec(plugin *api.PluginSpec) error {
|
|
| 167 |
- if plugin.Image == "" {
|
|
| 168 |
- return grpc.Errorf(codes.InvalidArgument, "PluginSpec: image reference must be provided") |
|
| 169 |
- } |
|
| 170 |
- |
|
| 171 |
- if _, err := reference.ParseNormalizedNamed(plugin.Image); err != nil {
|
|
| 172 |
- return grpc.Errorf(codes.InvalidArgument, "PluginSpec: %q is not a valid repository/tag", plugin.Image) |
|
| 173 |
- } |
|
| 174 |
- |
|
| 175 |
- return nil |
|
| 176 |
-} |
|
| 177 |
- |
|
| 178 | 166 |
func validateTaskSpec(taskSpec api.TaskSpec) error {
|
| 179 | 167 |
if err := validateResourceRequirements(taskSpec.Resources); err != nil {
|
| 180 | 168 |
return err |
| ... | ... |
@@ -197,18 +163,36 @@ func validateTaskSpec(taskSpec api.TaskSpec) error {
|
| 197 | 197 |
return grpc.Errorf(codes.InvalidArgument, "TaskSpec: missing runtime") |
| 198 | 198 |
} |
| 199 | 199 |
|
| 200 |
- switch taskSpec.GetRuntime().(type) {
|
|
| 201 |
- case *api.TaskSpec_Container: |
|
| 202 |
- if err := validateContainerSpec(taskSpec); err != nil {
|
|
| 203 |
- return err |
|
| 204 |
- } |
|
| 205 |
- case *api.TaskSpec_Plugin: |
|
| 206 |
- if err := validatePluginSpec(taskSpec.GetPlugin()); err != nil {
|
|
| 207 |
- return err |
|
| 208 |
- } |
|
| 209 |
- default: |
|
| 200 |
+ _, ok := taskSpec.GetRuntime().(*api.TaskSpec_Container) |
|
| 201 |
+ if !ok {
|
|
| 210 | 202 |
return grpc.Errorf(codes.Unimplemented, "RuntimeSpec: unimplemented runtime in service spec") |
| 211 | 203 |
} |
| 204 |
+ |
|
| 205 |
+ // Building a empty/dummy Task to validate the templating and |
|
| 206 |
+ // the resulting container spec as well. This is a *best effort* |
|
| 207 |
+ // validation. |
|
| 208 |
+ preparedSpec, err := template.ExpandContainerSpec(&api.Task{
|
|
| 209 |
+ Spec: taskSpec, |
|
| 210 |
+ ServiceID: "serviceid", |
|
| 211 |
+ Slot: 1, |
|
| 212 |
+ NodeID: "nodeid", |
|
| 213 |
+ Networks: []*api.NetworkAttachment{},
|
|
| 214 |
+ Annotations: api.Annotations{
|
|
| 215 |
+ Name: "taskname", |
|
| 216 |
+ }, |
|
| 217 |
+ ServiceAnnotations: api.Annotations{
|
|
| 218 |
+ Name: "servicename", |
|
| 219 |
+ }, |
|
| 220 |
+ Endpoint: &api.Endpoint{},
|
|
| 221 |
+ LogDriver: taskSpec.LogDriver, |
|
| 222 |
+ }) |
|
| 223 |
+ if err != nil {
|
|
| 224 |
+ return grpc.Errorf(codes.InvalidArgument, err.Error()) |
|
| 225 |
+ } |
|
| 226 |
+ if err := validateContainerSpec(preparedSpec); err != nil {
|
|
| 227 |
+ return err |
|
| 228 |
+ } |
|
| 229 |
+ |
|
| 212 | 230 |
return nil |
| 213 | 231 |
} |
| 214 | 232 |
|
| ... | ... |
@@ -3,6 +3,7 @@ package controlapi |
| 3 | 3 |
import ( |
| 4 | 4 |
"github.com/docker/swarmkit/api" |
| 5 | 5 |
"github.com/docker/swarmkit/api/naming" |
| 6 |
+ "github.com/docker/swarmkit/manager/orchestrator" |
|
| 6 | 7 |
"github.com/docker/swarmkit/manager/state/store" |
| 7 | 8 |
"golang.org/x/net/context" |
| 8 | 9 |
"google.golang.org/grpc" |
| ... | ... |
@@ -97,12 +98,11 @@ func (s *Server) ListTasks(ctx context.Context, request *api.ListTasksRequest) ( |
| 97 | 97 |
default: |
| 98 | 98 |
tasks, err = store.FindTasks(tx, store.All) |
| 99 | 99 |
} |
| 100 |
- }) |
|
| 101 |
- if err != nil {
|
|
| 102 |
- return nil, err |
|
| 103 |
- } |
|
| 104 | 100 |
|
| 105 |
- if request.Filters != nil {
|
|
| 101 |
+ if err != nil || request.Filters == nil {
|
|
| 102 |
+ return |
|
| 103 |
+ } |
|
| 104 |
+ |
|
| 106 | 105 |
tasks = filterTasks(tasks, |
| 107 | 106 |
func(e *api.Task) bool {
|
| 108 | 107 |
return filterContains(naming.Task(e), request.Filters.Names) |
| ... | ... |
@@ -133,7 +133,23 @@ func (s *Server) ListTasks(ctx context.Context, request *api.ListTasksRequest) ( |
| 133 | 133 |
} |
| 134 | 134 |
return false |
| 135 | 135 |
}, |
| 136 |
+ func(e *api.Task) bool {
|
|
| 137 |
+ if !request.Filters.UpToDate {
|
|
| 138 |
+ return true |
|
| 139 |
+ } |
|
| 140 |
+ |
|
| 141 |
+ service := store.GetService(tx, e.ServiceID) |
|
| 142 |
+ if service == nil {
|
|
| 143 |
+ return false |
|
| 144 |
+ } |
|
| 145 |
+ |
|
| 146 |
+ return !orchestrator.IsTaskDirty(service, e) |
|
| 147 |
+ }, |
|
| 136 | 148 |
) |
| 149 |
+ }) |
|
| 150 |
+ |
|
| 151 |
+ if err != nil {
|
|
| 152 |
+ return nil, err |
|
| 137 | 153 |
} |
| 138 | 154 |
|
| 139 | 155 |
return &api.ListTasksResponse{
|
| ... | ... |
@@ -1,7 +1,7 @@ |
| 1 | 1 |
package encryption |
| 2 | 2 |
|
| 3 | 3 |
import ( |
| 4 |
- "crypto/rand" |
|
| 4 |
+ cryptorand "crypto/rand" |
|
| 5 | 5 |
"encoding/base64" |
| 6 | 6 |
"fmt" |
| 7 | 7 |
"io" |
| ... | ... |
@@ -105,7 +105,7 @@ func Defaults(key []byte) (Encrypter, Decrypter) {
|
| 105 | 105 |
// using this package |
| 106 | 106 |
func GenerateSecretKey() []byte {
|
| 107 | 107 |
secretData := make([]byte, naclSecretboxKeySize) |
| 108 |
- if _, err := io.ReadFull(rand.Reader, secretData); err != nil {
|
|
| 108 |
+ if _, err := io.ReadFull(cryptorand.Reader, secretData); err != nil {
|
|
| 109 | 109 |
// panic if we can't read random data |
| 110 | 110 |
panic(errors.Wrap(err, "failed to read random bytes")) |
| 111 | 111 |
} |
| ... | ... |
@@ -1,7 +1,7 @@ |
| 1 | 1 |
package encryption |
| 2 | 2 |
|
| 3 | 3 |
import ( |
| 4 |
- "crypto/rand" |
|
| 4 |
+ cryptorand "crypto/rand" |
|
| 5 | 5 |
"fmt" |
| 6 | 6 |
"io" |
| 7 | 7 |
|
| ... | ... |
@@ -37,7 +37,7 @@ func (n NACLSecretbox) Algorithm() api.MaybeEncryptedRecord_Algorithm {
|
| 37 | 37 |
// Encrypt encrypts some bytes and returns an encrypted record |
| 38 | 38 |
func (n NACLSecretbox) Encrypt(data []byte) (*api.MaybeEncryptedRecord, error) {
|
| 39 | 39 |
var nonce [24]byte |
| 40 |
- if _, err := io.ReadFull(rand.Reader, nonce[:]); err != nil {
|
|
| 40 |
+ if _, err := io.ReadFull(cryptorand.Reader, nonce[:]); err != nil {
|
|
| 41 | 41 |
return nil, err |
| 42 | 42 |
} |
| 43 | 43 |
|
| ... | ... |
@@ -6,7 +6,7 @@ package keymanager |
| 6 | 6 |
// which is used to exchange service discovery and overlay network control |
| 7 | 7 |
// plane information. It can also be used to encrypt overlay data traffic. |
| 8 | 8 |
import ( |
| 9 |
- "crypto/rand" |
|
| 9 |
+ cryptorand "crypto/rand" |
|
| 10 | 10 |
"encoding/binary" |
| 11 | 11 |
"sync" |
| 12 | 12 |
"time" |
| ... | ... |
@@ -95,7 +95,7 @@ func New(store *store.MemoryStore, config *Config) *KeyManager {
|
| 95 | 95 |
func (k *KeyManager) allocateKey(ctx context.Context, subsys string) *api.EncryptionKey {
|
| 96 | 96 |
key := make([]byte, k.config.Keylen) |
| 97 | 97 |
|
| 98 |
- _, err := rand.Read(key) |
|
| 98 |
+ _, err := cryptorand.Read(key) |
|
| 99 | 99 |
if err != nil {
|
| 100 | 100 |
panic(errors.Wrap(err, "key generated failed")) |
| 101 | 101 |
} |
| ... | ... |
@@ -232,7 +232,7 @@ func (k *KeyManager) Stop() error {
|
| 232 | 232 |
// genSkew generates a random uint64 number between 0 and 65535 |
| 233 | 233 |
func genSkew() uint64 {
|
| 234 | 234 |
b := make([]byte, 2) |
| 235 |
- if _, err := rand.Read(b); err != nil {
|
|
| 235 |
+ if _, err := cryptorand.Read(b); err != nil {
|
|
| 236 | 236 |
panic(err) |
| 237 | 237 |
} |
| 238 | 238 |
return uint64(binary.BigEndian.Uint16(b)) |
| ... | ... |
@@ -360,7 +360,7 @@ func (lb *LogBroker) PublishLogs(stream api.LogBroker_PublishLogsServer) (err er |
| 360 | 360 |
}() |
| 361 | 361 |
|
| 362 | 362 |
for {
|
| 363 |
- log, err := stream.Recv() |
|
| 363 |
+ logMsg, err := stream.Recv() |
|
| 364 | 364 |
if err == io.EOF {
|
| 365 | 365 |
return stream.SendAndClose(&api.PublishLogsResponse{})
|
| 366 | 366 |
} |
| ... | ... |
@@ -368,28 +368,37 @@ func (lb *LogBroker) PublishLogs(stream api.LogBroker_PublishLogsServer) (err er |
| 368 | 368 |
return err |
| 369 | 369 |
} |
| 370 | 370 |
|
| 371 |
- if log.SubscriptionID == "" {
|
|
| 371 |
+ if logMsg.SubscriptionID == "" {
|
|
| 372 | 372 |
return grpc.Errorf(codes.InvalidArgument, "missing subscription ID") |
| 373 | 373 |
} |
| 374 | 374 |
|
| 375 | 375 |
if currentSubscription == nil {
|
| 376 |
- currentSubscription = lb.getSubscription(log.SubscriptionID) |
|
| 376 |
+ currentSubscription = lb.getSubscription(logMsg.SubscriptionID) |
|
| 377 | 377 |
if currentSubscription == nil {
|
| 378 | 378 |
return grpc.Errorf(codes.NotFound, "unknown subscription ID") |
| 379 | 379 |
} |
| 380 | 380 |
} else {
|
| 381 |
- if log.SubscriptionID != currentSubscription.message.ID {
|
|
| 381 |
+ if logMsg.SubscriptionID != currentSubscription.message.ID {
|
|
| 382 | 382 |
return grpc.Errorf(codes.InvalidArgument, "different subscription IDs in the same session") |
| 383 | 383 |
} |
| 384 | 384 |
} |
| 385 | 385 |
|
| 386 |
+ // if we have a close message, close out the subscription |
|
| 387 |
+ if logMsg.Close {
|
|
| 388 |
+ // Mark done and then set to nil so if we error after this point, |
|
| 389 |
+ // we don't try to close again in the defer |
|
| 390 |
+ currentSubscription.Done(remote.NodeID, err) |
|
| 391 |
+ currentSubscription = nil |
|
| 392 |
+ return nil |
|
| 393 |
+ } |
|
| 394 |
+ |
|
| 386 | 395 |
// Make sure logs are emitted using the right Node ID to avoid impersonation. |
| 387 |
- for _, msg := range log.Messages {
|
|
| 396 |
+ for _, msg := range logMsg.Messages {
|
|
| 388 | 397 |
if msg.Context.NodeID != remote.NodeID {
|
| 389 | 398 |
return grpc.Errorf(codes.PermissionDenied, "invalid NodeID: expected=%s;received=%s", remote.NodeID, msg.Context.NodeID) |
| 390 | 399 |
} |
| 391 | 400 |
} |
| 392 | 401 |
|
| 393 |
- lb.publish(log) |
|
| 402 |
+ lb.publish(logMsg) |
|
| 394 | 403 |
} |
| 395 | 404 |
} |
| ... | ... |
@@ -182,6 +182,10 @@ func (s *subscription) match() {
|
| 182 | 182 |
continue |
| 183 | 183 |
} |
| 184 | 184 |
for _, task := range tasks {
|
| 185 |
+ // if we're not following, don't add tasks that aren't running yet |
|
| 186 |
+ if !s.follow() && task.Status.State < api.TaskStateRunning {
|
|
| 187 |
+ continue |
|
| 188 |
+ } |
|
| 185 | 189 |
add(task) |
| 186 | 190 |
} |
| 187 | 191 |
} |
| ... | ... |
@@ -514,7 +514,7 @@ func (m *Manager) Run(parent context.Context) error {
|
| 514 | 514 |
} |
| 515 | 515 |
raftConfig := c.Spec.Raft |
| 516 | 516 |
|
| 517 |
- if err := m.watchForKEKChanges(ctx); err != nil {
|
|
| 517 |
+ if err := m.watchForClusterChanges(ctx); err != nil {
|
|
| 518 | 518 |
return err |
| 519 | 519 |
} |
| 520 | 520 |
|
| ... | ... |
@@ -679,7 +679,7 @@ func (m *Manager) updateKEK(ctx context.Context, cluster *api.Cluster) error {
|
| 679 | 679 |
return nil |
| 680 | 680 |
} |
| 681 | 681 |
|
| 682 |
-func (m *Manager) watchForKEKChanges(ctx context.Context) error {
|
|
| 682 |
+func (m *Manager) watchForClusterChanges(ctx context.Context) error {
|
|
| 683 | 683 |
clusterID := m.config.SecurityConfig.ClientTLSCreds.Organization() |
| 684 | 684 |
clusterWatch, clusterWatchCancel, err := store.ViewAndWatch(m.raftNode.MemoryStore(), |
| 685 | 685 |
func(tx store.ReadTx) error {
|
| ... | ... |
@@ -687,6 +687,7 @@ func (m *Manager) watchForKEKChanges(ctx context.Context) error {
|
| 687 | 687 |
if cluster == nil {
|
| 688 | 688 |
return fmt.Errorf("unable to get current cluster")
|
| 689 | 689 |
} |
| 690 |
+ m.caserver.UpdateRootCA(ctx, cluster) |
|
| 690 | 691 |
return m.updateKEK(ctx, cluster) |
| 691 | 692 |
}, |
| 692 | 693 |
state.EventUpdateCluster{
|
| ... | ... |
@@ -702,6 +703,7 @@ func (m *Manager) watchForKEKChanges(ctx context.Context) error {
|
| 702 | 702 |
select {
|
| 703 | 703 |
case event := <-clusterWatch: |
| 704 | 704 |
clusterEvent := event.(state.EventUpdateCluster) |
| 705 |
+ m.caserver.UpdateRootCA(ctx, clusterEvent.Cluster) |
|
| 705 | 706 |
m.updateKEK(ctx, clusterEvent.Cluster) |
| 706 | 707 |
case <-ctx.Done(): |
| 707 | 708 |
clusterWatchCancel() |
| ... | ... |
@@ -1030,6 +1032,10 @@ func defaultClusterObject( |
| 1030 | 1030 |
encryptionConfig api.EncryptionConfig, |
| 1031 | 1031 |
initialUnlockKeys []*api.EncryptionKey, |
| 1032 | 1032 |
rootCA *ca.RootCA) *api.Cluster {
|
| 1033 |
+ var caKey []byte |
|
| 1034 |
+ if rootCA.Signer != nil {
|
|
| 1035 |
+ caKey = rootCA.Signer.Key |
|
| 1036 |
+ } |
|
| 1033 | 1037 |
|
| 1034 | 1038 |
return &api.Cluster{
|
| 1035 | 1039 |
ID: clusterID, |
| ... | ... |
@@ -1048,7 +1054,7 @@ func defaultClusterObject( |
| 1048 | 1048 |
EncryptionConfig: encryptionConfig, |
| 1049 | 1049 |
}, |
| 1050 | 1050 |
RootCA: api.RootCA{
|
| 1051 |
- CAKey: rootCA.Key, |
|
| 1051 |
+ CAKey: caKey, |
|
| 1052 | 1052 |
CACert: rootCA.Cert, |
| 1053 | 1053 |
CACertHash: rootCA.Digest.String(), |
| 1054 | 1054 |
JoinTokens: api.JoinTokens{
|
| ... | ... |
@@ -132,14 +132,6 @@ func (p *peer) resolveAddr(ctx context.Context, id uint64) (string, error) {
|
| 132 | 132 |
return resp.Addr, nil |
| 133 | 133 |
} |
| 134 | 134 |
|
| 135 |
-func (p *peer) reportSnapshot(failure bool) {
|
|
| 136 |
- if failure {
|
|
| 137 |
- p.tr.config.ReportSnapshot(p.id, raft.SnapshotFailure) |
|
| 138 |
- return |
|
| 139 |
- } |
|
| 140 |
- p.tr.config.ReportSnapshot(p.id, raft.SnapshotFinish) |
|
| 141 |
-} |
|
| 142 |
- |
|
| 143 | 135 |
func (p *peer) sendProcessMessage(ctx context.Context, m raftpb.Message) error {
|
| 144 | 136 |
ctx, cancel := context.WithTimeout(ctx, p.tr.config.SendTimeout) |
| 145 | 137 |
defer cancel() |
| ... | ... |
@@ -151,9 +143,9 @@ func (p *peer) sendProcessMessage(ctx context.Context, m raftpb.Message) error {
|
| 151 | 151 |
if err != nil {
|
| 152 | 152 |
p.tr.config.ReportSnapshot(m.To, raft.SnapshotFailure) |
| 153 | 153 |
} else {
|
| 154 |
+ p.tr.config.ReportSnapshot(m.To, raft.SnapshotFinish) |
|
| 154 | 155 |
} |
| 155 | 156 |
} |
| 156 |
- p.reportSnapshot(err != nil) |
|
| 157 | 157 |
if err != nil {
|
| 158 | 158 |
p.tr.config.ReportUnreachable(m.To) |
| 159 | 159 |
return err |
| ... | ... |
@@ -33,7 +33,10 @@ import ( |
| 33 | 33 |
"google.golang.org/grpc/credentials" |
| 34 | 34 |
) |
| 35 | 35 |
|
| 36 |
-const stateFilename = "state.json" |
|
| 36 |
+const ( |
|
| 37 |
+ stateFilename = "state.json" |
|
| 38 |
+ roleChangeTimeout = 16 * time.Second |
|
| 39 |
+) |
|
| 37 | 40 |
|
| 38 | 41 |
var ( |
| 39 | 42 |
errNodeStarted = errors.New("node: already started")
|
| ... | ... |
@@ -269,12 +272,11 @@ func (n *Node) run(ctx context.Context) (err error) {
|
| 269 | 269 |
} |
| 270 | 270 |
n.Lock() |
| 271 | 271 |
// If we got a role change, renew |
| 272 |
- lastRole := n.role |
|
| 273 | 272 |
role := ca.WorkerRole |
| 274 | 273 |
if node.Role == api.NodeRoleManager {
|
| 275 | 274 |
role = ca.ManagerRole |
| 276 | 275 |
} |
| 277 |
- if lastRole == role {
|
|
| 276 |
+ if n.role == role {
|
|
| 278 | 277 |
n.Unlock() |
| 279 | 278 |
continue |
| 280 | 279 |
} |
| ... | ... |
@@ -284,23 +286,23 @@ func (n *Node) run(ctx context.Context) (err error) {
|
| 284 | 284 |
} |
| 285 | 285 |
}() |
| 286 | 286 |
|
| 287 |
+ var wg sync.WaitGroup |
|
| 288 |
+ wg.Add(3) |
|
| 289 |
+ |
|
| 287 | 290 |
updates := ca.RenewTLSConfig(ctx, securityConfig, n.connBroker, forceCertRenewal) |
| 288 | 291 |
go func() {
|
| 289 |
- for {
|
|
| 290 |
- select {
|
|
| 291 |
- case certUpdate := <-updates: |
|
| 292 |
- if certUpdate.Err != nil {
|
|
| 293 |
- logrus.Warnf("error renewing TLS certificate: %v", certUpdate.Err)
|
|
| 294 |
- continue |
|
| 295 |
- } |
|
| 296 |
- n.Lock() |
|
| 297 |
- n.role = certUpdate.Role |
|
| 298 |
- n.roleCond.Broadcast() |
|
| 299 |
- n.Unlock() |
|
| 300 |
- case <-ctx.Done(): |
|
| 301 |
- return |
|
| 292 |
+ for certUpdate := range updates {
|
|
| 293 |
+ if certUpdate.Err != nil {
|
|
| 294 |
+ logrus.Warnf("error renewing TLS certificate: %v", certUpdate.Err)
|
|
| 295 |
+ continue |
|
| 302 | 296 |
} |
| 297 |
+ n.Lock() |
|
| 298 |
+ n.role = certUpdate.Role |
|
| 299 |
+ n.roleCond.Broadcast() |
|
| 300 |
+ n.Unlock() |
|
| 303 | 301 |
} |
| 302 |
+ |
|
| 303 |
+ wg.Done() |
|
| 304 | 304 |
}() |
| 305 | 305 |
|
| 306 | 306 |
role := n.role |
| ... | ... |
@@ -309,10 +311,8 @@ func (n *Node) run(ctx context.Context) (err error) {
|
| 309 | 309 |
agentReady := make(chan struct{})
|
| 310 | 310 |
var managerErr error |
| 311 | 311 |
var agentErr error |
| 312 |
- var wg sync.WaitGroup |
|
| 313 |
- wg.Add(2) |
|
| 314 | 312 |
go func() {
|
| 315 |
- managerErr = n.superviseManager(ctx, securityConfig, managerReady) // store err and loop |
|
| 313 |
+ managerErr = n.superviseManager(ctx, securityConfig, managerReady, forceCertRenewal) // store err and loop |
|
| 316 | 314 |
wg.Done() |
| 317 | 315 |
cancel() |
| 318 | 316 |
}() |
| ... | ... |
@@ -703,7 +703,7 @@ func (n *Node) waitRole(ctx context.Context, role string) error {
|
| 703 | 703 |
return nil |
| 704 | 704 |
} |
| 705 | 705 |
|
| 706 |
-func (n *Node) runManager(ctx context.Context, securityConfig *ca.SecurityConfig, ready chan struct{}, workerRole <-chan struct{}) error {
|
|
| 706 |
+func (n *Node) runManager(ctx context.Context, securityConfig *ca.SecurityConfig, ready chan struct{}, workerRole <-chan struct{}) (bool, error) {
|
|
| 707 | 707 |
var remoteAPI *manager.RemoteAddrs |
| 708 | 708 |
if n.config.ListenRemoteAPI != "" {
|
| 709 | 709 |
remoteAPI = &manager.RemoteAddrs{
|
| ... | ... |
@@ -729,7 +729,7 @@ func (n *Node) runManager(ctx context.Context, securityConfig *ca.SecurityConfig |
| 729 | 729 |
PluginGetter: n.config.PluginGetter, |
| 730 | 730 |
}) |
| 731 | 731 |
if err != nil {
|
| 732 |
- return err |
|
| 732 |
+ return false, err |
|
| 733 | 733 |
} |
| 734 | 734 |
done := make(chan struct{})
|
| 735 | 735 |
var runErr error |
| ... | ... |
@@ -762,7 +762,7 @@ func (n *Node) runManager(ctx context.Context, securityConfig *ca.SecurityConfig |
| 762 | 762 |
// wait for manager stop or for role change |
| 763 | 763 |
select {
|
| 764 | 764 |
case <-done: |
| 765 |
- return runErr |
|
| 765 |
+ return false, runErr |
|
| 766 | 766 |
case <-workerRole: |
| 767 | 767 |
log.G(ctx).Info("role changed to worker, stopping manager")
|
| 768 | 768 |
clearData = true |
| ... | ... |
@@ -770,12 +770,12 @@ func (n *Node) runManager(ctx context.Context, securityConfig *ca.SecurityConfig |
| 770 | 770 |
log.G(ctx).Info("manager removed from raft cluster, stopping manager")
|
| 771 | 771 |
clearData = true |
| 772 | 772 |
case <-ctx.Done(): |
| 773 |
- return ctx.Err() |
|
| 773 |
+ return false, ctx.Err() |
|
| 774 | 774 |
} |
| 775 |
- return nil |
|
| 775 |
+ return clearData, nil |
|
| 776 | 776 |
} |
| 777 | 777 |
|
| 778 |
-func (n *Node) superviseManager(ctx context.Context, securityConfig *ca.SecurityConfig, ready chan struct{}) error {
|
|
| 778 |
+func (n *Node) superviseManager(ctx context.Context, securityConfig *ca.SecurityConfig, ready chan struct{}, forceCertRenewal chan struct{}) error {
|
|
| 779 | 779 |
for {
|
| 780 | 780 |
if err := n.waitRole(ctx, ca.ManagerRole); err != nil {
|
| 781 | 781 |
return err |
| ... | ... |
@@ -789,7 +789,8 @@ func (n *Node) superviseManager(ctx context.Context, securityConfig *ca.Security |
| 789 | 789 |
} |
| 790 | 790 |
}() |
| 791 | 791 |
|
| 792 |
- if err := n.runManager(ctx, securityConfig, ready, workerRole); err != nil {
|
|
| 792 |
+ wasRemoved, err := n.runManager(ctx, securityConfig, ready, workerRole) |
|
| 793 |
+ if err != nil {
|
|
| 793 | 794 |
waitRoleCancel() |
| 794 | 795 |
return errors.Wrap(err, "manager stopped") |
| 795 | 796 |
} |
| ... | ... |
@@ -798,18 +799,60 @@ func (n *Node) superviseManager(ctx context.Context, securityConfig *ca.Security |
| 798 | 798 |
// "manager", it's possible that the manager was demoted and |
| 799 | 799 |
// the agent hasn't realized this yet. We should wait for the |
| 800 | 800 |
// role to change instead of restarting the manager immediately. |
| 801 |
- timer := time.NewTimer(16 * time.Second) |
|
| 802 |
- select {
|
|
| 803 |
- case <-timer.C: |
|
| 804 |
- log.G(ctx).Warn("failed to get worker role after manager stop, restarting manager")
|
|
| 805 |
- case <-workerRole: |
|
| 806 |
- case <-ctx.Done(): |
|
| 807 |
- timer.Stop() |
|
| 808 |
- waitRoleCancel() |
|
| 809 |
- return ctx.Err() |
|
| 801 |
+ err = func() error {
|
|
| 802 |
+ timer := time.NewTimer(roleChangeTimeout) |
|
| 803 |
+ defer timer.Stop() |
|
| 804 |
+ defer waitRoleCancel() |
|
| 805 |
+ |
|
| 806 |
+ select {
|
|
| 807 |
+ case <-timer.C: |
|
| 808 |
+ case <-workerRole: |
|
| 809 |
+ return nil |
|
| 810 |
+ case <-ctx.Done(): |
|
| 811 |
+ return ctx.Err() |
|
| 812 |
+ } |
|
| 813 |
+ |
|
| 814 |
+ if !wasRemoved {
|
|
| 815 |
+ log.G(ctx).Warn("failed to get worker role after manager stop, restarting manager")
|
|
| 816 |
+ return nil |
|
| 817 |
+ } |
|
| 818 |
+ // We need to be extra careful about restarting the |
|
| 819 |
+ // manager. It may cause the node to wrongly join under |
|
| 820 |
+ // a new Raft ID. Since we didn't see a role change |
|
| 821 |
+ // yet, force a certificate renewal. If the certificate |
|
| 822 |
+ // comes back with a worker role, we know we shouldn't |
|
| 823 |
+ // restart the manager. However, if we don't see |
|
| 824 |
+ // workerRole get closed, it means we didn't switch to |
|
| 825 |
+ // a worker certificate, either because we couldn't |
|
| 826 |
+ // contact a working CA, or because we've been |
|
| 827 |
+ // re-promoted. In this case, we must assume we were |
|
| 828 |
+ // re-promoted, and restart the manager. |
|
| 829 |
+ log.G(ctx).Warn("failed to get worker role after manager stop, forcing certificate renewal")
|
|
| 830 |
+ timer.Reset(roleChangeTimeout) |
|
| 831 |
+ |
|
| 832 |
+ select {
|
|
| 833 |
+ case forceCertRenewal <- struct{}{}:
|
|
| 834 |
+ case <-timer.C: |
|
| 835 |
+ log.G(ctx).Warn("failed to trigger certificate renewal after manager stop, restarting manager")
|
|
| 836 |
+ return nil |
|
| 837 |
+ case <-ctx.Done(): |
|
| 838 |
+ return ctx.Err() |
|
| 839 |
+ } |
|
| 840 |
+ |
|
| 841 |
+ // Now that the renewal request has been sent to the |
|
| 842 |
+ // renewal goroutine, wait for a change in role. |
|
| 843 |
+ select {
|
|
| 844 |
+ case <-timer.C: |
|
| 845 |
+ log.G(ctx).Warn("failed to get worker role after manager stop, restarting manager")
|
|
| 846 |
+ case <-workerRole: |
|
| 847 |
+ case <-ctx.Done(): |
|
| 848 |
+ return ctx.Err() |
|
| 849 |
+ } |
|
| 850 |
+ return nil |
|
| 851 |
+ }() |
|
| 852 |
+ if err != nil {
|
|
| 853 |
+ return err |
|
| 810 | 854 |
} |
| 811 |
- timer.Stop() |
|
| 812 |
- waitRoleCancel() |
|
| 813 | 855 |
|
| 814 | 856 |
ready = nil |
| 815 | 857 |
} |