snap

package
v0.0.0-...-9ec3720 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 6, 2021 License: AGPL-3.0 Imports: 16 Imported by: 0

Documentation

Overview

Package snap is a minimal service.Service implementation, derived from the on service/upstart package.

Index

Constants

View Source
const (
	// Command is a path to the snap binary, or to one that can be detected by os.Exec
	Command = "snap"
)

Variables

This section is empty.

Functions

func ListCommand

func ListCommand() string

ListCommand returns a command that will be interpreted by a shell to produce a list of currently-installed services that are managed by snap.

func ListServices

func ListServices() ([]string, error)

ListServices returns a list of services that are being managed by snap.

func SetSnapConfig

func SetSnapConfig(snap string, key string, value string) error

SetSnapConfig sets a snap's key to value.

Types

type App

type App struct {
	// contains filtered or unexported fields
}

App is a wrapper around a single snap

func NewApp

func NewApp(name string, channel string, policy ConfinementPolicy, services []BackgroundService, prerequisites []Installable) *App

NewApp creates a application along with it's dependencies.

func NewNamedApp

func NewNamedApp(name string) *App

NewNamedApp creates a new application from a given name.

func (*App) BackgroundServices

func (a *App) BackgroundServices() []BackgroundService

BackgroundServices returns a list of background services that are required to be installed for the main application to run.

func (*App) Install

func (a *App) Install() []string

Install returns a way to install one application with all it's settings.

func (*App) Name

func (a *App) Name() string

Name returns the name of the application

func (*App) Prerequisites

func (a *App) Prerequisites() []Installable

Prerequisites defines a list of all the Prerequisites required before the application also needs to be installed.

func (*App) StartCommands

func (a *App) StartCommands(executable string) []string

StartCommands returns a list if shell commands that should be executed (in order) to start App and its background services. executeable is a path to the snap executable. If the app has prerequisite applications defined, then take care to call StartCommands on those apps also.

func (*App) Validate

func (a *App) Validate() error

Validate will validate a given application for any potential issues.

type BackgroundService

type BackgroundService struct {
	// name is the name of the service, without the snap name.
	// For example , for the`juju-db.daemon` service, use the name `daemon`.
	Name string

	// enableAtStartup determines whether services provided
	// by the snap should be started with the `--enable` flag
	EnableAtStartup bool
}

BackgroundService represents the a service that snaps define. For example, the multipass snap includes the libvirt-bin and multipassd background services.

func (*BackgroundService) Validate

func (backgroundService *BackgroundService) Validate() error

Validate checks that the construction parameters of backgroundService are valid. Successful validation returns nil.

type ConfinementPolicy

type ConfinementPolicy string

ConfinementPolicy describes the confinement policy for installing a given snap application.

const (
	// StrictPolicy confined snaps run in complete isolation, up to a minimal
	// access level that’s deemed always safe.
	StrictPolicy ConfinementPolicy = "strict"
	// ClassicPolicy allows access to your system’s resources in much the same
	// way traditional packages do
	ClassicPolicy ConfinementPolicy = "classic"
	// DevModePolicy is a special mode for snap creators and developers.
	// A devmode snap runs as a strictly confined snap with full access to
	// system resources, and produces debug output to identify unspecified
	// interfaces.
	DevModePolicy ConfinementPolicy = "devmode"
	// JailModePolicy enforces the confinement model for a snap to ensure that
	// the confinement is enforced.
	JailModePolicy ConfinementPolicy = "jailmode"
)

func (ConfinementPolicy) String

func (p ConfinementPolicy) String() string

String representation of the confinement policy.

func (ConfinementPolicy) Validate

func (p ConfinementPolicy) Validate() error

Validate validates a given confinement policy to ensure it matches the ones we expect.

type Installable

