123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- package stack
- import (
- "strings"
- "github.com/docker/docker/api/types"
- "github.com/docker/docker/api/types/filters"
- "github.com/docker/docker/api/types/swarm"
- "github.com/docker/docker/cli/compose/convert"
- "github.com/docker/docker/client"
- "golang.org/x/net/context"
- )
- type fakeClient struct {
- client.Client
- services []string
- networks []string
- secrets []string
- removedServices []string
- removedNetworks []string
- removedSecrets []string
- serviceListFunc func(options types.ServiceListOptions) ([]swarm.Service, error)
- networkListFunc func(options types.NetworkListOptions) ([]types.NetworkResource, error)
- secretListFunc func(options types.SecretListOptions) ([]swarm.Secret, error)
- serviceRemoveFunc func(serviceID string) error
- networkRemoveFunc func(networkID string) error
- secretRemoveFunc func(secretID string) error
- }
- func (cli *fakeClient) ServiceList(ctx context.Context, options types.ServiceListOptions) ([]swarm.Service, error) {
- if cli.serviceListFunc != nil {
- return cli.serviceListFunc(options)
- }
- namespace := namespaceFromFilters(options.Filters)
- servicesList := []swarm.Service{}
- for _, name := range cli.services {
- if belongToNamespace(name, namespace) {
- servicesList = append(servicesList, serviceFromName(name))
- }
- }
- return servicesList, nil
- }
- func (cli *fakeClient) NetworkList(ctx context.Context, options types.NetworkListOptions) ([]types.NetworkResource, error) {
- if cli.networkListFunc != nil {
- return cli.networkListFunc(options)
- }
- namespace := namespaceFromFilters(options.Filters)
- networksList := []types.NetworkResource{}
- for _, name := range cli.networks {
- if belongToNamespace(name, namespace) {
- networksList = append(networksList, networkFromName(name))
- }
- }
- return networksList, nil
- }
- func (cli *fakeClient) SecretList(ctx context.Context, options types.SecretListOptions) ([]swarm.Secret, error) {
- if cli.secretListFunc != nil {
- return cli.secretListFunc(options)
- }
- namespace := namespaceFromFilters(options.Filters)
- secretsList := []swarm.Secret{}
- for _, name := range cli.secrets {
- if belongToNamespace(name, namespace) {
- secretsList = append(secretsList, secretFromName(name))
- }
- }
- return secretsList, nil
- }
- func (cli *fakeClient) ServiceRemove(ctx context.Context, serviceID string) error {
- if cli.serviceRemoveFunc != nil {
- return cli.serviceRemoveFunc(serviceID)
- }
- cli.removedServices = append(cli.removedServices, serviceID)
- return nil
- }
- func (cli *fakeClient) NetworkRemove(ctx context.Context, networkID string) error {
- if cli.networkRemoveFunc != nil {
- return cli.networkRemoveFunc(networkID)
- }
- cli.removedNetworks = append(cli.removedNetworks, networkID)
- return nil
- }
- func (cli *fakeClient) SecretRemove(ctx context.Context, secretID string) error {
- if cli.secretRemoveFunc != nil {
- return cli.secretRemoveFunc(secretID)
- }
- cli.removedSecrets = append(cli.removedSecrets, secretID)
- return nil
- }
- func serviceFromName(name string) swarm.Service {
- return swarm.Service{
- ID: "ID-" + name,
- Spec: swarm.ServiceSpec{
- Annotations: swarm.Annotations{Name: name},
- },
- }
- }
- func networkFromName(name string) types.NetworkResource {
- return types.NetworkResource{
- ID: "ID-" + name,
- Name: name,
- }
- }
- func secretFromName(name string) swarm.Secret {
- return swarm.Secret{
- ID: "ID-" + name,
- Spec: swarm.SecretSpec{
- Annotations: swarm.Annotations{Name: name},
- },
- }
- }
- func namespaceFromFilters(filters filters.Args) string {
- label := filters.Get("label")[0]
- return strings.TrimPrefix(label, convert.LabelNamespace+"=")
- }
- func belongToNamespace(id, namespace string) bool {
- return strings.HasPrefix(id, namespace+"_")
- }
- func objectName(namespace, name string) string {
- return namespace + "_" + name
- }
- func objectID(name string) string {
- return "ID-" + name
- }
- func buildObjectIDs(objectNames []string) []string {
- IDs := make([]string, len(objectNames))
- for i, name := range objectNames {
- IDs[i] = objectID(name)
- }
- return IDs
- }
|