Skip to content

Commit 28bfbba

Browse files
Merge pull request #12 from ArieShout/menxiao/signalr
SignalR Service PowerShell module continued
2 parents 740b137 + daae454 commit 28bfbba

22 files changed

+1131
-119
lines changed

src/ResourceManager/SignalR/Commands.SignalR/AzureRM.SignalR.psd1

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
# RootModule = ''
1313

1414
# Version number of this module.
15-
ModuleVersion = '0.0.1'
15+
ModuleVersion = '0.1.0'
1616

1717
# Supported PSEditions
1818
# CompatiblePSEditions = @()

src/ResourceManager/SignalR/Commands.SignalR/Cmdlets/GetAzureRmSignalR.cs

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,27 +10,24 @@ namespace Microsoft.Azure.Commands.SignalR
1010
{
1111
[Cmdlet(VerbsCommon.Get, SignalRNoun, DefaultParameterSetName = ListSignalRServiceParameterSet)]
1212
[OutputType(typeof(PSSignalRResource))]
13-
public class GetAzureRmSignalR : SignalRCmdletBase
13+
public class GetAzureRmSignalR : SignalRCmdletBase, IWithResourceId
1414
{
1515
[Parameter(Position = 0,
1616
Mandatory = false,
1717
ParameterSetName = ListSignalRServiceParameterSet,
18-
ValueFromPipelineByPropertyName = true,
19-
HelpMessage = "Resource group name.")]
18+
HelpMessage = "The resource group name.")]
2019
[Parameter(Position = 0,
21-
Mandatory = true,
20+
Mandatory = false,
2221
ParameterSetName = ResourceGroupParameterSet,
23-
ValueFromPipelineByPropertyName = true,
24-
HelpMessage = "Resource group name.")]
22+
HelpMessage = "The resource group name. The default one will be used if not specified.")]
2523
[ResourceGroupCompleter()]
2624
[ValidateNotNullOrEmpty]
27-
public string ResourceGroupName { get; set; }
25+
public override string ResourceGroupName { get; set; }
2826

2927
[Parameter(Position = 1,
3028
Mandatory = true,
31-
ValueFromPipelineByPropertyName = true,
3229
ParameterSetName = ResourceGroupParameterSet,
33-
HelpMessage = "SignalR service name.")]
30+
HelpMessage = "The SignalR service name.")]
3431
[ValidateNotNullOrEmpty]
3532
public string Name { get; set; }
3633

@@ -58,15 +55,17 @@ public override void ExecuteCmdlet()
5855
WriteObject(new PSSignalRResource(s));
5956
}
6057
break;
58+
case ResourceIdParameterSet:
59+
this.LoadFromResourceId();
60+
var signalrById = Client.Signalr.Get(ResourceGroupName, Name);
61+
WriteObject(new PSSignalRResource(signalrById));
62+
break;
6163
case ResourceGroupParameterSet:
64+
ResolveResourceGroupName();
6265
var signalr = Client.Signalr.Get(ResourceGroupName, Name);
6366
WriteObject(new PSSignalRResource(signalr));
6467
break;
65-
case ResourceIdParameterSet:
66-
var resource = new ResourceIdentifier(ResourceId);
67-
var idSignalR = Client.Signalr.Get(resource.ResourceGroupName, resource.ResourceName);
68-
WriteObject(new PSSignalRResource(idSignalR));
69-
break;
68+
7069
default:
7170
throw new ArgumentException(Resources.ParameterSetError);
7271
}

src/ResourceManager/SignalR/Commands.SignalR/Cmdlets/GetAzureRmSignalRKey.cs

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,24 +6,24 @@
66
using System;
77
using System.Management.Automation;
88

