internal/iptables/iptables.go (46 lines of code) (raw):

package iptables import ( "context" "os/exec" "time" "github.com/pkg/errors" "github.com/aws/eks-hybrid/internal/artifact" "github.com/aws/eks-hybrid/internal/tracker" "github.com/aws/eks-hybrid/internal/util/cmd" ) const iptablesBinName = "iptables" // Source interface for iptables package type Source interface { GetIptables() artifact.Package } // Install iptables package required for kubelet. func Install(ctx context.Context, tracker *tracker.Tracker, source Source) error { if !isIptablesInstalled() { iptablesSrc := source.GetIptables() // Sometimes install fails due to conflicts with other processes // updating packages, specially when automating at machine startup. // We assume errors are transient and just retry for a bit. if err := cmd.Retry(ctx, iptablesSrc.InstallCmd, 5*time.Second); err != nil { return errors.Wrap(err, "failed to install iptables") } return tracker.Add(artifact.Iptables) } return nil } // Uninstall iptables package func Uninstall(ctx context.Context, source Source) error { if isIptablesInstalled() { iptablesSrc := source.GetIptables() if err := cmd.Retry(ctx, iptablesSrc.UninstallCmd, 5*time.Second); err != nil { return errors.Wrap(err, "failed to uninstall iptables") } } return nil } func Upgrade(ctx context.Context, source Source) error { if isIptablesInstalled() { iptablesSrc := source.GetIptables() if err := cmd.Retry(ctx, iptablesSrc.UpgradeCmd, 5*time.Second); err != nil { return errors.Wrap(err, "failed to upgrade iptables") } } return nil } func isIptablesInstalled() bool { _, err := exec.LookPath(iptablesBinName) return err == nil }