public override void ExecuteCmdlet()
        {
            if (string.Equals(ParameterSetName, ParameterSet2Name))
            {
                string rg, name, slot;

                if (!CmdletHelpers.TryParseWebAppMetadataFromResourceId(WebApp.Id, out rg, out name, out slot, true))
                {
                    throw new ValidationMetadataException("Input object is a deployment slot but should be a production web app");
                }

                ResourceGroupName = rg;
                Name = name;
            }

            if (string.IsNullOrWhiteSpace(Slot))
            {
                var output = WebsitesClient.ListWebApps(ResourceGroupName, Name);
                var slots  = new List <PSSite>();
                foreach (var slot in output)
                {
                    slots.Add(new PSSite(slot));
                }
                WriteObject(slots, true);
            }
            else
            {
                WriteObject(new PSSite(WebsitesClient.GetWebApp(ResourceGroupName, Name, Slot)));
            }
        }
Exemple #2
0
        public void CreateWithClonedWebApp()
        {
            string      trafficManagerProfielId   = IsResource(TrafficManagerProfile) ? TrafficManagerProfile : null;
            string      trafficManagerProfileName = IsResource(TrafficManagerProfile) ? null : TrafficManagerProfile;
            CloningInfo cloningInfo = null;

            if (SourceWebApp != null)
            {
                cloningInfo = new CloningInfo
                {
                    SourceWebAppId            = SourceWebApp.Id,
                    CloneCustomHostNames      = !IgnoreCustomHostNames.IsPresent,
                    SourceWebAppLocation      = SourceWebApp.Location,
                    CloneSourceControl        = !IgnoreSourceControl.IsPresent,
                    TrafficManagerProfileId   = trafficManagerProfielId,
                    TrafficManagerProfileName = trafficManagerProfileName,
                    ConfigureLoadBalancing    = !string.IsNullOrEmpty(TrafficManagerProfile),
                    AppSettingsOverrides      = AppSettingsOverrides == null ? null : AppSettingsOverrides.Cast <DictionaryEntry>().ToDictionary(kvp => kvp.Key.ToString(), kvp => kvp.Value.ToString(), StringComparer.Ordinal)
                };
                cloningInfo = new PSCloningInfo(cloningInfo);
            }

            var cloneWebAppSlots = false;

            string[] slotNames            = null;
            string   srcResourceGroupName = null;
            string   srcwebAppName        = null;
            string   srcSlotName          = null;

            if (IncludeSourceWebAppSlots.IsPresent)
            {
                CmdletHelpers.TryParseWebAppMetadataFromResourceId(SourceWebApp.Id, out srcResourceGroupName,
                                                                   out srcwebAppName, out srcSlotName);
                var slots = WebsitesClient.ListWebApps(srcResourceGroupName, srcwebAppName);
                if (slots != null && slots.Any())
                {
                    slotNames        = slots.Select(s => s.Name.Replace(srcwebAppName + "/", string.Empty)).ToArray();
                    cloneWebAppSlots = true;
                }
            }

            if (cloneWebAppSlots)
            {
                WriteVerboseWithTimestamp("Cloning source web app '{0}' to destination web app {1}", srcwebAppName, Name);
            }

            WriteObject(new PSSite(WebsitesClient.CreateWebApp(ResourceGroupName, Name, null, Location, AppServicePlan, cloningInfo, AseName, AseResourceGroupName)));

            if (cloneWebAppSlots)
            {
                WriteVerboseWithTimestamp("Cloning all deployment slots of source web app '{0}' to destination web app {1}", srcwebAppName, Name);
                CloneSlots(slotNames);
            }
        }
        private void GetBySubscription()
        {
            const string progressDescriptionFormat      = "Progress: {0}/{1} resource groups processed.";
            const string progressCurrentOperationFormat = "Getting web apps for resource group '{0}'";
            var          progressRecord = new ProgressRecord(1, "Get web apps from all resource groups in subscription", "Progress:")
            {
                CurrentOperation = "Getting all subscription resource groups ..."
            };

            WriteProgress(progressRecord);

            var resourceGroups = ResourcesClient.ResourceManagementClient.FilterResources(new FilterResourcesOptions
            {
                ResourceType = "Microsoft.Web/Sites"
            }).Select(s => s.ResourceGroupName).Distinct(StringComparer.OrdinalIgnoreCase).ToArray();

            var list = new List <PSSite>();

            for (var i = 0; i < resourceGroups.Length; i++)
            {
                var rg = resourceGroups[i];
                try
                {
                    var result = WebsitesClient.ListWebApps(rg, null);
                    if (result != null)
                    {
                        foreach (var item in result)
                        {
                            list.Add(new PSSite(item));
                        }
                    }
                }
                catch (Exception e)
                {
                    WriteExceptionError(e);
                }

                progressRecord.CurrentOperation  = string.Format(progressCurrentOperationFormat, rg);
                progressRecord.StatusDescription = string.Format(progressDescriptionFormat, i + 1, resourceGroups.Length);
                progressRecord.PercentComplete   = (100 * (i + 1)) / resourceGroups.Length;
                WriteProgress(progressRecord);
            }

            WriteObject(list, true);
        }
        private void GetByResourceGroup()
        {
            var list = new List <Site>();

            try
            {
                var result = WebsitesClient.ListWebApps(ResourceGroupName, null);
                if (result != null)
                {
                    list.AddRange(result);
                }
            }
            catch (Exception e)
            {
                WriteExceptionError(e);
            }

            WriteObject(list, true);
        }
