phase

package
v0.2.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 28, 2026 License: Apache-2.0 Imports: 39 Imported by: 0

Documentation

Overview

Package phase is all the various phases used for bootstrapping a cluster. The phase files are named in a rough order used during and install; - 0x are for preconnection resources, along with ssh-ing into the node - 1x are used to gather information and start the prep-work for the cluster - 2x are for installing files for the distro engine, e.i. rpm's, apt's, or binary files - 3x are for starting the engine or for upgrading an existing install - 5x are for resetting the engine from the nodes - 9x are last minute things and finally disconnecting from a node - ext are files that are currently not used but may be incorporated later

Index

Constants

View Source
const (
	// ContainerSELinux package name
	ContainerSELinux = "container-selinux"
)
View Source
const (
	// FAPOLICYD name of the service for fapolicyd
	FAPOLICYD = "fapolicyd"
)
View Source
const (
	// FAPolicydRuleFile path on the host
	FAPolicydRuleFile = "/etc/fapolicyd/rules.d/31-cargoship.rules"
)
View Source
const (
	// FIREWALLD name of the service for firewalld
	FIREWALLD = "firewalld"
)
View Source
const (
	// UnknownVersion for when the version is not set
	UnknownVersion = "v0.0.0"
)

Variables

View Source
var ErrNoControllers = errors.New("no controllers are running")

ErrNoControllers an error for when no controllers are running

View Source
var Force bool

Force is used by various phases to attempt a forced installation

View Source
var (
	// Interval is the time to wait between retry attempts
	Interval = 10 * time.Second
)
View Source
var NoWait bool

NoWait is used by various phases to decide if node ready state should be waited for or not

Functions

This section is empty.

Types

type APTUploadFiles

type APTUploadFiles struct {
	UploadFilesCommon
}

APTUploadFiles implements a phase which upload files to hosts

func (*APTUploadFiles) Explanation

func (p *APTUploadFiles) Explanation() string

Explanation about the current phase, used for documentation generation

func (*APTUploadFiles) Prepare

Prepare the phase

func (*APTUploadFiles) Run

func (p *APTUploadFiles) Run(ctx context.Context) (err error)

Run the phase

func (*APTUploadFiles) Title

func (p *APTUploadFiles) Title() string

Title for the phase

type BINUploadFiles

type BINUploadFiles struct {
	UploadFilesCommon
	Distro distrocfg.Distro
}

BINUploadFiles implements a phase which upload files to hosts

func (*BINUploadFiles) Explanation

func (p *BINUploadFiles) Explanation() string

Explanation about the current phase, used for documentation generation

func (*BINUploadFiles) Prepare

Prepare the phase

func (*BINUploadFiles) Run

func (p *BINUploadFiles) Run(ctx context.Context) (err error)

Run the phase

func (*BINUploadFiles) Title

func (p *BINUploadFiles) Title() string

Title for the phase

type ConfigureEngine

type ConfigureEngine struct {
	GenericPhase
	Distro distrocfg.Distro
	// contains filtered or unexported fields
}

ConfigureEngine writes the engine configuration to host engine config dir

func (*ConfigureEngine) Explanation

func (p *ConfigureEngine) Explanation() string

Explanation about the current phase, used for documentation generation

func (*ConfigureEngine) Prepare

Prepare the phase

func (*ConfigureEngine) Run

func (p *ConfigureEngine) Run(ctx context.Context) error

Run the phase title

func (*ConfigureEngine) Title

func (p *ConfigureEngine) Title() string

Title returns the phase title

type ConfigureFirewall

type ConfigureFirewall struct {
	GenericPhase
	Distro  distrocfg.Distro
	Enabled bool
	// contains filtered or unexported fields
}

ConfigureFirewall state

func (*ConfigureFirewall) Explanation

func (p *ConfigureFirewall) Explanation() string

Explanation about the current phase, used for documentation generation

func (*ConfigureFirewall) Prepare

Prepare the phase

func (*ConfigureFirewall) Run

func (p *ConfigureFirewall) Run(ctx context.Context) error

Run the phase

func (*ConfigureFirewall) ShouldRun

func (p *ConfigureFirewall) ShouldRun() bool

ShouldRun is true when there is a host with selinux or fapolicyd on the hosts

func (*ConfigureFirewall) Title

