private static void UpdateParameters(dynamic temp, WebsiteTemplate template) { var shortName = GetShortName(template.Name); temp.parameters.appServiceName.defaultValue = $"{Server.ARMTemplate_MyPrefix}-{shortName}{Server.ARMTemplate_AppPostfix}-{Guid.NewGuid().ToString().Split('-')[0]}"; temp.parameters.msdeployPackageUrl.defaultValue = template.MSDeployPackageUrl; }
private static void UpdateConfig(dynamic armTemplate, WebsiteTemplate template) { if (template.GithubRepo == null) { if (template.Name.Equals("WordPress", StringComparison.OrdinalIgnoreCase)) { armTemplate.resources[1].resources[0].properties.scmType = "LocalGit"; armTemplate.resources[1].resources[0].properties.httpLoggingEnabled = true; armTemplate.resources[1].resources[0].properties.localMySqlEnabled = true; } else { armTemplate.resources[1].resources[0].properties.scmType = "LocalGit"; armTemplate.resources[1].resources[0].properties.httpLoggingEnabled = true; } } }
public static string GetFullPath(this WebsiteTemplate value) { var language = value.Language ?? "Mobile"; return(Path.Combine(TemplatesManager.TemplatesFolder, language, value.FileName)); }
private static void UpdateAppSettings(dynamic armTemplate, WebsiteTemplate template) { }
// ARM public async Task<ResourceGroup> ActivateMobileApp(WebsiteTemplate template, TryWebsitesIdentity userIdentity, string anonymousUserName) { return await ActivateWebApp(template, userIdentity, anonymousUserName, AppService.Mobile); }
// ARM public async Task<ResourceGroup> ActivateWebApp(WebsiteTemplate template, TryWebsitesIdentity userIdentity, string anonymousUserName, AppService temp = AppService.Web) { // Start site specific stuff var deploymentType = template != null && template.GithubRepo != null ? DeploymentType.GitWithCsmDeploy : DeploymentType.ZipDeploy; return await ActivateResourceGroup(userIdentity, temp, deploymentType, async (resourceGroup, inProgressOperation) => { SimpleTrace.Analytics.Information(AnalyticsEvents.UserCreatedSiteWithLanguageAndTemplateName, userIdentity, template, resourceGroup.CsmId); SimpleTrace.TraceInformation("{0}; {1}; {2}; {3}; {4}; {5}; {6}", AnalyticsEvents.OldUserCreatedSiteWithLanguageAndTemplateName, userIdentity.Name, template.Language, template.Name, resourceGroup.ResourceUniqueId, temp.ToString(), anonymousUserName); var site = resourceGroup.Sites.First(s => s.IsSimpleWAWSOriginalSite); var rbacTask = resourceGroup.AddResourceGroupRbac(userIdentity.Puid, userIdentity.Email); if (template != null && template.FileName != null) { var credentials = new NetworkCredential(site.PublishingUserName, site.PublishingPassword); var zipManager = new RemoteZipManager(site.ScmUrl + "zip/", credentials, retryCount: 3); Task zipUpload = zipManager.PutZipFileAsync("site/wwwroot", template.GetFullPath()); var vfsManager = new RemoteVfsManager(site.ScmUrl + "vfs/", credentials, retryCount: 3); Task deleteHostingStart = vfsManager.Delete("site/wwwroot/hostingstart.html"); await Task.WhenAll(zipUpload, deleteHostingStart); } else if (template != null && template.GithubRepo != null) { Uri githubRepo; var validUri = Uri.TryCreate(template.GithubRepo, UriKind.Absolute, out githubRepo); if (validUri && (githubRepo.AbsoluteUri.StartsWith("https://github.com/davidebbo-test/") || githubRepo.AbsoluteUri.StartsWith("https://github.com/ahmelsayed-test"))) { //Do CSM template deployment var csmTemplate = new CsmTemplateWrapper { properties = new CsmTemplateProperties { mode = "Incremental", parameters = new { siteName = new CsmTemplateParameter(site.SiteName), hostingPlanName = new CsmTemplateParameter(resourceGroup.ServerFarms.Select(sf => sf.ServerFarmName).FirstOrDefault()), repoUrl = new CsmTemplateParameter(githubRepo.AbsoluteUri) }, templateLink = new CsmTemplateLink { contentVersion = "1.0.0.0", uri = new Uri("https://raw.githubusercontent.com/" + githubRepo.AbsolutePath.Trim('/') + "/master/azuredeploy.json") } } }; await inProgressOperation.CreateDeployment(csmTemplate, block: true); await site.GetKuduDeploymentStatus(block: true); await resourceGroup.Load(); } else if (validUri && githubRepo.AbsoluteUri.StartsWith("https://github.com/")) { //Do Kudu deployment throw new InvalidGithubRepoException(); } else { throw new InvalidGithubRepoException(); } } site.AppSettings["LAST_MODIFIED_TIME_UTC"] = DateTime.UtcNow.ToString("u"); site.AppSettings["SITE_LIFE_TIME_IN_MINUTES"] = SimpleSettings.SiteExpiryMinutes; site.AppSettings["MONACO_EXTENSION_VERSION"] = "beta"; site.AppSettings["WEBSITE_TRY_MODE"] = "1"; if (template.Name.Equals("ASP.NET + Azure Search Site", StringComparison.OrdinalIgnoreCase)) { site.AppSettings["SearchServiceName"] = SimpleSettings.SearchServiceName; site.AppSettings["SearchServiceApiKey"] = AzureSearchHelper.GetApiKey(); } else if (template.Name.Equals("PHP Starter Site", StringComparison.OrdinalIgnoreCase)) { //Enable ZRay await site.EnableZRay(resourceGroup.GeoRegion); } await site.UpdateAppSettings(); if (template.GithubRepo == null) { await site.UpdateConfig(new { properties = new { scmType = "LocalGit", httpLoggingEnabled = true } }); } resourceGroup.IsRbacEnabled = await rbacTask; site.FireAndForget(); return resourceGroup; }); }
public async Task<HttpResponseMessage> CreateResource(BaseTemplate template) { if (template.Name != null && !template.Name.Equals("Github Repo")) { template = TemplatesManager.GetTemplates() .FirstOrDefault(t => t.Name == template.Name && t.AppService == template.AppService); template = template ?? WebsiteTemplate.EmptySiteTemplate; } else if (template.Name != null && template.Name.Equals("Github Repo")) { template = new WebsiteTemplate { AppService = AppService.Web, GithubRepo = template.GithubRepo, Name = template.Name, Language = "Github" }; } var identity = HttpContext.Current.User.Identity as TryWebsitesIdentity; var anonymousUserName = SecurityManager.GetAnonymousUserName(new HttpContextWrapper(HttpContext.Current)); try { var resourceManager = await ResourcesManager.GetInstanceAsync(); if ((await resourceManager.GetResourceGroup(identity.Name)) != null) { SimpleTrace.Diagnostics.Fatal(AnalyticsEvents.MoreThanOneError, identity, 1); return Request.CreateErrorResponse(HttpStatusCode.BadRequest, Resources.Server.Error_MoreThanOneFreeResource); } ResourceGroup resourceGroup = null; switch (template.AppService) { case AppService.Web: resourceGroup = await resourceManager.ActivateWebApp(template as WebsiteTemplate, identity, anonymousUserName); break; case AppService.Mobile: resourceGroup = await resourceManager.ActivateMobileApp(template as WebsiteTemplate, identity, anonymousUserName); break; case AppService.Api: if (identity.Issuer == "OrgId") { return Request.CreateErrorResponse(HttpStatusCode.BadRequest, Resources.Server.Error_OrgIdNotSupported); } else if (identity.Issuer != "MSA") { return SecurityManager.RedirectToAAD(template.CreateQueryString()); } resourceGroup = await resourceManager.ActivateApiApp(template as ApiTemplate, identity, anonymousUserName); break; case AppService.Logic: if (identity.Issuer == "OrgId") { return Request.CreateErrorResponse(HttpStatusCode.BadRequest, Resources.Server.Error_OrgIdNotSupported); } else if (identity.Issuer != "MSA") { return SecurityManager.RedirectToAAD(template.CreateQueryString()); } resourceGroup = await resourceManager.ActivateLogicApp(template as LogicTemplate, identity, anonymousUserName); break; } return Request.CreateResponse(HttpStatusCode.OK, resourceGroup == null ? null : resourceGroup.UIResource); } catch (Exception ex) { SimpleTrace.Diagnostics.Fatal(ex, AnalyticsEvents.UserGotError, identity, ex.Message, Interlocked.Increment(ref _userGotErrorErrorCount)); return Request.CreateErrorResponse(HttpStatusCode.ServiceUnavailable, ex.Message); } }
public static string GetFullPath(this WebsiteTemplate value) { var language = value.Language ?? ((value.AppService == AppService.Api) ? "Api" : "Mobile"); return(Path.Combine(TemplatesManager.TemplatesFolder, language, value.FileName)); }