diff --git a/azure_m/azure_m/azure_m/Models/RequestModels/CreateOrUpdateVM.cs b/azure_m/azure_m/azure_m/Models/RequestModels/CreateOrUpdateVM.cs index 614d702ce18ce6aa5d131925f720aafa25f1df9c..49a6a3b286d6762c034370611d5269b08d59e286 100644 --- a/azure_m/azure_m/azure_m/Models/RequestModels/CreateOrUpdateVM.cs +++ b/azure_m/azure_m/azure_m/Models/RequestModels/CreateOrUpdateVM.cs @@ -96,7 +96,7 @@ { public bool enableAcceleratedNetworking; - public NetworkInterfaceIPConfiguration ipConfigurations; + public NetworkInterfaceIPConfiguration[] ipConfigurations; } public class NetworkInterfaceIPConfiguration { @@ -147,7 +147,13 @@ public class CreateOrUpdateNIRequest : IRequest< CreateOrUpdateNIUri, CreateOrUpdateNIBody> - { } + { + public CreateOrUpdateNIRequest() + { + uri = new CreateOrUpdateNIUri(); + body = new CreateOrUpdateNIBody{properties = new NetworkInterfacesProperties{ipConfigurations = new NetworkInterfaceIPConfiguration[1] }}; + } + } } @@ -589,7 +595,13 @@ storageProfile = new StorageProfile { imageReference = new ImageReference() }, hardWareProfile = new HardWareProfile { vmSizeProperties = new VMSizeProperties() }, osProfile = new OSProfile { computerName = "", adminUsername = "", adminPassword = "" }, - networkProfile = new NetworkProfile() + networkProfile = new NetworkProfile { networkInterfaces = new NetworkInterface[1] + { + new NetworkInterface + { + properties = new NetworkInterfaceProperties{ primary = true } + } + } } } }; uri = new CreateOrUpdateVMUri { resourceGroupName = "", vmName = "" }; diff --git a/azure_m/azure_m/azure_m/ViewModels/VMDetailsViewModel.cs b/azure_m/azure_m/azure_m/ViewModels/VMDetailsViewModel.cs index 2e562e0490fbe442743417019cf532a79ec9a9af..c1c94f34c4775ba98981593667138e3632373770 100644 --- a/azure_m/azure_m/azure_m/ViewModels/VMDetailsViewModel.cs +++ b/azure_m/azure_m/azure_m/ViewModels/VMDetailsViewModel.cs @@ -5,6 +5,7 @@ using System.Text; using System.Linq; using azure_m.Models; using azure_m.Models.RequestModels.VMRequestModels.CreateOrUpdate; +using azure_m.Models.RequestModels.NetworkInterfaceRequestModels; using Xamarin.Forms; using System.Threading.Tasks; using azure_m.Services; @@ -28,14 +29,14 @@ namespace azure_m.ViewModels public List AreaSources { get; set; } public List Zones { get; set; } - public Command ZonesIndexChange; + public Command ZonesIndexChange { get; set; } public List Images { get; set; } public List vmSizes { get; set; } public List ports { get; set; } - public Command portsChange; + public Command portsChange { get; set; } public List vnetworks { get; set; } @@ -43,7 +44,16 @@ namespace azure_m.ViewModels public List publicIPs { get; set; } - public List networkInterfaces { get; set; } + public List net_ports { get; set; } + public Command net_portsChange { get; set; } + + + public string mail { get; set; } + public string PhoneNumber { get; set; } + + public Command CreateOrUpdateVM { get; set; } + + public CreateOrUpdateNIRequest nIRequest { get; set; } = new CreateOrUpdateNIRequest { body = new CreateOrUpdateNIBody { properties = new NetworkInterfacesProperties { ipConfigurations = new NetworkInterfaceIPConfiguration[1] } } }; public CreateOrUpdateVMRequest vm = new CreateOrUpdateVMRequest(); public VMDetailsViewModel() @@ -58,9 +68,10 @@ namespace azure_m.ViewModels ports = new List { "HTTPS(443)", "HTTP(80)", "SSH(22)" }; vnetworks = new List { "new_group-vnet" }; - networkInterfaces = new List { }; + net_ports = new List { "HTTPS(443)", "HTTP(80)", "SSH(22)","RDP(3389)" }; + +#endif -#endif subscribesNames = subscribes.Keys.ToList(); #region Bindings Views.AddVmDetailsPage.SubscribeIndexChange += ChangeSubID; @@ -68,7 +79,7 @@ namespace azure_m.ViewModels Views.AddVmDetailsPage.AreaChanged += (sender, e) => {vm.body.location = AreaSources[(sender as Picker).SelectedIndex]; }; vmNameComplete=new Command((sender) => { vm.uri.vmName = vm.body.properties.osProfile.computerName = (sender as Entry).Text; }); ZonesIndexChange = new Command((sender) => { - Array.Clear(vm.body.zones, 0, vm.body.zones.Length); + if (vm.body.zones != null && vm.body.zones.Length != 0) { Array.Clear(vm.body.zones, 0, vm.body.zones.Length); } vm.body.zones = new string[(sender as CollectionView).SelectedItems.Count()]; int idx = 0; foreach(string zone in (sender as CollectionView).SelectedItems) { vm.body.zones[idx++]=zone; } @@ -91,17 +102,62 @@ namespace azure_m.ViewModels }; Views.AddVmDetailsPage.vmSizeIndexChanged+=(sender, e) => { vm.body.properties.hardWareProfile.vmSize = new string[] { vmSizes[(sender as Picker).SelectedIndex] }; }; Views.AddVmDetailsPage.passwdComplete += (sender, e) => vm.body.properties.osProfile.adminPassword = (sender as Entry).Text.ToString(); - portsChange = new Command((sender) => { }); - Views.AddVmDetailsPage.diskTypeIndexChanged+=(sender, e) => { }; + Views.AddVmDetailsPage.vnetChanged += (sender, e) => { + nIRequest.body.properties.ipConfigurations[0] = new NetworkInterfaceIPConfiguration + { + properties = new NetworkInterfaceIPConfigurationProperties + { + + } + }; + vm.body.properties.networkProfile.networkInterfaces[0] = new NetworkInterface + { + id = $"/subscriptions/{azure_m.Services.QueryInfo.subid}/resourceGroups/{vm.uri.resourceGroupName}/providers/Microsoft.Network/networkInterfaces/{UID}", + properties = new NetworkInterfaceProperties { primary = true } + }; + }; + Views.AddVmDetailsPage.subnetChanged += (sender, e) => + { + nIRequest.body.properties.ipConfigurations[0] = new NetworkInterfaceIPConfiguration + { + properties = new NetworkInterfaceIPConfigurationProperties + { + + } + }; + vm.body.properties.networkProfile.networkInterfaces[0] = new NetworkInterface + { + id = $"/subscriptions/{azure_m.Services.QueryInfo.subid}/resourceGroups/{vm.uri.resourceGroupName}/providers/Microsoft.Network/networkInterfaces/{UID}", + properties = new NetworkInterfaceProperties { primary = true } + }; + }; + Views.AddVmDetailsPage.publicIPChanged += (sender, e) => {//当nic更改时,应直接修改nIrequest + nIRequest.body.properties.ipConfigurations[0] = new NetworkInterfaceIPConfiguration { + properties = new NetworkInterfaceIPConfigurationProperties + { - Views.AddVmDetailsPage.nicChanged += (sender, e) => {//新建一个nic - networkInterfaces.Add(new NetworkInterface + } + }; + vm.body.properties.networkProfile.networkInterfaces[0] = new NetworkInterface { id = $"/subscriptions/{azure_m.Services.QueryInfo.subid}/resourceGroups/{vm.uri.resourceGroupName}/providers/Microsoft.Network/networkInterfaces/{UID}", properties = new NetworkInterfaceProperties { primary = true } - }); + }; }; + Views.AddVmDetailsPage.DeleteOptionChanged += (sender, e) => { vm.body.properties.networkProfile.networkInterfaces[0].properties.deleteOptions = (sender as CheckBox).IsChecked ? "Delete" : "Detach"; }; + + //TODO:未完成的commands + Views.AddVmDetailsPage.diskTypeIndexChanged+=(sender, e) => { }; + portsChange = new Command((sender) => { }); + net_portsChange = new Command((sender) => { }); + CreateOrUpdateVM = new Command((sender) => { //创建或更新,发送请求 + //publicIP + //subnet 选择的是已经有的subnet, 选择默认的ipaddress? + //nic 创建一个叫{UID}的nic + + (new VMDataStore()).queryCreateOrUpdateVM(vm);//调用,创建 + }); #endregion } diff --git a/azure_m/azure_m/azure_m/Views/AddPage.xaml b/azure_m/azure_m/azure_m/Views/AddPage.xaml index d14a1bf3db75c2a55232cdf889d322a3fab5731a..412b49899a8d2252e7dfbcc1941181af6b926789 100644 --- a/azure_m/azure_m/azure_m/Views/AddPage.xaml +++ b/azure_m/azure_m/azure_m/Views/AddPage.xaml @@ -13,21 +13,14 @@ - + @@ -218,16 +218,7 @@ - - + @@ -321,7 +312,7 @@ - @@ -491,14 +481,14 @@