network.go 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package lib
  2. import (
  3. "encoding/json"
  4. "net/http"
  5. "net/url"
  6. "github.com/docker/docker/api/types"
  7. "github.com/docker/docker/api/types/filters"
  8. )
  9. // NetworkCreate creates a new network in the docker host.
  10. func (cli *Client) NetworkCreate(options types.NetworkCreate) (types.NetworkCreateResponse, error) {
  11. var response types.NetworkCreateResponse
  12. serverResp, err := cli.post("/networks/create", nil, options, nil)
  13. if err != nil {
  14. return response, err
  15. }
  16. json.NewDecoder(serverResp.body).Decode(&response)
  17. ensureReaderClosed(serverResp)
  18. return response, err
  19. }
  20. // NetworkRemove removes an existent network from the docker host.
  21. func (cli *Client) NetworkRemove(networkID string) error {
  22. resp, err := cli.delete("/networks/"+networkID, nil, nil)
  23. ensureReaderClosed(resp)
  24. return err
  25. }
  26. // NetworkConnect connects a container to an existent network in the docker host.
  27. func (cli *Client) NetworkConnect(networkID, containerID string) error {
  28. nc := types.NetworkConnect{Container: containerID}
  29. resp, err := cli.post("/networks/"+networkID+"/connect", nil, nc, nil)
  30. ensureReaderClosed(resp)
  31. return err
  32. }
  33. // NetworkDisconnect disconnects a container from an existent network in the docker host.
  34. func (cli *Client) NetworkDisconnect(networkID, containerID string) error {
  35. nc := types.NetworkConnect{Container: containerID}
  36. resp, err := cli.post("/networks/"+networkID+"/disconnect", nil, nc, nil)
  37. ensureReaderClosed(resp)
  38. return err
  39. }
  40. // NetworkList returns the list of networks configured in the docker host.
  41. func (cli *Client) NetworkList(options types.NetworkListOptions) ([]types.NetworkResource, error) {
  42. query := url.Values{}
  43. if options.Filters.Len() > 0 {
  44. filterJSON, err := filters.ToParam(options.Filters)
  45. if err != nil {
  46. return nil, err
  47. }
  48. query.Set("filters", filterJSON)
  49. }
  50. var networkResources []types.NetworkResource
  51. resp, err := cli.get("/networks", query, nil)
  52. if err != nil {
  53. return networkResources, err
  54. }
  55. defer ensureReaderClosed(resp)
  56. err = json.NewDecoder(resp.body).Decode(&networkResources)
  57. return networkResources, err
  58. }
  59. // NetworkInspect returns the information for a specific network configured in the docker host.
  60. func (cli *Client) NetworkInspect(networkID string) (types.NetworkResource, error) {
  61. var networkResource types.NetworkResource
  62. resp, err := cli.get("/networks/"+networkID, nil, nil)
  63. if err != nil {
  64. if resp.statusCode == http.StatusNotFound {
  65. return networkResource, networkNotFoundError{networkID}
  66. }
  67. return networkResource, err
  68. }
  69. defer ensureReaderClosed(resp)
  70. err = json.NewDecoder(resp.body).Decode(&networkResource)
  71. return networkResource, err
  72. }