mantle: github.com/bgilbert/mantle/platform Index | Files | Directories

package platform

import "github.com/bgilbert/mantle/platform"

Index

Package Files

cluster.go flight.go journal.go platform.go util.go

func CheckMachine Uses

func CheckMachine(ctx context.Context, m Machine) error

CheckMachine tests a machine for various error conditions such as ssh being available and no systemd units failing at the time ssh is reachable. It also ensures the remote system is running Container Linux by CoreOS or Red Hat CoreOS.

TODO(mischief): better error messages.

func EnableSelinux Uses

func EnableSelinux(m Machine) error

Enable SELinux on a machine (skip on machines without SELinux support)

func InstallFile Uses

func InstallFile(in io.Reader, m Machine, to string) error

InstallFile copies data from in to the path to on m.

func Manhole Uses

func Manhole(m Machine) error

Manhole connects os.Stdin, os.Stdout, and os.Stderr to an interactive shell session on the Machine m. Manhole blocks until the shell session has ended. If os.Stdin does not refer to a TTY, Manhole returns immediately with a nil error.

func ReadFile Uses

func ReadFile(m Machine, path string) (io.ReadCloser, error)

ReadFile returns a io.ReadCloser that streams the requested file. The caller should close the reader when finished.

func RebootMachine Uses

func RebootMachine(m Machine, j *Journal) error

RebootMachine will reboot a given machine, provided the machine's journal.

func StartMachine Uses

func StartMachine(m Machine, j *Journal) error

StartMachine will start a given machine, provided the machine's journal.

func StartReboot Uses

func StartReboot(m Machine) error

Reboots a machine, stopping ssh first. Afterwards run CheckMachine to verify the system is back and operational.

func TransferFile Uses

func TransferFile(src Machine, srcPath string, dst Machine, dstPath string) error

Copy a file between two machines in a cluster.

type BaseCluster Uses

type BaseCluster struct {
    // contains filtered or unexported fields
}

func NewBaseCluster Uses

func NewBaseCluster(bf *BaseFlight, rconf *RuntimeConfig) (*BaseCluster, error)

func (*BaseCluster) AddMach Uses

func (bc *BaseCluster) AddMach(m Machine)

func (*BaseCluster) ConsoleOutput Uses

func (bc *BaseCluster) ConsoleOutput() map[string]string

func (*BaseCluster) DelMach Uses

func (bc *BaseCluster) DelMach(m Machine)

func (*BaseCluster) Destroy Uses

func (bc *BaseCluster) Destroy()

Destroy destroys each machine in the cluster.

func (*BaseCluster) Distribution Uses

func (bc *BaseCluster) Distribution() string

func (*BaseCluster) GetDiscoveryURL Uses

func (bc *BaseCluster) GetDiscoveryURL(size int) (string, error)

XXX(mischief): i don't really think this belongs here, but it completes the interface we've established.

func (*BaseCluster) JournalOutput Uses

func (bc *BaseCluster) JournalOutput() map[string]string

func (*BaseCluster) Keys Uses

func (bc *BaseCluster) Keys() ([]*agent.Key, error)

func (*BaseCluster) Machines Uses

func (bc *BaseCluster) Machines() []Machine

func (*BaseCluster) Name Uses

func (bc *BaseCluster) Name() string

func (*BaseCluster) PasswordSSHClient Uses

func (bc *BaseCluster) PasswordSSHClient(ip string, user string, password string) (*ssh.Client, error)

func (*BaseCluster) Platform Uses

func (bc *BaseCluster) Platform() Name

func (*BaseCluster) RenderUserData Uses

func (bc *BaseCluster) RenderUserData(userdata *conf.UserData, ignitionVars map[string]string) (*conf.Conf, error)

func (*BaseCluster) RuntimeConf Uses

func (bc *BaseCluster) RuntimeConf() RuntimeConfig

func (*BaseCluster) SSH Uses

func (bc *BaseCluster) SSH(m Machine, cmd string) ([]byte, []byte, error)

SSH executes the given command, cmd, on the given Machine, m. It returns the stdout and stderr of the command and an error. Leading and trailing whitespace is trimmed from each.

func (*BaseCluster) SSHClient Uses

func (bc *BaseCluster) SSHClient(ip string) (*ssh.Client, error)

func (*BaseCluster) UserSSHClient Uses

func (bc *BaseCluster) UserSSHClient(ip, user string) (*ssh.Client, error)

type BaseFlight Uses

type BaseFlight struct {
    // contains filtered or unexported fields
}

func NewBaseFlight Uses

func NewBaseFlight(opts *Options, platform Name, ctPlatform string) (*BaseFlight, error)

func NewBaseFlightWithDialer Uses

func NewBaseFlightWithDialer(opts *Options, platform Name, ctPlatform string, dialer network.Dialer) (*BaseFlight, error)

func (*BaseFlight) AddCluster Uses

func (bf *BaseFlight) AddCluster(c Cluster)

func (*BaseFlight) Clusters Uses

func (bf *BaseFlight) Clusters() []Cluster

func (*BaseFlight) DelCluster Uses

