Exemplo n.º 1
0
        public override void ExecuteCmdlet()
        {
            if (RollbackToLastDeployment && !string.IsNullOrEmpty(RollBackDeploymentName))
            {
                WriteExceptionError(new ArgumentException(ProjectResources.InvalidRollbackParameters));
            }

            PSDeploymentCmdletParameters parameters = new PSDeploymentCmdletParameters()
            {
                DeploymentName          = DeploymentName ?? Guid.NewGuid().ToString(),
                ResourceGroupName       = ResourceGroupName,
                TemplateFile            = TemplateUri ?? this.ResolvePath(TemplateFile),
                TemplateObject          = TemplateObject,
                TemplateParameterObject = GetTemplateParameterObject(TemplateParameterObject),
                ParameterUri            = TemplateParameterUri,
                OnErrorDeployment       = RollbackToLastDeployment || !string.IsNullOrEmpty(RollBackDeploymentName)
                    ? new OnErrorDeployment
                {
                    Type           = RollbackToLastDeployment ? OnErrorDeploymentType.LastSuccessful : OnErrorDeploymentType.SpecificDeployment,
                    DeploymentName = RollbackToLastDeployment ? null : RollBackDeploymentName
                }
                    : null
            };

            WriteObject(ResourceManagerSdkClient.ValidateDeployment(parameters, Mode));
        }
        public override void ExecuteCmdlet()
        {
            this.ConfirmAction(
                this.Force,
                string.Format(ProjectResources.ConfirmOnCompleteDeploymentMode, this.ResourceGroupName),
                ProjectResources.CreateDeployment,
                ResourceGroupName,
                () =>
            {
                var parameters = new PSDeploymentCmdletParameters()
                {
                    ResourceGroupName       = ResourceGroupName,
                    DeploymentName          = Name,
                    DeploymentMode          = Mode,
                    TemplateFile            = TemplateUri ?? this.TryResolvePath(TemplateFile),
                    TemplateParameterObject = GetTemplateParameterObject(TemplateParameterObject),
                    ParameterUri            = TemplateParameterUri,
                    DeploymentDebugLogLevel = GetDeploymentDebugLogLevel(DeploymentDebugLogLevel)
                };

                if (!string.IsNullOrEmpty(parameters.DeploymentDebugLogLevel))
                {
                    WriteWarning(ProjectResources.WarnOnDeploymentDebugSetting);
                }
                WriteObject(ResourceManagerSdkClient.ExecuteDeployment(parameters));
            },
                () => this.Mode == DeploymentMode.Complete);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Creates new deployment
        /// </summary>
        /// <param name="parameters">The create deployment parameters</param>
        public virtual PSResourceGroupDeployment ExecuteDeployment(PSDeploymentCmdletParameters parameters)
        {
            parameters.DeploymentName = GenerateDeploymentName(parameters);
            Deployment deployment = CreateBasicDeployment(parameters, parameters.DeploymentMode, parameters.DeploymentDebugLogLevel);

            TemplateValidationInfo validationInfo = CheckBasicDeploymentErrors(parameters.ResourceGroupName, parameters.DeploymentName, deployment);

            if (validationInfo.Errors.Count != 0)
            {
                foreach (var error in validationInfo.Errors)
                {
                    WriteError(string.Format(ErrorFormat, error.Code, error.Message));
                    if (error.Details != null && error.Details.Count > 0)
                    {
                        foreach (var innerError in error.Details)
                        {
                            DisplayInnerDetailErrorMessage(innerError);
                        }
                    }
                }
                throw new InvalidOperationException(ProjectResources.FailedDeploymentValidation);
            }
            else
            {
                WriteVerbose(ProjectResources.TemplateValid);
            }

            this.BeginDeployment(parameters.ResourceGroupName, parameters.DeploymentName, deployment);

            WriteVerbose(string.Format(ProjectResources.CreatedDeployment, parameters.DeploymentName));
            DeploymentExtended result = ProvisionDeploymentStatus(parameters.ResourceGroupName, parameters.DeploymentName, deployment);

            return(result.ToPSResourceGroupDeployment(parameters.ResourceGroupName));
        }
Exemplo n.º 4
0
        private void ExecuteDeployment()
        {
            if (RollbackToLastDeployment && !string.IsNullOrEmpty(RollBackDeploymentName))
            {
                WriteExceptionError(new ArgumentException(ProjectResources.InvalidRollbackParameters));
            }

            var parameters = new PSDeploymentCmdletParameters()
            {
                ScopeType               = DeploymentScopeType.ResourceGroup,
                ResourceGroupName       = ResourceGroupName,
                DeploymentName          = Name,
                DeploymentMode          = Mode,
                TemplateFile            = TemplateUri ?? this.TryResolvePath(TemplateFile),
                TemplateObject          = TemplateObject,
                TemplateParameterObject = GetTemplateParameterObject(TemplateParameterObject),
                ParameterUri            = TemplateParameterUri,
                DeploymentDebugLogLevel = GetDeploymentDebugLogLevel(DeploymentDebugLogLevel),
                Tags = TagsHelper.ConvertToTagsDictionary(Tag),
                OnErrorDeployment = RollbackToLastDeployment || !string.IsNullOrEmpty(RollBackDeploymentName)
                    ? new OnErrorDeployment
                {
                    Type           = RollbackToLastDeployment ? OnErrorDeploymentType.LastSuccessful : OnErrorDeploymentType.SpecificDeployment,
                    DeploymentName = RollbackToLastDeployment ? null : RollBackDeploymentName
                }
                    : null
            };

            if (!string.IsNullOrEmpty(parameters.DeploymentDebugLogLevel))
            {
                WriteWarning(ProjectResources.WarnOnDeploymentDebugSetting);
            }
            WriteObject(ResourceManagerSdkClient.ExecuteResourceGroupDeployment(parameters));
        }
Exemplo n.º 5
0
        protected override void OnProcessRecord()
        {
            string whatIfMessage  = this.ShouldExecuteWhatIf() ? this.ExecuteWhatIf() : null;
            string warningMessage = $"{Environment.NewLine}{ProjectResources.ConfirmDeploymentMessage}";
            string captionMessage = $"{(char)27}[1A{Color.Reset}{whatIfMessage}"; // {(char)27}[1A for cursor up.

            if (ShouldProcess(whatIfMessage, warningMessage, captionMessage))
            {
                var parameters = new PSDeploymentCmdletParameters()
                {
                    ScopeType               = DeploymentScopeType.Subscription,
                    Location                = Location,
                    DeploymentName          = Name,
                    DeploymentMode          = DeploymentMode.Incremental,
                    TemplateFile            = TemplateUri ?? this.TryResolvePath(TemplateFile),
                    TemplateObject          = TemplateObject,
                    TemplateParameterObject = GetTemplateParameterObject(TemplateParameterObject),
                    ParameterUri            = TemplateParameterUri,
                    DeploymentDebugLogLevel = GetDeploymentDebugLogLevel(DeploymentDebugLogLevel),
                    Tags = TagsHelper.ConvertToTagsDictionary(Tag)
                };

                if (!string.IsNullOrEmpty(parameters.DeploymentDebugLogLevel))
                {
                    WriteWarning(ProjectResources.WarnOnDeploymentDebugSetting);
                }
                WriteObject(ResourceManagerSdkClient.ExecuteDeployment(parameters));
            }
        }
Exemplo n.º 6
0
        private Deployment CreateBasicDeployment(PSDeploymentCmdletParameters parameters, DeploymentMode deploymentMode, string debugSetting)
        {
            Deployment deployment = new Deployment
            {
                Properties = new DeploymentProperties
                {
                    Mode = deploymentMode
                }
            };

            if (!string.IsNullOrEmpty(debugSetting))
            {
                deployment.Properties.DebugSetting = new DebugSetting
                {
                    DetailLevel = debugSetting
                };
            }

            if (Uri.IsWellFormedUriString(parameters.TemplateFile, UriKind.Absolute))
            {
                deployment.Properties.TemplateLink = new TemplateLink
                {
                    Uri = parameters.TemplateFile
                };
            }
            else
            {
                if (!string.IsNullOrEmpty(parameters.TemplateFile))
                {
                    deployment.Properties.Template = JObject.Parse(FileUtilities.DataStore.ReadFileAsText(parameters.TemplateFile));
                }
                else
                {
                    deployment.Properties.Template = JObject.Parse(JsonConvert.SerializeObject(parameters.TemplateObject));
                }
            }

            if (Uri.IsWellFormedUriString(parameters.ParameterUri, UriKind.Absolute))
            {
                deployment.Properties.ParametersLink = new ParametersLink
                {
                    Uri = parameters.ParameterUri
                };
            }
            else
            {
                string templateParams = GetDeploymentParameters(parameters.TemplateParameterObject);
                deployment.Properties.Parameters = string.IsNullOrEmpty(templateParams) ? null : JObject.Parse(templateParams);
            }

            deployment.Location = parameters.Location;
            deployment.Properties.OnErrorDeployment = parameters.OnErrorDeployment;

            return(deployment);
        }
Exemplo n.º 7
0
        /// <summary>
        /// Validates a given deployment.
        /// </summary>
        /// <param name="parameters">The deployment create options</param>
        /// <param name="deploymentMode">The deployment mode</param>
        /// <returns>The validation errors if there's any, or empty list otherwise.</returns>
        public virtual List <PSResourceManagerError> ValidateDeployment(PSDeploymentCmdletParameters parameters, DeploymentMode deploymentMode)
        {
            Deployment             deployment     = CreateBasicDeployment(parameters, deploymentMode, null);
            TemplateValidationInfo validationInfo = CheckBasicDeploymentErrors(parameters.ResourceGroupName, Guid.NewGuid().ToString(), deployment);

            if (validationInfo.Errors.Count == 0)
            {
                WriteVerbose(ProjectResources.TemplateValid);
            }
            return(validationInfo.Errors.Select(e => e.ToPSResourceManagerError()).ToList());
        }
Exemplo n.º 8
0
        public override void ExecuteCmdlet()
        {
            var parameters = new PSDeploymentCmdletParameters()
            {
                Location                = Location,
                TemplateFile            = TemplateUri ?? this.TryResolvePath(TemplateFile),
                TemplateParameterObject = GetTemplateParameterObject(TemplateParameterObject),
                ParameterUri            = TemplateParameterUri
            };

            WriteObject(ResourceManagerSdkClient.ValidateDeployment(parameters, DeploymentMode.Incremental));
        }
        public override void ExecuteCmdlet()
        {
            PSDeploymentCmdletParameters parameters = new PSDeploymentCmdletParameters()
            {
                ResourceGroupName       = ResourceGroupName,
                TemplateFile            = TemplateUri ?? this.TryResolvePath(TemplateFile),
                TemplateParameterObject = GetTemplateParameterObject(TemplateParameterObject),
                ParameterUri            = TemplateParameterUri
            };

            WriteObject(ResourceManagerSdkClient.ValidateDeployment(parameters, Mode));
        }
Exemplo n.º 10
0
        public override void ExecuteCmdlet()
        {
            var parameters = new PSDeploymentCmdletParameters()
            {
                ScopeType               = DeploymentScopeType.Tenant,
                Location                = this.Location,
                TemplateFile            = this.TemplateUri ?? this.TryResolvePath(this.TemplateFile),
                TemplateObject          = this.TemplateObject,
                TemplateParameterObject = this.GetTemplateParameterObject(this.TemplateParameterObject),
                ParameterUri            = this.TemplateParameterUri
            };

            WriteObject(ResourceManagerSdkClient.ValidateDeployment(parameters));
        }
Exemplo n.º 11
0
        protected override void OnProcessRecord()
        {
            var parameters = new PSDeploymentCmdletParameters()
            {
                ScopeType               = DeploymentScopeType.Subscription,
                Location                = Location,
                TemplateFile            = TemplateUri ?? this.TryResolvePath(TemplateFile),
                TemplateObject          = TemplateObject,
                TemplateParameterObject = GetTemplateParameterObject(TemplateParameterObject),
                ParameterUri            = TemplateParameterUri
            };

            WriteObject(ResourceManagerSdkClient.ValidateDeployment(parameters));
        }
Exemplo n.º 12
0
 private string GenerateDeploymentName(PSDeploymentCmdletParameters parameters)
 {
     if (!string.IsNullOrEmpty(parameters.DeploymentName))
     {
         return(parameters.DeploymentName);
     }
     else if (!string.IsNullOrEmpty(parameters.TemplateFile))
     {
         return(Path.GetFileNameWithoutExtension(parameters.TemplateFile));
     }
     else
     {
         return(Guid.NewGuid().ToString());
     }
 }
        protected override void OnProcessRecord()
        {
            var parameters = new PSDeploymentCmdletParameters()
            {
                ScopeType               = DeploymentScopeType.ManagementGroup,
                ManagementGroupId       = this.ManagementGroupId,
                Location                = this.Location,
                TemplateFile            = this.TemplateUri ?? this.TryResolvePath(this.TemplateFile),
                TemplateObject          = this.TemplateObject,
                TemplateParameterObject = this.GetTemplateParameterObject(this.TemplateParameterObject),
                ParameterUri            = this.TemplateParameterUri
            };

            WriteObject(ResourceManagerSdkClient.ValidateDeployment(parameters));
        }
        public override void ExecuteCmdlet()
        {
            var parameters = new PSDeploymentCmdletParameters()
            {
                Location                = Location,
                DeploymentName          = Name,
                DeploymentMode          = DeploymentMode.Incremental,
                TemplateFile            = TemplateUri ?? this.TryResolvePath(TemplateFile),
                TemplateParameterObject = GetTemplateParameterObject(TemplateParameterObject),
                ParameterUri            = TemplateParameterUri,
                DeploymentDebugLogLevel = GetDeploymentDebugLogLevel(DeploymentDebugLogLevel)
            };

            if (!string.IsNullOrEmpty(parameters.DeploymentDebugLogLevel))
            {
                WriteWarning(ProjectResources.WarnOnDeploymentDebugSetting);
            }
            WriteObject(ResourceManagerSdkClient.ExecuteDeploymentAtSubscriptionScope(parameters));
        }
Exemplo n.º 15
0
        public override void ExecuteCmdlet()
        {
            this.ConfirmAction(
                this.Force,
                string.Format(ProjectResources.ConfirmOnCompleteDeploymentMode, this.ResourceGroupName),
                ProjectResources.CreateDeployment,
                ResourceGroupName,
                () =>
            {
                if (RollbackToLastDeployment && !string.IsNullOrEmpty(RollBackDeploymentName))
                {
                    WriteExceptionError(new ArgumentException(ProjectResources.InvalidRollbackParameters));
                }

                var parameters = new PSDeploymentCmdletParameters()
                {
                    ScopeType               = DeploymentScopeType.ResourceGroup,
                    ResourceGroupName       = ResourceGroupName,
                    DeploymentName          = Name,
                    DeploymentMode          = Mode,
                    TemplateFile            = TemplateUri ?? this.TryResolvePath(TemplateFile),
                    TemplateObject          = TemplateObject,
                    TemplateParameterObject = GetTemplateParameterObject(TemplateParameterObject),
                    ParameterUri            = TemplateParameterUri,
                    DeploymentDebugLogLevel = GetDeploymentDebugLogLevel(DeploymentDebugLogLevel),
                    OnErrorDeployment       = RollbackToLastDeployment || !string.IsNullOrEmpty(RollBackDeploymentName)
                            ? new OnErrorDeployment
                    {
                        Type           = RollbackToLastDeployment ? OnErrorDeploymentType.LastSuccessful : OnErrorDeploymentType.SpecificDeployment,
                        DeploymentName = RollbackToLastDeployment ? null : RollBackDeploymentName
                    }
                            : null
                };

                if (!string.IsNullOrEmpty(parameters.DeploymentDebugLogLevel))
                {
                    WriteWarning(ProjectResources.WarnOnDeploymentDebugSetting);
                }
                WriteObject(ResourceManagerSdkClient.ExecuteResourceGroupDeployment(parameters));
            },
                () => this.Mode == DeploymentMode.Complete);
        }
Exemplo n.º 16
0
        public void ValidatesPSResourceGroupDeploymentWithUserTemplate()
        {
            PSDeploymentCmdletParameters expectedParameters = new PSDeploymentCmdletParameters()
            {
                TemplateFile = templateFile
            };
            PSDeploymentCmdletParameters  actualParameters = new PSDeploymentCmdletParameters();
            List <PSResourceManagerError> expected         = new List <PSResourceManagerError>()
            {
                new PSResourceManagerError()
                {
                    Code    = "202",
                    Message = "bad input",
                },
                new PSResourceManagerError()
                {
                    Code    = "203",
                    Message = "bad input 2",
                },
                new PSResourceManagerError()
                {
                    Code    = "203",
                    Message = "bad input 3",
                }
            };

            resourcesClientMock.Setup(f => f.ValidateDeployment(
                                          It.IsAny <PSDeploymentCmdletParameters>(), DeploymentMode.Incremental))
            .Returns(expected)
            .Callback((PSDeploymentCmdletParameters p, DeploymentMode m) => { actualParameters = p; m = DeploymentMode.Incremental; });

            cmdlet.ResourceGroupName = resourceGroupName;
            cmdlet.TemplateFile      = expectedParameters.TemplateFile;

            cmdlet.ExecuteCmdlet();

            Assert.Equal(expectedParameters.TemplateFile, actualParameters.TemplateFile);
            Assert.NotNull(actualParameters.TemplateParameterObject);

            commandRuntimeMock.Verify(f => f.WriteObject(expected), Times.Once());
        }
        protected override void OnProcessRecord()
        {
            var parameters = new PSDeploymentCmdletParameters()
            {
                ScopeType               = DeploymentScopeType.Tenant,
                Location                = this.Location,
                DeploymentName          = this.Name,
                DeploymentMode          = DeploymentMode.Incremental,
                TemplateFile            = TemplateUri ?? this.TryResolvePath(TemplateFile),
                TemplateObject          = TemplateObject,
                TemplateParameterObject = GetTemplateParameterObject(TemplateParameterObject),
                ParameterUri            = TemplateParameterUri,
                DeploymentDebugLogLevel = GetDeploymentDebugLogLevel(DeploymentDebugLogLevel)
            };

            if (!string.IsNullOrEmpty(parameters.DeploymentDebugLogLevel))
            {
                WriteWarning(ProjectResources.WarnOnDeploymentDebugSetting);
            }
            WriteObject(ResourceManagerSdkClient.ExecuteDeployment(parameters));
        }
        public void CreatesNewPSResourceGroupDeploymentWithUserTemplate()
        {
            PSDeploymentCmdletParameters expectedParameters = new PSDeploymentCmdletParameters()
            {
                TemplateFile   = templateFile,
                DeploymentName = deploymentName,
            };
            PSDeploymentCmdletParameters actualParameters = new PSDeploymentCmdletParameters();
            PSResourceGroupDeployment    expected         = new PSResourceGroupDeployment()
            {
                Mode           = DeploymentMode.Incremental,
                DeploymentName = deploymentName,
                CorrelationId  = "123",
                Outputs        = new Dictionary <string, DeploymentVariable>()
                {
                    { "Variable1", new DeploymentVariable()
                      {
                          Value = "true", Type = "bool"
                      } },
                    { "Variable2", new DeploymentVariable()
                      {
                          Value = "10", Type = "int"
                      } },
                    { "Variable3", new DeploymentVariable()
                      {
                          Value = "hello world", Type = "string"
                      } }
                },
                Parameters = new Dictionary <string, DeploymentVariable>()
                {
                    { "Parameter1", new DeploymentVariable()
                      {
                          Value = "true", Type = "bool"
                      } },
                    { "Parameter2", new DeploymentVariable()
                      {
                          Value = "10", Type = "int"
                      } },
                    { "Parameter3", new DeploymentVariable()
                      {
                          Value = "hello world", Type = "string"
                      } }
                },
                ProvisioningState = ProvisioningState.Succeeded.ToString(),
                ResourceGroupName = resourceGroupName,
                TemplateLink      = new TemplateLink()
                {
                    ContentVersion = "1.0",
                    Uri            = "http://mytemplate.com"
                },
                Timestamp = new DateTime(2014, 2, 13)
            };

            resourcesClientMock.Setup(f => f.ExecuteDeployment(
                                          It.IsAny <PSDeploymentCmdletParameters>()))
            .Returns(expected)
            .Callback((PSDeploymentCmdletParameters p) => { actualParameters = p; });

            cmdlet.ResourceGroupName = resourceGroupName;
            cmdlet.Name         = expectedParameters.DeploymentName;
            cmdlet.TemplateFile = expectedParameters.TemplateFile;

            cmdlet.ExecuteCmdlet();

            Assert.Equal(expectedParameters.DeploymentName, actualParameters.DeploymentName);
            Assert.Equal(expectedParameters.TemplateFile, actualParameters.TemplateFile);
            Assert.NotNull(actualParameters.TemplateParameterObject);

            commandRuntimeMock.Verify(f => f.WriteObject(expected), Times.Once());
        }
        public void CreatesNewPSResourceGroupDeploymentWithUserTemplateEmptyRollback()
        {
            PSDeploymentCmdletParameters expectedParameters = new PSDeploymentCmdletParameters()
            {
                TemplateFile      = templateFile,
                DeploymentName    = deploymentName,
                Tags              = new Dictionary <string, string>(this.deploymentTags),
                OnErrorDeployment = new OnErrorDeployment
                {
                    Type = OnErrorDeploymentType.LastSuccessful,
                }
            };
            PSDeploymentCmdletParameters actualParameters = new PSDeploymentCmdletParameters();
            PSResourceGroupDeployment    expected         = new PSResourceGroupDeployment()
            {
                Mode           = DeploymentMode.Incremental,
                DeploymentName = deploymentName,
                CorrelationId  = "123",
                Outputs        = new Dictionary <string, DeploymentVariable>()
                {
                    { "Variable1", new DeploymentVariable()
                      {
                          Value = "true", Type = "bool"
                      } },
                    { "Variable2", new DeploymentVariable()
                      {
                          Value = "10", Type = "int"
                      } },
                    { "Variable3", new DeploymentVariable()
                      {
                          Value = "hello world", Type = "string"
                      } }
                },
                Parameters = new Dictionary <string, DeploymentVariable>()
                {
                    { "Parameter1", new DeploymentVariable()
                      {
                          Value = "true", Type = "bool"
                      } },
                    { "Parameter2", new DeploymentVariable()
                      {
                          Value = "10", Type = "int"
                      } },
                    { "Parameter3", new DeploymentVariable()
                      {
                          Value = "hello world", Type = "string"
                      } }
                },
                ProvisioningState = ProvisioningState.Succeeded.ToString(),
                ResourceGroupName = resourceGroupName,
                TemplateLink      = new TemplateLink()
                {
                    ContentVersion = "1.0",
                    Uri            = "http://mytemplate.com"
                },
                Timestamp         = new DateTime(2014, 2, 13),
                OnErrorDeployment = new OnErrorDeploymentExtended
                {
                    Type = OnErrorDeploymentType.LastSuccessful,
                }
            };

            resourcesClientMock.Setup(f => f.ExecuteResourceGroupDeployment(
                                          It.IsAny <PSDeploymentCmdletParameters>()))
            .Returns(expected)
            .Callback((PSDeploymentCmdletParameters p) => { actualParameters = p; });

            cmdlet.ResourceGroupName = resourceGroupName;
            cmdlet.Name                     = expectedParameters.DeploymentName;
            cmdlet.TemplateFile             = expectedParameters.TemplateFile;
            cmdlet.RollbackToLastDeployment = true;
            cmdlet.Tag = new Hashtable(this.deploymentTags);
            cmdlet.ExecuteCmdlet();

            actualParameters.DeploymentName.Should().Equals(expectedParameters.DeploymentName);
            actualParameters.TemplateFile.Should().Equals(expectedParameters.TemplateFile);
            actualParameters.TemplateParameterObject.Should().NotBeNull();
            actualParameters.OnErrorDeployment.Should().NotBeNull();
            actualParameters.OnErrorDeployment.Type.Should().Equals(expectedParameters.OnErrorDeployment.Type);
            actualParameters.OnErrorDeployment.DeploymentName.Should().Equals(expectedParameters.OnErrorDeployment.DeploymentName);
            actualParameters.Tags.Should().NotBeNull();

            var differenceTags = actualParameters.Tags
                                 .Where(entry => expectedParameters.Tags[entry.Key] != entry.Value);

            differenceTags.Should().BeEmpty();

            commandRuntimeMock.Verify(f => f.WriteObject(expected), Times.Once());
        }