/// <summary> /// Unmarshaller the response from the service to the response class. /// </summary> /// <param name="context"></param> /// <returns></returns> public override AmazonWebServiceResponse Unmarshall(XmlUnmarshallerContext context) { CreateSubnetResponse response = new CreateSubnetResponse(); int originalDepth = context.CurrentDepth; int targetDepth = originalDepth + 1; if (context.IsStartOfDocument) { targetDepth = 2; } while (context.ReadAtDepth(originalDepth)) { if (context.IsStartElement || context.IsAttribute) { if (context.TestExpression("subnet", targetDepth)) { var unmarshaller = SubnetUnmarshaller.Instance; response.Subnet = unmarshaller.Unmarshall(context); continue; } } } return(response); }
/** * Creates subnets in a VCN and waits for the subnets to become available to use. * * @param vcnClient the service client to use to create the subnet * @param compartmentId the OCID of the compartment which owns the VCN * @param availabilityDomain the availability domain where the subnet will be created * @param cidrBlock the cidr block used to create subnet * @param vcnId the ID of the VCN which will own the subnet * @param subnetName the subnet that will be created * * @return the created subnets * */ private static async Task <List <Subnet> > CreateSubnet(VirtualNetworkClient virtualNetworkClient, string compartmentId, IdentityModels.AvailabilityDomain availabilityDomain, string vcnId) { List <Subnet> subnets = new List <Subnet>(); for (int i = 0; i < 2; i++) { CreateSubnetDetails createSubnetDetails = new CreateSubnetDetails { AvailabilityDomain = availabilityDomain.Name, CompartmentId = compartmentId, DisplayName = SubnetDisplayNames[i], CidrBlock = SubnetCidrBlocks[i], VcnId = vcnId }; CreateSubnetRequest createSubnetRequest = new CreateSubnetRequest { CreateSubnetDetails = createSubnetDetails }; CreateSubnetResponse createSubnetResponse = await virtualNetworkClient.CreateSubnet(createSubnetRequest); GetSubnetRequest getSubnetRequest = new GetSubnetRequest { SubnetId = createSubnetResponse.Subnet.Id }; GetSubnetResponse getSubnetResponse = virtualNetworkClient.Waiters.ForSubnet(getSubnetRequest, Subnet.LifecycleStateEnum.Available).Execute(); Subnet subnet = getSubnetResponse.Subnet; logger.Info($"Created Subnet: {subnet.Id}"); subnets.Add(getSubnetResponse.Subnet); } return(subnets); }
private static async Task <Subnet> createSubnet(VirtualNetworkClient virtualNetworkClient, string compartmentId, AvailabilityDomain availabilityDomain, string networkCidrBlock, Vcn vcn) { string subnetName = "oci-dotnet-sdk-example-subnet"; // In order to launch instances in a regional subnet, build this CreateSubnetDetails with // the field availablityDomain set to null. CreateSubnetDetails createSubnetDetails = new CreateSubnetDetails { AvailabilityDomain = availabilityDomain.Name, CompartmentId = compartmentId, DisplayName = subnetName, CidrBlock = networkCidrBlock, VcnId = vcn.Id, RouteTableId = vcn.DefaultRouteTableId }; CreateSubnetRequest createSubnetRequest = new CreateSubnetRequest { CreateSubnetDetails = createSubnetDetails }; CreateSubnetResponse createSubnetResponse = await virtualNetworkClient.CreateSubnet(createSubnetRequest); GetSubnetRequest getSubnetRequest = new GetSubnetRequest { SubnetId = createSubnetResponse.Subnet.Id }; GetSubnetResponse getSubnetResponse = virtualNetworkClient.Waiters.ForSubnet(getSubnetRequest, Subnet.LifecycleStateEnum.Available).Execute(); Subnet subnet = getSubnetResponse.Subnet; logger.Info($"Created Subnet: {subnet.Id}"); return(subnet); }
/** * Creates a subnet in a VCN and waits for the subnet to become available to use. * * @param vcnClient the service client to use to create the subnet. * @param compartmentId the OCID of the compartment which owns the VCN. * @param vcnId the ID of the VCN which will own the subnet. * @param availabilityDomain the availability domain where the subnet will be created. * @return the created subnet. */ private static async Task <Subnet> CreateSubnet(VirtualNetworkClient vcnClient, string compartmentId, string availabilityDomain, string vcnId) { logger.Info("Creating subnet"); CreateSubnetDetails createSubnetDetails = new CreateSubnetDetails { AvailabilityDomain = availabilityDomain, CompartmentId = compartmentId, DisplayName = SubnetName, CidrBlock = SubnetCidrBlock, VcnId = vcnId }; CreateSubnetRequest createSubnetRequest = new CreateSubnetRequest { CreateSubnetDetails = createSubnetDetails }; CreateSubnetResponse createSubnetResponse = await vcnClient.CreateSubnet(createSubnetRequest); GetSubnetRequest getSubnetRequest = new GetSubnetRequest { SubnetId = createSubnetResponse.Subnet.Id }; GetSubnetResponse getSubnetResponse = vcnClient.Waiters.ForSubnet(getSubnetRequest, Subnet.LifecycleStateEnum.Available).Execute(); Subnet subnet = getSubnetResponse.Subnet; logger.Info($"Created Subnet: {subnet.Id}"); return(subnet); }
public override AmazonWebServiceResponse Unmarshall(XmlUnmarshallerContext context) { CreateSubnetResponse response = new CreateSubnetResponse(); int targetDepth = 2; while (context.Read()) { if (context.IsStartElement || context.IsAttribute) { if (context.TestExpression("subnet", targetDepth)) { response.Subnet = SubnetUnmarshaller.GetInstance().Unmarshall(context); continue; } } } return(response); }
public async Task <IActionResult> Create([Bind("Name,Type,IPv4CIDR,SubnetSize")] Subnet subnet) { if (ModelState.IsValid) { subnet.editable = true; switch (Int32.Parse(subnet.SubnetSize)) { case 32766: subnet.IPv4CIDR = subnet.IPv4CIDR + "/17"; break; case 16382: subnet.IPv4CIDR = subnet.IPv4CIDR + "/18"; break; case 8190: subnet.IPv4CIDR = subnet.IPv4CIDR + "/19"; break; case 4094: subnet.IPv4CIDR = subnet.IPv4CIDR + "/20"; break; case 2046: subnet.IPv4CIDR = subnet.IPv4CIDR + "/21"; break; case 1022: subnet.IPv4CIDR = subnet.IPv4CIDR + "/22"; break; case 510: subnet.IPv4CIDR = subnet.IPv4CIDR + "/23"; break; case 254: subnet.IPv4CIDR = subnet.IPv4CIDR + "/24"; break; case 126: subnet.IPv4CIDR = subnet.IPv4CIDR + "/25"; break; case 62: subnet.IPv4CIDR = subnet.IPv4CIDR + "/26"; break; case 30: subnet.IPv4CIDR = subnet.IPv4CIDR + "/27"; break; case 14: subnet.IPv4CIDR = subnet.IPv4CIDR + "/28"; break; case 6: subnet.IPv4CIDR = subnet.IPv4CIDR + "/29"; break; case 2: subnet.IPv4CIDR = subnet.IPv4CIDR + "/30"; break; default: ViewData["Exception"] = "Input Invaild!"; return(View()); } VPC vpc = await _context.VPCs.FindAsync(1); subnet.VPCID = vpc.ID; DescribeSubnetsResponse response = await EC2Client.DescribeSubnetsAsync(new DescribeSubnetsRequest { Filters = new List <Amazon.EC2.Model.Filter> { new Amazon.EC2.Model.Filter { Name = "vpc-id", Values = new List <string> { vpc.AWSVPCReference } } } }); List <int> ipv6CIDR = new List <int>(); List <Amazon.EC2.Model.Subnet> subnets = response.Subnets; int ipv6Subnet = 0; string[] ipv6CIDRstr = new string[6]; DescribeVpcsResponse responseV = await EC2Client.DescribeVpcsAsync(new DescribeVpcsRequest { Filters = new List <Amazon.EC2.Model.Filter> { new Amazon.EC2.Model.Filter { Name = "vpc-id", Values = new List <string> { vpc.AWSVPCReference } } } }); Vpc vpcR = responseV.Vpcs[0]; VpcIpv6CidrBlockAssociation ipv6CidrBlockAssociation = vpcR.Ipv6CidrBlockAssociationSet[0]; ipv6CIDRstr = ipv6CidrBlockAssociation.Ipv6CidrBlock.Split(":"); if (subnets.Count != 0) { foreach (Amazon.EC2.Model.Subnet s in subnets) { List <SubnetIpv6CidrBlockAssociation> ipv6 = s.Ipv6CidrBlockAssociationSet; ipv6CIDRstr = ipv6.ElementAt(0).Ipv6CidrBlock.Split(":"); ipv6Subnet = int.Parse(ipv6CIDRstr[3].Substring(2, 2), System.Globalization.NumberStyles.HexNumber); ipv6CIDR.Add(ipv6Subnet); } Boolean flag = false; while (flag != true) { Console.WriteLine("Doing while loop"); Console.WriteLine(ipv6Subnet); Boolean passed = false; ++ipv6Subnet; foreach (int i in ipv6CIDR) { if (ipv6Subnet <= ipv6CIDR[i]) { passed = false; break; } else { passed = true; } } if (passed == true) { flag = true; } } } if (ipv6CIDRstr[5].Equals("/56")) { if (ipv6Subnet < 9) { subnet.IPv6CIDR = ipv6CIDRstr[0] + ":" + ipv6CIDRstr[1] + ":" + ipv6CIDRstr[2] + ":" + ipv6CIDRstr[3].Substring(0, 2) + "0" + ipv6Subnet.ToString() + "::/64"; } else { subnet.IPv6CIDR = ipv6CIDRstr[0] + ":" + ipv6CIDRstr[1] + ":" + ipv6CIDRstr[2] + ":" + ipv6CIDRstr[3].Substring(0, 2) + Convert.ToInt32(ipv6Subnet).ToString() + "::/64"; } } else { if (ipv6Subnet < 9) { subnet.IPv6CIDR = ipv6CIDRstr[0] + ":" + ipv6CIDRstr[1] + ":" + ipv6CIDRstr[2] + ":" + ipv6CIDRstr[3].Substring(0, 2) + "0" + ipv6Subnet.ToString() + "::" + ipv6CIDRstr[5]; } else { subnet.IPv6CIDR = ipv6CIDRstr[0] + ":" + ipv6CIDRstr[1] + ":" + ipv6CIDRstr[2] + ":" + ipv6CIDRstr[3].Substring(0, 2) + Convert.ToInt32(ipv6Subnet).ToString() + "::" + ipv6CIDRstr[5]; } } CreateSubnetRequest requestS = new CreateSubnetRequest() { CidrBlock = subnet.IPv4CIDR, VpcId = vpc.AWSVPCReference, Ipv6CidrBlock = subnet.IPv6CIDR }; try { CreateSubnetResponse responseS = await EC2Client.CreateSubnetAsync(requestS); if (responseS.HttpStatusCode == HttpStatusCode.OK) { subnet.AWSVPCSubnetReference = responseS.Subnet.SubnetId; await EC2Client.CreateTagsAsync(new CreateTagsRequest { Resources = new List <string> { responseS.Subnet.SubnetId }, Tags = new List <Tag> { new Tag("Name", subnet.Name) } }); AssociateRouteTableRequest requestRT = new AssociateRouteTableRequest { SubnetId = responseS.Subnet.SubnetId, }; if (subnet.Type == Models.SubnetType.Internet) { RouteTable Internet = await _context.RouteTables.FindAsync(2); requestRT.RouteTableId = Internet.AWSVPCRouteTableReference; subnet.RouteTableID = Internet.ID; await EC2Client.ModifySubnetAttributeAsync(new ModifySubnetAttributeRequest { SubnetId = responseS.Subnet.SubnetId, MapPublicIpOnLaunch = true }); await EC2Client.ModifySubnetAttributeAsync(new ModifySubnetAttributeRequest { SubnetId = responseS.Subnet.SubnetId, AssignIpv6AddressOnCreation = true }); } else if (subnet.Type == Models.SubnetType.Extranet) { RouteTable Extranet = await _context.RouteTables.FindAsync(3); requestRT.RouteTableId = Extranet.AWSVPCRouteTableReference; subnet.RouteTableID = Extranet.ID; } else if (subnet.Type == Models.SubnetType.Intranet) { RouteTable Intranet = await _context.RouteTables.FindAsync(2); requestRT.RouteTableId = Intranet.AWSVPCRouteTableReference; subnet.RouteTableID = Intranet.ID; } AssociateRouteTableResponse responseRT = await EC2Client.AssociateRouteTableAsync(requestRT); if (responseRT.HttpStatusCode == HttpStatusCode.OK) { subnet.AWSVPCRouteTableAssoicationID = responseRT.AssociationId; _context.Subnets.Add(subnet); await _context.SaveChangesAsync(); TempData["Result"] = "Successfully Created!"; return(RedirectToAction("Index")); } else { await EC2Client.DeleteSubnetAsync(new DeleteSubnetRequest { SubnetId = subnet.AWSVPCSubnetReference }); DescribeVpcsResponse responseD = await EC2Client.DescribeVpcsAsync(new DescribeVpcsRequest { Filters = new List <Amazon.EC2.Model.Filter> { new Amazon.EC2.Model.Filter { Name = "vpc-id", Values = new List <string> { vpc.AWSVPCReference } } } }); String[] IPBlocks = responseD.Vpcs[0].CidrBlock.Split("."); ViewData["IPCIDR"] = IPBlocks[0] + "." + IPBlocks[1]; ViewData["Exception"] = "Failed to Create!"; return(View()); } } else { DescribeVpcsResponse responseD = await EC2Client.DescribeVpcsAsync(new DescribeVpcsRequest { Filters = new List <Amazon.EC2.Model.Filter> { new Amazon.EC2.Model.Filter { Name = "vpc-id", Values = new List <string> { vpc.AWSVPCReference } } } }); String[] IPBlocks = responseD.Vpcs[0].CidrBlock.Split("."); ViewData["IPCIDR"] = IPBlocks[0] + "." + IPBlocks[1]; ViewData["Exception"] = "Failed to Create!"; ViewData["Exception"] = "Failed to Create!"; return(View()); } } catch (Amazon.EC2.AmazonEC2Exception e) { DescribeVpcsResponse responseD = await EC2Client.DescribeVpcsAsync(new DescribeVpcsRequest { Filters = new List <Amazon.EC2.Model.Filter> { new Amazon.EC2.Model.Filter { Name = "vpc-id", Values = new List <string> { vpc.AWSVPCReference } } } }); String[] IPBlocks = responseD.Vpcs[0].CidrBlock.Split("."); ViewData["IPCIDR"] = IPBlocks[0] + "." + IPBlocks[1]; ViewData["Exception"] = "Failed to Create!"; ViewData["Exception"] = e.Message; return(View()); } } else { return(View()); } }