func (p *ConfigureFirewall) Title() string

Title for the phase

type ConfigureFirewallPorts

type ConfigureFirewallPorts struct {
	GenericPhase
	Enabled bool
	// contains filtered or unexported fields
}

ConfigureFirewallPorts gathers information about hosts, such as if the engine is already up and running

func (*ConfigureFirewallPorts) Explanation

func (p *ConfigureFirewallPorts) Explanation() string

Explanation about the current phase, used for documentation generation

func (*ConfigureFirewallPorts) Prepare

Prepare the phase

func (*ConfigureFirewallPorts) Run

Run the phase

func (*ConfigureFirewallPorts) ShouldRun

func (p *ConfigureFirewallPorts) ShouldRun() bool

ShouldRun is true when there is a host with selinux or fapolicyd on the hosts

func (*ConfigureFirewallPorts) Title

func (p *ConfigureFirewallPorts) Title() string

Title for the phase

type Connect

type Connect struct {
	GenericPhase
}

Connect connects to each of the hosts

func (*Connect) Explanation

func (p *Connect) Explanation() string

Explanation about the current phase, used for documentation generation

func (*Connect) Run

func (p *Connect) Run(ctx context.Context) error

Run the phase

func (*Connect) Title

func (p *Connect) Title() string

Title for the phase

type DaemonReload

type DaemonReload struct {
	GenericPhase
}

DaemonReload phase runs `systemctl daemon-reload` or equivalent on all hosts.

func (*DaemonReload) Explanation

func (p *DaemonReload) Explanation() string

Explanation about the current phase, used for documentation generation

func (*DaemonReload) Run

func (p *DaemonReload) Run(ctx context.Context) error

Run the phase

func (*DaemonReload) ShouldRun

func (p *DaemonReload) ShouldRun() bool

ShouldRun is true when there are controllers that needs to be reset

func (*DaemonReload) Title

func (p *DaemonReload) Title() string

Title for the phase

type DeleteCommon

type DeleteCommon struct {
	GenericPhase
	Distro distrocfg.Distro
	// contains filtered or unexported fields
}

DeleteCommon phase state

func (*DeleteCommon) Prepare

Prepare the phase

type DeleteControllers

type DeleteControllers struct {
	DeleteCommon
	NoDrain bool
	// contains filtered or unexported fields
}

DeleteControllers phase state

func (*DeleteControllers) Explanation

func (p *DeleteControllers) Explanation() string

Explanation about the current phase, used for documentation generation

func (*DeleteControllers) Prepare

Prepare the phase

func (*DeleteControllers) Run

func (p *DeleteControllers) Run(ctx context.Context) error

Run the phase

func (*DeleteControllers) ShouldRun

func (p *DeleteControllers) ShouldRun() bool

ShouldRun is true when this phase is enabled

func (*DeleteControllers) Title

func (p *DeleteControllers) Title() string

Title for the phase

type DeleteWorkers

type DeleteWorkers struct {
	DeleteCommon
	NoDrain          bool
	WorkerConcurrent int
	// contains filtered or unexported fields
}

DeleteWorkers phase state

func (*DeleteWorkers) Explanation

func (p *DeleteWorkers) Explanation() string

Explanation about the current phase, used for documentation generation

func (*DeleteWorkers) Prepare

Prepare the phase

func (*DeleteWorkers) Run

func (p *DeleteWorkers) Run(ctx context.Context) error

Run the phase

func (*DeleteWorkers) ShouldRun

func (p *DeleteWorkers) ShouldRun() bool

ShouldRun is true when this phase is enabled

func (*DeleteWorkers) Title

func (p *DeleteWorkers) Title() string

Title for the phase

type DetectOS

type DetectOS struct {
	GenericPhase
}

DetectOS performs remote OS detection

func (*DetectOS) Explanation

func (p *DetectOS) Explanation() string

Explanation about the current phase, used for documentation generation

func (*DetectOS) Run

func (p *DetectOS) Run(ctx context.Context) error

Run the phase

func (*DetectOS) Title

func (p *DetectOS) Title() string

Title for the phase

type Disconnect

type Disconnect struct {
	GenericPhase
}

Disconnect disconnects from the hosts

func (*Disconnect) DryRun

func (p *Disconnect) DryRun() error

DryRun cleans up the temporary binary from the hosts

