service.go 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. package daemon
  2. import (
  3. "context"
  4. "time"
  5. "github.com/docker/docker/api/types"
  6. "github.com/docker/docker/api/types/filters"
  7. "github.com/docker/docker/api/types/swarm"
  8. "github.com/gotestyourself/gotestyourself/assert"
  9. )
  10. // ServiceConstructor defines a swarm service constructor function
  11. type ServiceConstructor func(*swarm.Service)
  12. func (d *Daemon) createServiceWithOptions(t assert.TestingT, opts types.ServiceCreateOptions, f ...ServiceConstructor) string {
  13. var service swarm.Service
  14. for _, fn := range f {
  15. fn(&service)
  16. }
  17. cli := d.NewClientT(t)
  18. defer cli.Close()
  19. ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
  20. defer cancel()
  21. res, err := cli.ServiceCreate(ctx, service.Spec, opts)
  22. assert.NilError(t, err)
  23. return res.ID
  24. }
  25. // CreateService creates a swarm service given the specified service constructor
  26. func (d *Daemon) CreateService(t assert.TestingT, f ...ServiceConstructor) string {
  27. return d.createServiceWithOptions(t, types.ServiceCreateOptions{}, f...)
  28. }
  29. // GetService returns the swarm service corresponding to the specified id
  30. func (d *Daemon) GetService(t assert.TestingT, id string) *swarm.Service {
  31. cli := d.NewClientT(t)
  32. defer cli.Close()
  33. service, _, err := cli.ServiceInspectWithRaw(context.Background(), id, types.ServiceInspectOptions{})
  34. assert.NilError(t, err)
  35. return &service
  36. }
  37. // GetServiceTasks returns the swarm tasks for the specified service
  38. func (d *Daemon) GetServiceTasks(t assert.TestingT, service string) []swarm.Task {
  39. cli := d.NewClientT(t)
  40. defer cli.Close()
  41. filterArgs := filters.NewArgs()
  42. filterArgs.Add("desired-state", "running")
  43. filterArgs.Add("service", service)
  44. options := types.TaskListOptions{
  45. Filters: filterArgs,
  46. }
  47. tasks, err := cli.TaskList(context.Background(), options)
  48. assert.NilError(t, err)
  49. return tasks
  50. }
  51. // UpdateService updates a swarm service with the specified service constructor
  52. func (d *Daemon) UpdateService(t assert.TestingT, service *swarm.Service, f ...ServiceConstructor) {
  53. cli := d.NewClientT(t)
  54. defer cli.Close()
  55. for _, fn := range f {
  56. fn(service)
  57. }
  58. _, err := cli.ServiceUpdate(context.Background(), service.ID, service.Version, service.Spec, types.ServiceUpdateOptions{})
  59. assert.NilError(t, err)
  60. }
  61. // RemoveService removes the specified service
  62. func (d *Daemon) RemoveService(t assert.TestingT, id string) {
  63. cli := d.NewClientT(t)
  64. defer cli.Close()
  65. err := cli.ServiceRemove(context.Background(), id)
  66. assert.NilError(t, err)
  67. }
  68. // ListServices returns the list of the current swarm services
  69. func (d *Daemon) ListServices(t assert.TestingT) []swarm.Service {
  70. cli := d.NewClientT(t)
  71. defer cli.Close()
  72. services, err := cli.ServiceList(context.Background(), types.ServiceListOptions{})
  73. assert.NilError(t, err)
  74. return services
  75. }
  76. // GetTask returns the swarm task identified by the specified id
  77. func (d *Daemon) GetTask(t assert.TestingT, id string) swarm.Task {
  78. cli := d.NewClientT(t)
  79. defer cli.Close()
  80. task, _, err := cli.TaskInspectWithRaw(context.Background(), id)
  81. assert.NilError(t, err)
  82. return task
  83. }