public JobResult ModifyKVPItems(string vmId, KvpExchangeDataItem[] items) { try { Log.WriteStart("'{0}' ModifyKVPItems", ProviderSettings.ProviderName); JobResult result = VirtualizationProvider.ModifyKVPItems(vmId, items); Log.WriteEnd("'{0}' ModifyKVPItems", ProviderSettings.ProviderName); return result; } catch (Exception ex) { Log.WriteError(String.Format("'{0}' ModifyKVPItems", ProviderSettings.ProviderName), ex); throw; } }
public JobResult AddKVPItems(string vmId, KvpExchangeDataItem[] items) { // get KVP management object ManagementObject objVmsvc = GetVirtualSystemManagementService(); // create KVP items array string[] wmiItems = new string[items.Length]; for (int i = 0; i < items.Length; i++) { ManagementClass clsKvp = wmi.GetWmiClass("Msvm_KvpExchangeDataItem"); ManagementObject objKvp = clsKvp.CreateInstance(); objKvp["Name"] = items[i].Name; objKvp["Data"] = items[i].Data; objKvp["Source"] = 0; // convert to WMI format wmiItems[i] = objKvp.GetText(TextFormat.CimDtd20); } ManagementBaseObject inParams = objVmsvc.GetMethodParameters("AddKvpItems"); inParams["TargetSystem"] = GetVirtualMachineObject(vmId); inParams["DataItems"] = wmiItems; // invoke method ManagementBaseObject outParams = objVmsvc.InvokeMethod("AddKvpItems", inParams, null); return CreateJobResultFromWmiMethodResults(outParams); }
public JobResult ModifyKVPItems(string vmId, KvpExchangeDataItem[] items) { throw new NotImplementedException(); }
private static JobResult SendKvpItems(int itemId, string taskName, Dictionary<string, string> taskProps) { string TASK_PREFIX = "WSP-"; // load item VirtualMachine vm = GetVirtualMachineByItemId(itemId); if (vm == null) return null; JobResult result = null; // load proxy VirtualizationServer2012 vs = GetVirtualizationProxy(vm.ServiceId); try { // delete completed task definitions List<string> completedTasks = new List<string>(); KvpExchangeDataItem[] vmKvps = vs.GetKVPItems(vm.VirtualMachineId); foreach (KvpExchangeDataItem vmKvp in vmKvps) { if (vmKvp.Name.StartsWith(TASK_PREFIX)) completedTasks.Add(vmKvp.Name); } // delete completed items vs.RemoveKVPItems(vm.VirtualMachineId, completedTasks.ToArray()); } catch (Exception ex) { // log error TaskManager.WriteWarning(String.Format("Error deleting KVP items: {0}", ex.Message)); } // build items array List<string> items = new List<string>(); foreach (string propName in taskProps.Keys) items.Add(propName + "=" + taskProps[propName]); taskName = String.Format("{0}{1}-{2}", TASK_PREFIX, taskName, DateTime.Now.Ticks); string taskData = String.Join("|", items.ToArray()); // create KVP item KvpExchangeDataItem[] kvp = new KvpExchangeDataItem[1]; kvp[0] = new KvpExchangeDataItem(); kvp[0].Name = taskName; kvp[0].Data = taskData; try { // try adding KVP items result = vs.AddKVPItems(vm.VirtualMachineId, kvp); if (result.Job != null && result.Job.JobState == ConcreteJobState.Exception) { // try updating KVP items return vs.ModifyKVPItems(vm.VirtualMachineId, kvp); } else { return result; } } catch (Exception ex) { // log error TaskManager.WriteWarning(String.Format("Error setting KVP items '{0}': {1}", kvp[0].Data, ex.Message)); } return null; }
/// <remarks/> public void ModifyKVPItemsAsync(string vmId, KvpExchangeDataItem[] items, object userState) { if ((this.ModifyKVPItemsOperationCompleted == null)) { this.ModifyKVPItemsOperationCompleted = new System.Threading.SendOrPostCallback(this.OnModifyKVPItemsOperationCompleted); } this.InvokeAsync("ModifyKVPItems", new object[] { vmId, items}, this.ModifyKVPItemsOperationCompleted, userState); }
/// <remarks/> public void ModifyKVPItemsAsync(string vmId, KvpExchangeDataItem[] items) { this.ModifyKVPItemsAsync(vmId, items, null); }
/// <remarks/> public System.IAsyncResult BeginModifyKVPItems(string vmId, KvpExchangeDataItem[] items, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("ModifyKVPItems", new object[] { vmId, items}, callback, asyncState); }
public JobResult ModifyKVPItems(string vmId, KvpExchangeDataItem[] items) { object[] results = this.Invoke("ModifyKVPItems", new object[] { vmId, items}); return ((JobResult)(results[0])); }