/
platform.go
63 lines (48 loc) · 2.27 KB
/
platform.go
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
56
57
58
59
60
61
62
63
// 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 runtime
import (
"context"
"net/netip"
"github.com/cosi-project/runtime/pkg/state"
"github.com/siderolabs/go-procfs/procfs"
"github.com/siderolabs/talos/pkg/machinery/resources/network"
"github.com/siderolabs/talos/pkg/machinery/resources/runtime"
)
// Platform defines the requirements for a platform.
type Platform interface {
// Name returns platform name.
Name() string
// Mode returns platform mode (metal, cloud or container).
Mode() Mode
// Configuration fetches the machine configuration from platform-specific location.
//
// On cloud-like platform it is user-data in metadata service.
// For metal platform that is either `talos.config=` URL or mounted ISO image.
Configuration(context.Context, state.State) ([]byte, error)
// KernelArgs returns additional kernel arguments which should be injected for the kernel boot.
KernelArgs(arch string) procfs.Parameters
// NetworkConfiguration fetches network configuration from the platform metadata.
//
// Controller will run this in function a separate goroutine, restarting it
// on error. Platform is expected to deliver network configuration over the channel,
// including updates to the configuration over time.
NetworkConfiguration(context.Context, state.State, chan<- *PlatformNetworkConfig) error
}
// PlatformNetworkConfig describes the network configuration produced by the platform.
//
// This structure is marshaled to STATE partition to persist cached network configuration across
// reboots.
type PlatformNetworkConfig struct {
Addresses []network.AddressSpecSpec `yaml:"addresses"`
Links []network.LinkSpecSpec `yaml:"links"`
Routes []network.RouteSpecSpec `yaml:"routes"`
Hostnames []network.HostnameSpecSpec `yaml:"hostnames"`
Resolvers []network.ResolverSpecSpec `yaml:"resolvers"`
TimeServers []network.TimeServerSpecSpec `yaml:"timeServers"`
Operators []network.OperatorSpecSpec `yaml:"operators"`
ExternalIPs []netip.Addr `yaml:"externalIPs"`
Probes []network.ProbeSpecSpec `yaml:"probes,omitempty"`
Metadata *runtime.PlatformMetadataSpec `yaml:"metadata,omitempty"`
}