func (bf *BaseFlight) DelCluster(c Cluster)

func (*BaseFlight) Destroy Uses

func (bf *BaseFlight) Destroy()

Destroy destroys each Cluster in the Flight and closes the SSH agent.

func (*BaseFlight) Keys Uses

func (bf *BaseFlight) Keys() ([]*agent.Key, error)

func (*BaseFlight) Name Uses

func (bf *BaseFlight) Name() string

func (*BaseFlight) Platform Uses

func (bf *BaseFlight) Platform() Name

type Cluster Uses

type Cluster interface {
    // Platform returns the name of the platform.
    Platform() Name

    // Name returns a unique name for the Cluster.
    Name() string

    // NewMachine creates a new Container Linux machine.
    NewMachine(userdata *conf.UserData) (Machine, error)

    // Machines returns a slice of the active machines in the Cluster.
    Machines() []Machine

    // GetDiscoveryURL returns a new etcd discovery URL.
    GetDiscoveryURL(size int) (string, error)

    // Destroy terminates each machine in the cluster and frees any other
    // associated resources. It should log any failures; since they are not
    // actionable, it does not return an error
    Destroy()

    // ConsoleOutput returns a map of console output from destroyed
    // cluster machines.
    ConsoleOutput() map[string]string

    // JournalOutput returns a map of journal output from destroyed
    // cluster machines.
    JournalOutput() map[string]string
}

Cluster represents a cluster of machines within a single Flight.

type Flight Uses

type Flight interface {
    // NewCluster creates a new Cluster.
    NewCluster(rconf *RuntimeConfig) (Cluster, error)

    // Name returns a unique name for the Flight.
    Name() string

    // Platform returns the name of the platform.
    Platform() Name

    // Clusters returns a slice of the active Clusters.
    Clusters() []Cluster

    // Destroy terminates each cluster and frees any other associated
    // resources.  It should log any failures; since they are not
    // actionable, it does not return an error.
    Destroy()
}

Flight represents a group of Clusters within a single platform.

type Journal Uses

type Journal struct {
    // contains filtered or unexported fields
}

Journal manages recording the journal of a Machine.

func NewJournal Uses

func NewJournal(dir string) (*Journal, error)

NewJournal creates a Journal recorder that will log to "journal.txt" and "journal-raw.txt.gz" inside the given output directory.

func (*Journal) Destroy Uses

func (j *Journal) Destroy()

func (*Journal) Read Uses

func (j *Journal) Read() ([]byte, error)

There is no guarantee that anything is returned if called before Destroy

func (*Journal) Start Uses

func (j *Journal) Start(ctx context.Context, m Machine) error

Start begins/resumes streaming the system journal to journal.txt.

type Machine Uses

type Machine interface {
    // ID returns the plaform-specific machine identifier.
    ID() string

    // IP returns the machine's public IP.
    IP() string

    // PrivateIP returns the machine's private IP.
    PrivateIP() string

    // RuntimeConf returns the cluster's runtime configuration.
    RuntimeConf() RuntimeConfig

    // SSHClient establishes a new SSH connection to the machine.
    SSHClient() (*ssh.Client, error)

    // PasswordSSHClient establishes a new SSH connection using the provided credentials.
    PasswordSSHClient(user string, password string) (*ssh.Client, error)

    // SSH runs a single command over a new SSH connection.
    SSH(cmd string) ([]byte, []byte, error)

    // Reboot restarts the machine and waits for it to come back.
    Reboot() error

    // Destroy terminates the machine and frees associated resources. It should log
    // any failures; since they are not actionable, it does not return an error.
    Destroy()

    // ConsoleOutput returns the machine's console output if available,
    // or an empty string.  Only expected to be valid after Destroy().
    ConsoleOutput() string

    // JournalOutput returns the machine's journal output if available,
    // or an empty string.  Only expected to be valid after Destroy().
    JournalOutput() string
}

Machine represents a Container Linux instance.

func NewMachines Uses

func NewMachines(c Cluster, userdata *conf.UserData, n int) ([]Machine, error)

NewMachines spawns n instances in cluster c, with each instance passed the same userdata.

type Name Uses

type Name string

Name is a unique identifier for a platform.

type Options Uses

type Options struct {
    BaseName       string
    Distribution   string
    SystemdDropins []SystemdDropin
}

Options contains the base options for all clusters.

type RuntimeConfig Uses

type RuntimeConfig struct {
    OutputDir string

    NoSSHKeyInUserData bool // don't inject SSH key into Ignition/cloud-config
    NoSSHKeyInMetadata bool // don't add SSH key to platform metadata
    NoEnableSelinux    bool // don't enable selinux when starting or rebooting a machine
    AllowFailedUnits   bool // don't fail CheckMachine if a systemd unit has failed
}

RuntimeConfig contains cluster-specific configuration.

type SystemdDropin Uses

type SystemdDropin struct {
    Unit     string
    Name     string
    Contents string
}

SystemdDropin is a userdata type agnostic struct representing a systemd dropin

Directories

PathSynopsis
conf
local

Package platform imports 22 packages (graph). Updated 2019-03-07. Refresh now. Tools for package owners.