Browse Source

Merge pull request #30548 from yongtang/vendor-swarmkit

Update SwarmKit to 78ae345f449ac69aa741c762df7e5f0020f70275
Alexander Morozov 8 years ago
parent
commit
61198b5ea3

+ 2 - 11
integration-cli/docker_cli_swarm_test.go

@@ -671,17 +671,8 @@ func (s *DockerSwarmSuite) TestSwarmNetworkPlugin(c *check.C) {
 	d := s.AddDaemon(c, true, true)
 
 	out, err := d.Cmd("network", "create", "-d", globalNetworkPlugin, "foo")
-	c.Assert(err, checker.IsNil)
-	c.Assert(strings.TrimSpace(out), checker.Not(checker.Equals), "")
-
-	name := "top"
-	out, err = d.Cmd("service", "create", "--name", name, "--network", "foo", "busybox", "top")
-	c.Assert(err, checker.IsNil)
-	c.Assert(strings.TrimSpace(out), checker.Not(checker.Equals), "")
-
-	out, err = d.Cmd("service", "inspect", "--format", "{{range .Spec.Networks}}{{.Target}}{{end}}", name)
-	c.Assert(err, checker.IsNil)
-	c.Assert(strings.TrimSpace(out), checker.Equals, "foo")
+	c.Assert(err, checker.NotNil)
+	c.Assert(out, checker.Contains, "not supported in swarm mode")
 }
 
 // Test case for #24712

+ 1 - 1
vendor.conf

@@ -102,7 +102,7 @@ github.com/docker/containerd d7975b89804b207b68f8b446cf1e2af72589bfcf
 github.com/tonistiigi/fifo 1405643975692217d6720f8b54aeee1bf2cd5cf4
 
 # cluster
-github.com/docker/swarmkit 037b4913929019d44bc927870bf2d92ce9ca261f
+github.com/docker/swarmkit 78ae345f449ac69aa741c762df7e5f0020f70275
 github.com/golang/mock bd3c8e81be01eef76d4b503f5e687d2d1354d2d9
 github.com/gogo/protobuf 8d70fb3182befc465c4a1eac8ad4d38ff49778e2
 github.com/cloudflare/cfssl 7fb22c8cba7ecaf98e4082d22d65800cf45e042a

+ 149 - 107
vendor/github.com/docker/swarmkit/api/specs.pb.go

@@ -483,8 +483,13 @@ type ContainerSpec struct {
 	// including stdin if it is still open.
 	TTY bool `protobuf:"varint,13,opt,name=tty,proto3" json:"tty,omitempty"`
 	// OpenStdin declares that the standard input (stdin) should be open.
-	OpenStdin bool    `protobuf:"varint,18,opt,name=open_stdin,json=openStdin,proto3" json:"open_stdin,omitempty"`
-	Mounts    []Mount `protobuf:"bytes,8,rep,name=mounts" json:"mounts"`
+	OpenStdin bool `protobuf:"varint,18,opt,name=open_stdin,json=openStdin,proto3" json:"open_stdin,omitempty"`
+	// ReadOnly declares that the container root filesystem is read-only.
+	// This only impacts the root filesystem, not additional mounts (including
+	// tmpfs). For additional mounts that are not part of the initial rootfs,
+	// they will be decided by the modes passed in the mount definition.
+	ReadOnly bool    `protobuf:"varint,19,opt,name=read_only,json=readOnly,proto3" json:"read_only,omitempty"`
+	Mounts   []Mount `protobuf:"bytes,8,rep,name=mounts" json:"mounts"`
 	// StopGracePeriod the grace period for stopping the container before
 	// forcefully killing the container.
 	// Note: Can't use stdduration here because this needs to be nullable.
@@ -1552,6 +1557,18 @@ func (m *ContainerSpec) MarshalTo(dAtA []byte) (int, error) {
 		}
 		i++
 	}
+	if m.ReadOnly {
+		dAtA[i] = 0x98
+		i++
+		dAtA[i] = 0x1
+		i++
+		if m.ReadOnly {
+			dAtA[i] = 1
+		} else {
+			dAtA[i] = 0
+		}
+		i++
+	}
 	return i, nil
 }
 
@@ -2127,6 +2144,9 @@ func (m *ContainerSpec) Size() (n int) {
 	if m.OpenStdin {
 		n += 3
 	}
+	if m.ReadOnly {
+		n += 3
+	}
 	return n
 }
 
@@ -2397,6 +2417,7 @@ func (this *ContainerSpec) String() string {
 		`Healthcheck:` + strings.Replace(fmt.Sprintf("%v", this.Healthcheck), "HealthConfig", "HealthConfig", 1) + `,`,
 		`Hosts:` + fmt.Sprintf("%v", this.Hosts) + `,`,
 		`OpenStdin:` + fmt.Sprintf("%v", this.OpenStdin) + `,`,
+		`ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`,
 		`}`,
 	}, "")
 	return s
@@ -4027,6 +4048,26 @@ func (m *ContainerSpec) Unmarshal(dAtA []byte) error {
 				}
 			}
 			m.OpenStdin = bool(v != 0)
+		case 19:
+			if wireType != 0 {
+				return fmt.Errorf("proto: wrong wireType = %d for field ReadOnly", wireType)
+			}
+			var v int
+			for shift := uint(0); ; shift += 7 {
+				if shift >= 64 {
+					return ErrIntOverflowSpecs
+				}
+				if iNdEx >= l {
+					return io.ErrUnexpectedEOF
+				}
+				b := dAtA[iNdEx]
+				iNdEx++
+				v |= (int(b) & 0x7F) << shift
+				if b < 0x80 {
+					break
+				}
+			}
+			m.ReadOnly = bool(v != 0)
 		default:
 			iNdEx = preIndex
 			skippy, err := skipSpecs(dAtA[iNdEx:])