func (*Disconnect) Explanation

func (p *Disconnect) Explanation() string

Explanation about the current phase, used for documentation generation

func (*Disconnect) Run

func (p *Disconnect) Run(ctx context.Context) error

Run the phase

func (*Disconnect) Title

func (p *Disconnect) Title() string

Title for the phase

type FirewallNodeConfig

type FirewallNodeConfig struct {
	XMLName xml.Name `xml:"ipset"`
	Type    string   `xml:"type,attr"`
	Short   string   `xml:"short"`
	Long    string   `xml:"description"`
	Entries []string `xml:"entry"`
}

FirewallNodeConfig used to create firewalld config for an array of node ip address

type FirewallPortConfig

type FirewallPortConfig struct {
	XMLName xml.Name               `xml:"service"`
	Short   string                 `xml:"short"`
	Ports   []cluster.ZarfHostPort `xml:"port"`
}

FirewallPortConfig used to create firewalld config for an array of port(s)

type GatherFacts

type GatherFacts struct {
	GenericPhase
}

GatherFacts gathers information about hosts

func (*GatherFacts) Explanation

func (p *GatherFacts) Explanation() string

Explanation about the current phase, used for documentation generation

func (*GatherFacts) Run

func (p *GatherFacts) Run(ctx context.Context) error

Run the phase

func (*GatherFacts) Title

func (p *GatherFacts) Title() string

Title for the phase

type GatherFactsDistro

type GatherFactsDistro struct {
	GenericPhase
	Distro distrocfg.Distro
	// contains filtered or unexported fields
}

GatherFactsDistro state

func (*GatherFactsDistro) Explanation

func (p *GatherFactsDistro) Explanation() string

Explanation about the current phase, used for documentation generation

func (*GatherFactsDistro) Prepare

Prepare the phase

func (*GatherFactsDistro) Run

func (p *GatherFactsDistro) Run(ctx context.Context) (err error)

Run the phase

func (*GatherFactsDistro) Title

func (p *GatherFactsDistro) Title() string

Title for the phase

type GenericPhase

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

GenericPhase state

func (*GenericPhase) GetConfig

func (p *GenericPhase) GetConfig() *cluster.ZarfCluster

GetConfig is an accessor to phase Config

func (*GenericPhase) GetDistro

func (p *GenericPhase) GetDistro() *distro.ZarfDistro

GetDistro is an accessor to phase Distro

func (*GenericPhase) Prepare

Prepare the phase

func (*GenericPhase) SetManager

func (p *GenericPhase) SetManager(m *Manager)

SetManager adds a reference to the phase manager

func (*GenericPhase) VersionGreater

func (p *GenericPhase) VersionGreater(host *cluster.ZarfHost, version string) bool

VersionGreater if host version is greater then the distro version

func (*GenericPhase) VersionLess

func (p *GenericPhase) VersionLess(host *cluster.ZarfHost, version string) bool

VersionLess if host version is less then the distro version

func (*GenericPhase) Wet

func (p *GenericPhase) Wet(host fmt.Stringer, msg string, funcs ...errorfunc) error

Wet is a shorthand for manager.Wet

type InitializeControllers

type InitializeControllers struct {
	GenericPhase
	Distro distrocfg.Distro
	// contains filtered or unexported fields
}

InitializeControllers phase state

func (*InitializeControllers) Explanation

func (p *InitializeControllers) Explanation() string

Explanation about the current phase, used for documentation generation

func (*InitializeControllers) Prepare

Prepare the phase

func (*InitializeControllers) Run

Run the phase

func (*InitializeControllers) ShouldRun

func (p *InitializeControllers) ShouldRun() bool

ShouldRun is true when there are workers

func (*InitializeControllers) Title

func (p *InitializeControllers) Title() string

Title for the phase

type InitializeWorkers

type InitializeWorkers struct {
	GenericPhase
	Distro distrocfg.Distro

	WorkerConcurrent int
	// contains filtered or unexported fields
}

InitializeWorkers phase state

func (*InitializeWorkers) Explanation

func (p *InitializeWorkers) Explanation() string

Explanation about the current phase, used for documentation generation

func (*InitializeWorkers) Prepare

Prepare the phase

func (*InitializeWorkers) Run

func (p *InitializeWorkers) Run(ctx context.Context) error

