/// <summary>
 /// Initializes a new instance of the <see cref="ResourceDeployer"/> class.
 /// </summary>
 /// <param name="runtimeContext">The runtime context.</param>
 /// <param name="resourceId">The resource identifier.</param>
 /// <param name="resourceType">Type of the resource.</param>
 public ResourceDeployer(RuntimeContext runtimeContext, string resourceId, ResourceType resourceType)
 {
     _resourceId     = resourceId;
     _resourceType   = resourceType;
     _resourceApi    = ResourceApis[resourceType];
     _accountDetails = runtimeContext.AccountDetails;
     _logProvider    = runtimeContext.LogProvider;
 }
        /// <summary>
        /// Gets a new client.
        /// </summary>
        /// <param name="accountDetails">The account details.</param>
        /// <param name="mediaType">The media format.</param>
        /// <returns>The client.</returns>
        public static IHttpClient GetClient(CaasAccountDetails accountDetails, string mediaType)
        {
            if (FakeClient != null)
            {
                return(FakeClient);
            }

            return(GetProductionClient(accountDetails, mediaType));
        }
        /// <summary>
        /// Gets the production client.
        /// </summary>
        /// <param name="accountDetails">The account details.</param>
        /// <param name="mediaType">The media format.</param>
        /// <returns>The client.</returns>
        private static IHttpClient GetProductionClient(CaasAccountDetails accountDetails, string mediaType)
        {
            var handler = new HttpClientHandler {
                Credentials = accountDetails.Credentials
            };
            var client = new HttpClient(handler);

            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(mediaType));

            return(new HttpClientAdapter(client));
        }
Exemple #4
0
        /// <summary>
        /// Adds a new public IP address block.
        /// </summary>
        /// <param name="accountDetails">The account details.</param>
        /// <param name="networkDomainId">The network domain identifier.</param>
        /// <returns></returns>
        private async Task AddPublicIpBlock(CaasAccountDetails accountDetails, string networkDomainId)
        {
            using (var client = HttpClientFactory.GetClient(accountDetails, "application/json"))
            {
                var url      = string.Format(AddPublicIpBlockUrl, accountDetails.BaseUrl, accountDetails.OrgId);
                var request  = new JObject(new JProperty("networkDomainId", networkDomainId));
                var response = await client.PostAsync(url, new StringContent(request.ToString(), Encoding.UTF8, "application/json"));

                response.ThrowForHttpFailure();
            }
        }
Exemple #5
0
        /// <summary>
        /// Lists the available public IP addresses.
        /// </summary>
        /// <param name="accountDetails">The account details.</param>
        /// <param name="networkDomainId">The network domain identifier.</param>
        /// <returns></returns>
        private async Task <List <string> > ListAvailablePublicIps(CaasAccountDetails accountDetails, string networkDomainId)
        {
            var result = new List <string>();

            using (var client = HttpClientFactory.GetClient(accountDetails, "application/json"))
            {
                // Get the reserved public IPs.
                var url      = string.Format(ListReservedPublicIpv4AddressesUrl, accountDetails.BaseUrl, accountDetails.OrgId, networkDomainId);
                var response = await client.GetAsync(url);

                response.ThrowForHttpFailure();

                var responseBody = await response.Content.ReadAsStringAsync();

                var document          = JObject.Parse(responseBody);
                var reservedPublicIps = document["ip"].Value <JArray>()
                                        .Cast <JObject>()
                                        .Select(e => e["value"].Value <string>())
                                        .ToList();

                // Get the public IP blocks.
                url      = string.Format(ListPublicIpBlocksUrl, accountDetails.BaseUrl, accountDetails.OrgId, networkDomainId);
                response = await client.GetAsync(url);

                response.ThrowForHttpFailure();

                responseBody = await response.Content.ReadAsStringAsync();

                document = JObject.Parse(responseBody);
                var ipBlocks = document["publicIpBlock"].Value <JArray>()
                               .Cast <JObject>()
                               .Select(e => new { BaseIp = e["baseIp"].Value <string>(), Size = e["size"].Value <int>() })
                               .ToList();

                // Get the available public IPs.
                foreach (var ipBlock in ipBlocks)
                {
                    for (int offset = 0; offset < ipBlock.Size; offset++)
                    {
                        var ipAddress = IncrementIpAddress(ipBlock.BaseIp, offset);
                        if (!reservedPublicIps.Contains(ipAddress))
                        {
                            result.Add(ipAddress);
                        }
                    }
                }
            }

            return(result);
        }