talos/internal/pkg/tui/installer/connection.go
Artem Chernyshev 63e0d02aa9 feat: add TUI for configuring network interfaces settings
Allows configuring:
- cidr.
- dhcp enable/disable.
- MTU.
- Ignore.
- Dhcp metric.

Signed-off-by: Artem Chernyshev <artem.0xD2@gmail.com>
2020-12-03 11:05:55 -08:00

88 lines
2.9 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 installer
import (
"context"
"google.golang.org/grpc"
"github.com/talos-systems/talos/pkg/machinery/api/machine"
"github.com/talos-systems/talos/pkg/machinery/api/network"
"github.com/talos-systems/talos/pkg/machinery/api/storage"
"github.com/talos-systems/talos/pkg/machinery/client"
)
// Connection unifies clients for bootstrap node and the node which is being configured.
type Connection struct {
nodeEndpoint string
bootstrapEndpoint string
nodeClient *client.Client
bootstrapClient *client.Client
nodeCtx context.Context
bootstrapCtx context.Context
}
// NewConnection creates new installer connection.
func NewConnection(ctx context.Context, nodeClient *client.Client, endpoint string, options ...Option) (*Connection, error) {
c := &Connection{
nodeEndpoint: endpoint,
nodeClient: nodeClient,
nodeCtx: ctx,
}
for _, opt := range options {
err := opt(c)
if err != nil {
return nil, err
}
}
return c, nil
}
// GenerateConfiguration calls GenerateConfiguration on the target/bootstrap node.
func (c *Connection) GenerateConfiguration(req *machine.GenerateConfigurationRequest, callOptions ...grpc.CallOption) (*machine.GenerateConfigurationResponse, error) {
if c.bootstrapClient != nil {
return c.bootstrapClient.GenerateConfiguration(c.bootstrapCtx, req, callOptions...)
}
return c.nodeClient.GenerateConfiguration(c.nodeCtx, req, callOptions...)
}
// ApplyConfiguration calls ApplyConfiguration on the target node using appropriate node context.
func (c *Connection) ApplyConfiguration(req *machine.ApplyConfigurationRequest, callOptions ...grpc.CallOption) (*machine.ApplyConfigurationResponse, error) {
return c.nodeClient.ApplyConfiguration(c.nodeCtx, req, callOptions...)
}
// Disks get disks list from the target node.
func (c *Connection) Disks(callOptions ...grpc.CallOption) (*storage.DisksResponse, error) {
return c.nodeClient.Disks(c.nodeCtx, callOptions...)
}
// Interfaces get list of network interfaces.
func (c *Connection) Interfaces(callOptions ...grpc.CallOption) (*network.InterfacesResponse, error) {
return c.nodeClient.Interfaces(c.nodeCtx, callOptions...)
}
// ExpandingCluster check if bootstrap node is set.
func (c *Connection) ExpandingCluster() bool {
return c.bootstrapClient != nil
}
// Option represents a single connection option.
type Option func(c *Connection) error
// WithBootstrapNode configures bootstrap node endpoint.
func WithBootstrapNode(ctx context.Context, bootstrapClient *client.Client, bootstrapNode string) Option {
return func(c *Connection) error {
c.bootstrapEndpoint = bootstrapNode
c.bootstrapClient = bootstrapClient
c.bootstrapCtx = ctx
return nil
}
}