package goCoreUI import ( "bytes" "errors" "fmt" "net/http" "net/url" "strconv" ) const ( stagingURL string = "https://staging.core.rackspace.com/py/" prodURL string = "https://core.rackspace.com/py/" ) type ( attrResponse struct { Resp string `json:"core_respose"` } attrPost struct { PrimaryID int `json:"primary_id"` FailoverID int `json:"failover_id"` Token string } ) // SetFailoverforComputer sets the failover device for a given computer in core func SetFailoverforComputer(device int, failover int, token string) (*string, error) { c := attrPost{ PrimaryID: device, FailoverID: failover, Token: token, } data := url.Values{} data.Set("computer_number", strconv.Itoa(c.PrimaryID)) data.Add(strconv.Itoa(c.FailoverID), "Assign as Failover") path := prodURL + "computer/popupFailbackAssign.pt" r, err := c.post(data, path) if err != nil { return nil, err } return r, nil } func (c *attrPost) post(data url.Values, path string) (*string, error) { if c.Token == "" { return nil, errors.New("Core Token Missing.") } client := &http.Client{} req, err := http.NewRequest("POST", path, bytes.NewBufferString(data.Encode())) req.Header.Set("Cookie", fmt.Sprintf("rackspace_admin_session=%s", c.Token)) req.Header.Add("Content-Length", strconv.Itoa(len(data.Encode()))) resp, err := client.Do(req) if err != nil { return nil, err } if resp.Status != "200 OK" { return nil, errors.New(fmt.Sprintf("Recieved invalid response from CORE. Response: %s", resp.Status)) } return &resp.Status, nil }