language-puppet-1.5.1: src/Puppet/Language/NativeTypes/Exec.hs
module Puppet.Language.NativeTypes.Exec (nativeExec) where
import qualified Data.Text as Text
import Puppet.Language.NativeTypes.Helpers
nativeExec :: (NativeTypeName, NativeTypeMethods)
nativeExec = ("exec", nativetypemethods parameterfunctions fullyQualifiedOrPath)
-- Autorequires: If Puppet is managing the user or group that owns a file, the file resource will autorequire them. If Puppet is managing any parent directories of a file, the file resource will autorequire them.
parameterfunctions :: [(Text, [Text -> NativeTypeValidate])]
parameterfunctions =
[ ("command", [nameval]),
("creates", [rarray, strings, fullyQualifieds]),
("cwd", [string, fullyQualified]),
("environment", [rarray, strings]),
("group", [string]),
("logoutput", [defaultvalue "false", string, values ["true", "false", "on_failure"]]),
("onlyif", [string]),
("path", [rarray, strings, fullyQualifieds]),
("provider", [string, values ["posix", "shell", "windows"]]),
("refresh", [string]),
("refreshonly", [defaultvalue "false", string, values ["true", "false"]]),
("returns", [defaultvalue "0", rarray, integers]),
("timeout", [defaultvalue "300", integer]),
("tries", [defaultvalue "1", integer]),
("try_sleep", [defaultvalue "0", integer]),
("unless", [string]),
("user", [string])
]
fullyQualifiedOrPath :: NativeTypeValidate
fullyQualifiedOrPath res =
case (res ^. rattributes . at "path", res ^. rattributes . at "command") of
(Nothing, Just (PString x)) ->
if Text.head x == '/'
then Right res
else Left "Command must be fully qualified if path is not defined"
_ -> Right res