public async Task <IList <SiteInformation> > GetSitesInformation([OrchestrationTrigger] IDurableOrchestrationContext context) { var resourceGroup = context.GetInput <string>(); var activity = context.CreateActivityProxy <ISharedFunctions>(); var result = new List <SiteInformation>(); var certificates = await activity.GetAllCertificates(); // App Service を取得 var sites = await activity.GetSites((resourceGroup, true)); foreach (var site in sites.ToLookup(x => x.SplitName().appName)) { var siteInformation = new SiteInformation { Name = site.Key, Slots = new List <SlotInformation>() }; foreach (var slot in site) { var(_, slotName) = slot.SplitName(); var hostNameSslStates = slot.HostNameSslStates .Where(x => !x.Name.EndsWith(_environment.AppService) && !x.Name.EndsWith(_environment.TrafficManager)); var slotInformation = new SlotInformation { Name = slotName ?? "production", DnsNames = hostNameSslStates.Select(x => new DnsNameInformation { Name = x.Name, Issuer = certificates.FirstOrDefault(xs => xs.Thumbprint == x.Thumbprint)?.Issuer ?? "None" }).ToArray() }; if (slotInformation.DnsNames.Count != 0) { siteInformation.Slots.Add(slotInformation); } } if (siteInformation.Slots.Count != 0) { result.Add(siteInformation); } } return(result); }
public async Task <IList <ResourceGroupInformation> > GetSitesInformation([OrchestrationTrigger] IDurableOrchestrationContext context) { var activity = context.CreateActivityProxy <ISharedFunctions>(); // App Service を取得 var sites = await activity.GetSites(); var certificates = await activity.GetAllCertificates(); var result = new List <ResourceGroupInformation>(); foreach (var item in sites.ToLookup(x => x.ResourceGroup)) { var resourceGroup = new ResourceGroupInformation { Name = item.Key, Sites = new List <SiteInformation>() }; foreach (var site in item.ToLookup(x => x.SplitName().siteName)) { var siteInformation = new SiteInformation { Name = site.Key, Slots = new List <SlotInformation>() }; foreach (var slot in site) { var(_, slotName) = slot.SplitName(); var hostNameSslStates = slot.HostNameSslStates .Where(x => !x.Name.EndsWith(".azurewebsites.net")); var slotInformation = new SlotInformation { Name = slotName ?? "production", Domains = hostNameSslStates.Select(x => new DomainInformation { Name = x.Name, Issuer = certificates.FirstOrDefault(xs => xs.Thumbprint == x.Thumbprint)?.Issuer ?? "None" }).ToArray() }; if (slotInformation.Domains.Count != 0) { siteInformation.Slots.Add(slotInformation); } } if (siteInformation.Slots.Count != 0) { resourceGroup.Sites.Add(siteInformation); } } if (resourceGroup.Sites.Count != 0) { result.Add(resourceGroup); } } return(result); }