packages feed

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