-
Notifications
You must be signed in to change notification settings - Fork 214
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix: Ensure azd up -e
deploys resources to the specified environment, ignoring the default environment
#4561
base: main
Are you sure you want to change the base?
Conversation
cli/azd/cmd/up.go
Outdated
stepArgs := append(step.AzdCommand.Args, "-e", envValue) | ||
step.AzdCommand.Args = stepArgs | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Since -e
is a global flag, we should not manually set it like this. It should be already visible to all commands.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@vhvb1989 Thanks for your feedback!
When debugging the azd up -e <environment>
command, we found that the actual executed steps (such as azd package
, azd provision
, and azd deploy
) did not include the -e
flag, which caused these commands to use the default environment instead of the environment specified by the user through -e
. To ensure that these subcommands can correctly use the environment specified by -e
, I manually set it in the code.
If you think there is a better solution, you are welcome to discuss further in the issue #4411 (comment)!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The current solution wouldn't work if the user added the workflow step to reference an azd command not accepting -e
. An immediate solution doesn't come to mind, but will require some additional team discussion.
Switch default environment to the one specified by -e if it exists
795b6f1
to
3d81193
Compare
Azure Dev CLI Install InstructionsInstall scriptsMacOS/Linux
bash:
pwsh:
WindowsPowerShell install
MSI install
Standalone Binary
MSI
Documentationlearn.microsoft.com documentationtitle: Azure Developer CLI reference
|
} | ||
|
||
if env.Name() != defaultEnvironmentName { | ||
if err := m.azdContext.SetProjectState(azdcontext.ProjectState{DefaultEnvironment: env.Name()}); err != nil { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I actually like this approach. The side effect is that running one command with the -e foo
flag makes the foo
environment the default one, which also means that the last environment you use is always now the default environment.
That's probably a breaking change for someone running something like
azd env new foo
azd env ser a 1
azd provision -e bar
azd provision // expecting to use environment foo but bar
will be used instead as the default
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That's probably a breaking change for someone running something like
azd env new foo
azd env ser a 1
azd provision -e bar
azd provision // expecting to use environment foo butbar
will be used instead as the default
@vhvb1989 According to the azd logic, when executing the azd provision -e bar
command,
-
If the
bar
environment does not exist, azd sets it as the default environment, and the default environment isbar
. -
If the
bar
environment already exists and is not the default environment, azd will not switch the default environment, and the default environment isfoo
.
The processing logic in these two cases is inconsistent, which may cause confusion to users.
Therefore, I think we need to adjust the logic of azd to ensure the consistency of its behavior. Regardless of whether the environment specified by the user already exists, as long as the user executes a command with the -e
flag, azd should follow a consistent behavior: either do not change the default environment, or set the specified environment as the default environment in any case.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You are right. Whenever azd creates a new environment, either with azd env new
or from azd provision -e new-env
, that environment is set as the default environment. Create new environment is expected to have this effect.
In all other cases, the default environment should not be changed.
It's definitely somehow confusing and probably azd should ask/confirm before setting a recent created environment as the new default. #4800
Fix issue#4411.
@rajeshkamal5050 for notification.