Ejemplo n.º 1
0
        static void AddReservedIp(string subscriptionId, string reservedIpName, string location)
        {
            // NOTE: another valid tag is /AppServiceManagement
            var payload = string.Format(@"
<ReservedIP xmlns='http://schemas.microsoft.com/windowsazure'>
  <Name>{0}</Name>
  <Label>AppServiceReservedIp</Label>
  <DeploymentName></DeploymentName>
  <Location>{1}</Location>
  <IPTags>
    <IPTag>
      <IPTagType>FirstPartyUsage</IPTagType>
      <Value>/AppService</Value>
    </IPTag>
  </IPTags>
</ReservedIP>", reservedIpName, location);

            var authHeader = GetAuthorizationHeader(subscriptionId);
            var content    = new StringContent(payload, Encoding.UTF8, "text/xml");
            var uri        = new Uri(string.Format("https://management.core.windows.net/{0}/services/networking/reservedips", subscriptionId));

            using (var response = RDFEClient.HttpInvoke(uri, authHeader, "post", content).Result)
            {
            }
        }
Ejemplo n.º 2
0
        static void GetConfiguration(string subscriptionId, string serviceName)
        {
            var authHeader = GetAuthorizationHeader(subscriptionId);
            var uri        = new Uri(string.Format("https://management.core.windows.net/{0}/services/hostedservices/{1}/deploymentslots/Production", subscriptionId, serviceName));

            using (var response = RDFEClient.HttpInvoke(uri, authHeader, "get").Result)
            {
                if (!response.IsSuccessStatusCode)
                {
                    return;
                }

                var deploymentElem = XDocument.Parse(response.Content.ReadAsStringAsync().Result).Root;
                var deploymentNs   = deploymentElem.Name.Namespace;
                var mgr            = new XmlNamespaceManager(new NameTable());
                mgr.AddNamespace("x", deploymentNs.NamespaceName);

                var configurationElem        = deploymentElem.XPathSelectElement("/x:Deployment/x:Configuration", mgr);
                var serviceConfigurationElem = XDocument.Parse(Encoding.UTF8.GetString(Convert.FromBase64String(configurationElem.Value))).Root;

                Console.WriteLine();
                Console.WriteLine("---------- ServiceConfiguration.cscfg -----------------------");
                Console.WriteLine();
                RDFEClient.PrintColoredXml(serviceConfigurationElem.ToString());
            }
        }
Ejemplo n.º 3
0
        static void UpdateConfiguration(string subscriptionId, string serviceName, string content)
        {
            var payload = content;

            if (File.Exists(content))
            {
                payload = File.ReadAllText(content);
            }

            if (payload.StartsWith("<ServiceConfiguration "))
            {
                payload = string.Format(@"
<ChangeConfiguration xmlns='http://schemas.microsoft.com/windowsazure'>
    <Configuration>{0}</Configuration>
    <TreatWarningsAsError>false</TreatWarningsAsError>
</ChangeConfiguration>
", Convert.ToBase64String(Encoding.UTF8.GetBytes(XDocument.Parse(payload).ToString(SaveOptions.DisableFormatting))));
            }

            var authHeader = GetAuthorizationHeader(subscriptionId);
            var uri        = new Uri(string.Format("https://management.core.windows.net/{0}/services/hostedservices/{1}/deploymentslots/Production/?comp=config", subscriptionId, serviceName));

            using (var response = RDFEClient.HttpInvoke(uri, authHeader, "post", new StringContent(payload, Encoding.UTF8, "text/xml")).Result)
            {
            }
        }
Ejemplo n.º 4
0
        static void ListOperatingSystemFamilies(string subscriptionId)
        {
            var uri = new Uri($"https://management.core.windows.net/{subscriptionId}/operatingsystemfamilies");

            using (var response = RDFEClient.HttpInvoke(uri, subscriptionId, "get").Result)
            {
            }
        }
Ejemplo n.º 5
0
        static void GetOperation(string subscriptionId, string requestId)
        {
            var uri = new Uri(string.Format("https://management.core.windows.net/{0}/operations/{1}", subscriptionId, requestId));

            using (var response = RDFEClient.HttpInvoke(uri, subscriptionId, "get").Result)
            {
            }
        }
Ejemplo n.º 6
0
        static void DeleteReservedIp(string subscriptionId, string reservedIpName)
        {
            var uri = new Uri(string.Format("https://management.core.windows.net/{0}/services/networking/reservedips/{1}", subscriptionId, reservedIpName));

            using (var response = RDFEClient.HttpInvoke(uri, subscriptionId, "delete").Result)
            {
            }
        }
Ejemplo n.º 7
0
        static void ListReservedIps(string subscriptionId)
        {
            var uri = new Uri(string.Format("https://management.core.windows.net/{0}/services/networking/reservedips", subscriptionId));

            using (var response = RDFEClient.HttpInvoke(uri, subscriptionId, "get").Result)
            {
            }
        }
Ejemplo n.º 8
0
        static void DeleteExtension(string subscriptionId, string serviceName, string extensionId)
        {
            var uri = new Uri(string.Format("https://management.core.windows.net/{0}/services/hostedservices/{1}/extensions/{2}", subscriptionId, serviceName, extensionId));

            using (var response = RDFEClient.HttpInvoke(uri, subscriptionId, "delete").Result)
            {
            }
        }
Ejemplo n.º 9
0
        static void ListExtensions(string subscriptionId, string serviceName)
        {
            var uri = new Uri(string.Format("https://management.core.windows.net/{0}/services/hostedservices/{1}/extensions", subscriptionId, serviceName));

            using (var response = RDFEClient.HttpInvoke(uri, subscriptionId, "get").Result)
            {
            }
        }
Ejemplo n.º 10
0
        static void DeleteDeployment(string subscriptionId, string serviceName)
        {
            var uri = new Uri(string.Format("https://management.core.windows.net/{0}/services/hostedservices/{1}/deploymentslots/Production", subscriptionId, serviceName));

            using (var response = RDFEClient.HttpInvoke(uri, subscriptionId, "delete").Result)
            {
            }
        }
Ejemplo n.º 11
0
        static void AddReservedIp(string subscriptionId, string reservedIpName, string location)
        {
            Dictionary <string, string> locationZones = new Dictionary <string, string>
            {
                { "Australia Southeast", "" },
                { "East US", "useast-AZ01" },
                { "East US 2 EUAP", "useast2euap-AZ02" },
                { "East US 2", "useast2-AZ03" },
                //{ "East US 2 EUAP", "" },
                //{ "North Central US", "usnorth-NONE" },
                { "North Central US", "" }
            };

            var pair = locationZones.FirstOrDefault(p => string.Equals(p.Key, location, StringComparison.OrdinalIgnoreCase));

            if (string.IsNullOrEmpty(pair.Key))
            {
                throw new InvalidOperationException("Unknown AvailabilityZone for " + location + " location!");
            }

            var payload = !string.IsNullOrEmpty(pair.Value) ? string.Format(@"
<ReservedIP xmlns='http://schemas.microsoft.com/windowsazure'>
  <Name>{0}</Name>
  <Label>AppServiceReservedIp</Label>
  <DeploymentName></DeploymentName>
  <Location>{1}</Location>
  <IPTags>
    <IPTag>
      <IPTagType>FirstPartyUsage</IPTagType>
      <Value>/AppService</Value>
    </IPTag>
    <IPTag>
      <IPTagType>AvailabilityZone</IPTagType>
      <Value>{2}</Value>
    </IPTag>
  </IPTags>
</ReservedIP>", reservedIpName, pair.Key, pair.Value) : string.Format(@"
<ReservedIP xmlns='http://schemas.microsoft.com/windowsazure'>
  <Name>{0}</Name>
  <Label>AppServiceReservedIp</Label>
  <DeploymentName></DeploymentName>
  <Location>{1}</Location>
  <IPTags>
    <IPTag>
      <IPTagType>FirstPartyUsage</IPTagType>
      <Value>/AppService</Value>
    </IPTag>
  </IPTags>
</ReservedIP>", reservedIpName, pair.Key);

            var authHeader = GetAuthorizationHeader(subscriptionId);
            var content    = new StringContent(payload, Encoding.UTF8, "text/xml");
            var uri        = new Uri(string.Format("https://management.core.windows.net/{0}/services/networking/reservedips", subscriptionId));

            using (var response = RDFEClient.HttpInvoke(uri, authHeader, "post", content).Result)
            {
            }
        }
Ejemplo n.º 12
0
        static void GetReservedIp(string subscriptionId, string reservedIpName)
        {
            var authHeader = GetAuthorizationHeader(subscriptionId);
            var uri        = new Uri(string.Format("https://management.core.windows.net/{0}/services/networking/reservedips/{1}", subscriptionId, reservedIpName));

            using (var response = RDFEClient.HttpInvoke(uri, authHeader, "get").Result)
            {
            }
        }
Ejemplo n.º 13
0
        static void GetExtension(string subscriptionId, string serviceName, string extensionId)
        {
            var authHeader = GetAuthorizationHeader(subscriptionId);
            var uri        = new Uri(string.Format("https://management.core.windows.net/{0}/services/hostedservices/{1}/extensions/{2}", subscriptionId, serviceName, extensionId));

            using (var response = RDFEClient.HttpInvoke(uri, authHeader, "get").Result)
            {
            }
        }
Ejemplo n.º 14
0
        static void GetDeployment(string subscriptionId, string serviceName)
        {
            var authHeader = GetAuthorizationHeader(subscriptionId);
            var uri        = new Uri(string.Format("https://management.core.windows.net/{0}/services/hostedservices/{1}/deploymentslots/Production", subscriptionId, serviceName));

            using (var response = RDFEClient.HttpInvoke(uri, authHeader, "get").Result)
            {
            }
        }
Ejemplo n.º 15
0
        static void DisableServiceTunnelingExtension(string subscriptionId, string serviceName)
        {
            var    authHeader = GetAuthorizationHeader(subscriptionId);
            var    uri        = new Uri(string.Format("https://management.core.windows.net/{0}/services/hostedservices/{1}/deploymentslots/Production", subscriptionId, serviceName));
            string base64Configuration;
            string roleName;

            using (var response = RDFEClient.HttpInvoke(uri, authHeader, "get").Result)
            {
                if (!response.IsSuccessStatusCode)
                {
                    return;
                }

                var deploymentElem = XDocument.Parse(response.Content.ReadAsStringAsync().Result).Root;
                var deploymentNs   = deploymentElem.Name.Namespace;
                var mgr            = new XmlNamespaceManager(new NameTable());
                mgr.AddNamespace("x", deploymentNs.NamespaceName);

                var configurationElem = deploymentElem.XPathSelectElement("/x:Deployment/x:Configuration", mgr);
                base64Configuration = configurationElem.Value;

                var serviceConfigurationElem = XDocument.Parse(Encoding.UTF8.GetString(Convert.FromBase64String(base64Configuration))).Root;
                var serviceConfigurationNs   = serviceConfigurationElem.Name.Namespace;
                var serviceConfigurationMgr  = new XmlNamespaceManager(new NameTable());
                serviceConfigurationMgr.AddNamespace("x", serviceConfigurationNs.NamespaceName);
                roleName = null != serviceConfigurationElem.XPathSelectElement("/x:ServiceConfiguration/x:Role[@name='MultiRole']", serviceConfigurationMgr)
                    ? "MultiRole" : "FrontEndRole";
            }

            var payload = string.Format(@"
<ChangeConfiguration xmlns='http://schemas.microsoft.com/windowsazure'>
  <Configuration>{0}</Configuration>
  <TreatWarningsAsError>false</TreatWarningsAsError>
  <Mode>Auto</Mode>
  <ExtensionConfiguration>
    <NamedRoles>
      <Role>
        <RoleName>{1}</RoleName>
        <Extensions>
          <Extension>
            <Id>FrontEndRole-Aquarius-Production-Ext-1</Id>
            <State>Disable</State>
          </Extension>
        </Extensions>
      </Role>
    </NamedRoles>
  </ExtensionConfiguration>
</ChangeConfiguration>", base64Configuration, roleName);

            UpdateConfiguration(subscriptionId, serviceName, payload);
        }
Ejemplo n.º 16
0
        static void AddExtension(string subscriptionId, string serviceName, string content)
        {
            var payload = content;

            if (File.Exists(content))
            {
                payload = File.ReadAllText(content);
            }

            var uri = new Uri(string.Format("https://management.core.windows.net/{0}/services/hostedservices/{1}/extensions", subscriptionId, serviceName));

            using (var response = RDFEClient.HttpInvoke(uri, subscriptionId, "post", new StringContent(payload, Encoding.UTF8, "text/xml")).Result)
            {
            }
        }
Ejemplo n.º 17
0
        private async Task DumpContent(HttpContent content)
        {
            if (content == null || content.Headers.ContentType == null)
            {
                return;
            }

            var result = await content.ReadAsStringAsync();

            if (content.Headers.ContentType.MediaType.Contains(RDFEClient.JsonContentType))
            {
                try
                {
                    if (result.StartsWith("["))
                    {
                        RDFEClient.PrintColoredJson(JArray.Parse(result));
                        return;
                    }
                    else if (result.StartsWith("{"))
                    {
                        RDFEClient.PrintColoredJson(JObject.Parse(result));
                        return;
                    }
                }
                catch (Exception)
                {
                    // best effort
                }
            }
            else if (content.Headers.ContentType.MediaType.Contains(RDFEClient.XmlContentType) ||
                     content.Headers.ContentType.MediaType.Contains("application/xml"))
            {
                try
                {
                    RDFEClient.PrintColoredXml(XDocument.Parse(result).ToString());
                    return;
                }
                catch (Exception)
                {
                    // best effort
                }
            }

            Console.Write(result);
        }
Ejemplo n.º 18
0
        static void AddServiceTunnelingExtension(string subscriptionId, string serviceName)
        {
            var payload = @"
<Extension xmlns='http://schemas.microsoft.com/windowsazure'>
  <ProviderNameSpace>Microsoft.Azure.Networking.SDN</ProviderNameSpace>
  <Type>Aquarius</Type>
  <Id>FrontEndRole-Aquarius-Production-Ext-1</Id>
  <Thumbprint></Thumbprint>
  <ThumbprintAlgorithm></ThumbprintAlgorithm>
  <PublicConfiguration>eyJQbHVnaW5zVG9FbmFibGUiOlsiU2VydmljZVR1bm5lbEV4dGVuc2lvbiJdfQ==</PublicConfiguration>
  <PrivateConfiguration>e30=</PrivateConfiguration>
  <Version>4.2</Version>
</Extension>";

            var uri = new Uri(string.Format("https://management.core.windows.net/{0}/services/hostedservices/{1}/extensions", subscriptionId, serviceName));

            using (var response = RDFEClient.HttpInvoke(uri, subscriptionId, "post", new StringContent(payload, Encoding.UTF8, "text/xml")).Result)
            {
            }
        }
Ejemplo n.º 19
0
        static void AddServiceTunnelingExtension(string subscriptionId, string serviceName)
        {
            var payload = @"
<Extension xmlns='http://schemas.microsoft.com/windowsazure'>
  <ProviderNameSpace>Microsoft.Azure.Networking.SDN</ProviderNameSpace>
  <Type>Aquarius</Type>
  <Id>FrontEndRole-Aquarius-Production-Ext-0</Id>
  <Thumbprint></Thumbprint>
  <ThumbprintAlgorithm></ThumbprintAlgorithm>
  <PublicConfiguration>e30=</PublicConfiguration>
  <PrivateConfiguration>e30=</PrivateConfiguration>
  <Version>3.4</Version>
</Extension>";

            var authHeader = GetAuthorizationHeader(subscriptionId);
            var uri        = new Uri(string.Format("https://management.core.windows.net/{0}/services/hostedservices/{1}/extensions", subscriptionId, serviceName));

            using (var response = RDFEClient.HttpInvoke(uri, authHeader, "post", new StringContent(payload, Encoding.UTF8, "text/xml")).Result)
            {
            }
        }
Ejemplo n.º 20
0
        static void AddServiceTunnelingExtensionConfiguration(string subscriptionId, string serviceName)
        {
            var      authHeader = GetAuthorizationHeader(subscriptionId);
            var      uri        = new Uri(string.Format("https://management.core.windows.net/{0}/services/hostedservices/{1}/deploymentslots/Production", subscriptionId, serviceName));
            XElement serviceConfigurationElem;

            using (var response = RDFEClient.HttpInvoke(uri, authHeader, "get").Result)
            {
                if (!response.IsSuccessStatusCode)
                {
                    return;
                }

                var deploymentElem = XDocument.Parse(response.Content.ReadAsStringAsync().Result).Root;
                var deploymentNs   = deploymentElem.Name.Namespace;
                var mgr            = new XmlNamespaceManager(new NameTable());
                mgr.AddNamespace("x", deploymentNs.NamespaceName);

                var configurationElem = deploymentElem.XPathSelectElement("/x:Deployment/x:Configuration", mgr);
                serviceConfigurationElem = XDocument.Parse(Encoding.UTF8.GetString(Convert.FromBase64String(configurationElem.Value))).Root;
            }

            var serviceConfigurationNs = serviceConfigurationElem.Name.Namespace;
            var networkConfiguration   = serviceConfigurationElem.Elements().FirstOrDefault(n => n.Name == serviceConfigurationNs.GetName("NetworkConfiguration"));
            var guestAgentSettings     = serviceConfigurationElem.Elements().FirstOrDefault(n => n.Name == serviceConfigurationNs.GetName("GuestAgentSettings"));

            XElement serviceTunnelingConfigurations = null;

            if (networkConfiguration == null)
            {
                networkConfiguration = new XElement(serviceConfigurationNs.GetName("NetworkConfiguration"));
                guestAgentSettings.AddBeforeSelf(networkConfiguration);
            }
            else
            {
                serviceTunnelingConfigurations = networkConfiguration.Elements().FirstOrDefault(n => n.Name == serviceConfigurationNs.GetName("ServiceTunnelingConfigurations"));
            }

            // only add if not exists
            if (serviceTunnelingConfigurations == null)
            {
                var mgr = new XmlNamespaceManager(new NameTable());
                mgr.AddNamespace("x", serviceConfigurationNs.NamespaceName);

                serviceTunnelingConfigurations = new XElement(serviceConfigurationNs.GetName("ServiceTunnelingConfigurations"));
                foreach (var endpoint in serviceConfigurationElem.XPathSelectElements("/x:ServiceConfiguration/x:NetworkConfiguration/x:AddressAssignments/x:VirtualIPs/x:VirtualIP/x:Endpoints/x:Endpoint[@role='FrontEndRole' and contains(@name,'FrontEndPort')]", mgr))
                {
                    var endpointName = endpoint.Attributes().First(a => a.Name.LocalName == "name").Value;
                    serviceTunnelingConfigurations.Add(new XElement(serviceConfigurationNs.GetName("ServiceTunnelingConfiguration"),
                                                                    new XAttribute("name", "ServiceTunneling-" + endpointName),
                                                                    new XAttribute("role", "FrontEndRole"),
                                                                    new XAttribute("endpoint", endpointName)
                                                                    ));
                }

                if (!serviceTunnelingConfigurations.Elements().Any())
                {
                    return;
                }

                networkConfiguration.Add(serviceTunnelingConfigurations);

                UpdateConfiguration(subscriptionId, serviceName, serviceConfigurationElem.ToString());
            }
        }