propellor-4.3.3: property-based host configuration management in haskell

Safe HaskellNone
LanguageHaskell98

Propellor.Property.File

Synopsis

Documentation

hasContent :: FilePath -> [Line] -> Property UnixLike Source #

Replaces all the content of a file.

containsLine :: FilePath -> Line -> Property UnixLike Source #

Ensures that a line is present in a file, adding it to the end if not.

For example:

	& "/etc/default/daemon.conf" `File.containsLine` ("cachesize = " ++ val 1024)

The above example uses val to serialize a ConfigurableValue

containsLines :: FilePath -> [Line] -> Property UnixLike Source #

Ensures that a list of lines are present in a file, adding any that are not to the end of the file.

Note that this property does not guarantee that the lines will appear consecutively, nor in the order specified. If you need either of these, use containsBlock.

containsBlock :: FilePath -> [Line] -> RevertableProperty UnixLike UnixLike Source #

Ensures that a block of consecutive lines is present in a file, adding it to the end if not. Revert to ensure that the block is not present (though the lines it contains could be present, non-consecutively).

lacksLine :: FilePath -> Line -> Property UnixLike Source #

Ensures that a line is not present in a file. Note that the file is ensured to exist, so if it doesn't, an empty file will be written.

hasContentProtected :: FilePath -> [Line] -> Property UnixLike Source #

Replaces all the content of a file, ensuring that its modes do not allow it to be read or written by anyone other than the current user

hasPrivContent :: IsContext c => FilePath -> c -> Property (HasInfo + UnixLike) Source #

Ensures a file has contents that comes from PrivData.

The file's permissions are preserved if the file already existed. Otherwise, they're set to 600.

hasPrivContentFrom :: (IsContext c, IsPrivDataSource s) => s -> FilePath -> c -> Property (HasInfo + UnixLike) Source #

Like hasPrivContent, but allows specifying a source for PrivData, rather than using PrivDataSourceFile.

hasPrivContentExposed :: IsContext c => FilePath -> c -> Property (HasInfo + UnixLike) Source #

Leaves the file at its default or current mode, allowing "private" data to be read.

Use with caution!

basedOn :: FilePath -> (FilePath, [Line] -> [Line]) -> Property UnixLike Source #

Replaces the content of a file with the transformed content of another file

notPresent :: FilePath -> Property UnixLike Source #

Removes a file. Does not remove symlinks or non-plain-files.

dirExists :: FilePath -> Property UnixLike Source #

Ensures a directory exists.

newtype LinkTarget Source #

The location that a symbolic link points to.

Constructors

LinkTarget FilePath 

isSymlinkedTo :: FilePath -> LinkTarget -> Property UnixLike Source #

Creates or atomically updates a symbolic link.

Does not overwrite regular files or directories.

isCopyOf :: FilePath -> FilePath -> Property UnixLike Source #

Ensures that a file is a copy of another (regular) file.

ownerGroup :: FilePath -> User -> Group -> Property UnixLike Source #

Ensures that a file/dir has the specified owner and group.

applyPath :: Monoid (Property metatypes) => FilePath -> FilePath -> (FilePath -> Property metatypes) -> Property metatypes Source #

Given a base directory, and a relative path under that directory, applies a property to each component of the path in turn, starting with the base directory.

For example, to make a file owned by a user, making sure their home directory and the subdirectories to it are also owned by them:

"/home/user/program/file" `hasContent` ["foo"]
	`before` applyPath "/home/user" ".config/program/file" 
		(\f -> ownerGroup f (User "user") (Group "user"))

mode :: FilePath -> FileMode -> Property UnixLike Source #

Ensures that a file/dir has the specfied mode.

fileProperty :: (FileContent c, Eq c) => Desc -> (c -> c) -> FilePath -> Property UnixLike Source #

A property that applies a pure function to the content of a file.

stableTmpFor :: FilePath -> FilePath Source #

A temp file to use when writing new content for a file.

This is a stable name so it can be removed idempotently.

It ends with "~" so that programs that read many config files from a directory will treat it as an editor backup file, and not read it.

viaStableTmp :: (MonadMask m, MonadIO m) => (FilePath -> m ()) -> FilePath -> m () Source #

Creates/updates a file atomically, running the action to create the stable tmp file, and then renaming it into place.

configFileName :: String -> FilePath Source #

Generates a base configuration file name from a String, which can be put in a configuration directory, such as /etc/apt/sources.list.d/

The generated file name is limited to using ASCII alphanumerics, '_' and '.' , so that programs that only accept a limited set of characters will accept it. Any other characters will be encoded in escaped form.

Some file extensions, such as ".old" may be filtered out by programs that use configuration directories. To avoid such problems, it's a good idea to add an static prefix and extension to the result of this function. For example:

aptConf foo = "/etc/apt/apt.conf.d" </> "propellor_" ++ configFileName foo <.> ".conf"

showConfigFileName :: Show v => v -> FilePath Source #

Applies configFileName to any value that can be shown.

readConfigFileName :: Read v => FilePath -> Maybe v Source #

Inverse of showConfigFileName.

checkOverwrite :: Overwrite -> FilePath -> (FilePath -> Property i) -> Property i Source #

When passed PreserveExisting, only ensures the property when the file does not exist.