File: generators.go

package info (click to toggle)
distrobuilder 3.2-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,468 kB
  • sloc: sh: 204; makefile: 75
file content (55 lines) | stat: -rw-r--r-- 1,650 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package generators

import (
	"errors"

	"github.com/sirupsen/logrus"

	"github.com/lxc/distrobuilder/image"
	"github.com/lxc/distrobuilder/shared"
)

// ErrNotSupported returns a "Not supported" error.
var ErrNotSupported = errors.New("Not supported")

// ErrUnknownGenerator represents the unknown generator error.
var ErrUnknownGenerator = errors.New("Unknown generator")

type generator interface {
	init(logger *logrus.Logger, cacheDir string, sourceDir string, defFile shared.DefinitionFile, def shared.Definition)

	Generator
}

// Generator interface.
type Generator interface {
	RunLXC(*image.LXCImage, shared.DefinitionTargetLXC) error
	RunIncus(*image.IncusImage, shared.DefinitionTargetIncus) error
	Run() error
}

var generators = map[string]func() generator{
	"cloud-init":  func() generator { return &cloudInit{} },
	"copy":        func() generator { return &copy{} },
	"dump":        func() generator { return &dump{} },
	"fstab":       func() generator { return &fstab{} },
	"hostname":    func() generator { return &hostname{} },
	"hosts":       func() generator { return &hosts{} },
	"incus-agent": func() generator { return &incusAgent{} },
	"remove":      func() generator { return &remove{} },
	"template":    func() generator { return &template{} },
}

// Load loads and initializes a generator.
func Load(generatorName string, logger *logrus.Logger, cacheDir string, sourceDir string, defFile shared.DefinitionFile, def shared.Definition) (Generator, error) {
	df, ok := generators[generatorName]
	if !ok {
		return nil, ErrUnknownGenerator
	}

	d := df()

	d.init(logger, cacheDir, sourceDir, defFile, def)

	return d, nil
}