func (c *Client) DeviceDelete(id string) error { // Create a request req, err := http.NewRequest("DELETE", c.host+"/devices/"+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 *glusterfs.VolumeExpandRequest) ( *glusterfs.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 glusterfs.VolumeInfoResponse err = utils.GetJsonFromResponse(r, &volume) r.Body.Close() if err != nil { return nil, err } return &volume, nil }
func (c *Client) DeviceInfo(id string) (*glusterfs.DeviceInfoResponse, error) { // Create request req, err := http.NewRequest("GET", c.host+"/devices/"+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 device glusterfs.DeviceInfoResponse err = utils.GetJsonFromResponse(r, &device) r.Body.Close() if err != nil { return nil, err } return &device, nil }
func (c *Client) ClusterList() (*glusterfs.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 glusterfs.ClusterListResponse err = utils.GetJsonFromResponse(r, &clusters) if err != nil { return nil, err } return &clusters, nil }
func (c *Client) ClusterCreate() (*glusterfs.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 glusterfs.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) DeviceAdd(request *glusterfs.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 }