Run the phase

func (*InitializeWorkers) ShouldRun

func (p *InitializeWorkers) ShouldRun() bool

ShouldRun is true when there are workers

func (*InitializeWorkers) Title

func (p *InitializeWorkers) Title() string

Title for the phase

type InstallFapolicy

type InstallFapolicy struct {
	GenericPhase
	Enabled bool
	// contains filtered or unexported fields
}

InstallFapolicy installs required packages and so on on the hosts.

func (*InstallFapolicy) Prepare

Prepare the phase

func (*InstallFapolicy) Run

func (p *InstallFapolicy) Run(ctx context.Context) error

Run the phase

func (*InstallFapolicy) ShouldRun

func (p *InstallFapolicy) ShouldRun() bool

ShouldRun is true when there is a host with selinux or fapolicyd on the hosts

func (*InstallFapolicy) Title

func (p *InstallFapolicy) Title() string

Title for the phase

type KubeConfig

type KubeConfig struct {
	GenericPhase
	Distro    distrocfg.Distro
	ClusterID string
	Enabled   bool
	// contains filtered or unexported fields
}

KubeConfig phase state

func (*KubeConfig) Explanation

func (p *KubeConfig) Explanation() string

Explanation about the current phase, used for documentation generation

func (*KubeConfig) Prepare

Prepare the phase

func (*KubeConfig) Run

func (p *KubeConfig) Run(_ context.Context) error

Run the phase

func (*KubeConfig) Title

func (p *KubeConfig) Title() string

Title for the phase

type Lock

type Lock struct {
	GenericPhase
	// contains filtered or unexported fields
}

Lock phase state

func (*Lock) Cancel

func (p *Lock) Cancel(_ context.Context)

Cancel releases the lock

func (*Lock) CleanUp

func (p *Lock) CleanUp()

CleanUp calls Cancel to release the lock

func (*Lock) Explanation

func (p *Lock) Explanation() string

Explanation about the current phase, used for documentation generation

func (*Lock) Prepare

func (p *Lock) Prepare(ctx context.Context, c *cluster.ZarfCluster, _ *distro.ZarfDistro) error

Prepare the phase

func (*Lock) Run

func (p *Lock) Run(ctx context.Context) error

Run the phase

func (*Lock) Title

func (p *Lock) Title() string

Title for the phase

func (*Lock) UnlockPhase

func (p *Lock) UnlockPhase() Phase

UnlockPhase returns an unlock phase for this lock phase

type Manager

type Manager struct {
	Config            *cluster.ZarfCluster
	Distro            *distro.ZarfDistro
	DistroID          string
	Concurrency       int
	ConcurrentUploads int
	DryRun            bool
	Writer            io.Writer
	TempDirectory     string
	Timeout           time.Duration
	// contains filtered or unexported fields
}

Manager executes phases to construct the cluster

func NewManager

func NewManager(config *cluster.ZarfCluster, distro distrocfg.Distro) (*Manager, error)

NewManager creates a new Manager

func (*Manager) AddPhase

func (m *Manager) AddPhase(p ...Phase)

AddPhase adds a Phase to Manager

func (*Manager) GetDistroOSFiles

func (m *Manager) GetDistroOSFiles() v1alpha1.ZarfFiles

GetDistroOSFiles returns the ZarfFiles for a distro

func (*Manager) RetryTimeout

func (m *Manager) RetryTimeout(ctx context.Context, f func(ctx context.Context) error) error

RetryTimeout wraps retry Timeout logic

func (*Manager) Run

func (m *Manager) Run(ctx context.Context) error

Run executes all the added Phases in order

func (*Manager) SetPhases

func (m *Manager) SetPhases(p Phases)

SetPhases sets the list of phases

func (*Manager) SetTimout

func (m *Manager) SetTimout(tm time.Duration)

SetTimout sets the timeout for the manager

func (*Manager) Wet

func (m *Manager) Wet(_ fmt.Stringer, _ string, funcs ...errorfunc) error

Wet runs the first given function when not in dry-run mode. The second function will be run when in dry-mode and the message will be displayed. Any error returned from the functions will be returned and will halt the operation.

type ManagerDistroConfig

type ManagerDistroConfig struct {
	BinaryDir string
	Binary    string
	Config    string
	Token     string
	Data      string
	Version   string
}

