Skip to content

Commit edfc6b4

Browse files
committed
New-AzureServiceExtension cmdlet update:
it takes ExtensionState to update the state of the extension.
1 parent 8d66b57 commit edfc6b4

File tree

9 files changed

+133
-3
lines changed

9 files changed

+133
-3
lines changed

src/ServiceManagement/Compute/Commands.ServiceManagement.Test/FunctionalTests/AzureServiceExtensionTests.cs

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
using System.IO;
1919
using System.Reflection;
2020
using Microsoft.VisualStudio.TestTools.UnitTesting;
21+
using Microsoft.WindowsAzure.Commands.Common;
2122
using Microsoft.WindowsAzure.Commands.ServiceManagement.Extensions;
2223
using Microsoft.WindowsAzure.Commands.ServiceManagement.Model;
2324

@@ -146,6 +147,7 @@ public void AzureServiceExtensionConfigScenarioTest()
146147
DeploymentInfoContext result = vmPowershellCmdlets.GetAzureDeployment(_serviceName, DeploymentSlotType.Production);
147148
pass = Utilities.PrintAndCompareDeployment(result, _serviceName, DeploymentName, DeploymentLabel, DeploymentSlotType.Production, null, 2);
148149
Console.WriteLine("successfully deployed the package");
150+
var extId = result.ExtensionConfiguration.AllRoles[0].Id;
149151

150152
ExtensionContext resultExtensionContext = vmPowershellCmdlets.GetAzureServiceExtension(_serviceName)[0];
151153

@@ -159,6 +161,27 @@ public void AzureServiceExtensionConfigScenarioTest()
159161

160162
VerifyRDP(_serviceName, rdpPath);
161163

164+
ExtensionConfigurationInput extConfig = vmPowershellCmdlets.NewAzureServiceExtensionConfig(extId, "Uninstall");
165+
166+
try
167+
{
168+
vmPowershellCmdlets.SetAzureDeploymentConfig(_serviceName, DeploymentSlotType.Production,
169+
_configPath.FullName, extConfig);
170+
Assert.Fail("Succeeded, but extected to fail!");
171+
}
172+
catch (Exception e)
173+
{
174+
if (e.ToString().Contains("BadRequest")
175+
|| ((e.InnerException != null) && (e.InnerException.ToString().Contains("BadRequest"))))
176+
{
177+
Console.WriteLine(e.ToString());
178+
}
179+
else
180+
{
181+
throw;
182+
}
183+
}
184+
162185
vmPowershellCmdlets.RemoveAzureServiceExtension(
163186
serviceName: _serviceName,
164187
extensionName: _extensionName,
@@ -178,8 +201,6 @@ public void AzureServiceExtensionConfigScenarioTest()
178201
Console.WriteLine("Failed to get RDP file as expected");
179202
}
180203

181-
182-
183204
vmPowershellCmdlets.RemoveAzureDeployment(_serviceName, DeploymentSlotType.Production, true);
184205

185206
pass &= Utilities.CheckRemove(vmPowershellCmdlets.GetAzureDeployment, _serviceName, DeploymentSlotType.Production);

src/ServiceManagement/Compute/Commands.ServiceManagement.Test/FunctionalTests/PaasCmdletInfo/NewAzureServiceExtensionConfigCmdletInfo.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,5 +55,16 @@ public NewAzureServiceExtensionConfigCmdletInfo(string thumbprint, string algori
5555
this.cmdletParams.Add(new CmdletParam("ThumbprintAlgorithm", algorithm));
5656
}
5757
}
58+
59+
public NewAzureServiceExtensionConfigCmdletInfo(string extensionId, string extensionStatus, string[] roles)
60+
{
61+
this.cmdletName = Utilities.NewAzureServiceExtensionConfigCmdletName;
62+
this.cmdletParams.Add(new CmdletParam("ExtensionId", extensionId));
63+
this.cmdletParams.Add(new CmdletParam("ExtensionState", extensionStatus));
64+
if (roles != null)
65+
{
66+
this.cmdletParams.Add(new CmdletParam("Role", roles));
67+
}
68+
}
5869
}
5970
}

src/ServiceManagement/Compute/Commands.ServiceManagement.Test/FunctionalTests/ServiceManagementCmdletTestHelper.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1319,6 +1319,14 @@ public ExtensionConfigurationInput NewAzureServiceExtensionConfig(string extensi
13191319
providerNamespace, publicConfig, privateConfig, version));
13201320
}
13211321

1322+
public ExtensionConfigurationInput NewAzureServiceExtensionConfig(string extensionId, string extensionStatus,
1323+
string [] roles = null)
1324+
{
1325+
return
1326+
RunPSCmdletAndReturnFirst<ExtensionConfigurationInput>(
1327+
new NewAzureServiceExtensionConfigCmdletInfo(extensionId, extensionStatus, roles));
1328+
}
1329+
13221330
// Set-AzureServiceExtension
13231331
public ManagementOperationContext SetAzureServiceExtension(string serviceName, string extensionName,
13241332
string providerNamespace, string publicConfig, string privateConfig, string[] roles = null, string slot = null, string version = null)

