network.go 2.7 KB

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