ManagerDistroConfig stores some values for manager distro config

type ModifyHosts

type ModifyHosts struct {
	GenericPhase
	Enabled bool
	// contains filtered or unexported fields
}

ModifyHosts state

func (*ModifyHosts) Explanation

func (p *ModifyHosts) Explanation() string

Explanation about the current phase, used for documentation generation

func (*ModifyHosts) Prepare

Prepare the phase

func (*ModifyHosts) Run

func (p *ModifyHosts) Run(ctx context.Context) error

Run the phase

func (*ModifyHosts) ShouldRun

func (p *ModifyHosts) ShouldRun() bool

ShouldRun is true when this phase is enabled

func (*ModifyHosts) Title

func (p *ModifyHosts) Title() string

Title for the phase

type Phase

type Phase interface {
	Run(context.Context) error
	Title() string
	Explanation() string
}

Phase represents a runnable phase which can be added to Manager.

type Phases

type Phases []Phase

Phases is a slice of Phases

func (Phases) Index

func (p Phases) Index(title string) int

Index returns the index of the first occurrence matching the given phase title or -1 if not found

func (*Phases) InsertAfter

func (p *Phases) InsertAfter(title string, phase Phase)

InsertAfter inserts a phase after the first occurrence of a phase with the given title

func (*Phases) InsertBefore

func (p *Phases) InsertBefore(title string, phase Phase)

InsertBefore inserts a phase before the first occurrence of a phase with the given title

func (*Phases) Replace

func (p *Phases) Replace(title string, phase Phase)

Replace replaces the first occurrence of a phase with the given title

type PrepareFapolicy

type PrepareFapolicy struct {
	GenericPhase
	// contains filtered or unexported fields
}

PrepareFapolicy installs required packages and so on on the hosts.

func (*PrepareFapolicy) Explanation

func (p *PrepareFapolicy) Explanation() string

Explanation about the current phase, used for documentation generation

func (*PrepareFapolicy) Prepare

Prepare the phase

func (*PrepareFapolicy) Run

func (p *PrepareFapolicy) Run(ctx context.Context) error

Run the phase

func (*PrepareFapolicy) ShouldRun

func (p *PrepareFapolicy) ShouldRun() bool

ShouldRun is true when there is a host with selinux or fapolicyd on the hosts

func (*PrepareFapolicy) Title

func (p *PrepareFapolicy) Title() string

Title for the phase

type PrepareHosts

type PrepareHosts struct {
	GenericPhase
}

PrepareHosts installs required packages and so on on the hosts.

func (*PrepareHosts) Explanation

func (p *PrepareHosts) Explanation() string

Explanation about the current phase, used for documentation generation

func (*PrepareHosts) Run

func (p *PrepareHosts) Run(ctx context.Context) error

Run the phase

func (*PrepareHosts) Title

func (p *PrepareHosts) Title() string

Title for the phase

type PrepareSelinux

type PrepareSelinux struct {
	GenericPhase
	// contains filtered or unexported fields
}

PrepareSelinux installs required packages and so on on the hosts.

func (*PrepareSelinux) Explanation

func (p *PrepareSelinux) Explanation() string

Explanation about the current phase, used for documentation generation

func (*PrepareSelinux) Prepare

Prepare the phase

func (*PrepareSelinux) Run

func (p *PrepareSelinux) Run(ctx context.Context) error

Run the phase

func (*PrepareSelinux) ShouldRun

func (p *PrepareSelinux) ShouldRun() bool

ShouldRun is true when there is a host with selinux on the hosts

func (*PrepareSelinux) Title

func (p *PrepareSelinux) Title() string

Title for the phase

type RPMUploadFiles

type RPMUploadFiles struct {
	UploadFilesCommon
}

RPMUploadFiles implements a phase which upload files to hosts

func (*RPMUploadFiles) Explanation

func (p *RPMUploadFiles) Explanation() string

Explanation about the current phase, used for documentation generation

func (*RPMUploadFiles) Prepare

Prepare the phase

func (*RPMUploadFiles) Run

func (p *RPMUploadFiles) Run(ctx context.Context) (err error)

Run the phase

func (*RPMUploadFiles) Title

func (p *RPMUploadFiles) Title() string

Title for the phase

type UninstallEngine

