diff --git a/cmd/create_env.go b/cmd/create_env.go index 9235c86d4..f9eeefb66 100644 --- a/cmd/create_env.go +++ b/cmd/create_env.go @@ -22,5 +22,5 @@ func (c *CreateEnvCmd) Run(stage boshui.Stage, opts CreateEnvOpts) error { depPreparer := c.envProvider( opts.Args.Manifest.Path, opts.StatePath, opts.VarFlags.AsVariables(), opts.OpsFlags.AsOp()) - return depPreparer.PrepareDeployment(stage) + return depPreparer.PrepareDeployment(stage, opts.Recreate) } diff --git a/cmd/create_env_test.go b/cmd/create_env_test.go index fb029cb87..6b11233cc 100644 --- a/cmd/create_env_test.go +++ b/cmd/create_env_test.go @@ -697,6 +697,15 @@ var _ = Describe("CreateEnvCmd", func() { Expect(err).NotTo(HaveOccurred()) Expect(stdOut).To(gbytes.Say("No deployment, stemcell or release changes. Skipping deploy.")) }) + + It("deploys if recreate flag is specified", func() { + expectDeploy.Times(1) + + defaultCreateEnvOpts.Recreate = true + + err := command.Run(fakeStage, defaultCreateEnvOpts) + Expect(err).NotTo(HaveOccurred()) + }) }) Context("when parsing the cpi deployment manifest fails", func() { @@ -893,6 +902,15 @@ var _ = Describe("CreateEnvCmd", func() { Expect(err).NotTo(HaveOccurred()) Expect(stdOut).To(gbytes.Say("No deployment, stemcell or release changes. Skipping deploy.")) }) + + It("deploys if recreate flag is specified", func() { + expectDeploy.Times(1) + + defaultCreateEnvOpts.Recreate = true + + err := command.Run(fakeStage, defaultCreateEnvOpts) + Expect(err).NotTo(HaveOccurred()) + }) }) }) diff --git a/cmd/deployment_preparer.go b/cmd/deployment_preparer.go index f4fc6bfe2..29bd59218 100644 --- a/cmd/deployment_preparer.go +++ b/cmd/deployment_preparer.go @@ -101,7 +101,7 @@ type DeploymentPreparer struct { targetProvider biinstall.TargetProvider } -func (c *DeploymentPreparer) PrepareDeployment(stage biui.Stage) (err error) { +func (c *DeploymentPreparer) PrepareDeployment(stage biui.Stage, recreate bool) (err error) { c.ui.BeginLinef("Deployment state: '%s'\n", c.deploymentStateService.Path()) if !c.deploymentStateService.Exists() { @@ -184,7 +184,7 @@ func (c *DeploymentPreparer) PrepareDeployment(stage biui.Stage) (err error) { return bosherr.WrapError(err, "Checking if deployment has changed") } - if isDeployed { + if isDeployed && !recreate { c.ui.BeginLinef("No deployment, stemcell or release changes. Skipping deploy.\n") return nil } diff --git a/cmd/opts.go b/cmd/opts.go index d54cbafb9..56a6ce817 100644 --- a/cmd/opts.go +++ b/cmd/opts.go @@ -169,6 +169,7 @@ type CreateEnvOpts struct { VarFlags OpsFlags StatePath string `long:"state" value-name:"PATH" description:"State file path"` + Recreate bool `long:"recreate" description:"Recreate VM in deployment"` cmd } diff --git a/cmd/opts_test.go b/cmd/opts_test.go index 08f22a703..70a3fb0a1 100644 --- a/cmd/opts_test.go +++ b/cmd/opts_test.go @@ -750,6 +750,12 @@ var _ = Describe("Opts", func() { `long:"state" value-name:"PATH" description:"State file path"`, )) }) + + It("has --recreate", func() { + Expect(getStructTagForName("Recreate", opts)).To(Equal( + `long:"recreate" description:"Recreate VM in deployment"`, + )) + }) }) Describe("CreateEnvArgs", func() {