public static async Task <Site> Load(this Site site, CsmWrapper <CsmSite> csmSite = null) { Validate.ValidateCsmSite(site); if (!site.IsSimpleWAWSOriginalSite && !site.IsFunctionsContainer) { return(site); } if (csmSite == null) { var csmSiteResponse = await csmClient.HttpInvoke(HttpMethod.Get, ArmUriTemplates.Site.Bind(site)); await csmSiteResponse.EnsureSuccessStatusCodeWithFullError(); csmSite = await csmSiteResponse.Content.ReadAsAsync <CsmWrapper <CsmSite> >(); } site.HostName = csmSite.properties.hostNames.FirstOrDefault(); site.ScmHostName = csmSite.properties.enabledHostNames.FirstOrDefault(h => h.IndexOf(".scm.", StringComparison.OrdinalIgnoreCase) != -1); await Task.WhenAll(LoadAppSettings(site), LoadPublishingCredentials(site), UpdateConfig(site, new { properties = new { scmType = "LocalGit" } })); site.AppSettings["SITE_LIFE_TIME_IN_MINUTES"] = SimpleSettings.SiteExpiryMinutes; site.AppSettings["MONACO_EXTENSION_VERSION"] = "beta"; site.AppSettings["WEBSITE_TRY_MODE"] = "1"; await site.UpdateAppSettings(); return(site); }
public static async Task <CsmWrapper <CsmStorageAccount> > WaitUntilReady(this StorageAccount storageAccount) { Validate.ValidateCsmStorageAccount(storageAccount); var isSucceeded = false; var tries = 40; CsmWrapper <CsmStorageAccount> csmStorageAccount = null; do { var csmStorageResponse = await csmClient.HttpInvoke(HttpMethod.Get, ArmUriTemplates.StorageAccount.Bind(storageAccount)); await csmStorageResponse.EnsureSuccessStatusCodeWithFullError(); csmStorageAccount = await csmStorageResponse.Content.ReadAsAsync <CsmWrapper <CsmStorageAccount> >(); isSucceeded = csmStorageAccount.properties.provisioningState.Equals("Succeeded", StringComparison.OrdinalIgnoreCase); tries--; if (!isSucceeded) { await Task.Delay(500); } } while (!isSucceeded && tries > 0); if (!isSucceeded) { throw new StorageNotReadyException(); } return(csmStorageAccount); }
private static bool IsSimpleWaws(CsmWrapper <CsmResourceGroup> csmResourceGroup) { return(!string.IsNullOrEmpty(csmResourceGroup.name) && csmResourceGroup.name.StartsWith(Constants.TryResourceGroupPrefix, StringComparison.OrdinalIgnoreCase) && csmResourceGroup.properties.provisioningState == "Succeeded" && !csmResourceGroup.tags.ContainsKey("Bad")); }
private static bool IsLinuxResource(CsmWrapper <CsmResourceGroup> csmResourceGroup) { return(IsSimpleWawsResourceName(csmResourceGroup) && csmResourceGroup.properties.provisioningState == "Succeeded" && csmResourceGroup.tags != null && !csmResourceGroup.tags.ContainsKey("Bad") && csmResourceGroup.tags.ContainsKey(Constants.SubscriptionType) && string.Equals(csmResourceGroup.tags[Constants.SubscriptionType], SubscriptionType.Linux.ToString(), StringComparison.OrdinalIgnoreCase) && csmResourceGroup.tags.ContainsKey(Constants.LinuxAppDeployed)); }
private static bool IsSimpleWawsResourceActive(CsmWrapper <CsmResourceGroup> csmResourceGroup) { try { return(IsSimpleWawsResourceName(csmResourceGroup) && csmResourceGroup.tags.ContainsKey(Constants.UserId) && csmResourceGroup.tags.ContainsKey(Constants.StartTime) && csmResourceGroup.tags.ContainsKey(Constants.LifeTimeInMinutes) && DateTime.UtcNow > DateTime.Parse(csmResourceGroup.tags[Constants.StartTime]).AddMinutes(Int32.Parse(csmResourceGroup.tags[Constants.LifeTimeInMinutes]))); } catch (Exception ex) { //Assume resourcegroup is in a bad state. SimpleTrace.Diagnostics.Fatal("ResourceGroup in bad state {@exception}", ex); return(false); } }
public static async Task <Site> Load(this Site site, CsmWrapper <CsmSite> csmSite = null) { Validate.ValidateCsmSite(site); if (!site.IsSimpleWAWSOriginalSite && !site.IsFunctionsContainer) { return(site); } if (csmSite == null) { var csmSiteResponse = await GetClient(site.SubscriptionType).HttpInvoke(HttpMethod.Get, ArmUriTemplates.Site.Bind(site)); await csmSiteResponse.EnsureSuccessStatusCodeWithFullError(); csmSite = await csmSiteResponse.Content.ReadAsAsync <CsmWrapper <CsmSite> >(); } site.HostName = csmSite.properties.hostNames.FirstOrDefault(); site.ScmHostName = csmSite.properties.enabledHostNames.FirstOrDefault(h => h.IndexOf(".scm.", StringComparison.OrdinalIgnoreCase) != -1); site.Kind = csmSite.kind; await Task.WhenAll(LoadAppSettings(site), LoadPublishingCredentials(site), UpdateScmConfig(site)); //if (!site.IsSimpleWAWSOriginalSite) //{ // site.AppSettings["FUNCTIONS_EXTENSION_VERSION"] = SimpleSettings.FunctionsExtensionVersion; //} //if (site.SubscriptionType != SubscriptionType.Linux && site.SubscriptionType != SubscriptionType.VSCodeLinux) //{ // site.AppSettings["WEBSITE_TRY_MODE"] = "1"; // site.AppSettings["SITE_LIFE_TIME_IN_MINUTES"] = SimpleSettings.SiteExpiryMinutes; // site.AppSettings[Constants.NodeDefaultVersionAppSetting] = SimpleSettings.WebsiteNodeDefautlVersion; // if (site.IsFunctionsContainer) // { // site.AppSettings[Constants.NodeDefaultVersionAppSetting] = SimpleSettings.FunctionsNodeDefaultVersion; // } //} //await site.UpdateAppSettings(); return(site); }
public static async Task<Site> Load(this Site site, CsmWrapper<CsmSite> csmSite = null) { Validate.ValidateCsmSite(site); if (!site.IsSimpleWAWSOriginalSite) return site; if (csmSite == null) { var csmSiteResponse = await csmClient.HttpInvoke(HttpMethod.Get, CsmTemplates.Site.Bind(site)); csmSiteResponse.EnsureSuccessStatusCode(); csmSite = await csmSiteResponse.Content.ReadAsAsync<CsmWrapper<CsmSite>>(); } site.HostName = csmSite.properties.hostNames.FirstOrDefault(); site.ScmHostName = csmSite.properties.enabledHostNames.FirstOrDefault(h => h.IndexOf(".scm.", StringComparison.OrdinalIgnoreCase) != -1); await Task.WhenAll(LoadAppSettings(site), LoadPublishingCredentials(site), UpdateConfig(site, new { properties = new { scmType = "LocalGit" } })); site.AppSettings["SITE_LIFE_TIME_IN_MINUTES"] = SimpleSettings.SiteExpiryMinutes; site.AppSettings["MONACO_EXTENSION_VERSION"] = "beta"; site.AppSettings["WEBSITE_TRY_MODE"] = "1"; await site.UpdateAppSettings(); return site; }
public static async Task<ResourceGroup> Load(this ResourceGroup resourceGroup, CsmWrapper<CsmResourceGroup> csmResourceGroup = null, IEnumerable<CsmWrapper<object>> resources = null, bool loadSubResources = true) { Validate.ValidateCsmResourceGroup(resourceGroup); if (csmResourceGroup == null) { var csmResourceGroupResponse = await csmClient.HttpInvoke(HttpMethod.Get, CsmTemplates.ResourceGroup.Bind(resourceGroup)); csmResourceGroupResponse.EnsureSuccessStatusCode(); csmResourceGroup = await csmResourceGroupResponse.Content.ReadAsAsync<CsmWrapper<CsmResourceGroup>>(); } //Not sure what to do at this point TODO Validate.NotNull(csmResourceGroup.tags, "csmResorucegroup.tags"); resourceGroup.Tags = csmResourceGroup.tags; if (resources == null) { var csmResourceGroupResourcesResponse = await csmClient.HttpInvoke(HttpMethod.Get, CsmTemplates.ResourceGroupResources.Bind(resourceGroup)); csmResourceGroupResourcesResponse.EnsureSuccessStatusCode(); resources = (await csmResourceGroupResourcesResponse.Content.ReadAsAsync<CsmArrayWrapper<object>>()).value; } if (loadSubResources) { await Task.WhenAll(LoadSites(resourceGroup, resources.Where(r => r.type.Equals("Microsoft.Web/sites", StringComparison.OrdinalIgnoreCase))), LoadApiApps(resourceGroup, resources.Where(r => r.type.Equals("Microsoft.AppService/apiapps", StringComparison.OrdinalIgnoreCase))), LoadGateways(resourceGroup, resources.Where(r => r.type.Equals("Microsoft.AppService/gateways", StringComparison.OrdinalIgnoreCase))), LoadLogicApps(resourceGroup, resources.Where(r => r.type.Equals("Microsoft.Logic/workflows", StringComparison.OrdinalIgnoreCase))), LoadServerFarms(resourceGroup, resources.Where(r => r.type.Equals("Microsoft.Web/serverFarms", StringComparison.OrdinalIgnoreCase)))); } return resourceGroup; }
public static async Task <ResourceGroup> LoadJenkinsResources(this ResourceGroup resourceGroup, CsmWrapper <CsmJenkinsResource> jenkinsResources = null, bool load = false) { if (load) { if (jenkinsResources == null) { var csmjenkinsResourcesResponse = await csmClient.HttpInvoke(HttpMethod.Get, ArmUriTemplates.JenkinsResource.Bind(resourceGroup)); await csmjenkinsResourcesResponse.EnsureSuccessStatusCodeWithFullError(); jenkinsResources = (await csmjenkinsResourcesResponse.Content.ReadAsAsync <CsmWrapper <CsmJenkinsResource> >()); } resourceGroup.JenkinsResources = new JenkinsResource(resourceGroup.SubscriptionId, resourceGroup.ResourceGroupName, jenkinsResources.properties.ipAddress); return(resourceGroup); } else { return(null); } }
private static bool IsSimpleWaws(CsmWrapper<CsmResourceGroup> csmResourceGroup) { return !string.IsNullOrEmpty(csmResourceGroup.name) && csmResourceGroup.name.StartsWith(Constants.TryResourceGroupPrefix) && csmResourceGroup.properties.provisioningState == "Succeeded" && !csmResourceGroup.tags.ContainsKey("Bad"); }
public static async Task <ResourceGroup> Load(this ResourceGroup resourceGroup, CsmWrapper <CsmResourceGroup> csmResourceGroup = null, IEnumerable <CsmWrapper <object> > resources = null, bool loadSubResources = true) { Validate.ValidateCsmResourceGroup(resourceGroup); if (csmResourceGroup == null) { var csmResourceGroupResponse = await csmClient.HttpInvoke(HttpMethod.Get, ArmUriTemplates.ResourceGroup.Bind(resourceGroup)); await csmResourceGroupResponse.EnsureSuccessStatusCodeWithFullError(); csmResourceGroup = await csmResourceGroupResponse.Content.ReadAsAsync <CsmWrapper <CsmResourceGroup> >(); } //Not sure what to do at this point TODO Validate.NotNull(csmResourceGroup.tags, "csmResorucegroup.tags"); resourceGroup.Tags = csmResourceGroup.tags; if (resources == null) { var csmResourceGroupResourcesResponse = await csmClient.HttpInvoke(HttpMethod.Get, ArmUriTemplates.ResourceGroupResources.Bind(resourceGroup)); await csmResourceGroupResourcesResponse.EnsureSuccessStatusCodeWithFullError(); resources = (await csmResourceGroupResourcesResponse.Content.ReadAsAsync <CsmArrayWrapper <object> >()).value; } if (loadSubResources) { await Task.WhenAll(LoadSites(resourceGroup, resources.Where(r => r.type.Equals("Microsoft.Web/sites", StringComparison.OrdinalIgnoreCase))), LoadApiApps(resourceGroup, resources.Where(r => r.type.Equals("Microsoft.AppService/apiapps", StringComparison.OrdinalIgnoreCase))), LoadGateways(resourceGroup, resources.Where(r => r.type.Equals("Microsoft.AppService/gateways", StringComparison.OrdinalIgnoreCase))), LoadLogicApps(resourceGroup, resources.Where(r => r.type.Equals("Microsoft.Logic/workflows", StringComparison.OrdinalIgnoreCase))), LoadServerFarms(resourceGroup, resources.Where(r => r.type.Equals("Microsoft.Web/serverFarms", StringComparison.OrdinalIgnoreCase))), LoadStorageAccounts(resourceGroup, resources.Where(r => r.type.Equals("Microsoft.Storage/storageAccounts", StringComparison.OrdinalIgnoreCase)))); } return(resourceGroup); }
public static async Task <StorageAccount> Load(this StorageAccount storageAccount, CsmWrapper <CsmStorageAccount> csmStorageAccount = null) { Validate.ValidateCsmStorageAccount(storageAccount); if (!storageAccount.IsFunctionsStorageAccount) { return(storageAccount); } if (csmStorageAccount?.properties?.provisioningState != "Succeeded") { csmStorageAccount = await WaitUntilReady(storageAccount); } var csmStorageResponse = await csmClient.HttpInvoke(HttpMethod.Post, ArmUriTemplates.StorageListKeys.Bind(storageAccount)); await csmStorageResponse.EnsureSuccessStatusCodeWithFullError(); var keys = await csmStorageResponse.Content.ReadAsAsync <Dictionary <string, string> >(); storageAccount.StorageAccountKey = keys.Select(s => s.Value).FirstOrDefault(); return(storageAccount); }
private static bool IsSimpleWawsResourceName(CsmWrapper <CsmResourceGroup> csmResourceGroup) { return(!string.IsNullOrEmpty(csmResourceGroup.name) && csmResourceGroup.name.StartsWith(Constants.TryResourceGroupPrefix, StringComparison.OrdinalIgnoreCase)); }
public static async Task <ResourceGroup> Load(this ResourceGroup resourceGroup, CsmWrapper <CsmResourceGroup> csmResourceGroup = null, IEnumerable <CsmWrapper <object> > resources = null, bool loadSubResources = true) { Validate.ValidateCsmResourceGroup(resourceGroup); if (csmResourceGroup == null) { var csmResourceGroupResponse = await GetClient(resourceGroup.SubscriptionType).HttpInvoke(HttpMethod.Get, ArmUriTemplates.ResourceGroup.Bind(resourceGroup)); await csmResourceGroupResponse.EnsureSuccessStatusCodeWithFullError(); csmResourceGroup = await csmResourceGroupResponse.Content.ReadAsAsync <CsmWrapper <CsmResourceGroup> >(); } // We dont care about tags for MonitoringTools Sub if (resourceGroup.SubscriptionType != SubscriptionType.MonitoringTools) { //Not sure what to do at this point TODO Validate.NotNull(csmResourceGroup.tags, "csmResourcegroup.tags"); resourceGroup.Tags = csmResourceGroup.tags; } if (resources == null) { var csmResourceGroupResourcesResponse = await GetClient(resourceGroup.SubscriptionType).HttpInvoke(HttpMethod.Get, ArmUriTemplates.ResourceGroupResources.Bind(resourceGroup)); await csmResourceGroupResourcesResponse.EnsureSuccessStatusCodeWithFullError(); resources = (await csmResourceGroupResourcesResponse.Content.ReadAsAsync <CsmArrayWrapper <object> >()).value; } if (loadSubResources) { if (resourceGroup.SubscriptionType == SubscriptionType.AppService) { await Task.WhenAll(LoadSites(resourceGroup, resources.Where(r => r.type.Equals("Microsoft.Web/sites", StringComparison.OrdinalIgnoreCase))), LoadLogicApps(resourceGroup, resources.Where(r => r.type.Equals("Microsoft.Logic/workflows", StringComparison.OrdinalIgnoreCase))), LoadServerFarms(resourceGroup, resources.Where(r => r.type.Equals("Microsoft.Web/serverFarms", StringComparison.OrdinalIgnoreCase))), LoadStorageAccounts(resourceGroup, resources.Where(r => r.type.Equals("Microsoft.Storage/storageAccounts", StringComparison.OrdinalIgnoreCase)))); } else if (resourceGroup.SubscriptionType == SubscriptionType.Linux) { await Task.WhenAll(LoadLinuxResources(resourceGroup, resources.Where(r => r.type.Equals("Microsoft.Web/sites", StringComparison.OrdinalIgnoreCase)))); } else if (resourceGroup.SubscriptionType == SubscriptionType.VSCodeLinux) { await Task.WhenAll(LoadVSCodeLinuxResources(resourceGroup, resources.Where(r => r.type.Equals("Microsoft.Web/sites", StringComparison.OrdinalIgnoreCase)))); } else if (resourceGroup.SubscriptionType == SubscriptionType.MonitoringTools) { await Task.WhenAll(LoadMonitoringToolResources(resourceGroup, resources.Where(r => r.type.Equals("Microsoft.Web/sites", StringComparison.OrdinalIgnoreCase)))); } } return(resourceGroup); }