/// <summary> /// Kick off asynchronous request. /// </summary> /// <param name="session">Client session</param> /// <param name="req">API command</param> /// <returns>Asynchronous task job id.</returns> public static string StartAsyncJob(Client session, APIRequest req) { XDocument resp = session.SendRequest(req); XElement jobid = resp.Descendants("jobid").FirstOrDefault(); if (jobid == null || string.IsNullOrEmpty(jobid.Value)) { throw new CloudStackException("Async command failed to return jobid", req.ToString(), resp); } return jobid.Value; }
/// <summary> /// Start a job, wait for it to complete and return the resulting resource id /// </summary> /// <param name="session">the session</param> /// <param name="req">the request object</param> /// <returns>resource id</returns> public static string WaitForResourceIdFromAsyncJob(Client session, APIRequest req) { string jobid = StartAsyncJob(session, req); XDocument asyncResult = WaitForAsyncJobResult(session, jobid); XElement id = asyncResult.Descendants("id").FirstOrDefault(); if (id == null || string.IsNullOrEmpty(id.Value)) { throw new CloudStackException("Failed to obtain new resource id after async job", req.ToString(), asyncResult); } return id.Value; }
/// <summary> /// Run an async job and wait for the result /// </summary> public static XContainer RunAsyncJob(Client session, APIRequest request) { string jobid = StartAsyncJob(session, request); XDocument response = WaitForAsyncJobResult(session, jobid); return response.Descendants("jobresult").FirstOrDefault().FirstNode as XContainer; }
/// <summary> /// Destroy Virtual Machine /// </summary> /// <param name="vmId">Virtual machine identifier.</param> public void DestroyVirtualMachine(string vmId) { APIRequest request = new APIRequest("destroyVirtualMachine"); request.Parameters["id"] = vmId; SendRequest(request); }
/// <summary> /// Delete Volume /// </summary> /// <param name="volumeId">Cloud resource identifier</param> public void DeleteVolume(string volumeId) { APIRequest request = new APIRequest("deleteVolume"); request.Parameters["id"] = volumeId; SendRequest(request); }
/// <summary> /// Stop Virtual Machine /// </summary> /// <param name="vmId">Cloud resource identifier for VM</param> /// <param name="forced">Indicate whether the VM should be forced to stop</param> public void StopVirtualMachine(string vmId, bool forced) { APIRequest request = new APIRequest("stopVirtualMachine"); request.Parameters["id"] = vmId; request.Parameters["forced"] = forced ? "true" : "false"; SendRequest(request); }
/// <summary> /// startVirtualMachine API call /// </summary> /// <param name="vmId">Cloud resource identifier for VM</param> public void StartVirtualMachine(string vmId) { APIRequest req = new APIRequest("startVirtualMachine"); req.Parameters["id"] = vmId; SendRequest(req); }
/// <summary> /// List the volumes /// </summary> public ListVolumesResponse ListVolumes(APIRequest request) { return DeserialiseResponse<ListVolumesResponse>(() => SendRequest(request), request.Command); }