src/ServiceManagement/Compute/Commands.ServiceManagement/Extensions/Common/BaseAzureServiceExtensionCmdlet.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ public abstract class BaseAzureServiceExtensionCmdlet : ServiceManagementBaseCmd
3939

4040
protected const string NewExtensionParameterSetName = "NewExtension";
4141
protected const string NewExtensionUsingThumbprintParameterSetName = "NewExtensionUsingThumbprint";
42+
protected const string UpdateExtensionStatusParameterSetName = "UpdateExtensionStatusParameterSetName";
4243
protected const string SetExtensionParameterSetName = "SetExtension";
4344
protected const string SetExtensionUsingThumbprintParameterSetName = "SetExtensionUsingThumbprint";
4445
protected const string SetExtensionUsingDiagnosticsConfigurationParameterSetName = "SetExtensionUsingDiagnosticsConfiguration";
@@ -66,6 +67,7 @@ public abstract class BaseAzureServiceExtensionCmdlet : ServiceManagementBaseCmd
6667
public virtual string ExtensionName { get; set; }
6768
public virtual string Version { get; set; }
6869
public virtual string ExtensionId { get; set; }
70+
public virtual string ExtensionState { get; set; }
6971

7072
public BaseAzureServiceExtensionCmdlet()
7173
: base()

src/ServiceManagement/Compute/Commands.ServiceManagement/Extensions/Common/ExtensionConfigurationInput.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,5 +28,6 @@ public class ExtensionConfigurationInput
2828
public string PrivateConfiguration { get; set; }
2929
public ExtensionRoleList Roles { get; set; }
3030
public X509Certificate2 X509Certificate { get; set; }
31+
public string State { get; set; }
3132
}
3233
}

src/ServiceManagement/Compute/Commands.ServiceManagement/Extensions/Common/ExtensionManager.cs

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -344,6 +344,40 @@ public ExtensionConfiguration Add(DeploymentGetResponse deployment, DeploymentGe
344344
return extConfig;
345345
}
346346

