PageRenderTime 44ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/vendor/github.com/digitalocean/godo/droplet_actions.go

https://gitlab.com/github-cloud-corporation/machine
Go | 238 lines | 172 code | 40 blank | 26 comment | 15 complexity | daa6e0fe21d32fdd505f9ab60031d808 MD5 | raw file
  1. package godo
  2. import (
  3. "fmt"
  4. "net/url"
  5. )
  6. // ActionRequest reprents DigitalOcean Action Request
  7. type ActionRequest map[string]interface{}
  8. // DropletActionsService is an interface for interfacing with the droplet actions
  9. // endpoints of the DigitalOcean API
  10. // See: https://developers.digitalocean.com/documentation/v2#droplet-actions
  11. type DropletActionsService interface {
  12. Shutdown(int) (*Action, *Response, error)
  13. PowerOff(int) (*Action, *Response, error)
  14. PowerOn(int) (*Action, *Response, error)
  15. PowerCycle(int) (*Action, *Response, error)
  16. Reboot(int) (*Action, *Response, error)
  17. Restore(int, int) (*Action, *Response, error)
  18. Resize(int, string, bool) (*Action, *Response, error)
  19. Rename(int, string) (*Action, *Response, error)
  20. Snapshot(int, string) (*Action, *Response, error)
  21. EnableBackups(int) (*Action, *Response, error)
  22. DisableBackups(int) (*Action, *Response, error)
  23. PasswordReset(int) (*Action, *Response, error)
  24. RebuildByImageID(int, int) (*Action, *Response, error)
  25. RebuildByImageSlug(int, string) (*Action, *Response, error)
  26. ChangeKernel(int, int) (*Action, *Response, error)
  27. EnableIPv6(int) (*Action, *Response, error)
  28. EnablePrivateNetworking(int) (*Action, *Response, error)
  29. Upgrade(int) (*Action, *Response, error)
  30. Get(int, int) (*Action, *Response, error)
  31. GetByURI(string) (*Action, *Response, error)
  32. }
  33. // DropletActionsServiceOp handles communication with the droplet action related
  34. // methods of the DigitalOcean API.
  35. type DropletActionsServiceOp struct {
  36. client *Client
  37. }
  38. var _ DropletActionsService = &DropletActionsServiceOp{}
  39. // Shutdown a Droplet
  40. func (s *DropletActionsServiceOp) Shutdown(id int) (*Action, *Response, error) {
  41. request := &ActionRequest{"type": "shutdown"}
  42. return s.doAction(id, request)
  43. }
  44. // PowerOff a Droplet
  45. func (s *DropletActionsServiceOp) PowerOff(id int) (*Action, *Response, error) {
  46. request := &ActionRequest{"type": "power_off"}
  47. return s.doAction(id, request)
  48. }
  49. // PowerOn a Droplet
  50. func (s *DropletActionsServiceOp) PowerOn(id int) (*Action, *Response, error) {
  51. request := &ActionRequest{"type": "power_on"}
  52. return s.doAction(id, request)
  53. }
  54. // PowerCycle a Droplet
  55. func (s *DropletActionsServiceOp) PowerCycle(id int) (*Action, *Response, error) {
  56. request := &ActionRequest{"type": "power_cycle"}
  57. return s.doAction(id, request)
  58. }
  59. // Reboot a Droplet
  60. func (s *DropletActionsServiceOp) Reboot(id int) (*Action, *Response, error) {
  61. request := &ActionRequest{"type": "reboot"}
  62. return s.doAction(id, request)
  63. }
  64. // Restore an image to a Droplet
  65. func (s *DropletActionsServiceOp) Restore(id, imageID int) (*Action, *Response, error) {
  66. requestType := "restore"
  67. request := &ActionRequest{
  68. "type": requestType,
  69. "image": float64(imageID),
  70. }
  71. return s.doAction(id, request)
  72. }
  73. // Resize a Droplet
  74. func (s *DropletActionsServiceOp) Resize(id int, sizeSlug string, resizeDisk bool) (*Action, *Response, error) {
  75. requestType := "resize"
  76. request := &ActionRequest{
  77. "type": requestType,
  78. "size": sizeSlug,
  79. "disk": resizeDisk,
  80. }
  81. return s.doAction(id, request)
  82. }
  83. // Rename a Droplet
  84. func (s *DropletActionsServiceOp) Rename(id int, name string) (*Action, *Response, error) {
  85. requestType := "rename"
  86. request := &ActionRequest{
  87. "type": requestType,
  88. "name": name,
  89. }
  90. return s.doAction(id, request)
  91. }
  92. // Snapshot a Droplet.
  93. func (s *DropletActionsServiceOp) Snapshot(id int, name string) (*Action, *Response, error) {
  94. requestType := "snapshot"
  95. request := &ActionRequest{
  96. "type": requestType,
  97. "name": name,
  98. }
  99. return s.doAction(id, request)
  100. }
  101. // EnableBackups enables backups for a droplet.
  102. func (s *DropletActionsServiceOp) EnableBackups(id int) (*Action, *Response, error) {
  103. request := &ActionRequest{"type": "enable_backups"}
  104. return s.doAction(id, request)
  105. }
  106. // DisableBackups disables backups for a droplet.
  107. func (s *DropletActionsServiceOp) DisableBackups(id int) (*Action, *Response, error) {
  108. request := &ActionRequest{"type": "disable_backups"}
  109. return s.doAction(id, request)
  110. }
  111. // PasswordReset resets the password for a droplet.
  112. func (s *DropletActionsServiceOp) PasswordReset(id int) (*Action, *Response, error) {
  113. request := &ActionRequest{"type": "password_reset"}
  114. return s.doAction(id, request)
  115. }
  116. // RebuildByImageID rebuilds a droplet droplet from an image with a given id.
  117. func (s *DropletActionsServiceOp) RebuildByImageID(id, imageID int) (*Action, *Response, error) {
  118. request := &ActionRequest{"type": "rebuild", "image": imageID}
  119. return s.doAction(id, request)
  120. }
  121. // RebuildByImageSlug rebuilds a droplet from an image with a given slug.
  122. func (s *DropletActionsServiceOp) RebuildByImageSlug(id int, slug string) (*Action, *Response, error) {
  123. request := &ActionRequest{"type": "rebuild", "image": slug}
  124. return s.doAction(id, request)
  125. }
  126. // ChangeKernel changes the kernel for a droplet.
  127. func (s *DropletActionsServiceOp) ChangeKernel(id, kernelID int) (*Action, *Response, error) {
  128. request := &ActionRequest{"type": "change_kernel", "kernel": kernelID}
  129. return s.doAction(id, request)
  130. }
  131. // EnableIPv6 enables IPv6 for a droplet.
  132. func (s *DropletActionsServiceOp) EnableIPv6(id int) (*Action, *Response, error) {
  133. request := &ActionRequest{"type": "enable_ipv6"}
  134. return s.doAction(id, request)
  135. }
  136. // EnablePrivateNetworking enables private networking for a droplet.
  137. func (s *DropletActionsServiceOp) EnablePrivateNetworking(id int) (*Action, *Response, error) {
  138. request := &ActionRequest{"type": "enable_private_networking"}
  139. return s.doAction(id, request)
  140. }
  141. // Upgrade a droplet.
  142. func (s *DropletActionsServiceOp) Upgrade(id int) (*Action, *Response, error) {
  143. request := &ActionRequest{"type": "upgrade"}
  144. return s.doAction(id, request)
  145. }
  146. func (s *DropletActionsServiceOp) doAction(id int, request *ActionRequest) (*Action, *Response, error) {
  147. if id < 1 {
  148. return nil, nil, NewArgError("id", "cannot be less than 1")
  149. }
  150. if request == nil {
  151. return nil, nil, NewArgError("request", "request can't be nil")
  152. }
  153. path := dropletActionPath(id)
  154. req, err := s.client.NewRequest("POST", path, request)
  155. if err != nil {
  156. return nil, nil, err
  157. }
  158. root := new(actionRoot)
  159. resp, err := s.client.Do(req, root)
  160. if err != nil {
  161. return nil, resp, err
  162. }
  163. return &root.Event, resp, err
  164. }
  165. // Get an action for a particular droplet by id.
  166. func (s *DropletActionsServiceOp) Get(dropletID, actionID int) (*Action, *Response, error) {
  167. if dropletID < 1 {
  168. return nil, nil, NewArgError("dropletID", "cannot be less than 1")
  169. }
  170. if actionID < 1 {
  171. return nil, nil, NewArgError("actionID", "cannot be less than 1")
  172. }
  173. path := fmt.Sprintf("%s/%d", dropletActionPath(dropletID), actionID)
  174. return s.get(path)
  175. }
  176. // GetByURI gets an action for a particular droplet by id.
  177. func (s *DropletActionsServiceOp) GetByURI(rawurl string) (*Action, *Response, error) {
  178. u, err := url.Parse(rawurl)
  179. if err != nil {
  180. return nil, nil, err
  181. }
  182. return s.get(u.Path)
  183. }
  184. func (s *DropletActionsServiceOp) get(path string) (*Action, *Response, error) {
  185. req, err := s.client.NewRequest("GET", path, nil)
  186. if err != nil {
  187. return nil, nil, err
  188. }
  189. root := new(actionRoot)
  190. resp, err := s.client.Do(req, root)
  191. if err != nil {
  192. return nil, resp, err
  193. }
  194. return &root.Event, resp, err
  195. }
  196. func dropletActionPath(dropletID int) string {
  197. return fmt.Sprintf("v2/droplets/%d/actions", dropletID)
  198. }