Search code examples
azureazure-powershellazure-traffic-manager

TrafficManagerEndpoint cmdlets: getting Bad Request (400) and NullReferenceExceptions


I'm attempting to enable/disable Traffic Manager endpoints via Powershell to help with environment configuration. On one of our Resource Groups the cmdlets worked fine, but we're seeing some strange behavior in others.

In one case, passing in a TrafficManagerEndpoint directly to a cmdlet (via pipeline or parameter) returns a 400 and vomits the full HTML:

> $tm = Get-AzureRmTrafficManagerProfile -Name <tm-name> -ResourceGroupname <rg-name>
> $tm.Endpoints[0] | Disable-AzureRmTrafficManagerEndpoint

Confirm
Are you sure you want to disable endpoint '<tm-endpoint-name>' of Profile '<tm-name>'?
[Y] Yes  [N] No  [S] Suspend  [?] Help (default is "Y"): y
Disable-AzureRmTrafficManagerEndpoint : <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>Request Error</title>
    <style>BODY { color: #000000; background-color: white; font-family: Verdana; margin-left: 0px; margin-top: 0px; } #content { margin-left: 30px; font-size: .70em; padding-bottom: 2em; } A:link { color: #336699;
font-weight: bold; text-decoration: underline; } A:visited { color: #6699cc; font-weight: bold; text-decoration: underline; } A:active { color: #336699; font-weight: bold; text-decoration: underline; } .heading1 {
background-color: #003366; border-bottom: #336699 6px solid; color: #ffffff; font-family: Tahoma; font-size: 26px; font-weight: normal;margin: 0em 0em 10px -20px; padding-bottom: 8px; padding-left:
30px;padding-top: 16px;} pre { font-size:small; background-color: #e5e5cc; padding: 5px; font-family: Courier New; margin-top: 0px; border: 1px #f0f0e0 solid; white-space: pre-wrap; white-space: -pre-wrap;
word-wrap: break-word; } table { border-collapse: collapse; border-spacing: 0px; font-family: Verdana;} table th { border-right: 2px white solid; border-bottom: 2px white solid; font-weight: bold;
background-color: #cecf9c;} table td { border-right: 2px white solid; border-bottom: 2px white solid; background-color: #e5e5cc;}</style>
  </head>
  <body>
    <div id="content">
      <p class="heading1">Request Error</p>
      <p>The server encountered an error processing the request. See server logs for more details.</p>
    </div>
  </body>
</html>
At line:1 char:20
+ $tm.Endpoints[0] | Disable-AzureRmTrafficManagerEndpoint
+                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : CloseError: (:) [Disable-AzureRmTrafficManagerEndpoint], CloudException
    + FullyQualifiedErrorId : Microsoft.Azure.Commands.TrafficManager.DisableAzureTrafficManagerEndpoint

The same happens when using Enable-AzureRmTrafficManagerEndpoint and Set-AzureRmTrafficManagerEndpoint.

When invoking the cmdlet using resource names, Diable-AzureRmTrafficManagerEndpoint works just fine, but when invoking Enable-AzureRmTrafficManagerEndpoint this way I get a NullReferenceException:

> Disable-AzureRmTrafficManagerEndpoint -Name <tm-endpoint-name> -ProfileName <tm-name> -ResourceGroupName <rg-name> -Type AzureEndpoints

Confirm
Are you sure you want to disable endpoint '<tm-endpoint-name>' of Profile '<tm-name>'?
[Y] Yes  [N] No  [S] Suspend  [?] Help (default is "Y"): y
False
> Enable-AzureRmTrafficManagerEndpoint -Name <tm-endpoint-name> -ProfileName <tm-name> -ResourceGroup <rg-name> -Type AzureEndpoints
Enable-AzureRmTrafficManagerEndpoint : Object reference not set to an instance of an object.
At line:1 char:1
+ Enable-AzureRmTrafficManagerEndpoint -Name $tmEndpoint.Name -ProfileN ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : CloseError: (:) [Enable-AzureRmTrafficManagerEndpoint], NullReferenceException
    + FullyQualifiedErrorId : Microsoft.Azure.Commands.TrafficManager.EnableAzureTrafficManagerEndpoint

I'm certain the names are correct. Any insight into this? It seems like my AzureRM.TrafficManager module is out of sync with Azure, but I've tried installing whatever's available in the Web Platform Installer and haven't gotten anywhere. (Module version is 3.0.0). Thanks!

EDIT: Some more info that I forgot:

.NET Azure SDK version: 2.9

Powershell version:

Name                           Value
----                           -----
PSVersion                      5.1.14393.953
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.14393.953
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

Solution

  • According to your description, we can use Azure PowerShell script like this to enable or disable traffic manager endpoints.

    Use this script to disable Azure traffic manager endpoints:

    PS C:\Users> $endpoint1 = Get-AzureRmTrafficManagerEndpoint -Name web1 -Type AzureEndpoints -ProfileName jasontm -ResourceGroupName jason
    PS C:\Users> $endpoint1.EndpointStatus
    Enabled
    PS C:\Users> $endpoint1.EndpointStatus = "Disabled"
    PS C:\Users> $endpoint1.EndpointStatus
    Disabled
    PS C:\Users> $endpoint1 | Set-AzureRmTrafficManagerEndpoint
    
    
    Id                    : /subscriptions/5384xxxx-xxxx-xxxx-xxxx-xxxxe29axxxx/resourceGroups/jason/providers/Microsoft.Network/trafficManagerProfiles/jasontm/azureEndpoints/web1
    Name                  : web1
    ProfileName           : jasontm
    ResourceGroupName     : jason
    Type                  : AzureEndpoints
    TargetResourceId      : /subscriptions/5384xxxx-xxxx-xxx-xxxx-xxxxe29axxxx/resourceGroups/jason/providers/Microsoft.Network/publicIPAddresses/jasonweb1-ip
    Target                : jasonweb1.eastus.cloudapp.azure.com
    EndpointStatus        : Disabled
    Weight                : 1
    Priority              : 1
    Location              : East US
    EndpointMonitorStatus : Disabled
    MinChildEndpoints     :
    

    Use this script to enable Azure traffic manager endpoints:

    PS C:\Users> $endpoint1 = Get-AzureRmTrafficManagerEndpoint -Name web1 -Type AzureEndpoints -ProfileName jasontm -ResourceGroupName jason
    PS C:\Users> $endpoint1.EndpointStatus
    Disabled
    PS C:\Users> $endpoint1.EndpointStatus = "Enabled"
    PS C:\Users> $endpoint1.EndpointStatus
    Enabled
    PS C:\Users> $endpoint1 | Set-AzureRmTrafficManagerEndpoint
    
    
    Id                    : /subscriptions/5384xxxx-xxxx-xxxx-xxxx-xxxxe29axxxx/resourceGroups/jason/providers/Microsoft.Network/trafficManagerProfiles/jasontm/azureEndpoints/web1
    Name                  : web1
    ProfileName           : jasontm
    ResourceGroupName     : jason
    Type                  : AzureEndpoints
    TargetResourceId      : /subscriptions/5384xxxx-xxxx-xxxx-xxxx-xxxxe29axxxx/resourceGroups/jason/providers/Microsoft.Network/publicIPAddresses/jasonweb1-ip
    Target                : jasonweb1.eastus.cloudapp.azure.com
    EndpointStatus        : Enabled
    Weight                : 1
    Priority              : 1
    Location              : East US
    EndpointMonitorStatus : CheckingEndpoint
    MinChildEndpoints     :
    

    By the way, I am use Azure PowerShell version 3.7.0:

    PS C:\Users> Get-Module -ListAvailable -Name Azure -Refresh
    
    
        Directory: C:\Program Files (x86)\Microsoft SDKs\Azure\PowerShell\ServiceManagement
    
    
    ModuleType Version    Name                                ExportedCommands
    ---------- -------    ----                                ----------------
    Manifest   3.7.0      Azure                               {Get-AzureAutomationCertificate, Get-AzureAutomationConnection, New-AzureAutomationConnection, Remove-AzureAutomationConnection...}