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

Safe HaskellNone
LanguageHaskell98

Propellor.Property.Cmd

Contents

Description

This module lets you construct Properties by running commands and scripts. To get from an UncheckedProperty to a Property, it's up to the user to check if the command made a change to the system.

The best approach is to check a property, so that the command is only run when it needs to be. With this method, you avoid running the cmdProperty unnecessarily.

check (not <$> userExists "bob")
	(cmdProperty "useradd" ["bob"])

Sometimes it's just as expensive to check a property as it would be to run the command that ensures the property. So you can let the command run every time, and use changesFile or checkResult to determine if anything changed:

cmdProperty "chmod" ["600", "/etc/secret"]
	`changesFile` "/etc/secret"

Or you can punt and assume a change was made, but then propellor will always say it make a change, and onChange will always fire.

cmdProperty "service" ["foo", "reload"]
	`assume` MadeChange
Synopsis

Constricting properties running commands and scripts

cmdProperty :: String -> [String] -> UncheckedProperty UnixLike Source #

A property that can be satisfied by running a command.

The command must exit 0 on success.

cmdPropertyEnv :: String -> [String] -> [(String, String)] -> UncheckedProperty UnixLike Source #

A property that can be satisfied by running a command, with added environment variables in addition to the standard environment.

type Script = [String] Source #

A series of shell commands. (Without a leading hashbang.)

scriptProperty :: Script -> UncheckedProperty UnixLike Source #

A property that can be satisfied by running a script.

userScriptProperty :: User -> Script -> UncheckedProperty UnixLike Source #

A property that can satisfied by running a script as user (cd'd to their home directory).

Lower-level interface for running commands

data CommandParam Source #

Parameters that can be passed to a shell command.

Constructors

Param String

A parameter

File FilePath

The name of a file

boolSystem :: FilePath -> [CommandParam] -> IO Bool Source #

Run a system command, and returns True or False if it succeeded or failed.

This and other command running functions in this module log the commands run at debug level, using System.Log.Logger.

safeSystem :: FilePath -> [CommandParam] -> IO ExitCode Source #

Runs a system command, returning the exit status.

shellEscape :: String -> String Source #

Escapes a filename or other parameter to be safely able to be exposed to the shell.

This method works for POSIX shells, as well as other shells like csh.

waitForProcess :: ProcessHandle -> IO ExitCode Source #

Wrapper around waitForProcess that does debug logging.