func Register()

in internal/service/serviceinstall.go [36:86]


func Register(ctx *log.Context) error {
	if !isSystemdSupported(ctx) {
		return errors.New("Systemd not supported. Failed to register service")
	}
	targetVersion := os.Getenv(constants.ExtensionVersionEnvName)
	ctx.Log("message", "trying to register extension with version: "+targetVersion)

	ctx.Log("message", "Generating service configuration files")
	systemdUnitContent := generateServiceConfigurationContent(ctx)
	serviceHandler := getSystemdHandler(ctx)

	isInstalled, err := IsInstalled(ctx)
	if err != nil {
		return err
	}

	// If the service is installed, check if it needs to be upgraded.
	if isInstalled {
		installedVersion, err := serviceHandler.GetInstalledVersion(ctx)
		if err != nil {
			return err
		}

		if installedVersion == targetVersion {
			ctx.Log("message", "installed service already matches the target version")
			return nil
		}
	}

	ctx.Log("message", "Registering service using version: "+targetVersion)

	ctx.Log("message", "Making immediate-run-command-handler executable")
	execDirectory := os.Getenv(constants.ExtensionPathEnvName) + "/bin/immediate-run-command-handler"
	err = os.Chmod(execDirectory, 0744)
	if err != nil {
		return errors.Wrap(err, "error while marking the immediate run command binary as executable")
	}

	err = serviceHandler.Register(ctx, systemdUnitContent)
	if err != nil {
		return err
	}

	err = Start(ctx)
	if err != nil {
		return err
	}

	ctx.Log("message", "Service registration complete")
	return nil
}