Adding network specific options to service create/update
The commit adds capability to accept csv parameters for network option in service create/update commands.The change includes name,alias driver options specific to the network. With this the following will be supported docker service create --name web --network name=docknet,alias=web1,driver-opt=field1=value1 nginx docker service create --name web --network docknet nginx docker service update web --network-add name=docknet,alias=web1,driver-opt=field1=value1 docker service update web --network-rm docknet Signed-off-by: Abhinandan Prativadi <abhi@docker.com>
This commit is contained in:
parent
ca4b3c6f67
commit
fe11de0177
5 changed files with 24 additions and 6 deletions
api/types
container
daemon/cluster
|
@ -58,6 +58,7 @@ type EndpointSettings struct {
|
|||
GlobalIPv6Address string
|
||||
GlobalIPv6PrefixLen int
|
||||
MacAddress string
|
||||
DriverOpts map[string]string
|
||||
}
|
||||
|
||||
// Task carries the information about one backend task
|
||||
|
|
|
@ -94,8 +94,9 @@ type NetworkSpec struct {
|
|||
|
||||
// NetworkAttachmentConfig represents the configuration of a network attachment.
|
||||
type NetworkAttachmentConfig struct {
|
||||
Target string `json:",omitempty"`
|
||||
Aliases []string `json:",omitempty"`
|
||||
Target string `json:",omitempty"`
|
||||
Aliases []string `json:",omitempty"`
|
||||
DriverOpts map[string]string `json:",omitempty"`
|
||||
}
|
||||
|
||||
// NetworkAttachment represents a network attachment.
|
||||
|
|
|
@ -645,7 +645,11 @@ func (container *Container) BuildJoinOptions(n libnetwork.Network) ([]libnetwork
|
|||
}
|
||||
joinOptions = append(joinOptions, libnetwork.CreateOptionAlias(name, alias))
|
||||
}
|
||||
for k, v := range epConfig.DriverOpts {
|
||||
joinOptions = append(joinOptions, libnetwork.EndpointOptionGeneric(options.Generic{k: v}))
|
||||
}
|
||||
}
|
||||
|
||||
return joinOptions, nil
|
||||
}
|
||||
|
||||
|
@ -743,6 +747,10 @@ func (container *Container) BuildCreateEndpointOptions(n libnetwork.Network, epC
|
|||
|
||||
createOptions = append(createOptions, libnetwork.EndpointOptionGeneric(genericOption))
|
||||
}
|
||||
for k, v := range epConfig.DriverOpts {
|
||||
createOptions = append(createOptions, libnetwork.EndpointOptionGeneric(options.Generic{k: v}))
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Port-mapping rules belong to the container & applicable only to non-internal networks
|
||||
|
|
|
@ -80,7 +80,9 @@ func serviceSpecFromGRPC(spec *swarmapi.ServiceSpec) (*types.ServiceSpec, error)
|
|||
|
||||
serviceNetworks := make([]types.NetworkAttachmentConfig, 0, len(spec.Networks))
|
||||
for _, n := range spec.Networks {
|
||||
serviceNetworks = append(serviceNetworks, types.NetworkAttachmentConfig{Target: n.Target, Aliases: n.Aliases})
|
||||
netConfig := types.NetworkAttachmentConfig{Target: n.Target, Aliases: n.Aliases, DriverOpts: n.DriverAttachmentOpts}
|
||||
serviceNetworks = append(serviceNetworks, netConfig)
|
||||
|
||||
}
|
||||
|
||||
taskTemplate := taskSpecFromGRPC(spec.Task)
|
||||
|
@ -136,12 +138,15 @@ func ServiceSpecToGRPC(s types.ServiceSpec) (swarmapi.ServiceSpec, error) {
|
|||
|
||||
serviceNetworks := make([]*swarmapi.NetworkAttachmentConfig, 0, len(s.Networks))
|
||||
for _, n := range s.Networks {
|
||||
serviceNetworks = append(serviceNetworks, &swarmapi.NetworkAttachmentConfig{Target: n.Target, Aliases: n.Aliases})
|
||||
netConfig := &swarmapi.NetworkAttachmentConfig{Target: n.Target, Aliases: n.Aliases, DriverAttachmentOpts: n.DriverOpts}
|
||||
serviceNetworks = append(serviceNetworks, netConfig)
|
||||
}
|
||||
|
||||
taskNetworks := make([]*swarmapi.NetworkAttachmentConfig, 0, len(s.TaskTemplate.Networks))
|
||||
for _, n := range s.TaskTemplate.Networks {
|
||||
taskNetworks = append(taskNetworks, &swarmapi.NetworkAttachmentConfig{Target: n.Target, Aliases: n.Aliases})
|
||||
netConfig := &swarmapi.NetworkAttachmentConfig{Target: n.Target, Aliases: n.Aliases, DriverAttachmentOpts: n.DriverOpts}
|
||||
taskNetworks = append(taskNetworks, netConfig)
|
||||
|
||||
}
|
||||
|
||||
spec := swarmapi.ServiceSpec{
|
||||
|
@ -507,7 +512,8 @@ func updateConfigToGRPC(updateConfig *types.UpdateConfig) (*swarmapi.UpdateConfi
|
|||
func taskSpecFromGRPC(taskSpec swarmapi.TaskSpec) types.TaskSpec {
|
||||
taskNetworks := make([]types.NetworkAttachmentConfig, 0, len(taskSpec.Networks))
|
||||
for _, n := range taskSpec.Networks {
|
||||
taskNetworks = append(taskNetworks, types.NetworkAttachmentConfig{Target: n.Target, Aliases: n.Aliases})
|
||||
netConfig := types.NetworkAttachmentConfig{Target: n.Target, Aliases: n.Aliases, DriverOpts: n.DriverAttachmentOpts}
|
||||
taskNetworks = append(taskNetworks, netConfig)
|
||||
}
|
||||
|
||||
c := taskSpec.GetContainer()
|
||||
|
|
|
@ -494,6 +494,8 @@ func getEndpointConfig(na *api.NetworkAttachment, b executorpkg.Backend) *networ
|
|||
IPv4Address: ipv4,
|
||||
IPv6Address: ipv6,
|
||||
},
|
||||
Aliases: na.Aliases,
|
||||
DriverOpts: na.DriverAttachmentOpts,
|
||||
}
|
||||
if v, ok := na.Network.Spec.Annotations.Labels["com.docker.swarm.predefined"]; ok && v == "true" {
|
||||
if ln, err := b.FindNetwork(na.Network.Spec.Annotations.Name); err == nil {
|
||||
|
|
Loading…
Add table
Reference in a new issue