/// <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)); }
/// <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(); } }
/// <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); }