@@ -5079,109 +5120,110 @@ var (
 func init() { proto.RegisterFile("specs.proto", fileDescriptorSpecs) }
 
 var fileDescriptorSpecs = []byte{
-	// 1654 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xac, 0x57, 0xcd, 0x72, 0x23, 0xb7,
-	0x11, 0x26, 0x25, 0x8a, 0x3f, 0x3d, 0xd4, 0x2e, 0x85, 0xb2, 0x9d, 0x59, 0x3a, 0xa6, 0xb8, 0xf4,
-	0xc6, 0x91, 0xe3, 0x0a, 0x55, 0x51, 0x52, 0xce, 0x3a, 0x1b, 0x57, 0x42, 0x8a, 0x8c, 0x56, 0x51,
-	0x24, 0xb3, 0x20, 0x79, 0x53, 0x7b, 0x62, 0x41, 0x33, 0x10, 0x39, 0xa5, 0xe1, 0x60, 0x02, 0x60,
-	0xe8, 0xe2, 0x2d, 0x47, 0xd7, 0x1e, 0xf2, 0x06, 0x3a, 0xe5, 0x19, 0xf2, 0x0e, 0x7b, 0xcc, 0x29,
-	0x95, 0x93, 0x2a, 0xcb, 0x57, 0xc8, 0x03, 0x24, 0x05, 0x0c, 0x66, 0x38, 0xb4, 0x47, 0x5e, 0x57,
-	0x59, 0x37, 0x74, 0xf3, 0xfb, 0x7a, 0x80, 0xc6, 0x87, 0xee, 0x26, 0x58, 0x22, 0xa4, 0x8e, 0xe8,
-	0x86, 0x9c, 0x49, 0x86, 0x90, 0xcb, 0x9c, 0x6b, 0xca, 0xbb, 0xe2, 0x2b, 0xc2, 0x67, 0xd7, 0x9e,
-	0xec, 0xce, 0x7f, 0xd1, 0xb4, 0xe4, 0x22, 0xa4, 0x06, 0xd0, 0x7c, 0x67, 0xc2, 0x26, 0x4c, 0x2f,
-	0xf7, 0xd5, 0xca, 0x78, 0x5b, 0x13, 0xc6, 0x26, 0x3e, 0xdd, 0xd7, 0xd6, 0x65, 0x74, 0xb5, 0xef,
-	0x46, 0x9c, 0x48, 0x8f, 0x05, 0xf1, 0xef, 0x9d, 0x9b, 0x12, 0x54, 0xcf, 0x98, 0x4b, 0xcf, 0x43,
-	0xea, 0xa0, 0x23, 0xb0, 0x48, 0x10, 0x30, 0xa9, 0x01, 0xc2, 0x2e, 0xb6, 0x8b, 0x7b, 0xd6, 0xc1,
-	0x6e, 0xf7, 0xdb, 0x5f, 0xee, 0xf6, 0x56, 0xb0, 0x7e, 0xe9, 0xf5, 0xed, 0x6e, 0x01, 0x67, 0x99,
-	0xe8, 0x77, 0x50, 0x77, 0xa9, 0xf0, 0x38, 0x75, 0xc7, 0x9c, 0xf9, 0xd4, 0xde, 0x68, 0x17, 0xf7,
-	0x1e, 0x1c, 0xfc, 0x38, 0x2f, 0x92, 0xfa, 0x38, 0x66, 0x3e, 0xc5, 0x96, 0x61, 0x28, 0x03, 0x1d,
-	0x01, 0xcc, 0xe8, 0xec, 0x92, 0x72, 0x31, 0xf5, 0x42, 0x7b, 0x53, 0xd3, 0x7f, 0x7a, 0x17, 0x5d,
-	0xed, 0xbd, 0x7b, 0x9a, 0xc2, 0x71, 0x86, 0x8a, 0x4e, 0xa1, 0x4e, 0xe6, 0xc4, 0xf3, 0xc9, 0xa5,
-	0xe7, 0x7b, 0x72, 0x61, 0x97, 0x74, 0xa8, 0x8f, 0xbf, 0x33, 0x54, 0x2f, 0x43, 0xc0, 0x6b, 0xf4,
-	0x8e, 0x0b, 0xb0, 0xfa, 0x10, 0xfa, 0x08, 0x2a, 0xa3, 0xe1, 0xd9, 0xe0, 0xf8, 0xec, 0xa8, 0x51,
-	0x68, 0x3e, 0x7a, 0x75, 0xd3, 0x7e, 0x57, 0xc5, 0x58, 0x01, 0x46, 0x34, 0x70, 0xbd, 0x60, 0x82,
-	0xf6, 0xa0, 0xda, 0x3b, 0x3c, 0x1c, 0x8e, 0x2e, 0x86, 0x83, 0x46, 0xb1, 0xd9, 0x7c, 0x75, 0xd3,
-	0x7e, 0x6f, 0x1d, 0xd8, 0x73, 0x1c, 0x1a, 0x4a, 0xea, 0x36, 0x4b, 0x5f, 0xff, 0xbd, 0x55, 0xe8,
-	0x7c, 0x5d, 0x84, 0x7a, 0x76, 0x13, 0xe8, 0x23, 0x28, 0xf7, 0x0e, 0x2f, 0x8e, 0x5f, 0x0c, 0x1b,
-	0x85, 0x15, 0x3d, 0x8b, 0xe8, 0x39, 0xd2, 0x9b, 0x53, 0xf4, 0x04, 0xb6, 0x46, 0xbd, 0x2f, 0xcf,
-	0x87, 0x8d, 0xe2, 0x6a, 0x3b, 0x59, 0xd8, 0x88, 0x44, 0x42, 0xa3, 0x06, 0xb8, 0x77, 0x7c, 0xd6,
-	0xd8, 0xc8, 0x47, 0x0d, 0x38, 0xf1, 0x02, 0xb3, 0x95, 0x37, 0x9b, 0x60, 0x9d, 0x53, 0x3e, 0xf7,
-	0x9c, 0x7b, 0x96, 0xc8, 0xa7, 0x50, 0x92, 0x44, 0x5c, 0x6b, 0x69, 0x58, 0xf9, 0xd2, 0xb8, 0x20,
-	0xe2, 0x5a, 0x7d, 0xd4, 0xd0, 0x35, 0x5e, 0x29, 0x83, 0xd3, 0xd0, 0xf7, 0x1c, 0x22, 0xa9, 0xab,
-	0x95, 0x61, 0x1d, 0xfc, 0x24, 0x8f, 0x8d, 0x53, 0x94, 0xd9, 0xff, 0xf3, 0x02, 0xce, 0x50, 0xd1,
-	0x33, 0x28, 0x4f, 0x7c, 0x76, 0x49, 0x7c, 0xad, 0x09, 0xeb, 0xe0, 0x71, 0x5e, 0x90, 0x23, 0x8d,
-	0x58, 0x05, 0x30, 0x14, 0xf4, 0x14, 0xca, 0x51, 0xe8, 0x12, 0x49, 0xed, 0xb2, 0x26, 0xb7, 0xf3,
-	0xc8, 0x5f, 0x6a, 0xc4, 0x21, 0x0b, 0xae, 0xbc, 0x09, 0x36, 0x78, 0x74, 0x02, 0xd5, 0x80, 0xca,
-	0xaf, 0x18, 0xbf, 0x16, 0x76, 0xa5, 0xbd, 0xb9, 0x67, 0x1d, 0x7c, 0x92, 0x2b, 0xc6, 0x18, 0xd3,
-	0x93, 0x92, 0x38, 0xd3, 0x19, 0x0d, 0x64, 0x1c, 0xa6, 0xbf, 0x61, 0x17, 0x71, 0x1a, 0x00, 0xfd,
-	0x16, 0xaa, 0x34, 0x70, 0x43, 0xe6, 0x05, 0xd2, 0xae, 0xde, 0xbd, 0x91, 0xa1, 0xc1, 0xa8, 0x64,
-	0xe2, 0x94, 0xd1, 0x2f, 0x43, 0x69, 0xc6, 0x5c, 0xda, 0xd9, 0x87, 0x9d, 0x6f, 0x25, 0x0b, 0x35,
-	0xa1, 0x6a, 0x92, 0x15, 0xdf, 0x72, 0x09, 0xa7, 0x76, 0xe7, 0x21, 0x6c, 0xaf, 0x25, 0xa6, 0xf3,
-	0xb7, 0x12, 0x54, 0x93, 0xdb, 0x42, 0x3d, 0xa8, 0x39, 0x2c, 0x90, 0xc4, 0x0b, 0x28, 0x37, 0x02,
-	0xc9, 0xcd, 0xed, 0x61, 0x02, 0x52, 0xac, 0xe7, 0x05, 0xbc, 0x62, 0xa1, 0x3f, 0x40, 0x8d, 0x53,
-	0xc1, 0x22, 0xee, 0x50, 0x61, 0x14, 0xb2, 0x97, 0x7f, 0xc7, 0x31, 0x08, 0xd3, 0xbf, 0x44, 0x1e,
-	0xa7, 0x2a, 0x4f, 0x02, 0xaf, 0xa8, 0xe8, 0x19, 0x54, 0x38, 0x15, 0x92, 0x70, 0xf9, 0x5d, 0x97,
-	0x8c, 0x63, 0xc8, 0x88, 0xf9, 0x9e, 0xb3, 0xc0, 0x09, 0x03, 0x3d, 0x83, 0x5a, 0xe8, 0x13, 0x47,
-	0x47, 0xb5, 0xb7, 0x34, 0xfd, 0x83, 0x3c, 0xfa, 0x28, 0x01, 0xe1, 0x15, 0x1e, 0x7d, 0x06, 0xe0,
-	0xb3, 0xc9, 0xd8, 0xe5, 0xde, 0x9c, 0x72, 0x23, 0x92, 0x66, 0x1e, 0x7b, 0xa0, 0x11, 0xb8, 0xe6,
-	0xb3, 0x49, 0xbc, 0x44, 0x47, 0x3f, 0x48, 0x21, 0x19, 0x75, 0x9c, 0x00, 0x90, 0xf4, 0x57, 0xa3,
-	0x8f, 0x8f, 0xbf, 0x57, 0x28, 0x73, 0x23, 0x19, 0x3a, 0x7a, 0x0c, 0xf5, 0x2b, 0xc6, 0x1d, 0x3a,
-	0x36, 0xba, 0xaf, 0x69, 0x4d, 0x58, 0xda, 0x17, 0x0b, 0xbd, 0x5f, 0x83, 0x0a, 0x8f, 0x02, 0xe9,
-	0xcd, 0x68, 0xe7, 0x04, 0xde, 0xcd, 0x0d, 0x8a, 0x0e, 0xa0, 0x9e, 0x5e, 0xf3, 0xd8, 0x73, 0xb5,
-	0x3e, 0x6a, 0xfd, 0x87, 0xcb, 0xdb, 0x5d, 0x2b, 0xd5, 0xc3, 0xf1, 0x00, 0x5b, 0x29, 0xe8, 0xd8,
-	0xed, 0xfc, 0xab, 0x02, 0xdb, 0x6b, 0x62, 0x41, 0xef, 0xc0, 0x96, 0x37, 0x23, 0x13, 0x1a, 0xd3,
-	0x71, 0x6c, 0xa0, 0x21, 0x94, 0x7d, 0x72, 0x49, 0x7d, 0x25, 0x19, 0x95, 0xb6, 0x9f, 0xbf, 0x55,
-	0x75, 0xdd, 0x3f, 0x69, 0xfc, 0x30, 0x90, 0x7c, 0x81, 0x0d, 0x19, 0xd9, 0x50, 0x71, 0xd8, 0x6c,
-	0x46, 0x02, 0x55, 0x5e, 0x36, 0xf7, 0x6a, 0x38, 0x31, 0x11, 0x82, 0x12, 0xe1, 0x13, 0x61, 0x97,
-	0xb4, 0x5b, 0xaf, 0x51, 0x03, 0x36, 0x69, 0x30, 0xb7, 0xb7, 0xb4, 0x4b, 0x2d, 0x95, 0xc7, 0xf5,
-	0xe2, 0x3b, 0xaf, 0x61, 0xb5, 0x54, 0xbc, 0x48, 0x50, 0x6e, 0x57, 0xb4, 0x4b, 0xaf, 0xd1, 0xaf,
-	0xa1, 0x3c, 0x63, 0x51, 0x20, 0x85, 0x5d, 0xd5, 0x9b, 0x7d, 0x94, 0xb7, 0xd9, 0x53, 0x85, 0x30,
-	0xe5, 0xcf, 0xc0, 0xd1, 0x10, 0x76, 0x84, 0x64, 0xe1, 0x78, 0xc2, 0x89, 0x43, 0xc7, 0x21, 0xe5,
-	0x1e, 0x73, 0xf5, 0x6d, 0xa8, 0x18, 0x71, 0xb7, 0xef, 0x26, 0xdd, 0xbe, 0x3b, 0x30, 0xdd, 0x1e,
-	0x3f, 0x54, 0x9c, 0x23, 0x45, 0x19, 0x69, 0x06, 0x1a, 0x41, 0x3d, 0x8c, 0x7c, 0x7f, 0xcc, 0xc2,
-	0xb8, 0x92, 0x83, 0x8e, 0xf0, 0x3d, 0x52, 0x36, 0x8a, 0x7c, 0xff, 0x8b, 0x98, 0x84, 0xad, 0x70,
-	0x65, 0xa0, 0xf7, 0xa0, 0x3c, 0xe1, 0x2c, 0x0a, 0x85, 0x6d, 0xe9, 0x64, 0x18, 0x0b, 0x7d, 0x0e,
-	0x15, 0x41, 0x1d, 0x4e, 0xa5, 0xb0, 0xeb, 0xfa, 0xa8, 0x1f, 0xe6, 0x7d, 0xe4, 0x5c, 0x43, 0x30,
-	0xbd, 0xa2, 0x9c, 0x06, 0x0e, 0xc5, 0x09, 0x07, 0x3d, 0x82, 0x4d, 0x29, 0x17, 0xf6, 0x76, 0xbb,
-	0xb8, 0x57, 0xed, 0x57, 0x96, 0xb7, 0xbb, 0x9b, 0x17, 0x17, 0x2f, 0xb1, 0xf2, 0xa9, 0x1a, 0x35,
-	0x65, 0x42, 0x06, 0x64, 0x46, 0xed, 0x07, 0x3a, 0xb7, 0xa9, 0x8d, 0x5e, 0x02, 0xb8, 0x81, 0x18,
-	0x3b, 0xfa, 0x51, 0xd8, 0x0f, 0xf5, 0xe9, 0x3e, 0x79, 0xfb, 0xe9, 0x06, 0x67, 0xe7, 0xa6, 0xd2,
-	0x6e, 0x2f, 0x6f, 0x77, 0x6b, 0xa9, 0x89, 0x6b, 0x6e, 0x20, 0xe2, 0x25, 0xea, 0x83, 0x35, 0xa5,
-	0xc4, 0x97, 0x53, 0x67, 0x4a, 0x9d, 0x6b, 0xbb, 0x71, 0x77, 0xe1, 0x7d, 0xae, 0x61, 0x26, 0x42,
-	0x96, 0xa4, 0x14, 0xac, 0xb6, 0x2a, 0xec, 0x1d, 0x9d, 0xab, 0xd8, 0x40, 0x1f, 0x00, 0xb0, 0x90,
-	0x06, 0x63, 0x21, 0x5d, 0x2f, 0xb0, 0x91, 0x3a, 0x32, 0xae, 0x29, 0xcf, 0xb9, 0x72, 0x34, 0x3f,
-	0x03, 0x2b, 0x23, 0x58, 0x25, 0xb4, 0x6b, 0xba, 0x30, 0x6f, 0x40, 0x2d, 0x55, 0xd4, 0x39, 0xf1,
-	0xa3, 0x78, 0xe0, 0xaa, 0xe1, 0xd8, 0xf8, 0xcd, 0xc6, 0xd3, 0x62, 0xf3, 0x00, 0xac, 0xcc, 0xc5,
-	0xa1, 0x0f, 0x61, 0x9b, 0xd3, 0x89, 0x27, 0x24, 0x5f, 0x8c, 0x49, 0x24, 0xa7, 0xf6, 0xef, 0x35,
-	0xa1, 0x9e, 0x38, 0x7b, 0x91, 0x9c, 0x36, 0xc7, 0xb0, 0x3a, 0x3f, 0x6a, 0x83, 0xa5, 0xf2, 0x2a,
-	0x28, 0x9f, 0x53, 0xae, 0x5a, 0x82, 0xda, 0x76, 0xd6, 0xa5, 0xee, 0x5f, 0x50, 0xc2, 0x9d, 0xa9,
-	0x7e, 0x7e, 0x35, 0x6c, 0x2c, 0xf5, 0x9e, 0x12, 0x91, 0x99, 0xf7, 0x64, 0xcc, 0xce, 0x7f, 0x8b,
-	0x50, 0xcf, 0xf6, 0x26, 0x74, 0x18, 0x77, 0x24, 0x7d, 0xa4, 0x07, 0x07, 0xfb, 0x6f, 0xeb, 0x65,
-	0xba, 0xfe, 0xfb, 0x91, 0x0a, 0x76, 0xaa, 0xc6, 0x48, 0x4d, 0x46, 0xbf, 0x82, 0xad, 0x90, 0x71,
-	0x99, 0x54, 0x81, 0x56, 0x6e, 0xcd, 0x66, 0x3c, 0xa9, 0x97, 0x31, 0xb8, 0x33, 0x85, 0x07, 0xeb,
-	0xd1, 0xd0, 0x13, 0xd8, 0x7c, 0x71, 0x3c, 0x6a, 0x14, 0x9a, 0xef, 0xbf, 0xba, 0x69, 0xff, 0x68,
-	0xfd, 0xc7, 0x17, 0x1e, 0x97, 0x11, 0xf1, 0x8f, 0x47, 0xe8, 0x67, 0xb0, 0x35, 0x38, 0x3b, 0xc7,
-	0xb8, 0x51, 0x6c, 0xee, 0xbe, 0xba, 0x69, 0xbf, 0xbf, 0x8e, 0x53, 0x3f, 0xb1, 0x28, 0x70, 0x31,
-	0xbb, 0x4c, 0x47, 0xaa, 0x7f, 0x6c, 0x80, 0x65, 0x8a, 0xe3, 0x7d, 0x4f, 0xdd, 0xdb, 0x71, 0xbf,
-	0x49, 0x54, 0xbf, 0xf1, 0xd6, 0xb6, 0x53, 0x8f, 0x09, 0xe6, 0x8e, 0x1f, 0x43, 0xdd, 0x0b, 0xe7,
-	0x9f, 0x8e, 0x69, 0x40, 0x2e, 0x7d, 0x33, 0x5d, 0x55, 0xb1, 0xa5, 0x7c, 0xc3, 0xd8, 0xa5, 0x9e,
-	0x9c, 0x17, 0x48, 0xca, 0x03, 0x33, 0x37, 0x55, 0x71, 0x6a, 0xa3, 0xcf, 0xa1, 0xe4, 0x85, 0x64,
-	0x66, 0x7a, 0x65, 0xee, 0x09, 0x8e, 0x47, 0xbd, 0x53, 0xa3, 0xc1, 0x7e, 0x75, 0x79, 0xbb, 0x5b,
-	0x52, 0x0e, 0xac, 0x69, 0xa8, 0x95, 0xb4, 0x2b, 0xf5, 0x25, 0x5d, 0x3e, 0xab, 0x38, 0xe3, 0xe9,
-	0xfc, 0xaf, 0x04, 0xd6, 0xa1, 0x1f, 0x09, 0x69, 0x9a, 0xc0, 0xbd, 0xe5, 0xed, 0x25, 0xec, 0x10,
-	0x3d, 0x80, 0x93, 0x40, 0x55, 0x54, 0x3d, 0x06, 0x98, 0xdc, 0x3d, 0xc9, 0x0d, 0x97, 0x82, 0xe3,
-	0x91, 0xa1, 0x5f, 0x56, 0x31, 0xed, 0x22, 0x6e, 0x90, 0x6f, 0xfc, 0x82, 0xce, 0x61, 0x9b, 0x71,
-	0x67, 0x4a, 0x85, 0x8c, 0xeb, 0xb0, 0x19, 0x58, 0x73, 0xff, 0xca, 0x7c, 0x91, 0x05, 0x9a, 0x22,
-	0x14, 0xef, 0x76, 0x3d, 0x06, 0x7a, 0x0a, 0x25, 0x4e, 0xae, 0x92, 0x91, 0x26, 0x57, 0xdf, 0x98,
-	0x5c, 0xc9, 0xb5, 0x10, 0x9a, 0x81, 0xfe, 0x08, 0xe0, 0x7a, 0x22, 0x24, 0xd2, 0x99, 0x52, 0x6e,
-	0xee, 0x29, 0xf7, 0x88, 0x83, 0x14, 0xb5, 0x16, 0x25, 0xc3, 0x46, 0x27, 0x50, 0x73, 0x48, 0xa2,
-	0xb4, 0xf2, 0xdd, 0x53, 0xfc, 0x61, 0xcf, 0x84, 0x68, 0xa8, 0x10, 0xcb, 0xdb, 0xdd, 0x6a, 0xe2,
-	0xc1, 0x55, 0x87, 0x18, 0xe5, 0x9d, 0xc0, 0xb6, 0x9a, 0xee, 0xc7, 0x2e, 0xbd, 0x22, 0x91, 0x2f,
-	0x85, 0x6e, 0x95, 0x77, 0x14, 0x55, 0x35, 0x68, 0x0e, 0x0c, 0xce, 0xec, 0xab, 0x2e, 0x33, 0x3e,
-	0xf4, 0x67, 0xd8, 0xa1, 0x81, 0xc3, 0x17, 0x5a, 0x67, 0xc9, 0x0e, 0xab, 0x77, 0x1f, 0x76, 0x98,
-	0x82, 0xd7, 0x0e, 0xdb, 0xa0, 0xdf, 0xf0, 0x77, 0x3c, 0x80, 0xb8, 0x4d, 0xdd, 0xaf, 0xfe, 0x10,
-	0x94, 0x5c, 0x22, 0x89, 0x96, 0x5c, 0x1d, 0xeb, 0x75, 0xdf, 0x7e, 0xfd, 0xa6, 0x55, 0xf8, 0xf7,
-	0x9b, 0x56, 0xe1, 0xaf, 0xcb, 0x56, 0xf1, 0xf5, 0xb2, 0x55, 0xfc, 0xe7, 0xb2, 0x55, 0xfc, 0xcf,
-	0xb2, 0x55, 0xbc, 0x2c, 0xeb, 0xe6, 0xfe, 0xcb, 0xff, 0x07, 0x00, 0x00, 0xff, 0xff, 0x91, 0x92,
-	0xb2, 0x3a, 0x1e, 0x10, 0x00, 0x00,
+	// 1672 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xac, 0x57, 0x41, 0x73, 0x1b, 0xb7,
+	0x15, 0x26, 0x25, 0x8a, 0x5c, 0xbe, 0xa5, 0x6c, 0x0a, 0x4d, 0xd2, 0x35, 0xdd, 0x50, 0x34, 0xe3,
+	0xa6, 0x4a, 0x33, 0xa5, 0xa6, 0x6a, 0x27, 0x75, 0xea, 0x66, 0x5a, 0x52, 0x64, 0x65, 0x55, 0x95,
+	0xcc, 0x81, 0x14, 0x77, 0x7c, 0xe2, 0x40, 0xbb, 0x10, 0xb9, 0xa3, 0xe5, 0x62, 0x0b, 0x60, 0x99,
+	0xe1, 0xad, 0xc7, 0x8c, 0x0f, 0xfd, 0x07, 0x3a, 0xf5, 0x37, 0xf4, 0x3f, 0xf8, 0xd8, 0x63, 0x4f,
+	0x9a, 0x9a, 0x7f, 0x21, 0x3f, 0xa0, 0x1d, 0x60, 0xb1, 0xe4, 0x32, 0x59, 0xc5, 0x99, 0xa9, 0x6f,
+	0x78, 0x8f, 0xdf, 0xf7, 0x16, 0x78, 0xf8, 0xf0, 0xde, 0x23, 0xd8, 0x22, 0xa2, 0xae, 0xe8, 0x44,
+	0x9c, 0x49, 0x86, 0x90, 0xc7, 0xdc, 0x6b, 0xca, 0x3b, 0xe2, 0x2b, 0xc2, 0xa7, 0xd7, 0xbe, 0xec,
+	0xcc, 0x7e, 0xd9, 0xb0, 0xe5, 0x3c, 0xa2, 0x06, 0xd0, 0x78, 0x6f, 0xcc, 0xc6, 0x4c, 0x2f, 0xf7,
+	0xd5, 0xca, 0x78, 0x9b, 0x63, 0xc6, 0xc6, 0x01, 0xdd, 0xd7, 0xd6, 0x65, 0x7c, 0xb5, 0xef, 0xc5,
+	0x9c, 0x48, 0x9f, 0x85, 0xc9, 0xef, 0xed, 0x9b, 0x12, 0x58, 0x67, 0xcc, 0xa3, 0xe7, 0x11, 0x75,
+	0xd1, 0x11, 0xd8, 0x24, 0x0c, 0x99, 0xd4, 0x00, 0xe1, 0x14, 0x5b, 0xc5, 0x3d, 0xfb, 0x60, 0xb7,
+	0xf3, 0xdd, 0x2f, 0x77, 0xba, 0x2b, 0x58, 0xaf, 0xf4, 0xfa, 0x76, 0xb7, 0x80, 0xb3, 0x4c, 0xf4,
+	0x7b, 0xa8, 0x79, 0x54, 0xf8, 0x9c, 0x7a, 0x23, 0xce, 0x02, 0xea, 0x6c, 0xb4, 0x8a, 0x7b, 0xf7,
+	0x0e, 0x7e, 0x92, 0x17, 0x49, 0x7d, 0x1c, 0xb3, 0x80, 0x62, 0xdb, 0x30, 0x94, 0x81, 0x8e, 0x00,
+	0xa6, 0x74, 0x7a, 0x49, 0xb9, 0x98, 0xf8, 0x91, 0xb3, 0xa9, 0xe9, 0x3f, 0xbb, 0x8b, 0xae, 0xf6,
+	0xde, 0x39, 0x5d, 0xc2, 0x71, 0x86, 0x8a, 0x4e, 0xa1, 0x46, 0x66, 0xc4, 0x0f, 0xc8, 0xa5, 0x1f,
+	0xf8, 0x72, 0xee, 0x94, 0x74, 0xa8, 0x4f, 0xbe, 0x37, 0x54, 0x37, 0x43, 0xc0, 0x6b, 0xf4, 0xb6,
+	0x07, 0xb0, 0xfa, 0x10, 0xfa, 0x18, 0x2a, 0xc3, 0xc1, 0x59, 0xff, 0xf8, 0xec, 0xa8, 0x5e, 0x68,
+	0x3c, 0x78, 0x75, 0xd3, 0x7a, 0x5f, 0xc5, 0x58, 0x01, 0x86, 0x34, 0xf4, 0xfc, 0x70, 0x8c, 0xf6,
+	0xc0, 0xea, 0x1e, 0x1e, 0x0e, 0x86, 0x17, 0x83, 0x7e, 0xbd, 0xd8, 0x68, 0xbc, 0xba, 0x69, 0x7d,
+	0xb0, 0x0e, 0xec, 0xba, 0x2e, 0x8d, 0x24, 0xf5, 0x1a, 0xa5, 0xaf, 0xff, 0xd1, 0x2c, 0xb4, 0xbf,
+	0x2e, 0x42, 0x2d, 0xbb, 0x09, 0xf4, 0x31, 0x94, 0xbb, 0x87, 0x17, 0xc7, 0x2f, 0x06, 0xf5, 0xc2,
+	0x8a, 0x9e, 0x45, 0x74, 0x5d, 0xe9, 0xcf, 0x28, 0x7a, 0x0c, 0x5b, 0xc3, 0xee, 0x97, 0xe7, 0x83,
+	0x7a, 0x71, 0xb5, 0x9d, 0x2c, 0x6c, 0x48, 0x62, 0xa1, 0x51, 0x7d, 0xdc, 0x3d, 0x3e, 0xab, 0x6f,
+	0xe4, 0xa3, 0xfa, 0x9c, 0xf8, 0xa1, 0xd9, 0xca, 0x9b, 0x4d, 0xb0, 0xcf, 0x29, 0x9f, 0xf9, 0xee,
+	0x3b, 0x96, 0xc8, 0x67, 0x50, 0x92, 0x44, 0x5c, 0x6b, 0x69, 0xd8, 0xf9, 0xd2, 0xb8, 0x20, 0xe2,
+	0x5a, 0x7d, 0xd4, 0xd0, 0x35, 0x5e, 0x29, 0x83, 0xd3, 0x28, 0xf0, 0x5d, 0x22, 0xa9, 0xa7, 0x95,
+	0x61, 0x1f, 0xfc, 0x34, 0x8f, 0x8d, 0x97, 0x28, 0xb3, 0xff, 0x67, 0x05, 0x9c, 0xa1, 0xa2, 0xa7,
+	0x50, 0x1e, 0x07, 0xec, 0x92, 0x04, 0x5a, 0x13, 0xf6, 0xc1, 0xa3, 0xbc, 0x20, 0x47, 0x1a, 0xb1,
+	0x0a, 0x60, 0x28, 0xe8, 0x09, 0x94, 0xe3, 0xc8, 0x23, 0x92, 0x3a, 0x65, 0x4d, 0x6e, 0xe5, 0x91,
+	0xbf, 0xd4, 0x88, 0x43, 0x16, 0x5e, 0xf9, 0x63, 0x6c, 0xf0, 0xe8, 0x04, 0xac, 0x90, 0xca, 0xaf,
+	0x18, 0xbf, 0x16, 0x4e, 0xa5, 0xb5, 0xb9, 0x67, 0x1f, 0x7c, 0x9a, 0x2b, 0xc6, 0x04, 0xd3, 0x95,
+	0x92, 0xb8, 0x93, 0x29, 0x0d, 0x65, 0x12, 0xa6, 0xb7, 0xe1, 0x14, 0xf1, 0x32, 0x00, 0xfa, 0x1d,
+	0x58, 0x34, 0xf4, 0x22, 0xe6, 0x87, 0xd2, 0xb1, 0xee, 0xde, 0xc8, 0xc0, 0x60, 0x54, 0x32, 0xf1,
+	0x92, 0xd1, 0x2b, 0x43, 0x69, 0xca, 0x3c, 0xda, 0xde, 0x87, 0x9d, 0xef, 0x24, 0x0b, 0x35, 0xc0,
+	0x32, 0xc9, 0x4a, 0x6e, 0xb9, 0x84, 0x97, 0x76, 0xfb, 0x3e, 0x6c, 0xaf, 0x25, 0xa6, 0xfd, 0xf7,
+	0x12, 0x58, 0xe9, 0x6d, 0xa1, 0x2e, 0x54, 0x5d, 0x16, 0x4a, 0xe2, 0x87, 0x94, 0x1b, 0x81, 0xe4,
+	0xe6, 0xf6, 0x30, 0x05, 0x29, 0xd6, 0xb3, 0x02, 0x5e, 0xb1, 0xd0, 0x1f, 0xa1, 0xca, 0xa9, 0x60,
+	0x31, 0x77, 0xa9, 0x30, 0x0a, 0xd9, 0xcb, 0xbf, 0xe3, 0x04, 0x84, 0xe9, 0x5f, 0x63, 0x9f, 0x53,
+	0x95, 0x27, 0x81, 0x57, 0x54, 0xf4, 0x14, 0x2a, 0x9c, 0x0a, 0x49, 0xb8, 0xfc, 0xbe, 0x4b, 0xc6,
+	0x09, 0x64, 0xc8, 0x02, 0xdf, 0x9d, 0xe3, 0x94, 0x81, 0x9e, 0x42, 0x35, 0x0a, 0x88, 0xab, 0xa3,
+	0x3a, 0x5b, 0x9a, 0xfe, 0x61, 0x1e, 0x7d, 0x98, 0x82, 0xf0, 0x0a, 0x8f, 0x3e, 0x07, 0x08, 0xd8,
+	0x78, 0xe4, 0x71, 0x7f, 0x46, 0xb9, 0x11, 0x49, 0x23, 0x8f, 0xdd, 0xd7, 0x08, 0x5c, 0x0d, 0xd8,
+	0x38, 0x59, 0xa2, 0xa3, 0xff, 0x4b, 0x21, 0x19, 0x75, 0x9c, 0x00, 0x90, 0xe5, 0xaf, 0x46, 0x1f,
+	0x9f, 0xfc, 0xa0, 0x50, 0xe6, 0x46, 0x32, 0x74, 0xf4, 0x08, 0x6a, 0x57, 0x8c, 0xbb, 0x74, 0x64,
+	0x74, 0x5f, 0xd5, 0x9a, 0xb0, 0xb5, 0x2f, 0x11, 0x7a, 0xaf, 0x0a, 0x15, 0x1e, 0x87, 0xd2, 0x9f,
+	0xd2, 0xf6, 0x09, 0xbc, 0x9f, 0x1b, 0x14, 0x1d, 0x40, 0x6d, 0x79, 0xcd, 0x23, 0xdf, 0xd3, 0xfa,
+	0xa8, 0xf6, 0xee, 0x2f, 0x6e, 0x77, 0xed, 0xa5, 0x1e, 0x8e, 0xfb, 0xd8, 0x5e, 0x82, 0x8e, 0xbd,
+	0xf6, 0x37, 0x15, 0xd8, 0x5e, 0x13, 0x0b, 0x7a, 0x0f, 0xb6, 0xfc, 0x29, 0x19, 0xd3, 0x84, 0x8e,
+	0x13, 0x03, 0x0d, 0xa0, 0x1c, 0x90, 0x4b, 0x1a, 0x28, 0xc9, 0xa8, 0xb4, 0xfd, 0xe2, 0xad, 0xaa,
+	0xeb, 0xfc, 0x59, 0xe3, 0x07, 0xa1, 0xe4, 0x73, 0x6c, 0xc8, 0xc8, 0x81, 0x8a, 0xcb, 0xa6, 0x53,
+	0x12, 0xaa, 0xf2, 0xb2, 0xb9, 0x57, 0xc5, 0xa9, 0x89, 0x10, 0x94, 0x08, 0x1f, 0x0b, 0xa7, 0xa4,
+	0xdd, 0x7a, 0x8d, 0xea, 0xb0, 0x49, 0xc3, 0x99, 0xb3, 0xa5, 0x5d, 0x6a, 0xa9, 0x3c, 0x9e, 0x9f,
+	0xdc, 0x79, 0x15, 0xab, 0xa5, 0xe2, 0xc5, 0x82, 0x72, 0xa7, 0xa2, 0x5d, 0x7a, 0x8d, 0x7e, 0x03,
+	0xe5, 0x29, 0x8b, 0x43, 0x29, 0x1c, 0x4b, 0x6f, 0xf6, 0x41, 0xde, 0x66, 0x4f, 0x15, 0xc2, 0x94,
+	0x3f, 0x03, 0x47, 0x03, 0xd8, 0x11, 0x92, 0x45, 0xa3, 0x31, 0x27, 0x2e, 0x1d, 0x45, 0x94, 0xfb,
+	0xcc, 0xd3, 0xb7, 0xa1, 0x62, 0x24, 0xdd, 0xbe, 0x93, 0x76, 0xfb, 0x4e, 0xdf, 0x74, 0x7b, 0x7c,
+	0x5f, 0x71, 0x8e, 0x14, 0x65, 0xa8, 0x19, 0x68, 0x08, 0xb5, 0x28, 0x0e, 0x82, 0x11, 0x8b, 0x92,
+	0x4a, 0x0e, 0x3a, 0xc2, 0x0f, 0x48, 0xd9, 0x30, 0x0e, 0x82, 0xe7, 0x09, 0x09, 0xdb, 0xd1, 0xca,
+	0x40, 0x1f, 0x40, 0x79, 0xcc, 0x59, 0x1c, 0x09, 0xc7, 0xd6, 0xc9, 0x30, 0x16, 0xfa, 0x02, 0x2a,
+	0x82, 0xba, 0x9c, 0x4a, 0xe1, 0xd4, 0xf4, 0x51, 0x3f, 0xca, 0xfb, 0xc8, 0xb9, 0x86, 0x60, 0x7a,
+	0x45, 0x39, 0x0d, 0x5d, 0x8a, 0x53, 0x0e, 0x7a, 0x00, 0x9b, 0x52, 0xce, 0x9d, 0xed, 0x56, 0x71,
+	0xcf, 0xea, 0x55, 0x16, 0xb7, 0xbb, 0x9b, 0x17, 0x17, 0x2f, 0xb1, 0xf2, 0xa9, 0x1a, 0x35, 0x61,
+	0x42, 0x86, 0x64, 0x4a, 0x9d, 0x7b, 0x3a, 0xb7, 0x4b, 0x1b, 0xbd, 0x04, 0xf0, 0x42, 0x31, 0x72,
+	0xf5, 0xa3, 0x70, 0xee, 0xeb, 0xd3, 0x7d, 0xfa, 0xf6, 0xd3, 0xf5, 0xcf, 0xce, 0x4d, 0xa5, 0xdd,
+	0x5e, 0xdc, 0xee, 0x56, 0x97, 0x26, 0xae, 0x7a, 0xa1, 0x48, 0x96, 0xa8, 0x07, 0xf6, 0x84, 0x92,
+	0x40, 0x4e, 0xdc, 0x09, 0x75, 0xaf, 0x9d, 0xfa, 0xdd, 0x85, 0xf7, 0x99, 0x86, 0x99, 0x08, 0x59,
+	0x92, 0x52, 0xb0, 0xda, 0xaa, 0x70, 0x76, 0x74, 0xae, 0x12, 0x03, 0x7d, 0x08, 0xc0, 0x22, 0x1a,
+	0x8e, 0x84, 0xf4, 0xfc, 0xd0, 0x41, 0xea, 0xc8, 0xb8, 0xaa, 0x3c, 0xe7, 0xca, 0x81, 0x1e, 0xaa,
+	0xb2, 0x48, 0xbc, 0x11, 0x0b, 0x83, 0xb9, 0xf3, 0x23, 0xfd, 0xab, 0xa5, 0x1c, 0xcf, 0xc3, 0x60,
+	0xde, 0xf8, 0x1c, 0xec, 0x8c, 0x9a, 0x95, 0x0a, 0xaf, 0xe9, 0xdc, 0x3c, 0x10, 0xb5, 0x54, 0x9f,
+	0x9c, 0x91, 0x20, 0x4e, 0xa6, 0xb1, 0x2a, 0x4e, 0x8c, 0xdf, 0x6e, 0x3c, 0x29, 0x36, 0x0e, 0xc0,
+	0xce, 0xdc, 0x2a, 0xfa, 0x08, 0xb6, 0x39, 0x1d, 0xfb, 0x42, 0xf2, 0xf9, 0x88, 0xc4, 0x72, 0xe2,
+	0xfc, 0x41, 0x13, 0x6a, 0xa9, 0xb3, 0x1b, 0xcb, 0x49, 0x63, 0x04, 0xab, 0xe4, 0xa0, 0x16, 0xd8,
+	0x2a, 0xe9, 0x82, 0xf2, 0x19, 0xe5, 0xaa, 0x5f, 0xa8, 0x33, 0x65, 0x5d, 0x4a, 0x1c, 0x82, 0x12,
+	0xee, 0x4e, 0xf4, 0xdb, 0xac, 0x62, 0x63, 0xa9, 0xc7, 0x96, 0x2a, 0xd0, 0x3c, 0x36, 0x63, 0xb6,
+	0xbf, 0x29, 0x42, 0x2d, 0xdb, 0xb8, 0xd0, 0x61, 0xd2, 0xae, 0xf4, 0x91, 0xee, 0x1d, 0xec, 0xbf,
+	0xad, 0xd1, 0xe9, 0xe6, 0x10, 0xc4, 0x2a, 0xd8, 0xa9, 0x9a, 0x31, 0x35, 0x19, 0xfd, 0x1a, 0xb6,
+	0x22, 0xc6, 0x65, 0x5a, 0x22, 0x9a, 0xb9, 0x05, 0x9d, 0xf1, 0xb4, 0x98, 0x26, 0xe0, 0xf6, 0x04,
+	0xee, 0xad, 0x47, 0x43, 0x8f, 0x61, 0xf3, 0xc5, 0xf1, 0xb0, 0x5e, 0x68, 0x3c, 0x7c, 0x75, 0xd3,
+	0xfa, 0xf1, 0xfa, 0x8f, 0x2f, 0x7c, 0x2e, 0x63, 0x12, 0x1c, 0x0f, 0xd1, 0xcf, 0x61, 0xab, 0x7f,
+	0x76, 0x8e, 0x71, 0xbd, 0xd8, 0xd8, 0x7d, 0x75, 0xd3, 0x7a, 0xb8, 0x8e, 0x53, 0x3f, 0xb1, 0x38,
+	0xf4, 0x30, 0xbb, 0x5c, 0xce, 0x5b, 0xff, 0xdc, 0x00, 0xdb, 0x54, 0xce, 0x77, 0x3d, 0x92, 0x6f,
+	0x27, 0xcd, 0x28, 0x7d, 0x12, 0x1b, 0x6f, 0xed, 0x49, 0xb5, 0x84, 0x60, 0xee, 0xf8, 0x11, 0xd4,
+	0xfc, 0x68, 0xf6, 0xd9, 0x88, 0x86, 0xe4, 0x32, 0x30, 0xa3, 0x97, 0x85, 0x6d, 0xe5, 0x1b, 0x24,
+	0x2e, 0xf5, 0x1e, 0xfd, 0x50, 0x52, 0x1e, 0x9a, 0xa1, 0xca, 0xc2, 0x4b, 0x1b, 0x7d, 0x01, 0x25,
+	0x3f, 0x22, 0x53, 0xd3, 0x48, 0x73, 0x4f, 0x70, 0x3c, 0xec, 0x9e, 0x1a, 0x0d, 0xf6, 0xac, 0xc5,
+	0xed, 0x6e, 0x49, 0x39, 0xb0, 0xa6, 0xa1, 0x66, 0xda, 0xcb, 0xd4, 0x97, 0x74, 0x6d, 0xb5, 0x70,
+	0xc6, 0xd3, 0xfe, 0x6f, 0x09, 0xec, 0xc3, 0x20, 0x16, 0xd2, 0x74, 0x88, 0x77, 0x96, 0xb7, 0x97,
+	0xb0, 0x43, 0xf4, 0x74, 0x4e, 0x42, 0x55, 0x6e, 0xf5, 0x8c, 0x60, 0x72, 0xf7, 0x38, 0x37, 0xdc,
+	0x12, 0x9c, 0xcc, 0x13, 0xbd, 0xb2, 0x8a, 0xe9, 0x14, 0x71, 0x9d, 0x7c, 0xeb, 0x17, 0x74, 0x0e,
+	0xdb, 0x8c, 0xbb, 0x13, 0x2a, 0x64, 0x52, 0xa4, 0xcd, 0x34, 0x9b, 0xfb, 0x3f, 0xe7, 0x79, 0x16,
+	0x68, 0x2a, 0x54, 0xb2, 0xdb, 0xf5, 0x18, 0xe8, 0x09, 0x94, 0x38, 0xb9, 0x4a, 0xe7, 0x9d, 0x5c,
+	0x7d, 0x63, 0x72, 0x25, 0xd7, 0x42, 0x68, 0x06, 0xfa, 0x13, 0x80, 0xe7, 0x8b, 0x88, 0x48, 0x77,
+	0x42, 0xb9, 0xb9, 0xa7, 0xdc, 0x23, 0xf6, 0x97, 0xa8, 0xb5, 0x28, 0x19, 0x36, 0x3a, 0x81, 0xaa,
+	0x4b, 0x52, 0xa5, 0x95, 0xef, 0x1e, 0xf1, 0x0f, 0xbb, 0x26, 0x44, 0x5d, 0x85, 0x58, 0xdc, 0xee,
+	0x5a, 0xa9, 0x07, 0x5b, 0x2e, 0x31, 0xca, 0x3b, 0x81, 0x6d, 0x35, 0xfa, 0x8f, 0x3c, 0x7a, 0x45,
+	0xe2, 0x40, 0x0a, 0xdd, 0x47, 0xef, 0xa8, 0xb8, 0x6a, 0x0a, 0xed, 0x1b, 0x9c, 0xd9, 0x57, 0x4d,
+	0x66, 0x7c, 0xe8, 0x2f, 0xb0, 0x43, 0x43, 0x97, 0xcf, 0xb5, 0xce, 0xd2, 0x1d, 0x5a, 0x77, 0x1f,
+	0x76, 0xb0, 0x04, 0xaf, 0x1d, 0xb6, 0x4e, 0xbf, 0xe5, 0x6f, 0xfb, 0x00, 0x49, 0x0f, 0x7b, 0xb7,
+	0xfa, 0x43, 0x50, 0xf2, 0x88, 0x24, 0x5a, 0x72, 0x35, 0xac, 0xd7, 0x3d, 0xe7, 0xf5, 0x9b, 0x66,
+	0xe1, 0xdf, 0x6f, 0x9a, 0x85, 0xbf, 0x2d, 0x9a, 0xc5, 0xd7, 0x8b, 0x66, 0xf1, 0x5f, 0x8b, 0x66,
+	0xf1, 0x3f, 0x8b, 0x66, 0xf1, 0xb2, 0xac, 0x3b, 0xff, 0xaf, 0xfe, 0x17, 0x00, 0x00, 0xff, 0xff,
+	0xa2, 0xd8, 0xcf, 0x61, 0x3b, 0x10, 0x00, 0x00,
 }

+ 6 - 0
vendor/github.com/docker/swarmkit/api/specs.proto

@@ -194,6 +194,12 @@ message ContainerSpec {
 	// OpenStdin declares that the standard input (stdin) should be open.
 	bool open_stdin = 18;
 
+	// ReadOnly declares that the container root filesystem is read-only.
+	// This only impacts the root filesystem, not additional mounts (including
+	// tmpfs). For additional mounts that are not part of the initial rootfs,
+	// they will be decided by the modes passed in the mount definition.
+	bool read_only = 19;
+
 	repeated Mount mounts = 8 [(gogoproto.nullable) = false];
 
 	// StopGracePeriod the grace period for stopping the container before

+ 18 - 19
vendor/github.com/docker/swarmkit/ca/server.go

@@ -40,7 +40,7 @@ type Server struct {
 	// renewal. They are indexed by node ID.
 	pending map[string]*api.Node
 
-	// Started is a channel which gets closed once the server is running
+	// started is a channel which gets closed once the server is running
 	// and able to service RPCs.
 	started chan struct{}
 }
@@ -102,10 +102,10 @@ func (s *Server) NodeCertificateStatus(ctx context.Context, request *api.NodeCer
 		return nil, grpc.Errorf(codes.InvalidArgument, codes.InvalidArgument.String())
 	}
 
-	if err := s.addTask(); err != nil {
+	serverCtx, err := s.isRunningLocked()
+	if err != nil {
 		return nil, err
 	}
-	defer s.doneTask()
 
 	var node *api.Node
 
@@ -171,7 +171,7 @@ func (s *Server) NodeCertificateStatus(ctx context.Context, request *api.NodeCer
 			}
 		case <-ctx.Done():
 			return nil, ctx.Err()
-		case <-s.ctx.Done():
+		case <-serverCtx.Done():
 			return nil, s.ctx.Err()
 		}
 	}
@@ -189,10 +189,9 @@ func (s *Server) IssueNodeCertificate(ctx context.Context, request *api.IssueNod
 		return nil, grpc.Errorf(codes.InvalidArgument, codes.InvalidArgument.String())
 	}
 
-	if err := s.addTask(); err != nil {
+	if _, err := s.isRunningLocked(); err != nil {
 		return nil, err
 	}
-	defer s.doneTask()
 
 	var (
 		blacklistedCerts map[string]*api.BlacklistedCertificate
@@ -407,8 +406,9 @@ func (s *Server) Run(ctx context.Context) error {
 	// returns true without joinTokens being set correctly.
 	s.mu.Lock()
 	s.ctx, s.cancel = context.WithCancel(ctx)
-	s.mu.Unlock()
+	ctx = s.ctx
 	close(s.started)
+	s.mu.Unlock()
 
 	if err != nil {
 		log.G(ctx).WithFields(logrus.Fields{
@@ -459,8 +459,6 @@ func (s *Server) Run(ctx context.Context) error {
 				}
 			}
 		case <-ctx.Done():
-			return ctx.Err()
-		case <-s.ctx.Done():
 			return nil
 		}
 	}
@@ -469,36 +467,37 @@ func (s *Server) Run(ctx context.Context) error {
 // Stop stops the CA and closes all grpc streams.
 func (s *Server) Stop() error {
 	s.mu.Lock()
+
 	if !s.isRunning() {
 		s.mu.Unlock()
 		return errors.New("CA signer is already stopped")
 	}
 	s.cancel()
+	s.started = make(chan struct{})
 	s.mu.Unlock()
-	// wait for all handlers to finish their CA deals,
+
+	// Wait for Run to complete
 	s.wg.Wait()
-	s.started = make(chan struct{})
+
 	return nil
 }
 
 // Ready waits on the ready channel and returns when the server is ready to serve.
 func (s *Server) Ready() <-chan struct{} {
+	s.mu.Lock()
+	defer s.mu.Unlock()
 	return s.started
 }
 
-func (s *Server) addTask() error {
+func (s *Server) isRunningLocked() (context.Context, error) {
 	s.mu.Lock()
 	if !s.isRunning() {
 		s.mu.Unlock()
-		return grpc.Errorf(codes.Aborted, "CA signer is stopped")
+		return nil, grpc.Errorf(codes.Aborted, "CA signer is stopped")
 	}
-	s.wg.Add(1)
+	ctx := s.ctx
 	s.mu.Unlock()
-	return nil
-}
-
-func (s *Server) doneTask() {
-	s.wg.Done()
+	return ctx, nil
 }
 
 func (s *Server) isRunning() bool {

+ 39 - 6
vendor/github.com/docker/swarmkit/manager/allocator/network.go

@@ -371,12 +371,15 @@ func (a *Allocator) doNetworkAlloc(ctx context.Context, ev events.Event) {
 		s := v.Service.Copy()
 
 		if nc.nwkAllocator.IsServiceAllocated(s) {
-			break
-		}
-
-		if err := a.allocateService(ctx, s); err != nil {
-			log.G(ctx).WithError(err).Errorf("Failed allocation during update of service %s", s.ID)
-			break
+			if nc.nwkAllocator.PortsAllocatedInHostPublishMode(s) {
+				break
+			}
+			updatePortsInHostPublishMode(s)
+		} else {
+			if err := a.allocateService(ctx, s); err != nil {
+				log.G(ctx).WithError(err).Errorf("Failed allocation during update of service %s", s.ID)
+				break
+			}
 		}
 
 		if _, err := a.store.Batch(func(batch *store.Batch) error {
@@ -641,6 +644,36 @@ func (a *Allocator) commitAllocatedNode(ctx context.Context, batch *store.Batch,
 	return nil
 }
 
+// This function prepares the service object for being updated when the change regards
+// the published ports in host mode: It resets the runtime state ports (s.Endpoint.Ports)
+// to the current ingress mode runtime state ports plus the newly configured publish mode ports,
+// so that the service allocation invoked on this new service object will trigger the deallocation
+// of any old publish mode port and allocation of any new one.
+func updatePortsInHostPublishMode(s *api.Service) {
+	if s.Endpoint != nil {
+		var portConfigs []*api.PortConfig
+		for _, portConfig := range s.Endpoint.Ports {
+			if portConfig.PublishMode == api.PublishModeIngress {
+				portConfigs = append(portConfigs, portConfig)
+			}
+		}
+		s.Endpoint.Ports = portConfigs
+	}
+
+	if s.Spec.Endpoint != nil {
+		if s.Endpoint == nil {
+			s.Endpoint = &api.Endpoint{}
+		}
+		for _, portConfig := range s.Spec.Endpoint.Ports {
+			if portConfig.PublishMode == api.PublishModeIngress {
+				continue
+			}
+			s.Endpoint.Ports = append(s.Endpoint.Ports, portConfig.Copy())
+		}
+		s.Endpoint.Spec = s.Spec.Endpoint.Copy()
+	}
+}
+
 func (a *Allocator) allocateService(ctx context.Context, s *api.Service) error {
 	nc := a.netCtx
 

+ 6 - 0
vendor/github.com/docker/swarmkit/manager/allocator/networkallocator/networkallocator.go

@@ -283,6 +283,12 @@ func (na *NetworkAllocator) IsTaskAllocated(t *api.Task) bool {
 	return true
 }
 
+// PortsAllocatedInHostPublishMode returns if the passed service has its published ports in
+// host (non ingress) mode allocated
+func (na *NetworkAllocator) PortsAllocatedInHostPublishMode(s *api.Service) bool {
+	return na.portAllocator.portsAllocatedInHostPublishMode(s)
+}
+
 // IsServiceAllocated returns if the passed service has its network resources allocated or not.
 func (na *NetworkAllocator) IsServiceAllocated(s *api.Service) bool {
 	// If endpoint mode is VIP and allocator does not have the

+ 27 - 0
vendor/github.com/docker/swarmkit/manager/allocator/networkallocator/portallocator.go

@@ -269,6 +269,33 @@ func (pa *portAllocator) serviceDeallocatePorts(s *api.Service) {
 	s.Endpoint.Ports = nil
 }
 
+func (pa *portAllocator) portsAllocatedInHostPublishMode(s *api.Service) bool {
+	if s.Endpoint == nil && s.Spec.Endpoint == nil {
+		return true
+	}
+
+	portStates := allocatedPorts{}
+	if s.Endpoint != nil {
+		for _, portState := range s.Endpoint.Ports {
+			if portState.PublishMode == api.PublishModeHost {
+				portStates.addState(portState)
+			}
+		}
+	}
+
+	if s.Spec.Endpoint != nil {
+		for _, portConfig := range s.Spec.Endpoint.Ports {
+			if portConfig.PublishMode == api.PublishModeHost {
+				if portStates.delState(portConfig) == nil {
+					return false
+				}
+			}
+		}
+	}
+
+	return true
+}
+
 func (pa *portAllocator) isPortsAllocated(s *api.Service) bool {
 	// If service has no user-defined endpoint and allocated endpoint,
 	// we assume it is allocated and return true.

+ 17 - 1
vendor/github.com/docker/swarmkit/manager/controlapi/common.go

@@ -4,7 +4,10 @@ import (
 	"regexp"
 	"strings"
 
+	"github.com/docker/docker/pkg/plugingetter"
+	"github.com/docker/libnetwork/ipamapi"
 	"github.com/docker/swarmkit/api"
+	"github.com/docker/swarmkit/manager/allocator/networkallocator"
 	"github.com/docker/swarmkit/manager/state/store"
 	"google.golang.org/grpc"
 	"google.golang.org/grpc/codes"
@@ -76,7 +79,7 @@ func validateAnnotations(m api.Annotations) error {
 	return nil
 }
 
-func validateDriver(driver *api.Driver) error {
+func validateDriver(driver *api.Driver, pg plugingetter.PluginGetter, pluginType string) error {
 	if driver == nil {
 		// It is ok to not specify the driver. We will choose
 		// a default driver.
@@ -87,5 +90,18 @@ func validateDriver(driver *api.Driver) error {
 		return grpc.Errorf(codes.InvalidArgument, "driver name: if driver is specified name is required")
 	}
 
+	if strings.ToLower(driver.Name) == networkallocator.DefaultDriver || strings.ToLower(driver.Name) == ipamapi.DefaultIPAM {
+		return nil
+	}
+
+	p, err := pg.Get(driver.Name, pluginType, plugingetter.Lookup)
+	if err != nil {
+		return grpc.Errorf(codes.InvalidArgument, "error during lookup of plugin %s", driver.Name)
+	}
+
+	if p.IsV1() {
+		return grpc.Errorf(codes.InvalidArgument, "legacy plugin %s of type %s is not supported in swarm mode", driver.Name, pluginType)
+	}
+
 	return nil
 }

+ 9 - 6
vendor/github.com/docker/swarmkit/manager/controlapi/network.go

@@ -4,6 +4,9 @@ import (
 	"fmt"
 	"net"
 
+	"github.com/docker/docker/pkg/plugingetter"
+	"github.com/docker/libnetwork/driverapi"
+	"github.com/docker/libnetwork/ipamapi"
 	"github.com/docker/swarmkit/api"
 	"github.com/docker/swarmkit/identity"
 	"github.com/docker/swarmkit/manager/state/store"
@@ -47,14 +50,14 @@ func validateIPAMConfiguration(ipamConf *api.IPAMConfig) error {
 	return nil
 }
 
-func validateIPAM(ipam *api.IPAMOptions) error {
+func validateIPAM(ipam *api.IPAMOptions, pg plugingetter.PluginGetter) error {
 	if ipam == nil {
 		// It is ok to not specify any IPAM configurations. We
 		// will choose good defaults.
 		return nil
 	}
 
-	if err := validateDriver(ipam.Driver); err != nil {
+	if err := validateDriver(ipam.Driver, pg, ipamapi.PluginEndpointType); err != nil {
 		return err
 	}
 
@@ -67,7 +70,7 @@ func validateIPAM(ipam *api.IPAMOptions) error {
 	return nil
 }
 
-func validateNetworkSpec(spec *api.NetworkSpec) error {
+func validateNetworkSpec(spec *api.NetworkSpec, pg plugingetter.PluginGetter) error {
 	if spec == nil {
 		return grpc.Errorf(codes.InvalidArgument, errInvalidArgument.Error())
 	}
@@ -76,11 +79,11 @@ func validateNetworkSpec(spec *api.NetworkSpec) error {
 		return err
 	}
 
-	if err := validateDriver(spec.DriverConfig); err != nil {
+	if err := validateDriver(spec.DriverConfig, pg, driverapi.NetworkPluginEndpointType); err != nil {
 		return err
 	}
 
-	if err := validateIPAM(spec.IPAM); err != nil {
+	if err := validateIPAM(spec.IPAM, pg); err != nil {
 		return err
 	}
 
@@ -93,7 +96,7 @@ func validateNetworkSpec(spec *api.NetworkSpec) error {
 func (s *Server) CreateNetwork(ctx context.Context, request *api.CreateNetworkRequest) (*api.CreateNetworkResponse, error) {
 	// if you change this function, you have to change createInternalNetwork in
 	// the tests to match it (except the part where we check the label).
-	if err := validateNetworkSpec(request.Spec); err != nil {
+	if err := validateNetworkSpec(request.Spec, s.pg); err != nil {
 		return nil, err
 	}
 

+ 4 - 1
vendor/github.com/docker/swarmkit/manager/controlapi/server.go

@@ -3,6 +3,7 @@ package controlapi
 import (
 	"errors"
 
+	"github.com/docker/docker/pkg/plugingetter"
 	"github.com/docker/swarmkit/ca"
 	"github.com/docker/swarmkit/manager/state/raft"
 	"github.com/docker/swarmkit/manager/state/store"
@@ -18,13 +19,15 @@ type Server struct {
 	store  *store.MemoryStore
 	raft   *raft.Node
 	rootCA *ca.RootCA
+	pg     plugingetter.PluginGetter
 }
 
 // NewServer creates a Cluster API server.
-func NewServer(store *store.MemoryStore, raft *raft.Node, rootCA *ca.RootCA) *Server {
+func NewServer(store *store.MemoryStore, raft *raft.Node, rootCA *ca.RootCA, pg plugingetter.PluginGetter) *Server {
 	return &Server{
 		store:  store,
 		raft:   raft,
 		rootCA: rootCA,
+		pg:     pg,
 	}
 }

+ 57 - 0
vendor/github.com/docker/swarmkit/manager/dirty.go

@@ -0,0 +1,57 @@
+package manager
+
+import (
+	"reflect"
+
+	"github.com/docker/swarmkit/api"
+	"github.com/docker/swarmkit/manager/state/store"
+)
+
+// IsStateDirty returns true if any objects have been added to raft which make
+// the state "dirty". Currently, the existence of any object other than the
+// default cluster or the local node implies a dirty state.
+func (m *Manager) IsStateDirty() (bool, error) {
+	var (
+		storeSnapshot *api.StoreSnapshot
+		err           error
+	)
+	m.raftNode.MemoryStore().View(func(readTx store.ReadTx) {
+		storeSnapshot, err = m.raftNode.MemoryStore().Save(readTx)
+	})
+
+	if err != nil {
+		return false, err
+	}
+
+	// Check Nodes and Clusters fields.
+	nodeID := m.config.SecurityConfig.ClientTLSCreds.NodeID()
+	if len(storeSnapshot.Nodes) > 1 || (len(storeSnapshot.Nodes) == 1 && storeSnapshot.Nodes[0].ID != nodeID) {
+		return true, nil
+	}
+
+	clusterID := m.config.SecurityConfig.ClientTLSCreds.Organization()
+	if len(storeSnapshot.Clusters) > 1 || (len(storeSnapshot.Clusters) == 1 && storeSnapshot.Clusters[0].ID != clusterID) {
+		return true, nil
+	}
+
+	// Use reflection to check that other fields don't have values. This
+	// lets us implement a whitelist-type approach, where we don't need to
+	// remember to add individual types here.
+
+	val := reflect.ValueOf(*storeSnapshot)
+	numFields := val.NumField()
+
+	for i := 0; i != numFields; i++ {
+		field := val.Field(i)
+		structField := val.Type().Field(i)
+		if structField.Type.Kind() != reflect.Slice {
+			panic("unexpected field type in StoreSnapshot")
+		}
+		if structField.Name != "Nodes" && structField.Name != "Clusters" && field.Len() != 0 {
+			// One of the other data types has an entry
+			return true, nil
+		}
+	}
+
+	return false, nil
+}

+ 0 - 1
vendor/github.com/docker/swarmkit/manager/dispatcher/dispatcher.go

@@ -134,7 +134,6 @@ type Dispatcher struct {
 }
 
 // New returns Dispatcher with cluster interface(usually raft.Node).
-// NOTE: each handler which does something with raft must add to Dispatcher.wg
 func New(cluster Cluster, c *Config) *Dispatcher {
 	d := &Dispatcher{
 		nodes:                 newNodeStore(c.HeartbeatPeriod, c.HeartbeatEpsilon, c.GracePeriodMultiplier, c.RateLimitPeriod),

+ 1 - 1
vendor/github.com/docker/swarmkit/manager/manager.go

@@ -384,7 +384,7 @@ func (m *Manager) Run(parent context.Context) error {
 		return err
 	}
 
-	baseControlAPI := controlapi.NewServer(m.raftNode.MemoryStore(), m.raftNode, m.config.SecurityConfig.RootCA())
+	baseControlAPI := controlapi.NewServer(m.raftNode.MemoryStore(), m.raftNode, m.config.SecurityConfig.RootCA(), m.config.PluginGetter)
 	baseResourceAPI := resourceapi.New(m.raftNode.MemoryStore())
 	healthServer := health.NewHealthServer()
 	localHealthServer := health.NewHealthServer()

+ 0 - 10
vendor/github.com/docker/swarmkit/manager/state/store/by.go

@@ -49,16 +49,6 @@ func ByName(name string) By {
 	return byName(name)
 }
 
-type byCN string
-
-func (b byCN) isBy() {
-}
-
-// ByCN creates an object to pass to Find to select by CN.
-func ByCN(name string) By {
-	return byCN(name)
-}
-
 type byService string
 
 func (b byService) isBy() {

+ 0 - 7
vendor/github.com/docker/swarmkit/manager/state/store/memory.go

@@ -25,7 +25,6 @@ const (
 	indexServiceID    = "serviceid"
 	indexNodeID       = "nodeid"
 	indexSlot         = "slot"
-	indexCN           = "cn"
 	indexDesiredState = "desiredstate"
 	indexTaskState    = "taskstate"
 	indexRole         = "role"
@@ -573,12 +572,6 @@ func (tx readTx) findIterators(table string, by By, checkType func(By) error) ([
 			return nil, err
 		}
 		return []memdb.ResultIterator{it}, nil
-	case byCN:
-		it, err := tx.memDBTx.Get(table, indexCN, string(v))
-		if err != nil {
-			return nil, err
-		}
-		return []memdb.ResultIterator{it}, nil
 	case byIDPrefix:
 		it, err := tx.memDBTx.Get(table, indexID+prefix, string(v))
 		if err != nil {

+ 14 - 0
vendor/github.com/docker/swarmkit/node/node.go

@@ -529,6 +529,20 @@ func (n *Node) Agent() *agent.Agent {
 	return n.agent
 }
 
+// IsStateDirty returns true if any objects have been added to raft which make
+// the state "dirty". Currently, the existence of any object other than the
+// default cluster or the local node implies a dirty state.
+func (n *Node) IsStateDirty() (bool, error) {
+	n.RLock()
+	defer n.RUnlock()
+
+	if n.manager == nil {
+		return false, errors.New("node is not a manager")
+	}
+
+	return n.manager.IsStateDirty()
+}
+
 // Remotes returns a list of known peers known to node.
 func (n *Node) Remotes() []api.Peer {
 	weights := n.remotes.Weights()