Documentation ¶
Overview ¶
Package policy implements management of snapshot policies.
Index ¶
- Constants
- Variables
- func ApplyRetentionPolicy(ctx context.Context, rep repo.RepositoryWriter, sourceInfo snapshot.SourceInfo, ...) ([]*snapshot.Manifest, error)
- func GetEffectivePolicy(ctx context.Context, rep repo.Repository, si snapshot.SourceInfo) (effective *Policy, sources []*Policy, e error)
- func IsManualSnapshot(policyTree *Tree) bool
- func RemovePolicy(ctx context.Context, rep repo.RepositoryWriter, si snapshot.SourceInfo) error
- func SetManual(ctx context.Context, rep repo.RepositoryWriter, sourceInfo snapshot.SourceInfo) error
- func SetPolicy(ctx context.Context, rep repo.RepositoryWriter, si snapshot.SourceInfo, ...) error
- func ValidatePolicy(pol *Policy) error
- func ValidateSchedulingPolicy(p SchedulingPolicy) error
- type ActionCommand
- type ActionsPolicy
- type CompressionPolicy
- type ErrorHandlingPolicy
- type FilesPolicy
- type Policy
- func GetDefinedPolicy(ctx context.Context, rep repo.Repository, si snapshot.SourceInfo) (*Policy, error)
- func GetPolicyByID(ctx context.Context, rep repo.Repository, id manifest.ID) (*Policy, error)
- func ListPolicies(ctx context.Context, rep repo.Repository) ([]*Policy, error)
- func MergePolicies(policies []*Policy) *Policy
- type RetentionPolicy
- type SchedulingPolicy
- type SubdirectoryPolicyMap
- type TargetWithPolicy
- type TimeOfDay
- type Tree
Constants ¶
const ( PolicyTypeLabel = "policyType" PolicyTypePath = "path" PolicyTypeGlobal = "global" PolicyTypeHost = "host" PolicyTypeUser = "user" PathLabel = snapshot.PathLabel UsernameLabel = snapshot.UsernameLabel HostnameLabel = snapshot.HostnameLabel )
Manifest labels identifying snapshots.
const ManifestType = "policy"
ManifestType is the type of the manifest that represents policy.
Variables ¶
var DefaultPolicy = &Policy{
FilesPolicy: defaultFilesPolicy,
RetentionPolicy: defaultRetentionPolicy,
CompressionPolicy: defaultCompressionPolicy,
ErrorHandlingPolicy: defaultErrorHandlingPolicy,
SchedulingPolicy: defaultSchedulingPolicy,
Actions: defaultActionsPolicy,
}
DefaultPolicy is a default policy returned by policy tree in absence of other policies.
var ErrPolicyNotFound = errors.New("policy not found")
ErrPolicyNotFound is returned when the policy is not found.
var GlobalPolicySourceInfo = snapshot.SourceInfo{}
GlobalPolicySourceInfo is a source where global policy is attached.
Functions ¶
func ApplyRetentionPolicy ¶
func ApplyRetentionPolicy(ctx context.Context, rep repo.RepositoryWriter, sourceInfo snapshot.SourceInfo, reallyDelete bool) ([]*snapshot.Manifest, error)
ApplyRetentionPolicy applies retention policy to a given source by deleting expired snapshots.
func GetEffectivePolicy ¶
func GetEffectivePolicy(ctx context.Context, rep repo.Repository, si snapshot.SourceInfo) (effective *Policy, sources []*Policy, e error)
GetEffectivePolicy calculates effective snapshot policy for a given source by combining the source-specifc policy (if any) with parent policies. The source must contain a path. Returns the effective policies and all source policies that contributed to that (most specific first).
func IsManualSnapshot ¶ added in v0.8.0
IsManualSnapshot returns the SchedulingPolicy manual value from the given policy tree.
func RemovePolicy ¶
func RemovePolicy(ctx context.Context, rep repo.RepositoryWriter, si snapshot.SourceInfo) error
RemovePolicy removes the policy for a given source.
func SetManual ¶ added in v0.8.0
func SetManual(ctx context.Context, rep repo.RepositoryWriter, sourceInfo snapshot.SourceInfo) error
SetManual sets the manual setting in the SchedulingPolicy on the given source.
func SetPolicy ¶
func SetPolicy(ctx context.Context, rep repo.RepositoryWriter, si snapshot.SourceInfo, pol *Policy) error
SetPolicy sets the policy on a given source.
func ValidatePolicy ¶ added in v0.8.0
ValidatePolicy returns error if the given policy is invalid. Currently, only SchedulingPolicy is validated.
func ValidateSchedulingPolicy ¶ added in v0.8.0
func ValidateSchedulingPolicy(p SchedulingPolicy) error
ValidateSchedulingPolicy returns an error if manual field is set along with scheduling fields.
Types ¶
type ActionCommand ¶ added in v0.8.0
type ActionCommand struct { // command + args to run Command string `json:"path,omitempty"` Arguments []string `json:"args,omitempty"` // alternatively inline script to run using either Unix shell or cmd.exe on Windows. Script string `json:"script,omitempty"` TimeoutSeconds int `json:"timeout,omitempty"` Mode string `json:"mode,omitempty"` // essential,optional,async }
ActionCommand configures a action command.
type ActionsPolicy ¶ added in v0.8.0
type ActionsPolicy struct { // command runs once before and after the folder it's attached to (not inherited). BeforeFolder *ActionCommand `json:"beforeFolder,omitempty"` AfterFolder *ActionCommand `json:"afterFolder,omitempty"` // commands run once before and after each snapshot root (can be inherited). BeforeSnapshotRoot *ActionCommand `json:"beforeSnapshotRoot,omitempty"` AfterSnapshotRoot *ActionCommand `json:"afterSnapshotRoot,omitempty"` }
ActionsPolicy describes actions to be invoked when taking snapshots.
func (*ActionsPolicy) Merge ¶ added in v0.8.0
func (p *ActionsPolicy) Merge(src ActionsPolicy)
Merge applies default values from the provided policy.
func (*ActionsPolicy) MergeNonInheritable ¶ added in v0.8.0
func (p *ActionsPolicy) MergeNonInheritable(src ActionsPolicy)
MergeNonInheritable copies non-inheritable properties from the provided actions policy.
type CompressionPolicy ¶ added in v0.4.0
type CompressionPolicy struct { CompressorName compression.Name `json:"compressorName,omitempty"` OnlyCompress []string `json:"onlyCompress,omitempty"` NeverCompress []string `json:"neverCompress,omitempty"` MinSize int64 `json:"minSize,omitempty"` MaxSize int64 `json:"maxSize,omitempty"` }
CompressionPolicy specifies compression policy.
func (*CompressionPolicy) CompressorForFile ¶ added in v0.4.0
func (p *CompressionPolicy) CompressorForFile(e fs.File) compression.Name
CompressorForFile returns compression name to be used for compressing a given file according to policy, using attributes such as name or size.
func (*CompressionPolicy) Merge ¶ added in v0.4.0
func (p *CompressionPolicy) Merge(src CompressionPolicy)
Merge applies default values from the provided policy.
type ErrorHandlingPolicy ¶ added in v0.5.2
type ErrorHandlingPolicy struct { // IgnoreFileErrors controls whether or not snapshot operation should fail when a file throws an error on being read IgnoreFileErrors *bool `json:"ignoreFileErrors,omitempty"` // IgnoreDirectoryErrors controls whether or not snapshot operation should fail when a directory throws an error on being read or opened IgnoreDirectoryErrors *bool `json:"ignoreDirectoryErrors,omitempty"` // IgnoreUnknownTypes controls whether or not snapshot operation should fail when it encounters a directory entry of an unknown type. IgnoreUnknownTypes *bool `json:"ignoreUnknownTypes,omitempty"` }
ErrorHandlingPolicy controls error hadnling behavior when taking snapshots.
func (*ErrorHandlingPolicy) IgnoreDirectoryErrorsOrDefault ¶ added in v0.5.2
func (p *ErrorHandlingPolicy) IgnoreDirectoryErrorsOrDefault(def bool) bool
IgnoreDirectoryErrorsOrDefault returns the ignore-directory-error setting if it is set, and returns the passed default if not.
func (*ErrorHandlingPolicy) IgnoreFileErrorsOrDefault ¶ added in v0.5.2
func (p *ErrorHandlingPolicy) IgnoreFileErrorsOrDefault(def bool) bool
IgnoreFileErrorsOrDefault returns the ignore-file-error setting if it is set, and returns the passed default if not.
func (*ErrorHandlingPolicy) IgnoreUnknownTypesOrDefault ¶ added in v0.8.0
func (p *ErrorHandlingPolicy) IgnoreUnknownTypesOrDefault(def bool) bool
IgnoreUnknownTypesOrDefault returns the IgnoreUnknownTypes if it is set, and returns the passed default if not.
func (*ErrorHandlingPolicy) Merge ¶ added in v0.5.2
func (p *ErrorHandlingPolicy) Merge(src ErrorHandlingPolicy)
Merge applies default values from the provided policy.
type FilesPolicy ¶ added in v0.4.0
type FilesPolicy struct { IgnoreRules []string `json:"ignore,omitempty"` NoParentIgnoreRules bool `json:"noParentIgnore,omitempty"` DotIgnoreFiles []string `json:"ignoreDotFiles,omitempty"` NoParentDotIgnoreFiles bool `json:"noParentDotFiles,omitempty"` IgnoreCacheDirs *bool `json:"ignoreCacheDirs,omitempty"` MaxFileSize int64 `json:"maxFileSize,omitempty"` OneFileSystem *bool `json:"oneFileSystem,omitempty"` }
FilesPolicy describes files to be ignored when taking snapshots.
func (*FilesPolicy) IgnoreCacheDirectoriesOrDefault ¶ added in v0.7.0
func (p *FilesPolicy) IgnoreCacheDirectoriesOrDefault(def bool) bool
IgnoreCacheDirectoriesOrDefault gets the value of IgnoreCacheDirs or the provided default if not set.
func (*FilesPolicy) Merge ¶ added in v0.4.0
func (p *FilesPolicy) Merge(src FilesPolicy)
Merge applies default values from the provided policy.
func (*FilesPolicy) OneFileSystemOrDefault ¶ added in v0.8.0
func (p *FilesPolicy) OneFileSystemOrDefault(def bool) bool
OneFileSystemOrDefault gets the value of OneFileSystem or the provided default if not set.
type Policy ¶
type Policy struct { Labels map[string]string `json:"-"` RetentionPolicy RetentionPolicy `json:"retention,omitempty"` FilesPolicy FilesPolicy `json:"files,omitempty"` ErrorHandlingPolicy ErrorHandlingPolicy `json:"errorHandling,omitempty"` SchedulingPolicy SchedulingPolicy `json:"scheduling,omitempty"` CompressionPolicy CompressionPolicy `json:"compression,omitempty"` Actions ActionsPolicy `json:"actions"` NoParent bool `json:"noParent,omitempty"` }
Policy describes snapshot policy for a single source.
func GetDefinedPolicy ¶
func GetDefinedPolicy(ctx context.Context, rep repo.Repository, si snapshot.SourceInfo) (*Policy, error)
GetDefinedPolicy returns the policy defined on the provided snapshot.SourceInfo or ErrPolicyNotFound if not present.
func GetPolicyByID ¶
GetPolicyByID gets the policy for a given unique ID or ErrPolicyNotFound if not found.
func ListPolicies ¶
ListPolicies returns a list of all policies.
func MergePolicies ¶
MergePolicies computes the policy by applying the specified list of policies in order.
func (*Policy) Target ¶
func (p *Policy) Target() snapshot.SourceInfo
Target returns the snapshot.SourceInfo describing username, host and path targeted by the policy.
type RetentionPolicy ¶
type RetentionPolicy struct { KeepLatest *int `json:"keepLatest,omitempty"` KeepHourly *int `json:"keepHourly,omitempty"` KeepDaily *int `json:"keepDaily,omitempty"` KeepWeekly *int `json:"keepWeekly,omitempty"` KeepMonthly *int `json:"keepMonthly,omitempty"` KeepAnnual *int `json:"keepAnnual,omitempty"` }
RetentionPolicy describes snapshot retention policy.
func (*RetentionPolicy) ComputeRetentionReasons ¶
func (r *RetentionPolicy) ComputeRetentionReasons(manifests []*snapshot.Manifest)
ComputeRetentionReasons computes the reasons why each snapshot is retained, based on the settings in retention policy and stores them in RetentionReason field.
func (*RetentionPolicy) Merge ¶
func (r *RetentionPolicy) Merge(src RetentionPolicy)
Merge applies default values from the provided policy.
type SchedulingPolicy ¶
type SchedulingPolicy struct { IntervalSeconds int64 `json:"intervalSeconds,omitempty"` TimesOfDay []TimeOfDay `json:"timeOfDay,omitempty"` Manual bool `json:"manual,omitempty"` }
SchedulingPolicy describes policy for scheduling snapshots.
func (*SchedulingPolicy) Interval ¶
func (p *SchedulingPolicy) Interval() time.Duration
Interval returns the snapshot interval or zero if not specified.
func (*SchedulingPolicy) Merge ¶
func (p *SchedulingPolicy) Merge(src SchedulingPolicy)
Merge applies default values from the provided policy.
func (*SchedulingPolicy) SetInterval ¶
func (p *SchedulingPolicy) SetInterval(d time.Duration)
SetInterval sets the snapshot interval (zero disables).
type SubdirectoryPolicyMap ¶ added in v0.4.0
SubdirectoryPolicyMap implements Getter for a static mapping of relative paths to Policy for subdirectories.
func (SubdirectoryPolicyMap) GetPolicyForPath ¶ added in v0.4.0
func (m SubdirectoryPolicyMap) GetPolicyForPath(relativePath string) (*Policy, error)
GetPolicyForPath returns Policy defined in the map or nil.
type TargetWithPolicy ¶ added in v0.8.0
type TargetWithPolicy struct { ID string `json:"id"` Target snapshot.SourceInfo `json:"target"` *Policy }
TargetWithPolicy wraps a policy with its target and ID.
type TimeOfDay ¶
TimeOfDay represents the time of day (hh:mm) using 24-hour time format.
func SortAndDedupeTimesOfDay ¶
SortAndDedupeTimesOfDay sorts the slice of times of day and removes duplicates.
type Tree ¶ added in v0.4.0
type Tree struct {
// contains filtered or unexported fields
}
Tree represents a node in the policy tree, where a policy can be defined. A nil tree is a valid tree with default policy.
func BuildTree ¶ added in v0.4.0
BuildTree builds a policy tree from the given map of paths to policies. Each path must be relative and start with "." and be separated by slashes.
func TreeForSource ¶ added in v0.4.0
func TreeForSource(ctx context.Context, rep repo.Repository, si snapshot.SourceInfo) (*Tree, error)
TreeForSource returns policy Tree for a given source.
func (*Tree) DefinedPolicy ¶ added in v0.4.0
DefinedPolicy returns policy that's been explicitly defined for tree node or nil if no policy was defined.
func (*Tree) EffectivePolicy ¶ added in v0.4.0
EffectivePolicy returns policy that's been defined for this tree node or inherited from its parent.
func (*Tree) IsInherited ¶ added in v0.4.0
IsInherited returns true if the policy inherited to the given tree hode has been inherited from its parent.