talos/internal/pkg/install/options.go
Andrey Smirnov 139c62d762
feat: allow upgrades in maintenance mode (only over SideroLink)
This implements a simple way to upgrade Talos node running in
maintenance mode (only if Talos is installed, i.e. if `STATE` and
`EPHEMERAL` partitions are wiped).

Upgrade is only available over SideroLink for security reasons.

Upgrade in maintenance mode doesn't support any options, and it works
without machine configuration, so proxy environment variables are not
available, registry mirrors can't be used, and extensions are not
installed.

Fixes #6224

Signed-off-by: Andrey Smirnov <andrey.smirnov@talos-systems.com>
2022-09-30 21:16:15 +04:00

90 lines
1.6 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 install
// Option is a functional option.
type Option func(o *Options) error
// Options describes the install options.
type Options struct {
Pull bool
Force bool
Upgrade bool
Zero bool
ExtraKernelArgs []string
}
// DefaultInstallOptions returns default options.
func DefaultInstallOptions() Options {
return Options{
Pull: true,
}
}
// Apply list of Option.
func (o *Options) Apply(opts ...Option) error {
for _, opt := range opts {
if err := opt(o); err != nil {
return err
}
}
return nil
}
// WithOptions sets Options as a whole.
func WithOptions(opts Options) Option {
return func(o *Options) error {
*o = opts
return nil
}
}
// WithPull sets the pull option.
func WithPull(b bool) Option {
return func(o *Options) error {
o.Pull = b
return nil
}
}
// WithForce sets the force option.
func WithForce(b bool) Option {
return func(o *Options) error {
o.Force = b
return nil
}
}
// WithUpgrade sets the upgrade option.
func WithUpgrade(b bool) Option {
return func(o *Options) error {
o.Upgrade = b
return nil
}
}
// WithZero sets the zero option.
func WithZero(b bool) Option {
return func(o *Options) error {
o.Zero = b
return nil
}
}
// WithExtraKernelArgs sets the extra args.
func WithExtraKernelArgs(s []string) Option {
return func(o *Options) error {
o.ExtraKernelArgs = s
return nil
}
}