Exemple #5
0
        private void GetByResourceGroup()
        {
            var list = new List <PSSite>();

            try
            {
                var result = WebsitesClient.ListWebApps(ResourceGroupName, null);
                if (result != null)
                {
                    foreach (var item in result)
                    {
                        WebsitesClient.GetWebAppConfiguration(ResourceGroupName, item.Name, null, item);
                        list.Add(new PSSite(item));
                    }
                }
            }
            catch (Exception e)
            {
                WriteExceptionError(e);
            }

            WriteObject(list, true);
        }
        protected override void ProcessRecord()
        {
            if (string.Equals(ParameterSetName, ParameterSet2Name))
            {
                string rg, name, slot;

                if (!CmdletHelpers.TryParseWebAppMetadataFromResourceId(WebApp.Id, out rg, out name, out slot, true))
                {
                    throw new ValidationMetadataException("Input object is a deployment slot but should be a production web app");
                }

                ResourceGroupName = rg;
                Name = name;
            }

            if (string.IsNullOrWhiteSpace(Slot))
            {
                WriteObject(WebsitesClient.ListWebApps(ResourceGroupName, Name));
            }
            else
            {
                WriteObject(WebsitesClient.GetWebApp(ResourceGroupName, Name, Slot));
            }
        }
Exemple #7
0
        public void CreateWithClonedWebApp()
        {
            string      trafficManagerProfielId   = IsResource(TrafficManagerProfile) ? TrafficManagerProfile : null;
            string      trafficManagerProfileName = IsResource(TrafficManagerProfile) ? null : TrafficManagerProfile;
            CloningInfo cloningInfo = null;

            if (SourceWebApp != null)
            {
                cloningInfo = new CloningInfo
                {
                    SourceWebAppId            = SourceWebApp.Id,
                    CloneCustomHostNames      = !IgnoreCustomHostNames.IsPresent,
                    SourceWebAppLocation      = SourceWebApp.Location,
                    CloneSourceControl        = !IgnoreSourceControl.IsPresent,
                    TrafficManagerProfileId   = trafficManagerProfielId,
                    TrafficManagerProfileName = trafficManagerProfileName,
                    ConfigureLoadBalancing    = !string.IsNullOrEmpty(TrafficManagerProfile),
                    AppSettingsOverrides      = AppSettingsOverrides == null ? null : AppSettingsOverrides.Cast <DictionaryEntry>().ToDictionary(kvp => kvp.Key.ToString(), kvp => kvp.Value.ToString(), StringComparer.Ordinal)
                };
                cloningInfo = new PSCloningInfo(cloningInfo);
            }

            var cloneWebAppSlots = false;

            string[] slotNames            = null;
            string   srcResourceGroupName = null;
            string   srcwebAppName        = null;
            string   srcSlotName          = null;

            if (IncludeSourceWebAppSlots.IsPresent)
            {
                CmdletHelpers.TryParseWebAppMetadataFromResourceId(SourceWebApp.Id, out srcResourceGroupName,
                                                                   out srcwebAppName, out srcSlotName);
                var slots = WebsitesClient.ListWebApps(srcResourceGroupName, srcwebAppName);
                if (slots != null && slots.Any())
                {
                    slotNames        = slots.Select(s => s.Name.Replace(srcwebAppName + "/", string.Empty)).ToArray();
                    cloneWebAppSlots = true;
                }
            }

            if (cloneWebAppSlots)
            {
                WriteVerboseWithTimestamp("Cloning source web app '{0}' to destination web app {1}", srcwebAppName, Name);
            }

            try
            {
                WriteObject(new PSSite(WebsitesClient.CreateWebApp(ResourceGroupName, Name, null, Location, AppServicePlan, cloningInfo, AseName, AseResourceGroupName)));
            }
            catch (Exception e)
            {
                if (e.Message.Contains("Operation returned an invalid status code \'BadRequest\'"))
                {
                    var message = e.Message + "\nIf AppServicePlan is present in other resourceGroup, please provide AppServicePlan in following format : \" /subscriptions/{subscriptionId}/resourcegroups/{resourcegroupName}/providers/Microsoft.Web/serverfarms/{serverFarmName}\"";
                    WriteObject(message);
                    throw new Exception(message, e);
                }
                throw e;
            }

            if (cloneWebAppSlots)
            {
                WriteVerboseWithTimestamp("Cloning all deployment slots of source web app '{0}' to destination web app {1}", srcwebAppName, Name);
                CloneSlots(slotNames);
            }
        }