type UninstallEngine struct {
	GenericPhase
	Distro           distrocfg.Distro
	WorkerConcurrent int
	// contains filtered or unexported fields
}

UninstallEngine state

func (*UninstallEngine) Explanation

func (p *UninstallEngine) Explanation() string

Explanation about the current phase, used for documentation generation

func (*UninstallEngine) Prepare

Prepare the phase

func (*UninstallEngine) Run

func (p *UninstallEngine) Run(ctx context.Context) error

Run the phase

func (*UninstallEngine) Title

func (p *UninstallEngine) Title() string

Title for the phase

type Unlock

type Unlock struct {
	GenericPhase
	Cancel func(context.Context)
}

Unlock phase state

func (*Unlock) Explanation

func (p *Unlock) Explanation() string

Explanation about the current phase, used for documentation generation

func (*Unlock) Prepare

Prepare the phase

func (*Unlock) Run

func (p *Unlock) Run(ctx context.Context) error

Run the phase

func (*Unlock) Title

func (p *Unlock) Title() string

Title for the phase

type UpgradeController

type UpgradeController struct {
	UpgradeHosts
}

UpgradeController phase state

func (*UpgradeController) Explanation

func (p *UpgradeController) Explanation() string

Explanation about the current phase, used for documentation generation

func (*UpgradeController) Prepare

Prepare the phase

func (*UpgradeController) Run

func (p *UpgradeController) Run(ctx context.Context) error

Run the phase

func (*UpgradeController) Title

func (p *UpgradeController) Title() string

Title for the phase

type UpgradeHosts

type UpgradeHosts struct {
	GenericPhase
	Distro distrocfg.Distro
	// contains filtered or unexported fields
}

UpgradeHosts phase state

func (*UpgradeHosts) ShouldRun

func (p *UpgradeHosts) ShouldRun() bool

ShouldRun is true when there are workers

type UpgradeWorkers

type UpgradeWorkers struct {
	UpgradeHosts
	WorkerConcurrent int
}

UpgradeWorkers phase state

func (*UpgradeWorkers) Explanation

func (p *UpgradeWorkers) Explanation() string

Explanation about the current phase, used for documentation generation

func (*UpgradeWorkers) Prepare

Prepare the phase

func (*UpgradeWorkers) Run

func (p *UpgradeWorkers) Run(ctx context.Context) error

Run the phase

func (*UpgradeWorkers) Title

func (p *UpgradeWorkers) Title() string

Title for the phase

type UploadFiles

type UploadFiles struct {
	GenericPhase
	// contains filtered or unexported fields
}

UploadFiles implements a phase which upload files to hosts

func (*UploadFiles) Explanation

func (p *UploadFiles) Explanation() string

Explanation about the current phase, used for documentation generation

func (*UploadFiles) Prepare

Prepare the phase

func (*UploadFiles) Run

func (p *UploadFiles) Run(ctx context.Context) error

Run the phase

func (*UploadFiles) ShouldRun

func (p *UploadFiles) ShouldRun() bool

ShouldRun is true when there are workers

func (*UploadFiles) Title

func (p *UploadFiles) Title() string

Title for the phase

type UploadFilesCommon

type UploadFilesCommon struct {
	GenericPhase
	// contains filtered or unexported fields
}

UploadFilesCommon implements a phase which upload files to hosts

func (*UploadFilesCommon) CleanUp

func (p *UploadFilesCommon) CleanUp(ctx context.Context)

CleanUp the phase

func (*UploadFilesCommon) Prepare

Prepare the phase

func (*UploadFilesCommon) Run

func (p *UploadFilesCommon) Run(ctx context.Context) (err error)

Run the phase

func (*UploadFilesCommon) ShouldRun

func (p *UploadFilesCommon) ShouldRun() bool

ShouldRun is true when there are workers

type ValidateHosts

type ValidateHosts struct {
	GenericPhase
	// contains filtered or unexported fields
}

ValidateHosts performs remote OS detection

func (*ValidateHosts) Explanation

func (p *ValidateHosts) Explanation() string

Explanation about the current phase, used for documentation generation

func (*ValidateHosts) Run

func (p *ValidateHosts) Run(ctx context.Context) error

Run the phase

func (*ValidateHosts) Title

func (p *ValidateHosts) Title() string

Title for the phase

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL