From 4062fde2958fec8ce45168d8dda9e1db973c460d Mon Sep 17 00:00:00 2001 From: Joseph Phillips Date: Thu, 11 Nov 2021 11:00:10 +0100 Subject: [PATCH 1/2] Fixes loop scoping in upgrade-series command so that we report only units on the machine as being affected. We were previously reporting all units of a subordinate application, though the behaviour itself was correct. --- cmd/juju/machine/upgradeseries.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/cmd/juju/machine/upgradeseries.go b/cmd/juju/machine/upgradeseries.go index 1dabbdb89ff..1de3dec7f81 100644 --- a/cmd/juju/machine/upgradeseries.go +++ b/cmd/juju/machine/upgradeseries.go @@ -322,12 +322,13 @@ func (c *upgradeSeriesCommand) retrieveUnits() ([]string, error) { var units []string for _, application := range fullStatus.Applications { for name, unit := range application.Units { - if unit.Machine == machineID { - units = append(units, name) + if unit.Machine != machineID { + continue } + units = append(units, name) for subName, subordinate := range unit.Subordinates { if subordinate.Machine != "" && subordinate.Machine != machineID { - return nil, errors.Errorf("subordinate %q machine has unexpected instance id %s", subName, machineID) + return nil, errors.Errorf("subordinate %q machine has unexpected machine id %s", subName, machineID) } units = append(units, subName) } From b1923133834fa2b1f8a1ae286b4e20fd5d79ff78 Mon Sep 17 00:00:00 2001 From: Joseph Phillips Date: Fri, 12 Nov 2021 12:03:18 +0100 Subject: [PATCH 2/2] Adds test to ensure upgrade-series prompt only indicates subordinates on the designated machine as affected. --- cmd/juju/machine/upgradeseries_test.go | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/cmd/juju/machine/upgradeseries_test.go b/cmd/juju/machine/upgradeseries_test.go index 488c524b23d..c885125d26c 100644 --- a/cmd/juju/machine/upgradeseries_test.go +++ b/cmd/juju/machine/upgradeseries_test.go @@ -47,8 +47,18 @@ func (s *UpgradeSeriesSuite) SetUpTest(c *gc.C) { Applications: map[string]params.ApplicationStatus{ "foo": { Units: map[string]params.UnitStatus{ - "foo/1": {Machine: "1"}, - "foo/2": {Machine: "2/lxd/0"}, + "foo/1": { + Machine: "1", + Subordinates: map[string]params.UnitStatus{ + "sub/1": {}, + }, + }, + "foo/2": { + Machine: "2/lxd/0", + Subordinates: map[string]params.UnitStatus{ + "sub/2": {}, + }, + }, }, }, }, @@ -218,6 +228,15 @@ func (s *UpgradeSeriesSuite) TestPrepareCommandShouldPromptUserForConfirmation(c c.Assert(ctx.Stdout.(*bytes.Buffer).String(), jc.HasSuffix, "Continue [y/N]?") } +func (s *UpgradeSeriesSuite) TestPrepareCommandShouldIndicateOnlySubordinatesOnMachine(c *gc.C) { + ctx, err := s.runUpgradeSeriesCommandWithConfirmation(c, "y", machineArg, machine.PrepareCommand, seriesArg) + c.Assert(err, jc.ErrorIsNil) + + out := ctx.Stdout.(*bytes.Buffer).String() + c.Check(strings.Contains(out, "sub/1"), jc.IsTrue) + c.Check(strings.Contains(out, "sub/2"), jc.IsFalse) +} + func (s *UpgradeSeriesSuite) TestPrepareCommandShouldAcceptYesFlagAndNotPrompt(c *gc.C) { ctx, err := s.runUpgradeSeriesCommandWithConfirmation(c, "n", machineArg, machine.PrepareCommand, seriesArg, "-y") c.Assert(err, jc.ErrorIsNil)