func (c *Client) VolumeDelete(id string) error { // Create a request req, err := http.NewRequest("DELETE", c.host+"/volumes/"+id, nil) if err != nil { return err } // Set token err = c.setToken(req) if err != nil { return err } // Send request r, err := c.do(req) if err != nil { return err } if r.StatusCode != http.StatusAccepted { return utils.GetErrorFromResponse(r) } // Wait for response r, err = c.waitForResponseWithTimer(r, time.Second) if err != nil { return err } if r.StatusCode != http.StatusNoContent { return utils.GetErrorFromResponse(r) } return nil }
func (c *Client) VolumeExpand(id string, request *api.VolumeExpandRequest) ( *api.VolumeInfoResponse, error) { // Marshal request to JSON buffer, err := json.Marshal(request) if err != nil { return nil, err } // Create a request req, err := http.NewRequest("POST", c.host+"/volumes/"+id+"/expand", bytes.NewBuffer(buffer)) if err != nil { return nil, err } req.Header.Set("Content-Type", "application/json") // Set token err = c.setToken(req) if err != nil { return nil, err } // Send request r, err := c.do(req) if err != nil { return nil, err } if r.StatusCode != http.StatusAccepted { return nil, utils.GetErrorFromResponse(r) } // Wait for response r, err = c.waitForResponseWithTimer(r, time.Second) if err != nil { return nil, err } if r.StatusCode != http.StatusOK { return nil, utils.GetErrorFromResponse(r) } // Read JSON response var volume api.VolumeInfoResponse err = utils.GetJsonFromResponse(r, &volume) r.Body.Close() if err != nil { return nil, err } return &volume, nil }
func (c *Client) NodeAdd(request *api.NodeAddRequest) (*api.NodeInfoResponse, error) { // Marshal request to JSON buffer, err := json.Marshal(request) if err != nil { return nil, err } // Create a request req, err := http.NewRequest("POST", c.host+"/nodes", bytes.NewBuffer(buffer)) if err != nil { return nil, err } req.Header.Set("Content-Type", "application/json") // Set token err = c.setToken(req) if err != nil { return nil, err } // Send request r, err := c.do(req) if err != nil { return nil, err } if r.StatusCode != http.StatusAccepted { return nil, utils.GetErrorFromResponse(r) } // Wait for response r, err = c.waitForResponseWithTimer(r, time.Millisecond*250) if err != nil { return nil, err } if r.StatusCode != http.StatusOK { return nil, utils.GetErrorFromResponse(r) } // Read JSON response var node api.NodeInfoResponse err = utils.GetJsonFromResponse(r, &node) r.Body.Close() if err != nil { return nil, err } return &node, nil }
func (c *Client) VolumeInfo(id string) (*api.VolumeInfoResponse, error) { // Create request req, err := http.NewRequest("GET", c.host+"/volumes/"+id, nil) if err != nil { return nil, err } // Set token err = c.setToken(req) if err != nil { return nil, err } // Get info r, err := c.do(req) if err != nil { return nil, err } if r.StatusCode != http.StatusOK { return nil, utils.GetErrorFromResponse(r) } // Read JSON response var volume api.VolumeInfoResponse err = utils.GetJsonFromResponse(r, &volume) r.Body.Close() if err != nil { return nil, err } return &volume, nil }
func (c *Client) ClusterList() (*api.ClusterListResponse, error) { // Create request req, err := http.NewRequest("GET", c.host+"/clusters", nil) if err != nil { return nil, err } // Set token err = c.setToken(req) if err != nil { return nil, err } // Get info r, err := c.do(req) if err != nil { return nil, err } if r.StatusCode != http.StatusOK { return nil, utils.GetErrorFromResponse(r) } // Read JSON response var clusters api.ClusterListResponse err = utils.GetJsonFromResponse(r, &clusters) if err != nil { return nil, err } return &clusters, nil }
func (c *Client) ClusterCreate() (*api.ClusterInfoResponse, error) { // Create a request req, err := http.NewRequest("POST", c.host+"/clusters", bytes.NewBuffer([]byte(`{}`))) if err != nil { return nil, err } req.Header.Set("Content-Type", "application/json") // Set token err = c.setToken(req) if err != nil { return nil, err } // Send request r, err := c.do(req) if err != nil { return nil, err } if r.StatusCode != http.StatusCreated { return nil, utils.GetErrorFromResponse(r) } // Read JSON response var cluster api.ClusterInfoResponse err = utils.GetJsonFromResponse(r, &cluster) r.Body.Close() if err != nil { return nil, err } return &cluster, nil }
func (c *Client) ClusterDelete(id string) error { // Create DELETE request req, err := http.NewRequest("DELETE", c.host+"/clusters/"+id, nil) if err != nil { return err } // Set token err = c.setToken(req) if err != nil { return err } // Send request r, err := c.do(req) if err != nil { return err } if r.StatusCode != http.StatusOK { return utils.GetErrorFromResponse(r) } return nil }
func (c *Client) NodeState(id string, request *api.StateRequest) error { // Marshal request to JSON buffer, err := json.Marshal(request) if err != nil { return err } // Create a request req, err := http.NewRequest("POST", c.host+"/nodes/"+id+"/state", bytes.NewBuffer(buffer)) if err != nil { return err } req.Header.Set("Content-Type", "application/json") // Set token err = c.setToken(req) if err != nil { return err } // Get info r, err := c.do(req) if err != nil { return err } if r.StatusCode != http.StatusOK { return utils.GetErrorFromResponse(r) } return nil }
func (c *Client) BackupDb(w io.Writer) error { // Create a request req, err := http.NewRequest("GET", c.host+"/backup/db", nil) if err != nil { return err } // Set token err = c.setToken(req) if err != nil { return err } // Send request r, err := c.do(req) if err != nil { return err } if r.StatusCode != http.StatusOK { return utils.GetErrorFromResponse(r) } // Read data from response defer r.Body.Close() _, err = io.Copy(w, r.Body) return err }
func (c *Client) DeviceAdd(request *api.DeviceAddRequest) error { // Marshal request to JSON buffer, err := json.Marshal(request) if err != nil { return err } // Create a request req, err := http.NewRequest("POST", c.host+"/devices", bytes.NewBuffer(buffer)) if err != nil { return err } req.Header.Set("Content-Type", "application/json") // Set token err = c.setToken(req) if err != nil { return err } // Send request r, err := c.do(req) if err != nil { return err } if r.StatusCode != http.StatusAccepted { return utils.GetErrorFromResponse(r) } // Wait for response r, err = c.waitForResponseWithTimer(r, time.Second) if err != nil { return err } if r.StatusCode != http.StatusNoContent { return utils.GetErrorFromResponse(r) } return nil }
// Wait for the job to finish, waiting waitTime on every loop func (c *Client) waitForResponseWithTimer(r *http.Response, waitTime time.Duration) (*http.Response, error) { // Get temp resource location, err := r.Location() if err != nil { return nil, err } for { // Create request req, err := http.NewRequest("GET", location.String(), nil) if err != nil { return nil, err } // Set token err = c.setToken(req) if err != nil { return nil, err } // Wait for response r, err = c.do(req) if err != nil { return nil, err } // Check if the request is pending if r.Header.Get("X-Pending") == "true" { if r.StatusCode != http.StatusOK { return nil, utils.GetErrorFromResponse(r) } time.Sleep(waitTime) } else { return r, nil } } }
// Simple Hello test to check if the server is up func (c *Client) Hello() error { // Create request req, err := http.NewRequest("GET", c.host+"/hello", nil) if err != nil { return err } // Set token err = c.setToken(req) if err != nil { return err } // Get info r, err := c.do(req) if err != nil { return err } if r.StatusCode != http.StatusOK { return utils.GetErrorFromResponse(r) } return nil }