9-
namespace Microsoft.Azure.Commands.SignalR.Cmdlets
9+
namespace Microsoft.Azure.Commands.SignalR
1010
{
1111
[Cmdlet(VerbsCommon.Get, SignalRKeyNoun, DefaultParameterSetName = ResourceGroupParameterSet)]
1212
[OutputType(typeof(PSSignalRKeys))]
13-
public class GetAzureRmSignalRKey : SignalRCmdletBase
13+
public class GetAzureRmSignalRKey : SignalRCmdletBase, IWithInputObject, IWithResourceId
1414
{
1515
[Parameter(Position = 0,
16-
Mandatory = true,
16+
Mandatory = false,
1717
ParameterSetName = ResourceGroupParameterSet,
18-
HelpMessage = "Resource group name.")]
18+
HelpMessage = "The resource group name. The default one will be used if not specified.")]
1919
[ResourceGroupCompleter()]
2020
[ValidateNotNullOrEmpty]
21-
public string ResourceGroupName { get; set; }
21+
public override string ResourceGroupName { get; set; }
2222

2323
[Parameter(Position = 1,
2424
Mandatory = true,
2525
ParameterSetName = ResourceGroupParameterSet,
26-
HelpMessage = "SignalR service name.")]
26+
HelpMessage = "The SignalR service name.")]
2727
[ValidateNotNullOrEmpty]
2828
public string Name { get; set; }
2929

@@ -47,25 +47,20 @@ public override void ExecuteCmdlet()
4747

4848
RunCmdlet(() =>
4949
{
50-
ResourceIdentifier resourceId = null;
5150
switch (ParameterSetName)
5251
{
5352
case ResourceGroupParameterSet:
53+
ResolveResourceGroupName();
5454
break;
5555
case ResourceIdParameterSet:
56-
resourceId = new ResourceIdentifier(ResourceId);
56+
this.LoadFromResourceId();
5757
break;
5858
case InputObjectParameterSet:
59-
resourceId = new ResourceIdentifier(InputObject.Id);
59+
this.LoadFromInputObject();
6060
break;
6161
default:
6262
throw new ArgumentException(Resources.ParameterSetError);
6363
}
64-
if (resourceId != null)
65-
{
66-
ResourceGroupName = resourceId.ResourceGroupName;
67-
Name = resourceId.ResourceName;
68-
}
6964

7065
var keys = Client.Signalr.ListKeys(ResourceGroupName, Name);
7166
WriteObject(new PSSignalRKeys(Name, keys));
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
using Microsoft.Azure.Commands.SignalR.Models;
2+
using Microsoft.Azure.Management.Internal.Resources.Utilities.Models;
3+
using System;
4+
using System.Collections.Generic;
5+
using System.Linq;
6+
using System.Text;
7+
using System.Threading.Tasks;
8+
9+
namespace Microsoft.Azure.Commands.SignalR
10+
{
11+
public interface IWithInputObject : IWithResourceGroupAndName
12+
{
13+
PSSignalRResource InputObject { get; }
14+
}
15+
16+
public static class IWithInputObjectExtensions
17+
{
18+
public static void LoadFromInputObject(this IWithInputObject cmdlet)
19+
{
20+
var resourceId = new ResourceIdentifier(cmdlet.InputObject.Id);
21+
cmdlet.ResourceGroupName = resourceId.ResourceGroupName;
22+
cmdlet.Name = resourceId.ResourceName;
23+
}
24+
}
25+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
using System.Threading.Tasks;
6+
7+
namespace Microsoft.Azure.Commands.SignalR
8+
{
9+
public interface IWithResourceGroupAndName
10+
{
11+
string ResourceGroupName { get; set; }
12+
string Name { get; set; }
13+
}
14+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
using Microsoft.Azure.Management.Internal.Resources.Utilities.Models;
2+
using System;
3+
using System.Collections.Generic;
4+
using System.Linq;
5+
using System.Text;
6+
using System.Threading.Tasks;
7+
8+
namespace Microsoft.Azure.Commands.SignalR
9+
{
10+
public interface IWithResourceId : IWithResourceGroupAndName
11+
{
12+
string ResourceId { get; }
13+
}
14+
15+
public static class IWithResourceIdExtensions
16+
{
17+
public static void LoadFromResourceId(this IWithResourceId cmdlet)
18+
{
19+
var resourceId = new ResourceIdentifier(cmdlet.ResourceId);
20+
cmdlet.ResourceGroupName = resourceId.ResourceGroupName;
21+
cmdlet.Name = resourceId.ResourceName;
22+
}
23+
}
24+
}

src/ResourceManager/SignalR/Commands.SignalR/Cmdlets/NewAzureRmSignalR.cs

Lines changed: 27 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -27,55 +27,48 @@
2727

2828
namespace Microsoft.Azure.Commands.SignalR
2929
{
30-
[Cmdlet(VerbsCommon.New, "AzureRmSignalR", SupportsShouldProcess = true)]
30+
[Cmdlet(VerbsCommon.New, SignalRNoun, SupportsShouldProcess = true)]
3131
[OutputType(typeof(PSSignalRResource))]
32-
public sealed class NewAzureRmSignalR : AzureRMCmdlet
32+
public sealed class NewAzureRmSignalR : SignalRCmdletBase
3333
{
34-
/// <summary>
35-
/// TODO: smart command with default resource group name
36-
/// </summary>
34+
private const string DefaultSku = "Basic_DS2";
35+
3736
[Parameter(
3837
Mandatory = false,
39-
Position = 0)]
38+
Position = 0,
39+
HelpMessage = "The resource group name. The default one will be used if not specified.")]
4040
[ValidateNotNullOrEmpty()]
41-
public string ResourceGroupName { get; set; }
41+
public override string ResourceGroupName { get; set; }
4242

4343
[Parameter(
4444
Mandatory = true,
45-
Position = 1)]
45+
Position = 1,
46+
HelpMessage = "The SignalR service name.")]
4647
[ValidateNotNullOrEmpty()]
4748
public string Name { get; set; }
4849

49-
/// <summary>
50-
/// TODO: smart command with default location based on ResourceGroupName
51-
/// </summary>
5250
[Parameter(
5351
Mandatory = false,
54-
Position = 2)]
55-
[LocationCompleter("Microsoft.SignalR/signalRs")]
52+
Position = 2,
53+
HelpMessage = "The SignalR service location. The resource group location will be used if not specified.")]
54+
[LocationCompleter("Microsoft.SignalR/SignalR")]
5655
[ValidateNotNullOrEmpty()]
5756
public string Location { get; set; }
5857

