common.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. package stack
  2. import (
  3. "golang.org/x/net/context"
  4. "github.com/docker/docker/api/types"
  5. "github.com/docker/docker/api/types/filters"
  6. "github.com/docker/docker/api/types/swarm"
  7. "github.com/docker/docker/client"
  8. )
  9. const (
  10. labelNamespace = "com.docker.stack.namespace"
  11. )
  12. func getStackLabels(namespace string, labels map[string]string) map[string]string {
  13. if labels == nil {
  14. labels = make(map[string]string)
  15. }
  16. labels[labelNamespace] = namespace
  17. return labels
  18. }
  19. func getStackFilter(namespace string) filters.Args {
  20. filter := filters.NewArgs()
  21. filter.Add("label", labelNamespace+"="+namespace)
  22. return filter
  23. }
  24. func getServices(
  25. ctx context.Context,
  26. apiclient client.APIClient,
  27. namespace string,
  28. ) ([]swarm.Service, error) {
  29. return apiclient.ServiceList(
  30. ctx,
  31. types.ServiceListOptions{Filters: getStackFilter(namespace)})
  32. }
  33. func getStackNetworks(
  34. ctx context.Context,
  35. apiclient client.APIClient,
  36. namespace string,
  37. ) ([]types.NetworkResource, error) {
  38. return apiclient.NetworkList(
  39. ctx,
  40. types.NetworkListOptions{Filters: getStackFilter(namespace)})
  41. }
  42. type namespace struct {
  43. name string
  44. }
  45. func (n namespace) scope(name string) string {
  46. return n.name + "_" + name
  47. }