Andrew Rynhard 4ae8186107 feat: add configurator interface
This moves from translating a config into an internal config
representation, to using an interface. The idea is that an interface
gives us stronger compile time checks, and will prevent us from having to copy
from on struct to another. As long as a concrete type implements the
Configurator interface, it can be used to provide instructions to Talos.

Signed-off-by: Andrew Rynhard <andrew@andrewrynhard.com>
2019-10-04 07:53:09 -07:00

39 lines
1.3 KiB
Go

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package initializer
import (
"github.com/talos-systems/talos/internal/pkg/platform"
"github.com/talos-systems/talos/internal/pkg/runtime"
"github.com/talos-systems/talos/internal/pkg/runtime/initializer/cloud"
"github.com/talos-systems/talos/internal/pkg/runtime/initializer/container"
"github.com/talos-systems/talos/internal/pkg/runtime/initializer/interactive"
"github.com/talos-systems/talos/internal/pkg/runtime/initializer/metal"
"github.com/talos-systems/talos/pkg/config/machine"
)
// Initializer defines a process for initializing the system based on the
// environment it is in.
type Initializer interface {
Initialize(platform.Platform, machine.Install) error
}
// New initializes and returns and Initializer based on the runtime mode.
func New(mode runtime.Mode) (Initializer, error) {
switch mode {
case runtime.Interactive:
return &interactive.Interactive{}, nil
case runtime.Metal:
return &metal.Metal{}, nil
case runtime.Cloud:
return &cloud.Cloud{}, nil
case runtime.Container:
return &container.Container{}, nil
default:
}
return nil, nil
}