internal/iamrolesanywhere/daemon.go (76 lines of code) (raw):

package iamrolesanywhere import ( "bytes" "context" _ "embed" "fmt" "text/template" "github.com/aws/eks-hybrid/internal/api" "github.com/aws/eks-hybrid/internal/daemon" "github.com/aws/eks-hybrid/internal/util" ) const ( DaemonName = "aws_signing_helper_update" EksHybridAwsCredentialsPath = "/eks-hybrid/.aws/credentials" SigningHelperServiceFilePath = "/etc/systemd/system/aws_signing_helper_update.service" ) var ( //go:embed aws_signing_helper_update_service.tpl rawSigningHelperServiceTemplate string signingHelperServiceTemplate = template.Must(template.New("").Parse(rawSigningHelperServiceTemplate)) ) type SigningHelperDaemon struct { daemonManager daemon.DaemonManager node *api.NodeConfig } func NewSigningHelperDaemon(daemonManager daemon.DaemonManager, node *api.NodeConfig) daemon.Daemon { return &SigningHelperDaemon{ daemonManager: daemonManager, node: node, } } func (s *SigningHelperDaemon) Configure() error { service, err := GenerateUpdateSystemdService(s.node) if err != nil { return err } if err := util.WriteFileWithDir(SigningHelperServiceFilePath, service, 0o644); err != nil { return fmt.Errorf("writing aws_signing_helper_update service file %s: %v", EksHybridAwsCredentialsPath, err) } if err := s.daemonManager.DaemonReload(); err != nil { return fmt.Errorf("reloading systemd daemon: %v", err) } return nil } // EnsureRunning enables and starts the aws_signing_helper unit. func (s *SigningHelperDaemon) EnsureRunning(ctx context.Context) error { err := s.daemonManager.EnableDaemon(s.Name()) if err != nil { return err } return s.daemonManager.RestartDaemon(ctx, s.Name()) } // PostLaunch runs any additional step that needs to occur after the service // daemon as been started. func (s *SigningHelperDaemon) PostLaunch() error { return nil } // Stop stops the aws_signing_helper unit only if it is loaded and running. func (s *SigningHelperDaemon) Stop() error { return s.daemonManager.StopDaemon(s.Name()) } // Name returns the name of the daemon. func (s *SigningHelperDaemon) Name() string { return DaemonName } // GenerateUpdateSystemdService generates the systemd service config. func GenerateUpdateSystemdService(node *api.NodeConfig) ([]byte, error) { var buf bytes.Buffer if err := signingHelperServiceTemplate.Execute(&buf, map[string]string{ "SharedCredentialsFilePath": EksHybridAwsCredentialsPath, "SigningHelperBinPath": SigningHelperBinPath, "TrustAnchorARN": node.Spec.Hybrid.IAMRolesAnywhere.TrustAnchorARN, "ProfileARN": node.Spec.Hybrid.IAMRolesAnywhere.ProfileARN, "RoleARN": node.Spec.Hybrid.IAMRolesAnywhere.RoleARN, "Region": node.Spec.Cluster.Region, "NodeName": node.Spec.Hybrid.IAMRolesAnywhere.NodeName, "CertificatePath": node.Spec.Hybrid.IAMRolesAnywhere.CertificatePath, "PrivateKeyPath": node.Spec.Hybrid.IAMRolesAnywhere.PrivateKeyPath, }); err != nil { return nil, fmt.Errorf("executing aws_signing_helper_update service template: %w", err) } return buf.Bytes(), nil }