// PostAction submits a MIG Action to the API and returns the reflected action with API ID func (cli Client) PostAction(a mig.Action) (a2 mig.Action, err error) { defer func() { if e := recover(); e != nil { err = fmt.Errorf("PostAction() -> %v", e) } }() a.SyntaxVersion = mig.ActionVersion // serialize ajson, err := json.Marshal(a) if err != nil { panic(err) } actionstr := string(ajson) data := url.Values{"action": {actionstr}} r, err := http.NewRequest("POST", cli.Conf.API.URL+"action/create/", strings.NewReader(data.Encode())) if err != nil { panic(err) } r.Header.Set("Content-Type", "application/x-www-form-urlencoded") resp, err := cli.Do(r) if err != nil { panic(err) } defer resp.Body.Close() if err != nil { panic(err) } body, err := ioutil.ReadAll(resp.Body) if err != nil { panic(err) } if resp.StatusCode != 202 { err = fmt.Errorf("error: HTTP %d. action creation failed.", resp.StatusCode) panic(err) } var resource *cljs.Resource err = json.Unmarshal(body, &resource) if err != nil { panic(err) } a2, err = ValueToAction(resource.Collection.Items[0].Data[0].Value) if err != nil { panic(err) } return }