1
// Copyright 2016 Canonical Ltd.
2
// Licensed under the AGPLv3, see LICENCE file for details.
4
package hostkeyreporter
9
"github.com/juju/errors"
10
"gopkg.in/juju/names.v2"
12
"github.com/juju/juju/agent"
13
"github.com/juju/juju/api/base"
14
"github.com/juju/juju/worker"
15
"github.com/juju/juju/worker/dependency"
18
// ManifoldConfig defines the names of the manifolds on which the
19
// hostkeyreporter worker depends.
20
type ManifoldConfig struct {
25
NewFacade func(base.APICaller) (Facade, error)
26
NewWorker func(Config) (worker.Worker, error)
29
// validate is called by start to check for bad configuration.
30
func (config ManifoldConfig) validate() error {
31
if config.AgentName == "" {
32
return errors.NotValidf("empty AgentName")
34
if config.APICallerName == "" {
35
return errors.NotValidf("empty APICallerName")
37
if config.NewFacade == nil {
38
return errors.NotValidf("nil NewFacade")
40
if config.NewWorker == nil {
41
return errors.NotValidf("nil NewWorker")
46
// start is a StartFunc for a Worker manifold.
47
func (config ManifoldConfig) start(context dependency.Context) (worker.Worker, error) {
48
if runtime.GOOS == "windows" {
49
logger.Debugf("no SSH host keys to report on Windows machines")
50
return nil, dependency.ErrUninstall
53
if err := config.validate(); err != nil {
54
return nil, errors.Trace(err)
57
if err := context.Get(config.AgentName, &agent); err != nil {
58
return nil, errors.Trace(err)
60
var apiCaller base.APICaller
61
if err := context.Get(config.APICallerName, &apiCaller); err != nil {
62
return nil, errors.Trace(err)
65
tag := agent.CurrentConfig().Tag()
66
if _, ok := tag.(names.MachineTag); !ok {
67
return nil, errors.New("hostkeyreporter may only be used with a machine agent")
70
facade, err := config.NewFacade(apiCaller)
72
return nil, errors.Trace(err)
75
worker, err := config.NewWorker(Config{
78
RootDir: config.RootDir,
81
return nil, errors.Trace(err)
86
// Manifold returns a dependency manifold that runs the migration
88
func Manifold(config ManifoldConfig) dependency.Manifold {
89
return dependency.Manifold{