diff --git a/api/agent/fanconfigurer/facade.go b/api/agent/fanconfigurer/facade.go index 9fb80dad0c0..395faa730fd 100644 --- a/api/agent/fanconfigurer/facade.go +++ b/api/agent/fanconfigurer/facade.go @@ -25,6 +25,8 @@ type Facade struct { caller base.FacadeCaller } +// TODO(nvinuesa): This entire facade should be removed since it's not used +// anymore (the fanconfigurer worker has been removed). // NewFacade creates a new client-side FanConfigu er facade. func NewFacade(caller base.APICaller, options ...Option) *Facade { return &Facade{ diff --git a/apiserver/facades/agent/fanconfigurer/register.go b/apiserver/facades/agent/fanconfigurer/register.go index 793d929a5d8..c9f3695d1e2 100644 --- a/apiserver/facades/agent/fanconfigurer/register.go +++ b/apiserver/facades/agent/fanconfigurer/register.go @@ -10,6 +10,8 @@ import ( "github.com/juju/juju/apiserver/facade" ) +// TODO(nvinuesa): This entire facade should be removed since it's not used +// anymore (the fanconfigurer worker has been removed). // Register is called to expose a package of facades onto a given registry. func Register(registry facade.FacadeRegistry) { registry.MustRegister("FanConfigurer", 1, func(stdCtx context.Context, ctx facade.ModelContext) (facade.Facade, error) { diff --git a/cmd/jujud-controller/agent/engine_test.go b/cmd/jujud-controller/agent/engine_test.go index b95200d91d5..55e74b7999e 100644 --- a/cmd/jujud-controller/agent/engine_test.go +++ b/cmd/jujud-controller/agent/engine_test.go @@ -119,7 +119,6 @@ var ( "api-address-updater", "deployer", "disk-manager", - "fan-configurer", "is-bootstrap-flag", "is-bootstrap-gate", "is-controller-flag", diff --git a/cmd/jujud-controller/agent/machine/manifolds.go b/cmd/jujud-controller/agent/machine/manifolds.go index 6275cfce51e..5f0cb3efbab 100644 --- a/cmd/jujud-controller/agent/machine/manifolds.go +++ b/cmd/jujud-controller/agent/machine/manifolds.go @@ -69,7 +69,6 @@ import ( "github.com/juju/juju/internal/worker/deployer" "github.com/juju/juju/internal/worker/diskmanager" "github.com/juju/juju/internal/worker/externalcontrollerupdater" - "github.com/juju/juju/internal/worker/fanconfigurer" "github.com/juju/juju/internal/worker/filenotifywatcher" "github.com/juju/juju/internal/worker/fortress" "github.com/juju/juju/internal/worker/gate" @@ -942,11 +941,6 @@ func IAASManifolds(config ManifoldsConfig) dependency.Manifolds { NewWorker: hostkeyreporter.NewWorker, })), - fanConfigurerName: ifNotMigrating(fanconfigurer.Manifold(fanconfigurer.ManifoldConfig{ - APICallerName: apiCallerName, - Clock: config.Clock, - })), - certificateUpdaterName: ifFullyUpgraded(certupdater.Manifold(certupdater.ManifoldConfig{ AgentName: agentName, AuthorityName: certificateWatcherName, @@ -959,12 +953,10 @@ func IAASManifolds(config ManifoldsConfig) dependency.Manifolds { // The machiner Worker will wait for the identified machine to become // Dying and make it Dead; or until the machine becomes Dead by other - // means. This worker needs to be launched after fanconfigurer - // so that it reports interfaces created by it. + // means. machinerName: ifNotMigrating(machiner.Manifold(machiner.ManifoldConfig{ - AgentName: agentName, - APICallerName: apiCallerName, - FanConfigurerName: fanConfigurerName, + AgentName: agentName, + APICallerName: apiCallerName, })), // DBAccessor is a manifold that provides a DBAccessor worker @@ -1333,7 +1325,6 @@ const ( toolsVersionCheckerName = "tools-version-checker" machineActionName = "machine-action-runner" hostKeyReporterName = "host-key-reporter" - fanConfigurerName = "fan-configurer" externalControllerUpdaterName = "external-controller-updater" isPrimaryControllerFlagName = "is-primary-controller-flag" isControllerFlagName = "is-controller-flag" diff --git a/cmd/jujud-controller/agent/machine/manifolds_test.go b/cmd/jujud-controller/agent/machine/manifolds_test.go index 3137f66b384..4a7c2506fd5 100644 --- a/cmd/jujud-controller/agent/machine/manifolds_test.go +++ b/cmd/jujud-controller/agent/machine/manifolds_test.go @@ -87,7 +87,6 @@ func (s *ManifoldsSuite) TestManifoldNamesIAAS(c *gc.C) { "deployer", "disk-manager", "external-controller-updater", - "fan-configurer", "file-notify-watcher", "host-key-reporter", "http-server-args", @@ -731,18 +730,6 @@ var expectedMachineManifoldsWithDependenciesIAAS = map[string][]string{ "upgrade-steps-gate", }, - "fan-configurer": { - "agent", - "api-caller", - "api-config-watcher", - "migration-fortress", - "migration-inactive-flag", - "upgrade-check-flag", - "upgrade-check-gate", - "upgrade-steps-flag", - "upgrade-steps-gate", - }, - "file-notify-watcher": { "agent", "is-controller-flag", @@ -964,7 +951,6 @@ var expectedMachineManifoldsWithDependenciesIAAS = map[string][]string{ "agent", "api-caller", "api-config-watcher", - "fan-configurer", "migration-fortress", "migration-inactive-flag", "upgrade-check-flag", diff --git a/cmd/jujud/agent/engine_test.go b/cmd/jujud/agent/engine_test.go index c90f6199b10..4814b7fd830 100644 --- a/cmd/jujud/agent/engine_test.go +++ b/cmd/jujud/agent/engine_test.go @@ -45,7 +45,6 @@ var ( "api-address-updater", "deployer", "disk-manager", - "fan-configurer", "is-bootstrap-flag", "is-bootstrap-gate", "is-controller-flag", diff --git a/cmd/jujud/agent/machine/manifolds.go b/cmd/jujud/agent/machine/manifolds.go index 2ddf4368063..631a9fa7114 100644 --- a/cmd/jujud/agent/machine/manifolds.go +++ b/cmd/jujud/agent/machine/manifolds.go @@ -47,7 +47,6 @@ import ( "github.com/juju/juju/internal/worker/credentialvalidator" "github.com/juju/juju/internal/worker/deployer" "github.com/juju/juju/internal/worker/diskmanager" - "github.com/juju/juju/internal/worker/fanconfigurer" "github.com/juju/juju/internal/worker/fortress" "github.com/juju/juju/internal/worker/gate" "github.com/juju/juju/internal/worker/hostkeyreporter" @@ -414,19 +413,12 @@ func IAASManifolds(config ManifoldsConfig) dependency.Manifolds { NewWorker: hostkeyreporter.NewWorker, })), - fanConfigurerName: ifNotMigrating(fanconfigurer.Manifold(fanconfigurer.ManifoldConfig{ - APICallerName: apiCallerName, - Clock: config.Clock, - })), - // The machiner Worker will wait for the identified machine to become // Dying and make it Dead; or until the machine becomes Dead by other - // means. This worker needs to be launched after fanconfigurer - // so that it reports interfaces created by it. + // means. machinerName: ifNotMigrating(machiner.Manifold(machiner.ManifoldConfig{ - AgentName: agentName, - APICallerName: apiCallerName, - FanConfigurerName: fanConfigurerName, + AgentName: agentName, + APICallerName: apiCallerName, })), // The diskmanager worker periodically lists block devices on the @@ -679,7 +671,6 @@ const ( toolsVersionCheckerName = "tools-version-checker" machineActionName = "machine-action-runner" hostKeyReporterName = "host-key-reporter" - fanConfigurerName = "fan-configurer" instanceMutaterName = "instance-mutater" auditConfigUpdaterName = "audit-config-updater" stateConverterName = "state-converter" diff --git a/cmd/jujud/agent/machine/manifolds_test.go b/cmd/jujud/agent/machine/manifolds_test.go index ecee7b47534..33a353384ad 100644 --- a/cmd/jujud/agent/machine/manifolds_test.go +++ b/cmd/jujud/agent/machine/manifolds_test.go @@ -73,7 +73,6 @@ func (s *ManifoldsSuite) TestManifoldNamesIAAS(c *gc.C) { "clock", "deployer", "disk-manager", - "fan-configurer", "host-key-reporter", "instance-mutater", "log-sender", @@ -460,18 +459,6 @@ var expectedMachineManifoldsWithDependenciesIAAS = map[string][]string{ "upgrade-steps-gate", }, - "fan-configurer": { - "agent", - "api-caller", - "api-config-watcher", - "migration-fortress", - "migration-inactive-flag", - "upgrade-check-flag", - "upgrade-check-gate", - "upgrade-steps-flag", - "upgrade-steps-gate", - }, - "host-key-reporter": { "agent", "api-caller", @@ -565,7 +552,6 @@ var expectedMachineManifoldsWithDependenciesIAAS = map[string][]string{ "agent", "api-caller", "api-config-watcher", - "fan-configurer", "migration-fortress", "migration-inactive-flag", "upgrade-check-flag", diff --git a/internal/worker/fanconfigurer/fanconfigurer.go b/internal/worker/fanconfigurer/fanconfigurer.go deleted file mode 100644 index bff5573f664..00000000000 --- a/internal/worker/fanconfigurer/fanconfigurer.go +++ /dev/null @@ -1,128 +0,0 @@ -// Copyright 2017 Canonical Ltd. -// Licensed under the AGPLv3, see LICENCE file for details. - -package fanconfigurer - -import ( - "context" - "fmt" - "os" - "sync" - "time" - - "github.com/juju/clock" - "github.com/juju/errors" - "github.com/juju/worker/v4/catacomb" - - "github.com/juju/juju/core/network" - "github.com/juju/juju/core/watcher" - internallogger "github.com/juju/juju/internal/logger" - "github.com/juju/juju/internal/scriptrunner" -) - -var logger = internallogger.GetLogger("juju.worker.fanconfigurer") - -type FanConfigurer struct { - catacomb catacomb.Catacomb - config FanConfigurerConfig - clock clock.Clock - mu sync.Mutex -} - -type FanConfigurerFacade interface { - FanConfig(context.Context) (network.FanConfig, error) - WatchForFanConfigChanges(context.Context) (watcher.NotifyWatcher, error) -} - -type FanConfigurerConfig struct { - Facade FanConfigurerFacade -} - -// processNewConfig acts on a new fan config. -func (fc *FanConfigurer) processNewConfig(ctx context.Context) error { - logger.Debugf("Processing new fan config") - fc.mu.Lock() - defer fc.mu.Unlock() - - fanConfig, err := fc.config.Facade.FanConfig(ctx) - if err != nil { - return err - } - if len(fanConfig) == 0 { - logger.Debugf("Fan not enabled") - // TODO(wpk) 2017-08-05 We have to clean this up! - return nil - } - - for i, fan := range fanConfig { - logger.Debugf("Adding config for %d: %s %s", i, fan.Underlay, fan.Overlay) - line := fmt.Sprintf("fanatic enable-fan -u %s -o %s", fan.Underlay, fan.Overlay) - result, err := scriptrunner.RunCommand(line, os.Environ(), fc.clock, 5000*time.Millisecond) - logger.Debugf("Launched %s - result %v %v %d", line, string(result.Stdout), string(result.Stderr), result.Code) - if err != nil { - return err - } - } - // TODO(wpk) 2017-09-28 Although officially not needed we do fanctl up -a just to be sure - - // fanatic sometimes fails to bring up interface because of some weird interactions with iptables. - result, err := scriptrunner.RunCommand("fanctl up -a", os.Environ(), fc.clock, 5000*time.Millisecond) - logger.Debugf("Launched fanctl up -a - result %v %v %d", string(result.Stdout), string(result.Stderr), result.Code) - - return err -} - -func NewFanConfigurer(ctx context.Context, config FanConfigurerConfig, clock clock.Clock) (*FanConfigurer, error) { - fc := &FanConfigurer{ - config: config, - clock: clock, - } - // We need to launch it once here to make sure that it's configured right away, - // so that machiner will have a proper fan device address to report back - // to controller. - err := fc.processNewConfig(ctx) - if err != nil { - return nil, errors.Trace(err) - } - err = catacomb.Invoke(catacomb.Plan{ - Site: &fc.catacomb, - Work: fc.loop, - }) - if err != nil { - return nil, errors.Trace(err) - } - return fc, nil -} - -func (fc *FanConfigurer) loop() error { - configWatcher, err := fc.config.Facade.WatchForFanConfigChanges(context.TODO()) - if err != nil { - return errors.Trace(err) - } - if err := fc.catacomb.Add(configWatcher); err != nil { - return errors.Trace(err) - } - - for { - select { - case <-fc.catacomb.Dying(): - return fc.catacomb.ErrDying() - case _, ok := <-configWatcher.Changes(): - if !ok { - return errors.New("FAN configuration watcher closed") - } - if err = fc.processNewConfig(context.TODO()); err != nil { - return errors.Trace(err) - } - } - } -} - -// Kill implements Worker.Kill() -func (fc *FanConfigurer) Kill() { - fc.catacomb.Kill(nil) -} - -// Wait implements Worker.Wait() -func (fc *FanConfigurer) Wait() error { - return fc.catacomb.Wait() -} diff --git a/internal/worker/fanconfigurer/manifold.go b/internal/worker/fanconfigurer/manifold.go deleted file mode 100644 index 4d449ef6798..00000000000 --- a/internal/worker/fanconfigurer/manifold.go +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2017 Canonical Ltd. -// Licensed under the AGPLv3, see LICENCE file for details. - -package fanconfigurer - -import ( - "context" - - "github.com/juju/clock" - "github.com/juju/errors" - "github.com/juju/worker/v4" - "github.com/juju/worker/v4/dependency" - - apifanconfigurer "github.com/juju/juju/api/agent/fanconfigurer" - "github.com/juju/juju/api/base" -) - -// ManifoldConfig defines the names of the manifolds on which a -// Manifold will depend. -type ManifoldConfig struct { - // These are the dependency resource names. - APICallerName string - Clock clock.Clock -} - -// Manifold returns a dependency manifold that runs a fan configurer -// worker, using the resource names defined in the supplied config. -func Manifold(config ManifoldConfig) dependency.Manifold { - return dependency.Manifold{ - Inputs: []string{ - config.APICallerName, - }, - Output: func(in worker.Worker, out interface{}) error { - inWorker, _ := in.(*FanConfigurer) - if inWorker == nil { - return errors.Errorf("in should be a %T; got %T", inWorker, in) - } - switch outPointer := out.(type) { - case *bool: - *outPointer = true - default: - return errors.Errorf("out should be *bool; got %T", out) - } - return nil - }, - Start: func(ctx context.Context, getter dependency.Getter) (worker.Worker, error) { - var apiCaller base.APICaller - if err := getter.Get(config.APICallerName, &apiCaller); err != nil { - return nil, errors.Trace(err) - } - - facade := apifanconfigurer.NewFacade(apiCaller) - - fanconfigurer, err := NewFanConfigurer(ctx, FanConfigurerConfig{ - Facade: facade, - }, config.Clock) - return fanconfigurer, errors.Annotate(err, "creating fanconfigurer orchestrator") - }, - } -} diff --git a/internal/worker/fanconfigurer/package_test.go b/internal/worker/fanconfigurer/package_test.go deleted file mode 100644 index 7755c93400f..00000000000 --- a/internal/worker/fanconfigurer/package_test.go +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2017 Canonical Ltd. -// Licensed under the AGPLv3, see LICENCE file for details. - -package fanconfigurer_test - -import ( - "testing" - - gc "gopkg.in/check.v1" -) - -func Test(t *testing.T) { - gc.TestingT(t) -} diff --git a/internal/worker/machiner/manifold.go b/internal/worker/machiner/manifold.go index ef3eec67a91..cec8d8e9063 100644 --- a/internal/worker/machiner/manifold.go +++ b/internal/worker/machiner/manifold.go @@ -20,9 +20,8 @@ import ( // ManifoldConfig defines the names of the manifolds on which a // Manifold will depend. type ManifoldConfig struct { - AgentName string - APICallerName string - FanConfigurerName string + AgentName string + APICallerName string } // Manifold returns a dependency manifold that runs a machiner worker, using @@ -32,7 +31,6 @@ func Manifold(config ManifoldConfig) dependency.Manifold { Inputs: []string{ config.AgentName, config.APICallerName, - config.FanConfigurerName, }, Start: func(ctx context.Context, getter dependency.Getter) (worker.Worker, error) { var agent agent.Agent @@ -43,13 +41,6 @@ func Manifold(config ManifoldConfig) dependency.Manifold { if err := getter.Get(config.APICallerName, &apiCaller); err != nil { return nil, err } - var fanConfigurerReady bool - if err := getter.Get(config.FanConfigurerName, &fanConfigurerReady); err != nil { - return nil, err - } - if !fanConfigurerReady { - return nil, dependency.ErrMissing - } return newWorker(agent, apiCaller) }, }