github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/cmd/jujud-controller/agent/engine_test.go (about)

     1  // Copyright 2012-2016 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package agent
     5  
     6  import (
     7  	"github.com/juju/worker/v3/dependency"
     8  	gc "gopkg.in/check.v1"
     9  
    10  	"github.com/juju/juju/cmd/jujud-controller/agent/machine"
    11  	"github.com/juju/juju/cmd/jujud-controller/agent/model"
    12  	"github.com/juju/juju/cmd/jujud/agent/agenttest"
    13  	coretesting "github.com/juju/juju/testing"
    14  )
    15  
    16  var (
    17  	// These vars hold the per-model workers we expect to run in
    18  	// various circumstances. Note the absence of worker lists for
    19  	// dying/dead states, because those states are not stable: if
    20  	// they're working correctly the engine will be shut down.
    21  	alwaysModelWorkers = []string{
    22  		"agent",
    23  		"api-caller",
    24  		"api-config-watcher",
    25  		"clock",
    26  		"is-responsible-flag",
    27  		"environ-upgrade-gate",
    28  		"environ-upgraded-flag",
    29  		"not-alive-flag",
    30  		"not-dead-flag",
    31  		"valid-credential-flag",
    32  	}
    33  	requireValidCredentialModelWorkers = []string{
    34  		"action-pruner",          // tertiary dependency: will be inactive because migration workers will be inactive
    35  		"application-scaler",     // tertiary dependency: will be inactive because migration workers will be inactive
    36  		"charm-downloader",       // tertiary dependency: will be inactive because migration workers will be inactive
    37  		"charm-revision-updater", // tertiary dependency: will be inactive because migration workers will be inactive
    38  		"compute-provisioner",
    39  		"environ-tracker",
    40  		"firewaller",
    41  		"instance-mutater",
    42  		"instance-poller",
    43  		"logging-config-updater",  // tertiary dependency: will be inactive because migration workers will be inactive
    44  		"machine-undertaker",      // tertiary dependency: will be inactive because migration workers will be inactive
    45  		"metric-worker",           // tertiary dependency: will be inactive because migration workers will be inactive
    46  		"migration-fortress",      // secondary dependency: will be inactive because depends on environ-upgrader
    47  		"migration-inactive-flag", // secondary dependency: will be inactive because depends on environ-upgrader
    48  		"migration-master",        // secondary dependency: will be inactive because depends on environ-upgrader
    49  		"environ-upgrader",
    50  		"remote-relations",      // tertiary dependency: will be inactive because migration workers will be inactive
    51  		"state-cleaner",         // tertiary dependency: will be inactive because migration workers will be inactive
    52  		"status-history-pruner", // tertiary dependency: will be inactive because migration workers will be inactive
    53  		"storage-provisioner",   // tertiary dependency: will be inactive because migration workers will be inactive
    54  		"undertaker",
    55  		"unit-assigner", // tertiary dependency: will be inactive because migration workers will be inactive
    56  		"secrets-pruner",
    57  		"user-secrets-drain-worker",
    58  	}
    59  	aliveModelWorkers = []string{
    60  		"action-pruner",
    61  		"application-scaler",
    62  		"charm-downloader",
    63  		"charm-revision-updater",
    64  		"compute-provisioner",
    65  		"environ-tracker",
    66  		"firewaller",
    67  		"instance-mutater",
    68  		"instance-poller",
    69  		"log-forwarder",
    70  		"logging-config-updater",
    71  		"machine-undertaker",
    72  		"metric-worker",
    73  		"migration-fortress",
    74  		"migration-inactive-flag",
    75  		"migration-master",
    76  		"remote-relations",
    77  		"state-cleaner",
    78  		"status-history-pruner",
    79  		"storage-provisioner",
    80  		"unit-assigner",
    81  		"secrets-pruner",
    82  		"user-secrets-drain-worker",
    83  	}
    84  	migratingModelWorkers = []string{
    85  		"environ-tracker",
    86  		"migration-fortress",
    87  		"migration-inactive-flag",
    88  		"migration-master",
    89  		"environ-upgrade-gate",
    90  		"environ-upgraded-flag",
    91  		"log-forwarder",
    92  	}
    93  	// ReallyLongTimeout should be long enough for the model-tracker
    94  	// tests that depend on a hosted model; its backing state is not
    95  	// accessible for StartSyncs, so we generally have to wait for at
    96  	// least two 5s ticks to pass, and should expect rare circumstances
    97  	// to take even longer.
    98  	ReallyLongWait = coretesting.LongWait * 3
    99  
   100  	alwaysMachineWorkers = []string{
   101  		"agent",
   102  		"api-caller",
   103  		"api-config-watcher",
   104  		"broker-tracker",
   105  		"charmhub-http-client",
   106  		"clock",
   107  		"instance-mutater",
   108  		"migration-fortress",
   109  		"migration-inactive-flag",
   110  		"migration-minion",
   111  		"state-config-watcher",
   112  		"syslog",
   113  		"termination-signal-handler",
   114  		"upgrade-check-flag",
   115  		"upgrade-check-gate",
   116  		"upgrade-steps-flag",
   117  		"upgrade-steps-gate",
   118  		"upgrader",
   119  		"valid-credential-flag",
   120  	}
   121  	notMigratingMachineWorkers = []string{
   122  		"api-address-updater",
   123  		"deployer",
   124  		"disk-manager",
   125  		"fan-configurer",
   126  		"is-controller-flag",
   127  		"is-not-controller-flag",
   128  		// "host-key-reporter", not stable, exits when done
   129  		"log-sender",
   130  		"logging-config-updater",
   131  		"lxd-container-provisioner",
   132  		"kvm-container-provisioner",
   133  		"machine-action-runner",
   134  		//"machine-setup", exits when done
   135  		"machiner",
   136  		"proxy-config-updater",
   137  		"reboot-executor",
   138  		"ssh-authkeys-updater",
   139  		"state-converter",
   140  		"storage-provisioner",
   141  		"upgrade-series",
   142  	}
   143  )
   144  
   145  type ModelManifoldsFunc func(config model.ManifoldsConfig) dependency.Manifolds
   146  
   147  func TrackModels(c *gc.C, tracker *agenttest.EngineTracker, inner ModelManifoldsFunc) ModelManifoldsFunc {
   148  	return func(config model.ManifoldsConfig) dependency.Manifolds {
   149  		raw := inner(config)
   150  		id := config.Agent.CurrentConfig().Model().Id()
   151  		if err := tracker.Install(raw, id); err != nil {
   152  			c.Errorf("cannot install tracker: %v", err)
   153  		}
   154  		return raw
   155  	}
   156  }
   157  
   158  type MachineManifoldsFunc func(config machine.ManifoldsConfig) dependency.Manifolds
   159  
   160  func TrackMachines(c *gc.C, tracker *agenttest.EngineTracker, inner MachineManifoldsFunc) MachineManifoldsFunc {
   161  	return func(config machine.ManifoldsConfig) dependency.Manifolds {
   162  		raw := inner(config)
   163  		id := config.Agent.CurrentConfig().Tag().String()
   164  		if err := tracker.Install(raw, id); err != nil {
   165  			c.Errorf("cannot install tracker: %v", err)
   166  		}
   167  		return raw
   168  	}
   169  }