59-
/// <summary>
60-
/// TODO:
61-
/// - Assign default value.
62-
/// - validation set or tab completion
63-
/// </summary>
64-
[Parameter(Mandatory = false)]
65-
public string Sku { get; set; }
66-
67-
/// <summary>
68-
/// TODO:
69-
/// - Default host name prefix.
70-
/// - alias `DomainNameLabel`
71-
/// </summary>
72-
[Parameter(Mandatory = false)]
73-
public string HostNamePrefix { get; set; }
74-
75-
[Parameter(Mandatory = false)]
58+
[Parameter(
59+
Mandatory = false,
60+
HelpMessage = "The SignalR service SKU.")]
61+
[PSArgumentCompleter("Basic_DS2")]
62+
public string Sku { get; set; } = DefaultSku;
63+
64+
[Parameter(
65+
Mandatory = false,
66+
HelpMessage = "The tags for the SignalR service.")]
7667
public IDictionary<string, string> Tag { get; set; }
7768

78-
[Parameter(Mandatory = false)]
69+
[Parameter(
70+
Mandatory = false,
71+
HelpMessage = "Run the cmdlet in background job.")]
7972
public SwitchParameter AsJob { get; set; }
8073

8174
public override void ExecuteCmdlet()
@@ -106,6 +99,7 @@ public Parameters(NewAzureRmSignalR cmdlet)
10699
public async Task<ResourceConfig<SignalRResource>> CreateConfigAsync()
107100
{
108101
_cmdlet.ResourceGroupName = _cmdlet.ResourceGroupName ?? _cmdlet.Name;
102+
_cmdlet.ResolveResourceGroupName();
109103

110104
var resourceGroup = ResourceGroupStrategy.CreateResourceGroupConfig(
111105
_cmdlet.ResourceGroupName);
@@ -115,8 +109,8 @@ public async Task<ResourceConfig<SignalRResource>> CreateConfigAsync()
115109
name: _cmdlet.Name,
116110
createModel: engine => new SignalRResource(
117111
tags: _cmdlet.Tag,
118-
signalrsku: _cmdlet.Sku == null ? null : new ResourceSku(name: _cmdlet.Sku),
119-
hostNamePrefix: _cmdlet.HostNamePrefix));
112+
signalrsku: new ResourceSku(_cmdlet.Sku, capacity: 1), // we only allow capacity 1 in public preview, this may be a parameter in future.
113+
hostNamePrefix: _cmdlet.Name)); // hostNamePrefix is just a placeholder and ignored in the resource provider.
120114
}
121115
}
122116