type Installable interface {
	// Name returns the name of the application
	Name() string

	// Install returns a way to install one application with all it's settings.
	Install() []string

	// Validate will validate a given application for any potential issues.
	Validate() error

	// StartCommands returns a list if shell commands that should be executed
	// (in order) to start App and its background services.
	StartCommands(executable string) []string

	// Prerequisites defines a list of all the Prerequisites required before the
	// application also needs to be installed.
	Prerequisites() []Installable

	// BackgroundServices returns a list of background services that are
	// required to be installed for the main application to run.
	BackgroundServices() []BackgroundService
}

Installable represents an installable snap.

type Runnable

type Runnable interface {
	Execute(name string, args ...string) (string, error)
}

Runnable expects to be able to run a given command with a series of arguments and return the output and/or error from that executing command.

type Service

type Service struct {
	// contains filtered or unexported fields
}

Service is a type for services that are being managed by snapd as snaps.

func NewService

func NewService(mainSnap, serviceName string, conf common.Conf, snapPath, configDir, channel string, confinementPolicy ConfinementPolicy, backgroundServices []BackgroundService, prerequisites []Installable) (Service, error)

NewService returns a new Service defined by `conf`, with the name `serviceName`. The Service abstracts service(s) provided by a snap.

`serviceName` defaults to `snapName`. These two parameters are distinct to allow for a file path to provided as a `mainSnap`, implying that a local snap will be installed by snapd.

If no BackgroundServices are provided, Service will wrap all of the snap's background services.

func NewServiceFromName

func NewServiceFromName(name string, conf common.Conf) (Service, error)

NewServiceFromName returns a service that manages all of a snap's services as if they were a single service. NewServiceFromName uses the name parameter to fetch and install a snap with a matching name, then uses default policies for the installation. To install a snap with --classic confinement, or via --edge, --candidate or --beta, then create the Service via another method.

func (Service) Conf

func (s Service) Conf() common.Conf

Conf returns the service's configuration.

Conf is part of the service.Service interface.

func (Service) ConfigOverride

func (s Service) ConfigOverride() error

ConfigOverride writes a systemd override to enable the specified limits to be used by the snap.

func (Service) Exists

func (s Service) Exists() (bool, error)

Exists is not implemented for snaps.

Exists is part of the service.Service interface.

func (Service) Install

func (s Service) Install() error

Install installs the snap and its background services.

Install is part of the service.Service interface.

func (Service) InstallCommands

func (s Service) InstallCommands() ([]string, error)

InstallCommands returns a slice of shell commands that is executed independently, in serial, by a shell. When the final command returns with a 0 exit code, the installation will be deemed to have been successful.

InstallCommands is part of the service.Service interface

func (Service) Installed

func (s Service) Installed() (bool, error)

Installed returns true if the service has been successfully installed.

Installed is part of the service.Service interface.

func (Service) Name

func (s Service) Name() string

Name returns the service's name. It should match snap's naming conventions, e.g. <snap> for all services provided by <snap> and `<snap>.<app>` for a specific service under the snap's control.For example, the `juju-db` snap provides a `daemon` service. Its name is `juju-db.daemon`.

Name is part of the service.Service interface

func (Service) Remove

func (s Service) Remove() error

Remove uninstalls a service, . Returns nil when the underlying call to `snap remove <service-name>` exits with error code 0.

Remove is part of the service.ServiceActions interface.

func (Service) Restart

func (s Service) Restart() error

Restart restarts the service, or starts if it's not currently running.

Restart is part of the service.RestartableService interface

func (Service) Running

func (s Service) Running() (bool, error)

Running returns (true, nil) when snap indicates that service is currently active.

func (Service) Start

func (s Service) Start() error

Start starts the service, returning nil when successful. If the service is already running, Start does not restart it.

Start is part of the service.ServiceActions interface

func (Service) StartCommands

func (s Service) StartCommands() ([]string, error)

StartCommands returns a slice of strings. that are shell commands to be executed by a shell which start the service.

func (Service) Stop

func (s Service) Stop() error

Stop stops a running service. Returns nil when the underlying call to `snap stop <service-name>` exits with error code 0.

Stop is part of the service.ServiceActions interface.

func (Service) Validate

func (s Service) Validate() error

Validate validates that snap.Service has been correctly configured. Validate returns nil when successful and an error when successful.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL