Previously we embedded EnvCommandBase in all commands
requring an environment, and EnvCommandBase included
everything (SetFlags, and Init). The problem with this
is that it was easy to miss initialisation of the
EnvCommandBase type (this happened a few times), which
leads to bad things happening like sync-tools destroying
environments.
I have inverted the relationship so that we now have
envcmd.EnvironCommand, an interface that extends Command
with a SetEnvName method, and EnvCommandBase, which
implements EnvironCommand. A new method, envcmd.Wrap takes
an EnvironCommand and creates a Command that calls
SetEnvName prior to the wrapped method's Init method. If
the environment name cannot be determined, the wrapping
command will error out early.
Affected files (+354, -440 lines):
A [revision details]
M cmd/cmd.go
M cmd/envcmd/environmentcommand.go
M cmd/envcmd/environmentcommand_test.go
M cmd/juju/addmachine.go
M cmd/juju/addmachine_test.go
M cmd/juju/addrelation.go
M cmd/juju/addrelation_test.go
M cmd/juju/addunit.go
M cmd/juju/addunit_test.go
M cmd/juju/adduser.go
M cmd/juju/adduser_test.go
M cmd/juju/authorizedkeys_add.go
M cmd/juju/authorizedkeys_delete.go
M cmd/juju/authorizedkeys_import.go
M cmd/juju/authorizedkeys_list.go
M cmd/juju/authorizedkeys_test.go
M cmd/juju/bootstrap.go
M cmd/juju/bootstrap_test.go
M cmd/juju/cmd_test.go
M cmd/juju/constraints.go
M cmd/juju/constraints_test.go
M cmd/juju/debuglog.go
M cmd/juju/debuglog_test.go
M cmd/juju/deploy.go
M cmd/juju/deploy_test.go
M cmd/juju/endpoint.go
M cmd/juju/endpoint_test.go
M cmd/juju/ensureavailability.go
M cmd/juju/ensureavailability_test.go
M cmd/juju/environment.go
M cmd/juju/environment_test.go
M cmd/juju/expose.go
M cmd/juju/expose_test.go
M cmd/juju/get.go
M cmd/juju/get_test.go
M cmd/juju/main.go
M cmd/juju/main_test.go
M cmd/juju/plugin.go
M cmd/juju/publish.go
M cmd/juju/publish_test.go
M cmd/juju/removemachine.go
M cmd/juju/removemachine_test.go
M cmd/juju/removerelation.go
M cmd/juju/removerelation_test.go
M cmd/juju/removeservice.go
M cmd/juju/removeservice_test.go
M cmd/juju/removeunit.go
M cmd/juju/removeunit_test.go
M cmd/juju/removeuser.go
M cmd/juju/removeuser_test.go
M cmd/juju/resolved.go
M cmd/juju/resolved_test.go
M cmd/juju/retryprovisioning.go
M cmd/juju/retryprovisioning_test.go
M cmd/juju/run.go
M cmd/juju/run_test.go
M cmd/juju/set.go
M cmd/juju/set_test.go
M cmd/juju/ssh.go
M cmd/juju/ssh_test.go
M cmd/juju/status.go
M cmd/juju/status_test.go
M cmd/juju/synctools.go
M cmd/juju/synctools_test.go
M cmd/juju/unexpose.go
M cmd/juju/unexpose_test.go
M cmd/juju/unset.go
M cmd/juju/unset_test.go
M cmd/juju/upgradecharm.go
M cmd/juju/upgradecharm_test.go
M cmd/juju/upgradejuju.go
M cmd/juju/upgradejuju_test.go
M cmd/plugins/juju-metadata/imagemetadata.go
M cmd/plugins/juju-metadata/imagemetadata_test.go
M cmd/plugins/juju-metadata/metadata.go
M cmd/plugins/juju-metadata/toolsmetadata.go
M cmd/plugins/juju-metadata/toolsmetadata_test.go
M cmd/plugins/juju-metadata/validateimagemetadata.go
M cmd/plugins/juju-metadata/validateimagemetadata_test.go
M cmd/plugins/juju-metadata/validatetoolsmetadata.go
M cmd/plugins/juju-metadata/validatetoolsmetadata_test.go
M cmd/plugins/juju-restore/restore.go
Reviewers: mp+219135_ code.launchpad. net,
Message:
Please take a look.
Description:
Invert envcmd relationship
Previously we embedded EnvCommandBase in all commands
requring an environment, and EnvCommandBase included
everything (SetFlags, and Init). The problem with this
is that it was easy to miss initialisation of the
EnvCommandBase type (this happened a few times), which
leads to bad things happening like sync-tools destroying
environments.
I have inverted the relationship so that we now have EnvironCommand, an interface that extends Command
envcmd.
with a SetEnvName method, and EnvCommandBase, which
implements EnvironCommand. A new method, envcmd.Wrap takes
an EnvironCommand and creates a Command that calls
SetEnvName prior to the wrapped method's Init method. If
the environment name cannot be determined, the wrapping
command will error out early.
https:/ /code.launchpad .net/~axwalk/ juju-core/ envcmd- inversion/ +merge/ 219135
(do not edit description out of merge proposal)
Please review this at https:/ /codereview. appspot. com/94350045/
Affected files (+354, -440 lines): environmentcomm and.go environmentcomm and_test. go addmachine. go addmachine_ test.go addrelation. go addrelation_ test.go addunit_ test.go adduser_ test.go authorizedkeys_ add.go authorizedkeys_ delete. go authorizedkeys_ import. go authorizedkeys_ list.go authorizedkeys_ test.go bootstrap. go bootstrap_ test.go cmd_test. go constraints. go constraints_ test.go debuglog. go debuglog_ test.go deploy_ test.go endpoint. go endpoint_ test.go ensureavailabil ity.go ensureavailabil ity_test. go environment. go environment_ test.go expose_ test.go get_test. go main_test. go publish_ test.go removemachine. go removemachine_ test.go removerelation. go removerelation_ test.go removeservice. go removeservice_ test.go removeunit. go removeunit_ test.go removeuser. go removeuser_ test.go resolved. go resolved_ test.go retryprovisioni ng.go retryprovisioni ng_test. go run_test. go set_test. go ssh_test. go status_ test.go synctools. go synctools_ test.go unexpose. go unexpose_ test.go unset_test. go upgradecharm. go upgradecharm_ test.go upgradejuju. go upgradejuju_ test.go juju-metadata/ imagemetadata. go juju-metadata/ imagemetadata_ test.go juju-metadata/ metadata. go juju-metadata/ toolsmetadata. go juju-metadata/ toolsmetadata_ test.go juju-metadata/ validateimageme tadata. go juju-metadata/ validateimageme tadata_ test.go juju-metadata/ validatetoolsme tadata. go juju-metadata/ validatetoolsme tadata_ test.go juju-restore/ restore. go
A [revision details]
M cmd/cmd.go
M cmd/envcmd/
M cmd/envcmd/
M cmd/juju/
M cmd/juju/
M cmd/juju/
M cmd/juju/
M cmd/juju/addunit.go
M cmd/juju/
M cmd/juju/adduser.go
M cmd/juju/
M cmd/juju/
M cmd/juju/
M cmd/juju/
M cmd/juju/
M cmd/juju/
M cmd/juju/
M cmd/juju/
M cmd/juju/
M cmd/juju/
M cmd/juju/
M cmd/juju/
M cmd/juju/
M cmd/juju/deploy.go
M cmd/juju/
M cmd/juju/
M cmd/juju/
M cmd/juju/
M cmd/juju/
M cmd/juju/
M cmd/juju/
M cmd/juju/expose.go
M cmd/juju/
M cmd/juju/get.go
M cmd/juju/
M cmd/juju/main.go
M cmd/juju/
M cmd/juju/plugin.go
M cmd/juju/publish.go
M cmd/juju/
M cmd/juju/
M cmd/juju/
M cmd/juju/
M cmd/juju/
M cmd/juju/
M cmd/juju/
M cmd/juju/
M cmd/juju/
M cmd/juju/
M cmd/juju/
M cmd/juju/
M cmd/juju/
M cmd/juju/
M cmd/juju/
M cmd/juju/run.go
M cmd/juju/
M cmd/juju/set.go
M cmd/juju/
M cmd/juju/ssh.go
M cmd/juju/
M cmd/juju/status.go
M cmd/juju/
M cmd/juju/
M cmd/juju/
M cmd/juju/
M cmd/juju/
M cmd/juju/unset.go
M cmd/juju/
M cmd/juju/
M cmd/juju/
M cmd/juju/
M cmd/juju/
M cmd/plugins/
M cmd/plugins/
M cmd/plugins/
M cmd/plugins/
M cmd/plugins/
M cmd/plugins/
M cmd/plugins/
M cmd/plugins/
M cmd/plugins/
M cmd/plugins/