src/ResourceManager/SignalR/Commands.SignalR/Cmdlets/NewAzureRmSignalRKey.cs

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -7,24 +7,24 @@
77
using System;
88
using System.Management.Automation;
99

10-
namespace Microsoft.Azure.Commands.SignalR.Cmdlets
10+
namespace Microsoft.Azure.Commands.SignalR
1111
{
1212
[Cmdlet(VerbsCommon.New, SignalRKeyNoun, SupportsShouldProcess = true, DefaultParameterSetName = ResourceGroupParameterSet)]
13-
[OutputType(typeof(PSSignalRKeys))]
14-
public class NewAzureRmSignalRKey : SignalRCmdletBase
13+
[OutputType(typeof(bool))]
14+
public class NewAzureRmSignalRKey : SignalRCmdletBase, IWithInputObject, IWithResourceId
1515
{
1616
[Parameter(Position = 0,
17-
Mandatory = true,
17+
Mandatory = false,
1818
ParameterSetName = ResourceGroupParameterSet,
19-
HelpMessage = "Resource group name.")]
19+
HelpMessage = "The resource group name. The default one will be used if not specified.")]
2020
[ResourceGroupCompleter()]
2121
[ValidateNotNullOrEmpty]
22-
public string ResourceGroupName { get; set; }
22+
public override string ResourceGroupName { get; set; }
2323

2424
[Parameter(Position = 1,
2525
Mandatory = true,
2626
ParameterSetName = ResourceGroupParameterSet,
27-
HelpMessage = "SignalR service name.")]
27+
HelpMessage = "The SignalR service name.")]
2828
[ValidateNotNullOrEmpty]
2929
public string Name { get; set; }
3030

@@ -47,36 +47,38 @@ public class NewAzureRmSignalRKey : SignalRCmdletBase
4747
[ValidateSet("Primary", "Secondary", IgnoreCase = true)]
4848
public string KeyType { get; set; }
4949

50+
[Parameter(Mandatory = false)]
51+
public SwitchParameter PassThru { get; set; }
52+
5053
public override void ExecuteCmdlet()
5154
{
5255
base.ExecuteCmdlet();
5356

5457
RunCmdlet(() =>
5558
{
56-
ResourceIdentifier resourceId = null;
5759
switch (ParameterSetName)
5860
{
5961
case ResourceGroupParameterSet:
62+
ResolveResourceGroupName();
6063
break;
6164
case ResourceIdParameterSet:
62-
resourceId = new ResourceIdentifier(ResourceId);
65+
this.LoadFromResourceId();
6366
break;
6467
case InputObjectParameterSet:
65-
resourceId = new ResourceIdentifier(InputObject.Id);
68+
this.LoadFromInputObject();
6669
break;
6770
default:
6871
throw new ArgumentException(Resources.ParameterSetError);
6972
}
70-
if (resourceId != null)
71-
{
72-
ResourceGroupName = resourceId.ResourceGroupName;
73-
Name = resourceId.ResourceName;
74-
}
7573

7674
if (ShouldProcess($"{KeyType} key for {ResourceGroupName}/{Name}", "regenerate"))
7775
{
78-
var keys = Client.Signalr.RegenerateKey(ResourceGroupName, Name, new RegenerateKeyParameters(KeyType));
79-
WriteObject(new PSSignalRKeys(Name, keys));
76+
Client.Signalr.RegenerateKey(ResourceGroupName, Name, new RegenerateKeyParameters(KeyType));
77+
78+
if (PassThru)
79+
{
80+
WriteObject(true);
81+
}
8082
}
8183
});
8284
}

0 commit comments

Comments
 (0)