347+
public ExtensionConfiguration UpdateExtensionState(ExtensionConfigurationInput input)
348+
{
349+
var extConfig = new ExtensionConfiguration();
350+
if (input.Roles == null || input.Roles.Count == 1 && input.Roles[0].RoleType == ExtensionRoleType.AllRoles)
351+
{
352+
353+
extConfig.AllRoles = new List<ExtensionConfiguration.Extension>();
354+
extConfig.AllRoles.Add(new ExtensionConfiguration.Extension
355+
{
356+
Id = input.Id,
357+
State = input.State
358+
});
359+
}
360+
else
361+
{
362+
extConfig.NamedRoles = new List<ExtensionConfiguration.NamedRole>();
363+
foreach (var role in input.Roles)
364+
{
365+
var ext = new List<ExtensionConfiguration.Extension>();
366+
ext.Add(new ExtensionConfiguration.Extension
367+
{
368+
Id = input.Id,
369+
State = input.State
370+
});
371+
extConfig.NamedRoles.Add(new ExtensionConfiguration.NamedRole
372+
{
373+
RoleName = role.RoleName,
374+
Extensions = ext
375+
});
376+
}
377+
}
378+
return extConfig;
379+
}
380+
347381
public static bool Validate(ExtensionConfigurationInput[] inputs, out string errorConfigInput)
348382
{
349383
var roleList = (from c in inputs

src/ServiceManagement/Compute/Commands.ServiceManagement/Extensions/Common/NewAzureServiceExtensionConfig.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,11 @@ public class NewAzureServiceExtensionConfigCommand : BaseAzureServiceExtensionCm
2626
{
2727
private const string NetExtensionParameterSetName = NewExtensionParameterSetName;
2828
private const string NetExtensionUsingThumbprintParameterSetName = NewExtensionUsingThumbprintParameterSetName;
29+
private const string NetUpdateExtensionStatusParameterSetName = UpdateExtensionStatusParameterSetName;
2930

3031
[Parameter(Position = 0, ValueFromPipelineByPropertyName = true, ParameterSetName = NetExtensionParameterSetName, HelpMessage = ExtensionParameterPropertyHelper.RoleHelpMessage)]
3132
[Parameter(Position = 0, ValueFromPipelineByPropertyName = true, ParameterSetName = NetExtensionUsingThumbprintParameterSetName, HelpMessage = ExtensionParameterPropertyHelper.RoleHelpMessage)]
33+
[Parameter(Position = 0, ValueFromPipelineByPropertyName = true, ParameterSetName = NetUpdateExtensionStatusParameterSetName, HelpMessage = ExtensionParameterPropertyHelper.ExtensionIdHelpMessage)]
3234
[ValidateNotNullOrEmpty]
3335
public override string[] Role
3436
{
@@ -109,13 +111,22 @@ public override string Version
109111

110112
[Parameter(Position = 8, Mandatory = false, ValueFromPipelineByPropertyName = true, ParameterSetName = NetExtensionParameterSetName, HelpMessage = ExtensionParameterPropertyHelper.ExtensionIdHelpMessage)]
111113
[Parameter(Position = 8, Mandatory = false, ValueFromPipelineByPropertyName = true, ParameterSetName = NetExtensionUsingThumbprintParameterSetName, HelpMessage = ExtensionParameterPropertyHelper.ExtensionIdHelpMessage)]
114+
[Parameter(Position = 1, Mandatory = true, ValueFromPipelineByPropertyName = true, ParameterSetName = NetUpdateExtensionStatusParameterSetName, HelpMessage = ExtensionParameterPropertyHelper.ExtensionIdHelpMessage)]
112115
[ValidateNotNullOrEmpty]
113116
public override string ExtensionId
114117
{
115118
get;
116119
set;
117120
}
118121

122+
[Parameter(Position = 2, Mandatory = true, ValueFromPipelineByPropertyName = true, ParameterSetName = NetUpdateExtensionStatusParameterSetName, HelpMessage = ExtensionParameterPropertyHelper.ExtensionIdHelpMessage)]
123+
[ValidateSet("Enable", "Disable", "Uninstall", IgnoreCase = true)]
124+
public override string ExtensionState
125+
{
126+
get;
127+
set;
128+
}
129+
119130
protected override void ValidateParameters()
120131
{
121132
base.ValidateParameters();
@@ -129,6 +140,7 @@ public void ExecuteCommand()
129140
WriteObject(new ExtensionConfigurationInput
130141
{
131142
Id = ExtensionId,
143+
State = ExtensionState,
132144
CertificateThumbprint = CertificateThumbprint,
133145
ThumbprintAlgorithm = ThumbprintAlgorithm,
134146
ProviderNameSpace = ProviderNamespace,

src/ServiceManagement/Compute/Commands.ServiceManagement/HostedServices/SetAzureDeployment.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,13 @@ public void ExecuteCommand()
192192
InvokeInOperationContext(() => peerDeployment = func(peerSlottype));
193193

194194
ExtensionManager extensionMgr = new ExtensionManager(this, ServiceName);
195-
extConfig = extensionMgr.Add(currentDeployment, peerDeployment, ExtensionConfiguration, this.Slot);
195+
196+
foreach (var config in ExtensionConfiguration)
197+
{
198+
extConfig = (config.State == null)
199+
? extensionMgr.Add(currentDeployment, peerDeployment, ExtensionConfiguration, this.Slot)
200+
: extensionMgr.UpdateExtensionState(config);
201+
}
196202
}
197203

198204
// Upgrade Parameter Set

src/ServiceManagement/Compute/Commands.ServiceManagement/Model/DeploymentInfoContext.cs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,12 @@ public PVM.LoadBalancerList LoadBalancers
180180
protected set;
181181
}
182182

183+
public PVM.ExtensionConfiguration ExtensionConfiguration
184+
{
185+
get;
186+
protected set;
187+
}
188+
183189
public DeploymentInfoContext(DeploymentGetResponse deployment)
184190
{
185191
this.Slot = deployment.DeploymentSlot.ToString();
@@ -287,6 +293,35 @@ from b in deployment.LoadBalancers
287293
this.InternalLoadBalancerName = this.LoadBalancers == null || !this.LoadBalancers.Any() ? null
288294
: this.LoadBalancers.First().Name;
289295
}
296+
297+
// ExtensionConfiguration
298+
if (deployment.ExtensionConfiguration != null)
299+
{
300+
this.ExtensionConfiguration = new PVM.ExtensionConfiguration();
301+
if (deployment.ExtensionConfiguration.AllRoles != null)
302+
{
303+
this.ExtensionConfiguration.AllRoles = new PVM.AllRoles(
304+
from all in deployment.ExtensionConfiguration.AllRoles
305+
select new PVM.Extension(all.Id, 0, all.State));
306+
}
307+
308+
if (deployment.ExtensionConfiguration.NamedRoles != null)
309+
{
310+
this.ExtensionConfiguration.NamedRoles = new PVM.NamedRoles();
311+
foreach (var role in deployment.ExtensionConfiguration.NamedRoles)
312+
{
313+
var extList = new PVM.ExtensionList(
314+
from ext in role.Extensions
315+
select new PVM.Extension(ext.Id, 0, ext.State));
316+
317+
this.ExtensionConfiguration.NamedRoles.Add(new PVM.RoleExtensions
318+
{
319+
RoleName = role.RoleName,
320+
Extensions = extList
321+
});
322+
}
323+
}
324+
}
290325
}
291326

292327
public XDocument SerializeRolesConfiguration()

0 commit comments

Comments
 (0)