/// <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);
        }
Exemple #4
0
        /**
         * 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);
        }
Exemple #5
0
        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);
        }
Exemple #6
0
        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());
            }
        }