From c6b0f0212fd229b9f29d86de33b2b734ac590b69 Mon Sep 17 00:00:00 2001 From: Sergey Shandar Date: Mon, 27 Nov 2017 15:12:35 -0800 Subject: [PATCH] NestedResource bug fix. --- .../Commands.Common.Strategies/IState.cs | 2 +- .../Commands.Common.Strategies/State.cs | 2 +- .../StateExtensions.cs | 26 ++++++++++++++++++- .../Commands.Common.Strategies/TargetState.cs | 2 +- .../Operation/NewAzureVMCommand.cs | 17 +++++++----- 5 files changed, 39 insertions(+), 10 deletions(-) diff --git a/src/ResourceManager/Common/Commands.Common.Strategies/IState.cs b/src/ResourceManager/Common/Commands.Common.Strategies/IState.cs index 8a9c69467879..f8d6efd3f57a 100644 --- a/src/ResourceManager/Common/Commands.Common.Strategies/IState.cs +++ b/src/ResourceManager/Common/Commands.Common.Strategies/IState.cs @@ -8,6 +8,6 @@ public interface IState TModel Get(ResourceConfig config) where TModel : class; - bool Contains(IEntityConfig config); + bool Contains(IResourceConfig config); } } diff --git a/src/ResourceManager/Common/Commands.Common.Strategies/State.cs b/src/ResourceManager/Common/Commands.Common.Strategies/State.cs index de58a5704d27..6a8bbab99655 100644 --- a/src/ResourceManager/Common/Commands.Common.Strategies/State.cs +++ b/src/ResourceManager/Common/Commands.Common.Strategies/State.cs @@ -16,7 +16,7 @@ public TModel GetOrAdd(ResourceConfig config, Func f) where TModel : class => _Map.GetOrAddWithCast(config.DefaultIdStr(), f); - public bool Contains(IEntityConfig config) + public bool Contains(IResourceConfig config) => _Map.ContainsKey(config.DefaultIdStr()); } } diff --git a/src/ResourceManager/Common/Commands.Common.Strategies/StateExtensions.cs b/src/ResourceManager/Common/Commands.Common.Strategies/StateExtensions.cs index efb54ec3178f..0bb1d277fa2c 100644 --- a/src/ResourceManager/Common/Commands.Common.Strategies/StateExtensions.cs +++ b/src/ResourceManager/Common/Commands.Common.Strategies/StateExtensions.cs @@ -1,4 +1,6 @@ -namespace Microsoft.Azure.Commands.Common.Strategies +using System; + +namespace Microsoft.Azure.Commands.Common.Strategies { public static class StateExtensions { @@ -28,6 +30,15 @@ public static TModel GetDispatch( where TModel : class => config.Accept(new GetVisitor(), state); + public static bool Contains( + this IState state, NestedResourceConfig config) + where TModel : class + where TParentModel : class + => state.Get(config) != null; + + public static bool ContainsDispatch(this IState state, IEntityConfig config) + => config.Accept(new ContainsDispatchVisitor(), state); + sealed class GetVisitor : IEntityConfigVisitor where TModel : class { @@ -39,5 +50,18 @@ public TModel Visit( where TParentModel : class => state.Get(config); } + + sealed class ContainsDispatchVisitor : IEntityConfigVisitor + { + public bool Visit(ResourceConfig config, IState context) + where TModel : class + => context.Contains(config); + + public bool Visit( + NestedResourceConfig config, IState context) + where TModel : class + where TParentModel : class + => context.Contains(config); + } } } diff --git a/src/ResourceManager/Common/Commands.Common.Strategies/TargetState.cs b/src/ResourceManager/Common/Commands.Common.Strategies/TargetState.cs index 7983fd16f198..be8874209b84 100644 --- a/src/ResourceManager/Common/Commands.Common.Strategies/TargetState.cs +++ b/src/ResourceManager/Common/Commands.Common.Strategies/TargetState.cs @@ -33,7 +33,7 @@ public Context(IState current, string subscription, string location) public void AddIfRequired(IEntityConfig config) { - if (!Current.Contains(config)) + if (!Current.ContainsDispatch(config)) { config.Accept(new AddVisitor(), this); } diff --git a/src/ResourceManager/Compute/Commands.Compute/VirtualMachine/Operation/NewAzureVMCommand.cs b/src/ResourceManager/Compute/Commands.Compute/VirtualMachine/Operation/NewAzureVMCommand.cs index 15848971687b..a9cb0c7885b1 100644 --- a/src/ResourceManager/Compute/Commands.Compute/VirtualMachine/Operation/NewAzureVMCommand.cs +++ b/src/ResourceManager/Compute/Commands.Compute/VirtualMachine/Operation/NewAzureVMCommand.cs @@ -223,7 +223,6 @@ public void StrategyExecuteCmdlet() adminPassword: new NetworkCredential(string.Empty, Credential.Password).Password, image: image.Image); - // var client = new Client(DefaultProfile.DefaultContext); var current = virtualMachine .GetStateAsync(client, new CancellationToken()) @@ -240,10 +239,15 @@ public void StrategyExecuteCmdlet() } var target = virtualMachine.GetTargetState(current, client.SubscriptionId, Location); - var result = virtualMachine - .UpdateStateAsync(client, target, new CancellationToken()) - .GetAwaiter() - .GetResult(); + + if (ShouldProcess(Name, VerbsCommon.New)) + { + var result = virtualMachine + .UpdateStateAsync(client, target, new CancellationToken()) + .GetAwaiter() + .GetResult(); + WriteObject(result); + } } public void DefaultExecuteCmdlet() @@ -310,7 +314,8 @@ public void DefaultExecuteCmdlet() AutoUpgradeMinorVersion = true, }; - typeof(CM.Resource).GetRuntimeProperty("Name").SetValue(extensionParameters, VirtualMachineBGInfoExtensionContext.ExtensionDefaultName); + typeof(CM.Resource).GetRuntimeProperty("Name") + .SetValue(extensionParameters, VirtualMachineBGInfoExtensionContext.ExtensionDefaultName); typeof(CM.Resource).GetRuntimeProperty("Type") .SetValue(extensionParameters, VirtualMachineExtensionType);