Skip to content

Commit

Permalink
Merge pull request #30506 from vdemeester/29732-follow-up-compose-ind…
Browse files Browse the repository at this point in the history
…empotent

Make docker stack deploy a little bit more indempotent
  • Loading branch information
estesp authored Jan 31, 2017
2 parents 1d2f5de + 8b1c6bf commit feb8b1c
Showing 1 changed file with 23 additions and 2 deletions.
25 changes: 23 additions & 2 deletions cli/compose/convert/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import (
"github.com/docker/docker/opts"
runconfigopts "github.com/docker/docker/runconfig/opts"
"github.com/docker/go-connections/nat"
"sort"
)

// Services from compose-file types to engine API types
Expand Down Expand Up @@ -110,9 +111,9 @@ func convertService(
Command: service.Entrypoint,
Args: service.Command,
Hostname: service.Hostname,
Hosts: convertExtraHosts(service.ExtraHosts),
Hosts: sortStrings(convertExtraHosts(service.ExtraHosts)),
Healthcheck: healthcheck,
Env: convertEnvironment(service.Environment),
Env: sortStrings(convertEnvironment(service.Environment)),
Labels: AddStackLabel(namespace, service.Labels),
Dir: service.WorkingDir,
User: service.User,
Expand All @@ -138,6 +139,17 @@ func convertService(
return serviceSpec, nil
}

func sortStrings(strs []string) []string {
sort.Strings(strs)
return strs
}

type byNetworkTarget []swarm.NetworkAttachmentConfig

func (a byNetworkTarget) Len() int { return len(a) }
func (a byNetworkTarget) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
func (a byNetworkTarget) Less(i, j int) bool { return a[i].Target < a[j].Target }

func convertServiceNetworks(
networks map[string]*composetypes.ServiceNetworkConfig,
networkConfigs networkMap,
Expand Down Expand Up @@ -173,6 +185,8 @@ func convertServiceNetworks(
Aliases: append(aliases, name),
})
}

sort.Sort(byNetworkTarget(nets))
return nets, nil
}

Expand Down Expand Up @@ -347,6 +361,12 @@ func convertResources(source composetypes.Resources) (*swarm.ResourceRequirement
return resources, nil
}

type byPublishedPort []swarm.PortConfig

func (a byPublishedPort) Len() int { return len(a) }
func (a byPublishedPort) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
func (a byPublishedPort) Less(i, j int) bool { return a[i].PublishedPort < a[j].PublishedPort }

func convertEndpointSpec(source []string) (*swarm.EndpointSpec, error) {
portConfigs := []swarm.PortConfig{}
ports, portBindings, err := nat.ParsePortSpecs(source)
Expand All @@ -362,6 +382,7 @@ func convertEndpointSpec(source []string) (*swarm.EndpointSpec, error) {
portConfigs = append(portConfigs, portConfig...)
}

sort.Sort(byPublishedPort(portConfigs))
return &swarm.EndpointSpec{Ports: portConfigs}, nil
}

Expand Down

0 comments on commit feb8b1c

Please sign in to comment.