示例#1
0
        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);
        }
示例#3
0
 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"));
 }
示例#4
0
 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));
 }
示例#5
0
 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;
        }
示例#9
0
        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");
 }
示例#11
0
        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);
        }
示例#13
0
 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);
        }