Skip to content

Commit

Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Fix lint issues
Browse files Browse the repository at this point in the history
 - Minor code improvements
 - Unexported locally used variables
fixes vmware-tanzu#250

-- Rebased --
 21st March

Signed-off-by: Shailesh Pant <7968042+pshail@users.noreply.github.com>
pshail committed Mar 21, 2022
1 parent 3e0b04f commit f10a5ed
Showing 27 changed files with 138 additions and 38 deletions.
2 changes: 2 additions & 0 deletions agent/cloudinit/cloudinit.go
Original file line number Diff line number Diff line change
@@ -14,6 +14,7 @@ import (
"sigs.k8s.io/yaml"
)

// ScriptExecutor bootstrap script executor
type ScriptExecutor struct {
WriteFilesExecutor IFileWriter
RunCmdExecutor ICmdRunner
@@ -25,6 +26,7 @@ type bootstrapConfig struct {
CommandsToExecute []string `json:"runCmd"`
}

// Files details required for files written by bootstrap script
type Files struct {
Path string `json:"path,"`
Encoding string `json:"encoding,omitempty"`
2 changes: 2 additions & 0 deletions agent/cloudinit/cmd_runner.go
Original file line number Diff line number Diff line change
@@ -13,6 +13,8 @@ type ICmdRunner interface {
RunCmd(string) error
}

// CmdRunner default implementer of ICmdRunner
// TODO reevaluate empty interface/struct
type CmdRunner struct {
}

1 change: 1 addition & 0 deletions agent/cloudinit/file_writer.go
Original file line number Diff line number Diff line change
@@ -27,6 +27,7 @@ type IFileWriter interface {
WriteToFile(*Files) error
}

// FileWriter default implementation of IFileWriter
type FileWriter struct {
}

2 changes: 2 additions & 0 deletions agent/cloudinit/template_parser.go
Original file line number Diff line number Diff line change
@@ -13,10 +13,12 @@ type ITemplateParser interface {
ParseTemplate(string) (string, error)
}

// TemplateParser cloudinit templates parsing using ITemplateParser
type TemplateParser struct {
Template interface{}
}

// ParseTemplate parses and returns the parsed template content
func (tp TemplateParser) ParseTemplate(templateContent string) (string, error) {
tmpl, err := template.New("byoh").Parse(templateContent)
if err != nil {
2 changes: 1 addition & 1 deletion agent/help_flag_test.go
Original file line number Diff line number Diff line change
@@ -41,7 +41,7 @@ var _ = Describe("Help flag for host agent", func() {
continue
}
words := strings.Split(line, " ")
line = (words[0] + " " + words[1]) // checking the first two words
line = words[0] + " " + words[1] // checking the first two words
// Any option not belongs to expectedOptions is not allowed.
Expect(strings.TrimSpace(line)).To(BeElementOf(expectedOptions))
}
9 changes: 8 additions & 1 deletion agent/installer/bundle_downloader.go
Original file line number Diff line number Diff line change
@@ -16,6 +16,7 @@ import (
)

var (
// DownloadPathPermissions file mode permissions for download path
DownloadPathPermissions fs.FileMode = 0777
)

@@ -53,7 +54,13 @@ func (bd *bundleDownloader) DownloadFromRepo(
downloadPathWithRepo := bd.getBundlePathWithRepo()

err := ensureDirExist(downloadPathWithRepo)
defer os.Remove(downloadPathWithRepo)
defer func(name string) {
err = os.Remove(name)
if err != nil {
bd.logger.Error(err, "Failed to remove directory", "path", name)
}
}(downloadPathWithRepo)

if err != nil {
return err
}
2 changes: 1 addition & 1 deletion agent/installer/checks.go
Original file line number Diff line number Diff line change
@@ -13,7 +13,7 @@ import (

func checkPreRequsitePackages() error {
if runtime.GOOS == "linux" {
unavailablePackages := []string{}
unavailablePackages := make([]string, 0)
execr := utilsexec.New()
for _, pkgName := range preRequisitePackages {
_, err := execr.LookPath(pkgName)
1 change: 1 addition & 0 deletions agent/installer/cli-dev.go
Original file line number Diff line number Diff line change
@@ -35,6 +35,7 @@ var (
klogger logr.Logger
)

// Main entry point for the installer dev/test CLI
func Main() {
klogger = klogr.New()

54 changes: 40 additions & 14 deletions agent/installer/installer.go
Original file line number Diff line number Diff line change
@@ -12,17 +12,24 @@ import (
"github.com/vmware-tanzu/cluster-api-provider-bringyourownhost/agent/installer/internal/algo"
)

// Error string wrapper for errors returned by the installer
type Error string

func (e Error) Error() string { return string(e) }

const (
ErrDetectOs = Error("Error detecting OS")
// ErrDetectOs error type when supported OS could not be detected
ErrDetectOs = Error("Error detecting OS")
// ErrOsK8sNotSupported error type when the OS is not supported by the k8s installer
ErrOsK8sNotSupported = Error("No k8s support for OS")
ErrBundleDownload = Error("Error downloading bundle")
ErrBundleExtract = Error("Error extracting bundle")
ErrBundleInstall = Error("Error installing bundle")
ErrBundleUninstall = Error("Error uninstalling bundle")
// ErrBundleDownload error type when the bundle download fails
ErrBundleDownload = Error("Error downloading bundle")
// ErrBundleExtract error type when the bundle extraction fails
ErrBundleExtract = Error("Error extracting bundle")
// ErrBundleInstall error type when the bundle installation fails
ErrBundleInstall = Error("Error installing bundle")
// ErrBundleUninstall error type when the bundle uninstallation fails
ErrBundleUninstall = Error("Error uninstalling bundle")
)

var preRequisitePackages = []string{"socat", "ebtables", "ethtool", "conntrack"}
@@ -79,6 +86,7 @@ func (bd *bundleDownloader) getBundlePathDirOrPreview(k8s, tag string) string {
return bd.GetBundleDirPath(k8s, tag)
}

// DownloadOrPreview downloads the bundle if bundleDownloader is configured with a download path else runs in preview mode without downloading
func (bd *bundleDownloader) DownloadOrPreview(os, k8s, tag string) error {
if bd == nil || bd.downloadPath == "" {
bd.logger.Info("Running in preview mode, skip bundle download")
@@ -149,7 +157,7 @@ func (i *installer) Install(bundleRepo, k8sVer, tag string) error {
return nil
}

// Uninstal uninstalls the specified k8s version on the current OS
// Uninstall uninstalls the specified k8s version on the current OS
func (i *installer) Uninstall(bundleRepo, k8sVer, tag string) error {
i.setBundleRepo(bundleRepo)
algoInst, err := i.getAlgoInstallerWithBundle(k8sVer, tag)
@@ -238,11 +246,20 @@ type logPrinter struct {
logger logr.Logger
}

// Desc logPrinter implementation of OutputBuilder Desc method
func (lp *logPrinter) Desc(s string) { lp.logger.Info(s) }
func (lp *logPrinter) Cmd(s string) { lp.logger.Info(s) }
func (lp *logPrinter) Out(s string) { lp.logger.Info(s) }
func (lp *logPrinter) Err(s string) { lp.logger.Info(s) }
func (lp *logPrinter) Msg(s string) { lp.logger.Info(s) }

// Cmd logPrinter implementation of OutputBuilder Cmd method
func (lp *logPrinter) Cmd(s string) { lp.logger.Info(s) }

// Out logPrinter implementation of OutputBuilder Out method
func (lp *logPrinter) Out(s string) { lp.logger.Info(s) }

// Err logPrinter implementation of OutputBuilder Err method
func (lp *logPrinter) Err(s string) { lp.logger.Info(s) }

// Msg logPrinter implementation of OutputBuilder Msg method
func (lp *logPrinter) Msg(s string) { lp.logger.Info(s) }

// stringPrinter is an adapter of OutputBuilder to string
type stringPrinter struct {
@@ -255,11 +272,20 @@ type stringPrinter struct {
strDivider string
}

// Desc stringPrinter implementation of description output
func (obp *stringPrinter) Desc(s string) { obp.steps = append(obp.steps, applyFmt(obp.descFmt, s)) }
func (obp *stringPrinter) Cmd(s string) { obp.steps = append(obp.steps, applyFmt(obp.cmdFmt, s)) }
func (obp *stringPrinter) Out(s string) { obp.steps = append(obp.steps, applyFmt(obp.outFmt, s)) }
func (obp *stringPrinter) Err(s string) { obp.steps = append(obp.steps, applyFmt(obp.errFmt, s)) }
func (obp *stringPrinter) Msg(s string) { obp.steps = append(obp.steps, applyFmt(obp.msgFmt, s)) }

// Cmd stringPrinter implementation of command output
func (obp *stringPrinter) Cmd(s string) { obp.steps = append(obp.steps, applyFmt(obp.cmdFmt, s)) }

// Out stringPrinter implementation of info/content output
func (obp *stringPrinter) Out(s string) { obp.steps = append(obp.steps, applyFmt(obp.outFmt, s)) }

// Err stringPrinter implementation of error output
func (obp *stringPrinter) Err(s string) { obp.steps = append(obp.steps, applyFmt(obp.errFmt, s)) }

// Msg stringPrinter implementation of message output
func (obp *stringPrinter) Msg(s string) { obp.steps = append(obp.steps, applyFmt(obp.msgFmt, s)) }

// String implements the Stringer interface
// It joins the string array by adding new lines between the strings and returns it as a single string
1 change: 1 addition & 0 deletions agent/installer/internal/algo/apt_step.go
Original file line number Diff line number Diff line change
@@ -9,6 +9,7 @@ import (
"strings"
)

// NewAptStep returns a new step to install apt package
func NewAptStep(k *BaseK8sInstaller, aptPkg string) Step {
return NewAptStepEx(k, aptPkg, false)
}
4 changes: 4 additions & 0 deletions agent/installer/internal/algo/installer.go
Original file line number Diff line number Diff line change
@@ -36,11 +36,13 @@ are required in order to:
6) disable unattended OS updates
*/

// Step execute/rollback interface
type Step interface {
do() error
undo() error
}

// K8sStepProvider steps provider for k8s installer
type K8sStepProvider interface {
getSteps(*BaseK8sInstaller) []Step

@@ -68,6 +70,7 @@ type BaseK8sInstaller struct {
OutputBuilder
}

// Install installation of k8s cluster as per configured steps in the provider
func (b *BaseK8sInstaller) Install() error {
steps := b.getSteps(b)

@@ -83,6 +86,7 @@ func (b *BaseK8sInstaller) Install() error {
return nil
}

// Uninstall uninstallation of k8s cluster as per configured steps in the provider
func (b *BaseK8sInstaller) Uninstall() error {
lastStepIdx := len(b.getSteps(b)) - 1
b.rollback(lastStepIdx)
1 change: 1 addition & 0 deletions agent/installer/internal/algo/mock_ubuntu_with_error.go
Original file line number Diff line number Diff line change
@@ -23,6 +23,7 @@ func (s *mockStep) undo() error {
return s.Err
}

// MockUbuntuWithError is a mock implementation of BaseK8sInstaller that returns an error on the steps
type MockUbuntuWithError struct {
BaseK8sInstaller
errorOnStep int
1 change: 1 addition & 0 deletions agent/installer/internal/algo/output_builder.go
Original file line number Diff line number Diff line change
@@ -3,6 +3,7 @@

package algo

// OutputBuilder is an interface for building output as the algorithm runs.
type OutputBuilder interface {
Out(string)
Err(string)
6 changes: 6 additions & 0 deletions agent/installer/internal/algo/output_builder_counter.go
Original file line number Diff line number Diff line change
@@ -3,26 +3,32 @@

package algo

// OutputBuilderCounter used to count the logs called by the OutputBuilder under various heads/types of output
type OutputBuilderCounter struct {
LogCalledCnt int
}

// Out increments the log count for info/content output
func (c *OutputBuilderCounter) Out(str string) {
c.LogCalledCnt++
}

// Err increments the log count for error output
func (c *OutputBuilderCounter) Err(str string) {
c.LogCalledCnt++
}

// Cmd increments the log count for command output
func (c *OutputBuilderCounter) Cmd(str string) {
c.LogCalledCnt++
}

// Desc increments the log count for description output
func (c *OutputBuilderCounter) Desc(str string) {
c.LogCalledCnt++
}

// Msg increments the log count for message output
func (c *OutputBuilderCounter) Msg(str string) {
c.LogCalledCnt++
}
1 change: 1 addition & 0 deletions agent/installer/internal/algo/ubuntu20_4K8s1_22.go
Original file line number Diff line number Diff line change
@@ -8,6 +8,7 @@ import (
"path/filepath"
)

// Ubuntu20_4K8s1_22 is the configuration for Ubuntu 20.4.X, K8s 1.22.X extending BaseK8sInstaller
type Ubuntu20_4K8s1_22 struct {
BaseK8sInstaller
}
5 changes: 5 additions & 0 deletions agent/installer/registry.go
Original file line number Diff line number Diff line change
@@ -29,6 +29,7 @@ func newRegistry() registry {
return registry{osk8sInstallerMap: make(osk8sInstallerMap)}
}

// AddBundleInstaller adds a bundle installer to the registry
func (r *registry) AddBundleInstaller(os, k8sVer string, installer osk8sInstaller) {
if _, ok := r.osk8sInstallerMap[os]; !ok {
r.osk8sInstallerMap[os] = make(k8sInstallerMap)
@@ -41,10 +42,12 @@ func (r *registry) AddBundleInstaller(os, k8sVer string, installer osk8sInstalle
r.osk8sInstallerMap[os][k8sVer] = installer
}

// AddOsFilter adds an OS filter to the filtered bundle list of registry
func (r *registry) AddOsFilter(osFilter, osBundle string) {
r.filterBundleList = append(r.filterBundleList, filterBundlePair{osFilter: osFilter, osBundle: osBundle})
}

// ListOS returns a list of OSes supported by the registry
func (r *registry) ListOS() (osFilter, osBundle []string) {
osFilter = make([]string, 0, len(r.filterBundleList))
osBundle = make([]string, 0, len(r.filterBundleList))
@@ -57,6 +60,7 @@ func (r *registry) ListOS() (osFilter, osBundle []string) {
return
}

// ListK8s returns a list of K8s versions supported by the registry
func (r *registry) ListK8s(osBundleHost string) []string {
var result []string

@@ -77,6 +81,7 @@ func (r *registry) ListK8s(osBundleHost string) []string {
return result
}

// GetInstaller returns the bundle installer for the given os and k8s version
func (r *registry) GetInstaller(osHost, k8sVer string) (osk8si osk8sInstaller, osBundle string) {
osBundle = r.resolveOsToOsBundle(osHost)
osk8si = r.osk8sInstallerMap[osBundle][k8sVer]
2 changes: 1 addition & 1 deletion agent/main.go
Original file line number Diff line number Diff line change
@@ -10,7 +10,7 @@ import (
"os"
"strings"

pflag "github.com/spf13/pflag"
"github.com/spf13/pflag"
"github.com/vmware-tanzu/cluster-api-provider-bringyourownhost/agent/cloudinit"
"github.com/vmware-tanzu/cluster-api-provider-bringyourownhost/agent/installer"
"github.com/vmware-tanzu/cluster-api-provider-bringyourownhost/agent/reconciler"
5 changes: 4 additions & 1 deletion agent/reconciler/host_reconciler.go
Original file line number Diff line number Diff line change
@@ -35,6 +35,7 @@ type IK8sInstaller interface {
Uninstall(string, string, string) error
}

// HostReconciler encapsulates the data/logic needed to reconcile a ByoHost
type HostReconciler struct {
Client client.Client
CmdRunner cloudinit.ICmdRunner
@@ -46,7 +47,8 @@ type HostReconciler struct {

const (
bootstrapSentinelFile = "/run/cluster-api/bootstrap-success.complete"
KubeadmResetCommand = "kubeadm reset --force"
// KubeadmResetCommand is the command to run to force reset/remove nodes' local file system of the files created by kubeadm
KubeadmResetCommand = "kubeadm reset --force"
)

// Reconcile handles events for the ByoHost that is registered by this agent process
@@ -161,6 +163,7 @@ func (r *HostReconciler) getBootstrapScript(ctx context.Context, dataSecretName,
return bootstrapSecret, nil
}

// SetupWithManager sets up the controller with the manager
func (r *HostReconciler) SetupWithManager(ctx context.Context, mgr manager.Manager) error {
return ctrl.NewControllerManagedBy(mgr).
For(&infrastructurev1beta1.ByoHost{}).
5 changes: 5 additions & 0 deletions agent/registration/host_registrar.go
Original file line number Diff line number Diff line change
@@ -18,13 +18,16 @@ import (
)

var (
// LocalHostRegistrar is a HostRegistrar that registers the local host.
LocalHostRegistrar *HostRegistrar
)

// HostInfo contains information about the host network interface.
type HostInfo struct {
DefaultNetworkInterfaceName string
}

// HostRegistrar used to register a host.
type HostRegistrar struct {
K8sClient client.Client
ByoHostInfo HostInfo
@@ -67,6 +70,7 @@ func (hr *HostRegistrar) Register(hostName, namespace string, hostLabels map[str
return hr.UpdateNetwork(ctx, byoHost)
}

// UpdateNetwork updates the network interface status for the host
func (hr *HostRegistrar) UpdateNetwork(ctx context.Context, byoHost *infrastructurev1beta1.ByoHost) error {
klog.Info("Add Network Info")
helper, err := patch.NewHelper(byoHost, hr.K8sClient)
@@ -79,6 +83,7 @@ func (hr *HostRegistrar) UpdateNetwork(ctx context.Context, byoHost *infrastruct
return helper.Patch(ctx, byoHost)
}

// GetNetworkStatus returns the network interface(s) status for the host
func (hr *HostRegistrar) GetNetworkStatus() []infrastructurev1beta1.NetworkStatus {
Network := make([]infrastructurev1beta1.NetworkStatus, 0)

9 changes: 6 additions & 3 deletions agent/version/version.go
Original file line number Diff line number Diff line change
@@ -10,13 +10,16 @@ import (
)

var (
Version string
// Version is the version of the agent.
Version string
// BuildDate is the date the agent was built.
BuildDate string
)

const (
//Dev development version string
Dev = "dev"
GitTagLength = 3
gitTagLength = 3
)

// Info exposes information about the version used for the current running code.
@@ -52,7 +55,7 @@ func extractVersion(major, minor, patch *string) {
}

version := strings.Split(Version, ".")
if len(version) != GitTagLength {
if len(version) != gitTagLength {
return
}

1 change: 1 addition & 0 deletions apis/infrastructure/v1beta1/byocluster_webhook.go
Original file line number Diff line number Diff line change
@@ -17,6 +17,7 @@ import (
// log is for logging in this package.
var byoclusterlog = logf.Log.WithName("byocluster-resource")

// SetupWebhookWithManager sets up the webhook for the byocluster resource
func (byoCluster *ByoCluster) SetupWebhookWithManager(mgr ctrl.Manager) error {
return ctrl.NewWebhookManagedBy(mgr).
For(byoCluster).
16 changes: 11 additions & 5 deletions apis/infrastructure/v1beta1/byohost_types.go
Original file line number Diff line number Diff line change
@@ -10,12 +10,18 @@ import (
)

const (
HostCleanupAnnotation = "byoh.infrastructure.cluster.x-k8s.io/unregistering"
EndPointIPAnnotation = "byoh.infrastructure.cluster.x-k8s.io/endpointip"
K8sVersionAnnotation = "byoh.infrastructure.cluster.x-k8s.io/k8sversion"
AttachedByoMachineLabel = "byoh.infrastructure.cluster.x-k8s.io/byomachine-name"
// HostCleanupAnnotation annotation used to mark a host for cleanup
HostCleanupAnnotation = "byoh.infrastructure.cluster.x-k8s.io/unregistering"
// EndPointIPAnnotation annotation used to store the IP address of the endpoint
EndPointIPAnnotation = "byoh.infrastructure.cluster.x-k8s.io/endpointip"
// K8sVersionAnnotation annotation used to store the k8s version
K8sVersionAnnotation = "byoh.infrastructure.cluster.x-k8s.io/k8sversion"
// AttachedByoMachineLabel label used to mark a node name attached to a byo host
AttachedByoMachineLabel = "byoh.infrastructure.cluster.x-k8s.io/byomachine-name"
// BundleLookupBaseRegistryAnnotation annotation used to store the base registry for the bundle lookup
BundleLookupBaseRegistryAnnotation = "byoh.infrastructure.cluster.x-k8s.io/bundle-registry"
BundleLookupTagAnnotation = "byoh.infrastructure.cluster.x-k8s.io/bundle-tag"
// BundleLookupTagAnnotation annotation used to store the bundle tag
BundleLookupTagAnnotation = "byoh.infrastructure.cluster.x-k8s.io/bundle-tag"
)

// ByoHostSpec defines the desired state of ByoHost
1 change: 1 addition & 0 deletions apis/infrastructure/v1beta1/byohost_webhook.go
Original file line number Diff line number Diff line change
@@ -17,6 +17,7 @@ import (
// log is for logging in this package
var byohostlog = logf.Log.WithName("byohost-resource")

// SetupWebhookWithManager sets up the webhook for the byohost resource
func (byoHost *ByoHost) SetupWebhookWithManager(mgr ctrl.Manager) error {
return ctrl.NewWebhookManagedBy(mgr).
For(byoHost).
2 changes: 2 additions & 0 deletions controllers/infrastructure/byocluster_controller.go
Original file line number Diff line number Diff line change
@@ -29,6 +29,7 @@ import (
)

var (
// DefaultAPIEndpointPort default port for the API endpoint
DefaultAPIEndpointPort = 6443
clusterControlledType = &infrav1.ByoCluster{}
clusterControlledTypeName = reflect.TypeOf(clusterControlledType).Elem().Name()
@@ -46,6 +47,7 @@ type ByoClusterReconciler struct {
//+kubebuilder:rbac:groups=infrastructure.cluster.x-k8s.io,resources=byoclusters/finalizers,verbs=update
// +kubebuilder:rbac:groups=cluster.x-k8s.io,resources=clusters;clusters/status,verbs=get;list;watch

// Reconcile handles the byo cluster reconciliations
func (r *ByoClusterReconciler) Reconcile(ctx context.Context, req ctrl.Request) (_ ctrl.Result, reterr error) {
logger := log.FromContext(ctx)

8 changes: 6 additions & 2 deletions controllers/infrastructure/byomachine_controller.go
Original file line number Diff line number Diff line change
@@ -41,9 +41,12 @@ import (
)

const (
ProviderIDPrefix = "byoh://"
// ProviderIDPrefix prefix for provider id
ProviderIDPrefix = "byoh://"
// ProviderIDSuffixLength length of provider id suffix
ProviderIDSuffixLength = 6
RequeueForbyohost = 10 * time.Second
// RequeueForbyohost requeue delay for byoh host
RequeueForbyohost = 10 * time.Second
)

// ByoMachineReconciler reconciles a ByoMachine object
@@ -177,6 +180,7 @@ func (r *ByoMachineReconciler) Reconcile(ctx context.Context, req ctrl.Request)
return r.reconcileNormal(ctx, machineScope)
}

// FetchAttachedByoHost fetches BYOHost attached to this machine
func (r *ByoMachineReconciler) FetchAttachedByoHost(ctx context.Context, byomachineName, byomachineNamespace string) (*infrav1.ByoHost, error) {
logger := log.FromContext(ctx)
logger.Info("Fetching an attached ByoHost")
18 changes: 12 additions & 6 deletions test/e2e/docker_helper.go
Original file line number Diff line number Diff line change
@@ -25,8 +25,8 @@ import (
)

const (
KindImage = "byoh/node:v1.22.3"
TempKubeconfigPath = "/tmp/mgmt.conf"
kindImage = "byoh/node:v1.22.3"
tempKubeconfigPath = "/tmp/mgmt.conf"
)

type cpConfig struct {
@@ -37,6 +37,7 @@ type cpConfig struct {
container string
}

// ByoHostRunner runs bring-you-own-host cluster in docker
type ByoHostRunner struct {
Context context.Context
clusterConName string
@@ -160,7 +161,7 @@ func (r *ByoHostRunner) createDockerContainer() (container.ContainerCreateCreate

return r.DockerClient.ContainerCreate(r.Context,
&container.Config{Hostname: r.ByoHostName,
Image: KindImage,
Image: kindImage,
},
&container.HostConfig{Privileged: true,
SecurityOpt: []string{"seccomp=unconfined"},
@@ -200,14 +201,15 @@ func (r *ByoHostRunner) copyKubeconfig(config cpConfig, listopt types.ContainerL
re := regexp.MustCompile("server:.*")
kubeconfig = re.ReplaceAll(kubeconfig, []byte("server: https://"+profile.NetworkSettings.Networks[r.NetworkInterface].IPAddress+":6443"))
}
Expect(os.WriteFile(TempKubeconfigPath, kubeconfig, 0644)).NotTo(HaveOccurred()) // nolint: gosec,gomnd
Expect(os.WriteFile(tempKubeconfigPath, kubeconfig, 0644)).NotTo(HaveOccurred()) // nolint: gosec,gomnd

config.sourcePath = TempKubeconfigPath
config.sourcePath = tempKubeconfigPath
config.destPath = r.CommandArgs["--kubeconfig"]
err := copyToContainer(r.Context, r.DockerClient, config)
return err
}

// SetupByoDockerHost sets up the byohost docker container
func (r *ByoHostRunner) SetupByoDockerHost() (*container.ContainerCreateCreatedBody, error) {
var byohost container.ContainerCreateCreatedBody
var err error
@@ -231,6 +233,7 @@ func (r *ByoHostRunner) SetupByoDockerHost() (*container.ContainerCreateCreatedB
return &byohost, err
}

// ExecByoDockerHost runs the exec command in the byohost docker container
func (r *ByoHostRunner) ExecByoDockerHost(byohost *container.ContainerCreateCreatedBody) (types.HijackedResponse, string, error) {
var cmdArgs []string
cmdArgs = append(cmdArgs, "./agent")
@@ -264,5 +267,8 @@ func setControlPlaneIP(ctx context.Context, dockerClient *client.Client) {
// can safely use this IP for the ControlPlaneEndpoint
ipOctets[3] = "151"
ip := strings.Join(ipOctets, ".")
os.Setenv("CONTROL_PLANE_ENDPOINT_IP", ip)
err := os.Setenv("CONTROL_PLANE_ENDPOINT_IP", ip)
if err != nil {
Expect(err).NotTo(HaveOccurred())
}
}
15 changes: 12 additions & 3 deletions test/e2e/e2e_debug_helper.go
Original file line number Diff line number Diff line change
@@ -14,11 +14,15 @@ import (
)

const (
DefaultFileMode fs.FileMode = 0777
ReadByohControllerManagerLogShellFile string = "/tmp/read-byoh-controller-manager-log.sh"
ReadAllPodsShellFile string = "/tmp/read-all-pods.sh"
// DefaultFileMode the default file mode of files created for tests
DefaultFileMode fs.FileMode = 0777
// ReadByohControllerManagerLogShellFile location of script to read the controller manager log
ReadByohControllerManagerLogShellFile string = "/tmp/read-byoh-controller-manager-log.sh"
// ReadAllPodsShellFile location of script to read all pods logs
ReadAllPodsShellFile string = "/tmp/read-all-pods.sh"
)

// WriteDockerLog redirects the docker logs to the given file
func WriteDockerLog(output types.HijackedResponse, outputFile string) *os.File {
s := make(chan string)
e := make(chan error)
@@ -62,11 +66,13 @@ func WriteDockerLog(output types.HijackedResponse, outputFile string) *os.File {
return f
}

// Showf prints formatted string to stdout
func Showf(format string, a ...interface{}) {
fmt.Printf(format, a...)
fmt.Printf("\n")
}

// ShowFileContent prints to stdout the content of the given file
func ShowFileContent(fileName string) {
content, err := os.ReadFile(fileName)
if err != nil {
@@ -79,6 +85,7 @@ func ShowFileContent(fileName string) {
Showf("######################End: Content of %s##################", fileName)
}

// ExecuteShellScript executes a given shell script file location
func ExecuteShellScript(shellFileName string) {
cmd := exec.Command("/bin/sh", "-x", shellFileName)
output, err := cmd.Output()
@@ -91,6 +98,7 @@ func ExecuteShellScript(shellFileName string) {
Showf("######################End: execute result of %s##################", shellFileName)
}

// WriteShellScript writes shell script contents/commands to the given file location
func WriteShellScript(shellFileName string, shellFileContent []string) {
f, err := os.OpenFile(shellFileName, os.O_APPEND|os.O_WRONLY|os.O_CREATE, DefaultFileMode)
if err != nil {
@@ -117,6 +125,7 @@ func WriteShellScript(shellFileName string, shellFileContent []string) {
}
}

// ShowInfo shows all the pods status, agent logs, and controller manager logs
func ShowInfo(allAgentLogFiles []string) {
// show swap status
// showFileContent("/proc/swaps")

0 comments on commit f10a5ed

Please sign in to comment.