github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/cmd/jujud/agent/machine/manifolds_test.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package machine_test
     5  
     6  import (
     7  	"sort"
     8  
     9  	"github.com/juju/collections/set"
    10  	jc "github.com/juju/testing/checkers"
    11  	gc "gopkg.in/check.v1"
    12  	"gopkg.in/juju/worker.v1"
    13  	"gopkg.in/juju/worker.v1/dependency"
    14  
    15  	"github.com/juju/juju/cmd/jujud/agent/agenttest"
    16  	"github.com/juju/juju/cmd/jujud/agent/machine"
    17  	"github.com/juju/juju/testing"
    18  	"github.com/juju/juju/worker/gate"
    19  )
    20  
    21  type ManifoldsSuite struct {
    22  	testing.BaseSuite
    23  }
    24  
    25  var _ = gc.Suite(&ManifoldsSuite{})
    26  
    27  func (s *ManifoldsSuite) SetUpTest(c *gc.C) {
    28  	s.BaseSuite.SetUpTest(c)
    29  }
    30  
    31  func (*ManifoldsSuite) TestStartFuncs(c *gc.C) {
    32  	manifolds := machine.Manifolds(machine.ManifoldsConfig{
    33  		Agent: &mockAgent{},
    34  	})
    35  	for name, manifold := range manifolds {
    36  		c.Logf("checking %q manifold", name)
    37  		c.Check(manifold.Start, gc.NotNil)
    38  	}
    39  }
    40  
    41  func (*ManifoldsSuite) TestManifoldNames(c *gc.C) {
    42  	manifolds := machine.Manifolds(machine.ManifoldsConfig{
    43  		Agent: &mockAgent{},
    44  	})
    45  	keys := make([]string, 0, len(manifolds))
    46  	for k := range manifolds {
    47  		keys = append(keys, k)
    48  	}
    49  	sort.Strings(keys)
    50  	expectedKeys := []string{
    51  		"agent",
    52  		"api-address-updater",
    53  		"api-caller",
    54  		"api-config-watcher",
    55  		"api-server",
    56  		"audit-config-updater",
    57  		"central-hub",
    58  		"certificate-updater",
    59  		"certificate-watcher",
    60  		"clock",
    61  		"controller-port",
    62  		"disk-manager",
    63  		"external-controller-updater",
    64  		"fan-configurer",
    65  		"global-clock-updater",
    66  		"host-key-reporter",
    67  		"http-server",
    68  		"http-server-args",
    69  		"is-controller-flag",
    70  		"is-primary-controller-flag",
    71  		"lease-clock-updater",
    72  		"lease-manager",
    73  		"legacy-leases-flag",
    74  		"log-pruner",
    75  		"log-sender",
    76  		"logging-config-updater",
    77  		"machine-action-runner",
    78  		"machiner",
    79  		"mgo-txn-resumer",
    80  		"migration-fortress",
    81  		"migration-minion",
    82  		"migration-inactive-flag",
    83  		"model-cache",
    84  		"model-worker-manager",
    85  		"peer-grouper",
    86  		"presence",
    87  		"proxy-config-updater",
    88  		"pubsub-forwarder",
    89  		"raft",
    90  		"raft-backstop",
    91  		"raft-clusterer",
    92  		"raft-forwarder",
    93  		"raft-leader-flag",
    94  		"raft-transport",
    95  		"reboot-executor",
    96  		"restore-watcher",
    97  		"serving-info-setter",
    98  		"ssh-authkeys-updater",
    99  		"ssh-identity-writer",
   100  		"state",
   101  		"state-config-watcher",
   102  		"storage-provisioner",
   103  		"termination-signal-handler",
   104  		"tools-version-checker",
   105  		"transaction-pruner",
   106  		"unconverted-api-workers",
   107  		"unit-agent-deployer",
   108  		"upgrade-check-flag",
   109  		"upgrade-check-gate",
   110  		"upgrade-series",
   111  		"upgrade-steps-flag",
   112  		"upgrade-steps-gate",
   113  		"upgrade-steps-runner",
   114  		"upgrader",
   115  		"valid-credential-flag",
   116  	}
   117  	c.Assert(keys, jc.SameContents, expectedKeys)
   118  }
   119  
   120  func (*ManifoldsSuite) TestUpgradesBlockMigration(c *gc.C) {
   121  	manifolds := machine.Manifolds(machine.ManifoldsConfig{
   122  		Agent: &mockAgent{},
   123  	})
   124  	manifold, ok := manifolds["migration-fortress"]
   125  	c.Assert(ok, jc.IsTrue)
   126  
   127  	checkContains(c, manifold.Inputs, "upgrade-check-flag")
   128  	checkContains(c, manifold.Inputs, "upgrade-steps-flag")
   129  }
   130  
   131  func (*ManifoldsSuite) TestMigrationGuardsUsed(c *gc.C) {
   132  	exempt := set.NewStrings(
   133  		"agent",
   134  		"api-caller",
   135  		"api-config-watcher",
   136  		"api-server",
   137  		"audit-config-updater",
   138  		"certificate-updater",
   139  		"certificate-watcher",
   140  		"central-hub",
   141  		"clock",
   142  		"controller-port",
   143  		"global-clock-updater",
   144  		"http-server",
   145  		"http-server-args",
   146  		"is-controller-flag",
   147  		"is-primary-controller-flag",
   148  		"lease-clock-updater",
   149  		"lease-manager",
   150  		"legacy-leases-flag",
   151  		"log-forwarder",
   152  		"model-cache",
   153  		"model-worker-manager",
   154  		"peer-grouper",
   155  		"presence",
   156  		"pubsub-forwarder",
   157  		"restore-watcher",
   158  		"state",
   159  		"state-config-watcher",
   160  		"termination-signal-handler",
   161  		"migration-fortress",
   162  		"migration-inactive-flag",
   163  		"migration-minion",
   164  		"upgrade-check-flag",
   165  		"upgrade-check-gate",
   166  		"upgrade-series",
   167  		"upgrade-series-enabled",
   168  		"upgrade-steps-flag",
   169  		"upgrade-steps-gate",
   170  		"upgrade-steps-runner",
   171  		"upgrader",
   172  		"raft",
   173  		"raft-backstop",
   174  		"raft-clusterer",
   175  		"raft-forwarder",
   176  		"raft-leader-flag",
   177  		"raft-transport",
   178  		"valid-credential-flag",
   179  	)
   180  	manifolds := machine.Manifolds(machine.ManifoldsConfig{
   181  		Agent: &mockAgent{},
   182  	})
   183  	for name, manifold := range manifolds {
   184  		c.Logf(name)
   185  		if !exempt.Contains(name) {
   186  			checkContains(c, manifold.Inputs, "migration-fortress")
   187  			checkContains(c, manifold.Inputs, "migration-inactive-flag")
   188  		}
   189  	}
   190  }
   191  
   192  func (*ManifoldsSuite) TestSingularGuardsUsed(c *gc.C) {
   193  	manifolds := machine.Manifolds(machine.ManifoldsConfig{
   194  		Agent: &mockAgent{},
   195  	})
   196  	controllerWorkers := set.NewStrings(
   197  		"certificate-watcher",
   198  		"audit-config-updater",
   199  		"is-primary-controller-flag",
   200  		"lease-manager",
   201  		"legacy-leases-flag",
   202  		"raft-transport",
   203  	)
   204  	primaryControllerWorkers := set.NewStrings(
   205  		"external-controller-updater",
   206  		"log-pruner",
   207  		"transaction-pruner",
   208  	)
   209  	for name, manifold := range manifolds {
   210  		c.Logf(name)
   211  		switch {
   212  		case controllerWorkers.Contains(name):
   213  			checkContains(c, manifold.Inputs, "is-controller-flag")
   214  			checkNotContains(c, manifold.Inputs, "is-primary-controller-flag")
   215  		case primaryControllerWorkers.Contains(name):
   216  			checkNotContains(c, manifold.Inputs, "is-controller-flag")
   217  			checkContains(c, manifold.Inputs, "is-primary-controller-flag")
   218  		default:
   219  			checkNotContains(c, manifold.Inputs, "is-controller-flag")
   220  			checkNotContains(c, manifold.Inputs, "is-primary-controller-flag")
   221  		}
   222  	}
   223  }
   224  
   225  func checkContains(c *gc.C, names []string, seek string) {
   226  	for _, name := range names {
   227  		if name == seek {
   228  			return
   229  		}
   230  	}
   231  	c.Errorf("%q not found in %v", seek, names)
   232  }
   233  
   234  func checkNotContains(c *gc.C, names []string, seek string) {
   235  	for _, name := range names {
   236  		if name == seek {
   237  			c.Errorf("%q found in %v", seek, names)
   238  			return
   239  		}
   240  	}
   241  }
   242  
   243  func (*ManifoldsSuite) TestUpgradeGates(c *gc.C) {
   244  	upgradeStepsLock := gate.NewLock()
   245  	upgradeCheckLock := gate.NewLock()
   246  	manifolds := machine.Manifolds(machine.ManifoldsConfig{
   247  		Agent:            &mockAgent{},
   248  		UpgradeStepsLock: upgradeStepsLock,
   249  		UpgradeCheckLock: upgradeCheckLock,
   250  	})
   251  	assertGate(c, manifolds["upgrade-steps-gate"], upgradeStepsLock)
   252  	assertGate(c, manifolds["upgrade-check-gate"], upgradeCheckLock)
   253  }
   254  
   255  func assertGate(c *gc.C, manifold dependency.Manifold, unlocker gate.Unlocker) {
   256  	w, err := manifold.Start(nil)
   257  	c.Assert(err, jc.ErrorIsNil)
   258  	defer worker.Stop(w)
   259  
   260  	var waiter gate.Waiter
   261  	err = manifold.Output(w, &waiter)
   262  	c.Assert(err, jc.ErrorIsNil)
   263  
   264  	select {
   265  	case <-waiter.Unlocked():
   266  		c.Fatalf("expected gate to be locked")
   267  	default:
   268  	}
   269  
   270  	unlocker.Unlock()
   271  
   272  	select {
   273  	case <-waiter.Unlocked():
   274  	default:
   275  		c.Fatalf("expected gate to be unlocked")
   276  	}
   277  }
   278  
   279  func (s *ManifoldsSuite) TestManifoldsDependencies(c *gc.C) {
   280  	agenttest.AssertManifoldsDependencies(c,
   281  		machine.Manifolds(machine.ManifoldsConfig{
   282  			Agent: &mockAgent{},
   283  		}),
   284  		expectedMachineManifoldsWithDependencies,
   285  	)
   286  }
   287  
   288  var expectedMachineManifoldsWithDependencies = map[string][]string{
   289  
   290  	"agent": {},
   291  
   292  	"api-address-updater": {
   293  		"agent",
   294  		"api-caller",
   295  		"api-config-watcher",
   296  		"migration-fortress",
   297  		"migration-inactive-flag",
   298  		"upgrade-check-flag",
   299  		"upgrade-check-gate",
   300  		"upgrade-steps-flag",
   301  		"upgrade-steps-gate"},
   302  
   303  	"api-caller": {"agent", "api-config-watcher"},
   304  
   305  	"api-config-watcher": {"agent"},
   306  
   307  	"api-server": {
   308  		"agent",
   309  		"audit-config-updater",
   310  		"central-hub",
   311  		"clock",
   312  		"controller-port",
   313  		"http-server-args",
   314  		"is-controller-flag",
   315  		"lease-manager",
   316  		"model-cache",
   317  		"raft-transport",
   318  		"restore-watcher",
   319  		"state",
   320  		"state-config-watcher",
   321  		"upgrade-steps-gate"},
   322  
   323  	"audit-config-updater": {
   324  		"agent",
   325  		"is-controller-flag",
   326  		"state",
   327  		"state-config-watcher"},
   328  
   329  	"central-hub": {"agent", "state-config-watcher"},
   330  
   331  	"certificate-updater": {
   332  		"agent",
   333  		"state",
   334  		"state-config-watcher",
   335  		"upgrade-check-flag",
   336  		"upgrade-check-gate",
   337  		"upgrade-steps-flag",
   338  		"upgrade-steps-gate"},
   339  
   340  	"certificate-watcher": {
   341  		"agent",
   342  		"is-controller-flag",
   343  		"state",
   344  		"state-config-watcher"},
   345  
   346  	"clock": {},
   347  
   348  	"controller-port": {
   349  		"agent",
   350  		"central-hub",
   351  		"state",
   352  		"state-config-watcher"},
   353  
   354  	"disk-manager": {
   355  		"agent",
   356  		"api-caller",
   357  		"api-config-watcher",
   358  		"migration-fortress",
   359  		"migration-inactive-flag",
   360  		"upgrade-check-flag",
   361  		"upgrade-check-gate",
   362  		"upgrade-steps-flag",
   363  		"upgrade-steps-gate"},
   364  
   365  	"external-controller-updater": {
   366  		"agent",
   367  		"api-caller",
   368  		"api-config-watcher",
   369  		"clock",
   370  		"is-controller-flag",
   371  		"is-primary-controller-flag",
   372  		"migration-fortress",
   373  		"migration-inactive-flag",
   374  		"state",
   375  		"state-config-watcher",
   376  		"upgrade-check-flag",
   377  		"upgrade-check-gate",
   378  		"upgrade-steps-flag",
   379  		"upgrade-steps-gate"},
   380  
   381  	"fan-configurer": {
   382  		"agent",
   383  		"api-caller",
   384  		"api-config-watcher",
   385  		"migration-fortress",
   386  		"migration-inactive-flag",
   387  		"upgrade-check-flag",
   388  		"upgrade-check-gate",
   389  		"upgrade-steps-flag",
   390  		"upgrade-steps-gate"},
   391  
   392  	"global-clock-updater": {
   393  		"agent",
   394  		"clock",
   395  		"is-controller-flag",
   396  		"legacy-leases-flag",
   397  		"state",
   398  		"state-config-watcher"},
   399  
   400  	"host-key-reporter": {
   401  		"agent",
   402  		"api-caller",
   403  		"api-config-watcher",
   404  		"migration-fortress",
   405  		"migration-inactive-flag",
   406  		"upgrade-check-flag",
   407  		"upgrade-check-gate",
   408  		"upgrade-steps-flag",
   409  		"upgrade-steps-gate"},
   410  
   411  	"http-server": {
   412  		"agent",
   413  		"api-server",
   414  		"audit-config-updater",
   415  		"central-hub",
   416  		"certificate-watcher",
   417  		"clock",
   418  		"controller-port",
   419  		"http-server-args",
   420  		"is-controller-flag",
   421  		"lease-manager",
   422  		"model-cache",
   423  		"raft-transport",
   424  		"restore-watcher",
   425  		"state",
   426  		"state-config-watcher",
   427  		"upgrade-steps-gate",
   428  	},
   429  
   430  	"http-server-args": {
   431  		"agent",
   432  		"central-hub",
   433  		"clock",
   434  		"controller-port",
   435  		"state",
   436  		"state-config-watcher"},
   437  
   438  	"is-controller-flag": {"agent", "state", "state-config-watcher"},
   439  
   440  	"is-primary-controller-flag": {
   441  		"agent",
   442  		"api-caller",
   443  		"api-config-watcher",
   444  		"clock",
   445  		"is-controller-flag",
   446  		"state",
   447  		"state-config-watcher"},
   448  
   449  	"lease-clock-updater": {
   450  		"agent",
   451  		"central-hub",
   452  		"clock",
   453  		"controller-port",
   454  		"http-server-args",
   455  		"is-controller-flag",
   456  		"lease-manager",
   457  		"raft",
   458  		"raft-forwarder",
   459  		"raft-leader-flag",
   460  		"raft-transport",
   461  		"state",
   462  		"state-config-watcher",
   463  		"upgrade-check-flag",
   464  		"upgrade-check-gate",
   465  		"upgrade-steps-flag",
   466  		"upgrade-steps-gate",
   467  	},
   468  
   469  	"lease-manager": {
   470  		"agent",
   471  		"central-hub",
   472  		"clock",
   473  		"is-controller-flag",
   474  		"state",
   475  		"state-config-watcher",
   476  	},
   477  
   478  	"legacy-leases-flag": {
   479  		"agent",
   480  		"is-controller-flag",
   481  		"state",
   482  		"state-config-watcher",
   483  	},
   484  
   485  	"log-pruner": {
   486  		"agent",
   487  		"api-caller",
   488  		"api-config-watcher",
   489  		"clock",
   490  		"is-controller-flag",
   491  		"is-primary-controller-flag",
   492  		"migration-fortress",
   493  		"migration-inactive-flag",
   494  		"state",
   495  		"state-config-watcher",
   496  		"upgrade-check-flag",
   497  		"upgrade-check-gate",
   498  		"upgrade-steps-flag",
   499  		"upgrade-steps-gate"},
   500  
   501  	"log-sender": {
   502  		"agent",
   503  		"api-caller",
   504  		"api-config-watcher",
   505  		"migration-fortress",
   506  		"migration-inactive-flag",
   507  		"upgrade-check-flag",
   508  		"upgrade-check-gate",
   509  		"upgrade-steps-flag",
   510  		"upgrade-steps-gate"},
   511  
   512  	"logging-config-updater": {
   513  		"agent",
   514  		"api-caller",
   515  		"api-config-watcher",
   516  		"migration-fortress",
   517  		"migration-inactive-flag",
   518  		"upgrade-check-flag",
   519  		"upgrade-check-gate",
   520  		"upgrade-steps-flag",
   521  		"upgrade-steps-gate"},
   522  
   523  	"machine-action-runner": {
   524  		"agent",
   525  		"api-caller",
   526  		"api-config-watcher",
   527  		"migration-fortress",
   528  		"migration-inactive-flag",
   529  		"upgrade-check-flag",
   530  		"upgrade-check-gate",
   531  		"upgrade-steps-flag",
   532  		"upgrade-steps-gate"},
   533  
   534  	"machiner": {
   535  		"agent",
   536  		"api-caller",
   537  		"api-config-watcher",
   538  		"fan-configurer",
   539  		"migration-fortress",
   540  		"migration-inactive-flag",
   541  		"upgrade-check-flag",
   542  		"upgrade-check-gate",
   543  		"upgrade-steps-flag",
   544  		"upgrade-steps-gate"},
   545  
   546  	"mgo-txn-resumer": {
   547  		"agent",
   548  		"api-caller",
   549  		"api-config-watcher",
   550  		"migration-fortress",
   551  		"migration-inactive-flag",
   552  		"upgrade-check-flag",
   553  		"upgrade-check-gate",
   554  		"upgrade-steps-flag",
   555  		"upgrade-steps-gate"},
   556  
   557  	"migration-fortress": {
   558  		"upgrade-check-flag",
   559  		"upgrade-check-gate",
   560  		"upgrade-steps-flag",
   561  		"upgrade-steps-gate"},
   562  
   563  	"migration-inactive-flag": {
   564  		"agent",
   565  		"api-caller",
   566  		"api-config-watcher"},
   567  
   568  	"migration-minion": {
   569  		"agent",
   570  		"api-caller",
   571  		"api-config-watcher",
   572  		"migration-fortress",
   573  		"upgrade-check-flag",
   574  		"upgrade-check-gate",
   575  		"upgrade-steps-flag",
   576  		"upgrade-steps-gate"},
   577  
   578  	"model-cache": {
   579  		"agent",
   580  		"state",
   581  		"state-config-watcher",
   582  	},
   583  
   584  	"model-worker-manager": {
   585  		"agent",
   586  		"state",
   587  		"state-config-watcher",
   588  		"upgrade-check-flag",
   589  		"upgrade-check-gate",
   590  		"upgrade-steps-flag",
   591  		"upgrade-steps-gate"},
   592  
   593  	"peer-grouper": {
   594  		"agent",
   595  		"central-hub",
   596  		"clock",
   597  		"controller-port",
   598  		"state",
   599  		"state-config-watcher",
   600  		"upgrade-check-flag",
   601  		"upgrade-check-gate",
   602  		"upgrade-steps-flag",
   603  		"upgrade-steps-gate"},
   604  
   605  	"presence": {"agent", "central-hub", "state-config-watcher"},
   606  
   607  	"proxy-config-updater": {
   608  		"agent",
   609  		"api-caller",
   610  		"api-config-watcher",
   611  		"migration-fortress",
   612  		"migration-inactive-flag",
   613  		"upgrade-check-flag",
   614  		"upgrade-check-gate",
   615  		"upgrade-steps-flag",
   616  		"upgrade-steps-gate"},
   617  
   618  	"pubsub-forwarder": {
   619  		"agent",
   620  		"central-hub",
   621  		"state-config-watcher"},
   622  
   623  	"raft": {
   624  		"agent",
   625  		"central-hub",
   626  		"clock",
   627  		"controller-port",
   628  		"http-server-args",
   629  		"is-controller-flag",
   630  		"raft-transport",
   631  		"state",
   632  		"state-config-watcher",
   633  		"upgrade-check-flag",
   634  		"upgrade-check-gate",
   635  		"upgrade-steps-flag",
   636  		"upgrade-steps-gate",
   637  	},
   638  
   639  	"raft-backstop": {
   640  		"agent",
   641  		"central-hub",
   642  		"clock",
   643  		"controller-port",
   644  		"http-server-args",
   645  		"is-controller-flag",
   646  		"raft",
   647  		"raft-transport",
   648  		"state",
   649  		"state-config-watcher",
   650  		"upgrade-check-flag",
   651  		"upgrade-check-gate",
   652  		"upgrade-steps-flag",
   653  		"upgrade-steps-gate",
   654  	},
   655  
   656  	"raft-clusterer": {
   657  		"agent",
   658  		"central-hub",
   659  		"clock",
   660  		"controller-port",
   661  		"http-server-args",
   662  		"is-controller-flag",
   663  		"raft",
   664  		"raft-leader-flag",
   665  		"raft-transport",
   666  		"state",
   667  		"state-config-watcher",
   668  		"upgrade-check-flag",
   669  		"upgrade-check-gate",
   670  		"upgrade-steps-flag",
   671  		"upgrade-steps-gate",
   672  	},
   673  
   674  	"raft-forwarder": {
   675  		"agent",
   676  		"central-hub",
   677  		"clock",
   678  		"controller-port",
   679  		"http-server-args",
   680  		"is-controller-flag",
   681  		"raft",
   682  		"raft-leader-flag",
   683  		"raft-transport",
   684  		"state",
   685  		"state-config-watcher",
   686  		"upgrade-check-flag",
   687  		"upgrade-check-gate",
   688  		"upgrade-steps-flag",
   689  		"upgrade-steps-gate",
   690  	},
   691  
   692  	"raft-leader-flag": {
   693  		"agent",
   694  		"central-hub",
   695  		"clock",
   696  		"controller-port",
   697  		"http-server-args",
   698  		"is-controller-flag",
   699  		"raft",
   700  		"raft-transport",
   701  		"state",
   702  		"state-config-watcher",
   703  		"upgrade-check-flag",
   704  		"upgrade-check-gate",
   705  		"upgrade-steps-flag",
   706  		"upgrade-steps-gate",
   707  	},
   708  
   709  	"raft-transport": {
   710  		"agent",
   711  		"central-hub",
   712  		"clock",
   713  		"controller-port",
   714  		"http-server-args",
   715  		"is-controller-flag",
   716  		"state",
   717  		"state-config-watcher",
   718  	},
   719  
   720  	"reboot-executor": {
   721  		"agent",
   722  		"api-caller",
   723  		"api-config-watcher",
   724  		"migration-fortress",
   725  		"migration-inactive-flag",
   726  		"upgrade-check-flag",
   727  		"upgrade-check-gate",
   728  		"upgrade-steps-flag",
   729  		"upgrade-steps-gate"},
   730  
   731  	"restore-watcher": {"agent", "state", "state-config-watcher"},
   732  
   733  	"serving-info-setter": {
   734  		"agent",
   735  		"api-caller",
   736  		"api-config-watcher",
   737  		"migration-fortress",
   738  		"migration-inactive-flag",
   739  		"upgrade-check-flag",
   740  		"upgrade-check-gate",
   741  		"upgrade-steps-flag",
   742  		"upgrade-steps-gate"},
   743  
   744  	"ssh-authkeys-updater": {
   745  		"agent",
   746  		"api-caller",
   747  		"api-config-watcher",
   748  		"migration-fortress",
   749  		"migration-inactive-flag",
   750  		"upgrade-check-flag",
   751  		"upgrade-check-gate",
   752  		"upgrade-steps-flag",
   753  		"upgrade-steps-gate"},
   754  
   755  	"ssh-identity-writer": {
   756  		"agent",
   757  		"api-caller",
   758  		"api-config-watcher",
   759  		"migration-fortress",
   760  		"migration-inactive-flag",
   761  		"upgrade-check-flag",
   762  		"upgrade-check-gate",
   763  		"upgrade-steps-flag",
   764  		"upgrade-steps-gate"},
   765  
   766  	"state": {"agent", "state-config-watcher"},
   767  
   768  	"state-config-watcher": {"agent"},
   769  
   770  	"storage-provisioner": {
   771  		"agent",
   772  		"api-caller",
   773  		"api-config-watcher",
   774  		"migration-fortress",
   775  		"migration-inactive-flag",
   776  		"upgrade-check-flag",
   777  		"upgrade-check-gate",
   778  		"upgrade-steps-flag",
   779  		"upgrade-steps-gate",
   780  		"valid-credential-flag",
   781  	},
   782  
   783  	"termination-signal-handler": {},
   784  
   785  	"tools-version-checker": {
   786  		"agent",
   787  		"api-caller",
   788  		"api-config-watcher",
   789  		"migration-fortress",
   790  		"migration-inactive-flag",
   791  		"upgrade-check-flag",
   792  		"upgrade-check-gate",
   793  		"upgrade-steps-flag",
   794  		"upgrade-steps-gate"},
   795  
   796  	"transaction-pruner": {
   797  		"agent",
   798  		"api-caller",
   799  		"api-config-watcher",
   800  		"clock",
   801  		"is-controller-flag",
   802  		"is-primary-controller-flag",
   803  		"migration-fortress",
   804  		"migration-inactive-flag",
   805  		"state",
   806  		"state-config-watcher",
   807  		"upgrade-check-flag",
   808  		"upgrade-check-gate",
   809  		"upgrade-steps-flag",
   810  		"upgrade-steps-gate"},
   811  
   812  	"unconverted-api-workers": {
   813  		"agent",
   814  		"api-caller",
   815  		"api-config-watcher",
   816  		"migration-fortress",
   817  		"migration-inactive-flag",
   818  		"upgrade-check-flag",
   819  		"upgrade-check-gate",
   820  		"upgrade-steps-flag",
   821  		"upgrade-steps-gate"},
   822  
   823  	"unit-agent-deployer": {
   824  		"agent",
   825  		"api-caller",
   826  		"api-config-watcher",
   827  		"migration-fortress",
   828  		"migration-inactive-flag",
   829  		"upgrade-check-flag",
   830  		"upgrade-check-gate",
   831  		"upgrade-steps-flag",
   832  		"upgrade-steps-gate"},
   833  
   834  	"upgrade-check-flag": {"upgrade-check-gate"},
   835  
   836  	"upgrade-check-gate": {},
   837  
   838  	"upgrade-series": {
   839  		"agent",
   840  		"api-caller",
   841  		"api-config-watcher",
   842  		"migration-fortress",
   843  		"migration-inactive-flag",
   844  		"upgrade-check-flag",
   845  		"upgrade-check-gate",
   846  		"upgrade-steps-flag",
   847  		"upgrade-steps-gate",
   848  	},
   849  
   850  	"upgrade-steps-flag": {"upgrade-steps-gate"},
   851  
   852  	"upgrade-steps-gate": {},
   853  
   854  	"upgrade-steps-runner": {
   855  		"agent",
   856  		"api-caller",
   857  		"api-config-watcher",
   858  		"upgrade-steps-gate"},
   859  
   860  	"upgrader": {
   861  		"agent",
   862  		"api-caller",
   863  		"api-config-watcher",
   864  		"upgrade-check-gate",
   865  		"upgrade-steps-gate"},
   866  
   867  	"valid-credential-flag": {
   868  		"agent",
   869  		"api-caller",
   870  		"api-config-watcher",
   871  	},
   872  }