Documentation ¶
Index ¶
- Constants
- func GetHostRunningOS(rootFs string) (string, error)
- func Run(command string, args ...string) error
- func RunGetOut(command string, args ...string) ([]byte, error)
- func ValidPath(path string) bool
- type Daemon
- type FileSystemClient
- type FsClient
- func (f FsClient) Chmod(name string, mode os.FileMode) error
- func (f FsClient) Chown(name string, uid, gid int) error
- func (f FsClient) Create(name string) (*os.File, error)
- func (f FsClient) MkdirAll(name string, perm os.FileMode) error
- func (f FsClient) ReadAll(reader io.Reader) ([]byte, error)
- func (f FsClient) ReadFile(filename string) ([]byte, error)
- func (f FsClient) Remove(name string) error
- func (f FsClient) RemoveAll(path string) error
- func (f FsClient) Stat(name string) (os.FileInfo, error)
- func (f FsClient) Symlink(oldname, newname string) error
- func (f FsClient) WriteFile(filename string, data []byte, perm os.FileMode) error
- type NodeUpdaterClient
- type NodeWriter
- func (nw *NodeWriter) Run(stop <-chan struct{})
- func (nw *NodeWriter) SetSSHAccessed(client corev1.NodeInterface, node string) error
- func (nw *NodeWriter) SetUpdateDegraded(err error, client corev1.NodeInterface, node string) error
- func (nw *NodeWriter) SetUpdateDegradedIgnoreErr(err error, client corev1.NodeInterface, node string) error
- func (nw *NodeWriter) SetUpdateDegradedMsgIgnoreErr(msg string, client corev1.NodeInterface, node string) error
- func (nw *NodeWriter) SetUpdateDone(client corev1.NodeInterface, node string, dcAnnotation string) error
- func (nw *NodeWriter) SetUpdateWorking(client corev1.NodeInterface, node string) error
- type RpmOstreeClient
- type RpmOstreeDeployment
- type RpmOstreeState
Constants ¶
const ( // CurrentMachineConfigAnnotationKey is used to fetch current MachineConfig for a machine CurrentMachineConfigAnnotationKey = "machineconfiguration.openshift.io/currentConfig" // DesiredMachineConfigAnnotationKey is used to specify the desired MachineConfig for a machine DesiredMachineConfigAnnotationKey = "machineconfiguration.openshift.io/desiredConfig" // MachineConfigDaemonStateAnnotationKey is used to fetch the state of the daemon on the machine. MachineConfigDaemonStateAnnotationKey = "machineconfiguration.openshift.io/state" // MachineConfigDaemonStateWorking is set by daemon when it is applying an update. MachineConfigDaemonStateWorking = "Working" // MachineConfigDaemonStateDone is set by daemon when it is done applying an update. MachineConfigDaemonStateDone = "Done" // MachineConfigDaemonStateDegraded is set by daemon when update cannot be applied. MachineConfigDaemonStateDegraded = "Degraded" // MachineConfigDaemonOSRHCOS denotes RHCOS MachineConfigDaemonOSRHCOS = "RHCOS" // MachineConfigDaemonOSRHEL denotes RHEL MachineConfigDaemonOSRHEL = "RHEL" // MachineConfigDaemonOSCENTOS denotes CENTOS MachineConfigDaemonOSCENTOS = "CENTOS" // MachineConfigMCFileType denotes when an MC config has been provided MachineConfigMCFileType = "MACHINECONFIG" // MachineConfigIgnitionFileType denotes when an Ignition config has provided MachineConfigIgnitionFileType = "IGNITION" // MachineConfigOnceFromRemoteConfig denotes that the config was pulled from a remote source MachineConfigOnceFromRemoteConfig = "REMOTE" // MachineConfigOnceFromLocalConfig denotes that the config was found locally MachineConfigOnceFromLocalConfig = "LOCAL" // MachineConfigSSHAccessAnnotationKey is used to mark a node after it has been accessed via SSH MachineConfigDaemonSSHAccessAnnotationKey = "machineconfiguration.openshift.io/ssh" // MachineConfigDaemonSSHAccessValue is the annotation value applied when ssh access is detected MachineConfigDaemonSSHAccessValue = "accessed" )
const ( // DefaultDirectoryPermissions houses the default mode to use when no directory permissions are provided DefaultDirectoryPermissions os.FileMode = 0755 // DefaultFilePermissions houses the default mode to use when no file permissions are provided DefaultFilePermissions os.FileMode = 0644 )
const ( // InitialNodeAnnotationsFilePath defines the path at which it will find the node annotations it needs to set on the node once it comes up for the first time. // The Machine Config Server writes the node annotations to this path. InitialNodeAnnotationsFilePath = "/etc/machine-config-daemon/node-annotations.json" )
Variables ¶
This section is empty.
Functions ¶
func GetHostRunningOS ¶
GetHostRunningOS reads os-release from the rootFs prefix to return what OS variant the daemon is running on. If we are unable to read the os-release file OR the information doesn't match MCD supported OS's an error is returned.
Types ¶
type Daemon ¶
type Daemon struct { // OperatingSystem the operating system the MCD is running on OperatingSystem string // NodeUpdaterClient an instance of the client which interfaces with host content deployments NodeUpdaterClient NodeUpdaterClient // contains filtered or unexported fields }
Daemon is the dispatch point for the functions of the agent on the machine. it keeps track of connections and the current state of the update process.
func New ¶
func New( rootMount string, nodeName string, operatingSystem string, nodeUpdaterClient NodeUpdaterClient, fileSystemClient FileSystemClient, onceFrom string, kubeletHealthzEnabled bool, kubeletHealthzEndpoint string, nodeWriter *NodeWriter, exitCh chan<- error, ) (*Daemon, error)
New sets up the systemd and kubernetes connections needed to update the machine.
func NewClusterDrivenDaemon ¶
func NewClusterDrivenDaemon( rootMount string, nodeName string, operatingSystem string, nodeUpdaterClient NodeUpdaterClient, client mcfgclientset.Interface, kubeClient kubernetes.Interface, fileSystemClient FileSystemClient, onceFrom string, nodeInformer coreinformersv1.NodeInformer, kubeletHealthzEnabled bool, kubeletHealthzEndpoint string, nodeWriter *NodeWriter, exitCh chan<- error, ) (*Daemon, error)
NewClusterDrivenDaemon sets up the systemd and kubernetes connections needed to update the machine.
func (*Daemon) CheckStateOnBoot ¶
CheckStateOnBoot is a core entrypoint for our state machine. It determines whether we're in our desired state, or if we're transitioning between states, and whether or not we need to update to a new state.
Some more background in this PR: https://github.com/openshift/machine-config-operator/pull/245
func (*Daemon) Close ¶
func (dn *Daemon) Close()
Close closes all the connections the node agent has open for it's lifetime
func (*Daemon) EnterDegradedState ¶
EnterDegradedState causes the MCD to update the annotations to note that we're degraded, and sleep forever.
func (*Daemon) Run ¶
Run finishes informer setup and then blocks, and the informer will be responsible for triggering callbacks to handle updates. Successful updates shouldn't return, and should just reboot the node.
func (*Daemon) SenseAndLoadOnceFrom ¶
SenseAndLoadOnceFrom gets a hold of the content for supported onceFrom configurations, parses to verify the type, and returns back the genericInterface, the type description, if it was local or remote, and error.
type FileSystemClient ¶
type FileSystemClient interface { Create(string) (*os.File, error) Remove(string) error RemoveAll(string) error MkdirAll(string, os.FileMode) error Stat(string) (os.FileInfo, error) Symlink(string, string) error Chmod(string, os.FileMode) error Chown(string, int, int) error WriteFile(filename string, data []byte, perm os.FileMode) error ReadAll(reader io.Reader) ([]byte, error) ReadFile(filename string) ([]byte, error) }
FileSystemClient abstracts file/directory manipulation operations
func NewFileSystemClient ¶
func NewFileSystemClient() FileSystemClient
NewFileSystemClient creates a new file system client using the default implementations provided by the os package.
type FsClient ¶
type FsClient struct{}
FsClient is used to hang the FileSystemClient functions on.
type NodeUpdaterClient ¶
type NodeUpdaterClient interface { GetBootedOSImageURL(string) (string, string, error) RunPivot(string) error }
NodeUpdaterClient is an interface describing how to interact with the host around content deployment
func NewNodeUpdaterClient ¶
func NewNodeUpdaterClient() NodeUpdaterClient
NewNodeUpdaterClient returns a new instance of the default DeploymentClient (RpmOstreeClient)
type NodeWriter ¶
type NodeWriter struct {
// contains filtered or unexported fields
}
NodeWriter A single writer to Kubernetes to prevent race conditions
func (*NodeWriter) Run ¶
func (nw *NodeWriter) Run(stop <-chan struct{})
Run reads from the writer channel and sets the node annotation. It will return if the stop channel is closed. Intended to be run via a goroutine.
func (*NodeWriter) SetSSHAccessed ¶
func (nw *NodeWriter) SetSSHAccessed(client corev1.NodeInterface, node string) error
SetSSHAccessed sets the ssh annotation to accessed
func (*NodeWriter) SetUpdateDegraded ¶
func (nw *NodeWriter) SetUpdateDegraded(err error, client corev1.NodeInterface, node string) error
SetUpdateDegraded logs the error and sets the state to UpdateDegraded. Returns an error if it couldn't set the annotation.
func (*NodeWriter) SetUpdateDegradedIgnoreErr ¶
func (nw *NodeWriter) SetUpdateDegradedIgnoreErr(err error, client corev1.NodeInterface, node string) error
SetUpdateDegradedIgnoreErr logs the error and sets the state to UpdateDegraded. Logs an error if if couldn't set the annotation. Always returns the same error that it was passed. This is useful in situations where one just wants to return an error to its caller after having set the node to degraded due to that error.
func (*NodeWriter) SetUpdateDegradedMsgIgnoreErr ¶
func (nw *NodeWriter) SetUpdateDegradedMsgIgnoreErr(msg string, client corev1.NodeInterface, node string) error
SetUpdateDegradedMsgIgnoreErr is like SetUpdateDegradedMsgIgnoreErr but takes a string and constructs the error object itself.
func (*NodeWriter) SetUpdateDone ¶
func (nw *NodeWriter) SetUpdateDone(client corev1.NodeInterface, node string, dcAnnotation string) error
SetUpdateDone Sets the state to UpdateDone.
func (*NodeWriter) SetUpdateWorking ¶
func (nw *NodeWriter) SetUpdateWorking(client corev1.NodeInterface, node string) error
SetUpdateWorking Sets the state to UpdateWorking.
type RpmOstreeClient ¶
type RpmOstreeClient struct{}
RpmOstreeClient provides all RpmOstree related methods in one structure. This structure implements DeploymentClient
func (*RpmOstreeClient) GetBootedOSImageURL ¶
func (r *RpmOstreeClient) GetBootedOSImageURL(rootMount string) (string, string, error)
GetBootedOSImageURL returns the image URL as well as the OSTree version (for logging)
func (*RpmOstreeClient) RunPivot ¶
func (r *RpmOstreeClient) RunPivot(osImageURL string) error
RunPivot executes a pivot from one deployment to another as found in the referenced osImageURL. See https://github.com/openshift/pivot.
type RpmOstreeDeployment ¶
type RpmOstreeDeployment struct { ID string `json:"id"` OSName string `json:"osname"` Serial int32 `json:"serial"` Checksum string `json:"checksum"` Version string `json:"version"` Timestamp uint64 `json:"timestamp"` Booted bool `json:"booted"` Origin string `json:"origin"` CustomOrigin []string `json:"custom-origin"` }
RpmOstreeDeployment represents a single deployment on a node
type RpmOstreeState ¶
type RpmOstreeState struct {
Deployments []RpmOstreeDeployment
}
RpmOstreeState houses zero or more RpmOstreeDeployments Subset of `rpm-ostree status --json` https://github.com/projectatomic/rpm-ostree/blob/bce966a9812df141d38e3290f845171ec745aa4e/src/daemon/rpmostreed-deployment-utils.c#L227