secrets.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. package cluster
  2. import (
  3. apitypes "github.com/docker/docker/api/types"
  4. types "github.com/docker/docker/api/types/swarm"
  5. "github.com/docker/docker/daemon/cluster/convert"
  6. swarmapi "github.com/docker/swarmkit/api"
  7. )
  8. // GetSecret returns a secret from a managed swarm cluster
  9. func (c *Cluster) GetSecret(id string) (types.Secret, error) {
  10. c.RLock()
  11. defer c.RUnlock()
  12. if !c.isActiveManager() {
  13. return types.Secret{}, c.errNoManager()
  14. }
  15. ctx, cancel := c.getRequestContext()
  16. defer cancel()
  17. r, err := c.node.client.GetSecret(ctx, &swarmapi.GetSecretRequest{SecretID: id})
  18. if err != nil {
  19. return types.Secret{}, err
  20. }
  21. return convert.SecretFromGRPC(r.Secret), nil
  22. }
  23. // GetSecrets returns all secrets of a managed swarm cluster.
  24. func (c *Cluster) GetSecrets(options apitypes.SecretListOptions) ([]types.Secret, error) {
  25. c.RLock()
  26. defer c.RUnlock()
  27. if !c.isActiveManager() {
  28. return nil, c.errNoManager()
  29. }
  30. filters, err := newListSecretsFilters(options.Filters)
  31. if err != nil {
  32. return nil, err
  33. }
  34. ctx, cancel := c.getRequestContext()
  35. defer cancel()
  36. r, err := c.node.client.ListSecrets(ctx,
  37. &swarmapi.ListSecretsRequest{Filters: filters})
  38. if err != nil {
  39. return nil, err
  40. }
  41. secrets := []types.Secret{}
  42. for _, secret := range r.Secrets {
  43. secrets = append(secrets, convert.SecretFromGRPC(secret))
  44. }
  45. return secrets, nil
  46. }
  47. // CreateSecret creates a new secret in a managed swarm cluster.
  48. func (c *Cluster) CreateSecret(s types.SecretSpec) (string, error) {
  49. c.RLock()
  50. defer c.RUnlock()
  51. if !c.isActiveManager() {
  52. return "", c.errNoManager()
  53. }
  54. ctx, cancel := c.getRequestContext()
  55. defer cancel()
  56. secretSpec := convert.SecretSpecToGRPC(s)
  57. r, err := c.node.client.CreateSecret(ctx,
  58. &swarmapi.CreateSecretRequest{Spec: &secretSpec})
  59. if err != nil {
  60. return "", err
  61. }
  62. return r.Secret.ID, nil
  63. }
  64. // RemoveSecret removes a secret from a managed swarm cluster.
  65. func (c *Cluster) RemoveSecret(id string) error {
  66. c.RLock()
  67. defer c.RUnlock()
  68. if !c.isActiveManager() {
  69. return c.errNoManager()
  70. }
  71. ctx, cancel := c.getRequestContext()
  72. defer cancel()
  73. req := &swarmapi.RemoveSecretRequest{
  74. SecretID: id,
  75. }
  76. if _, err := c.node.client.RemoveSecret(ctx, req); err != nil {
  77. return err
  78. }
  79. return nil
  80. }
  81. // UpdateSecret updates a secret in a managed swarm cluster.
  82. // Note: this is not exposed to the CLI but is available from the API only
  83. func (c *Cluster) UpdateSecret(id string, version uint64, spec types.SecretSpec) error {
  84. c.RLock()
  85. defer c.RUnlock()
  86. if !c.isActiveManager() {
  87. return c.errNoManager()
  88. }
  89. ctx, cancel := c.getRequestContext()
  90. defer cancel()
  91. secretSpec := convert.SecretSpecToGRPC(spec)
  92. if _, err := c.client.UpdateSecret(ctx,
  93. &swarmapi.UpdateSecretRequest{
  94. SecretID: id,
  95. SecretVersion: &swarmapi.Version{
  96. Index: version,
  97. },
  98. Spec: &secretSpec,
  99. }); err != nil {
  100. return err
  101. }
  102. return nil
  103. }