module Puppet.Language.NativeTypes.ZoneRecord (nativeZoneRecord) where import Puppet.Language.NativeTypes.Helpers nativeZoneRecord :: (NativeTypeName, NativeTypeMethods) nativeZoneRecord = ("zone_record", nativetypemethods parameterfunctions validateMandatories) -- 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 = [ ("name", [nameval]), ("owner", [string]), ("dest", [string]), ("ensure", [defaultvalue "present", string, values ["present", "absent"]]), ("rtype", [string, defaultvalue "A", values ["SOA", "A", "AAAA", "MX", "NS", "CNAME", "PTR", "SRV"]]), ("rclass", [defaultvalue "IN", string]), ("ttl", [defaultvalue "2d", string]), ("target", [string, mandatory]), ("nsname", [string]), ("serial", [string]), ("slave_refresh", [string]), ("slave_retry", [string]), ("slave_expiration", [string]), ("min_ttl", [string]), ("email", [string]) ] validateMandatories :: NativeTypeValidate validateMandatories res = case res ^. rattributes . at "rtype" of Nothing -> perror "The rtype parameter is mandatory." Just (PString "SOA") -> foldM (flip mandatory) res ["nsname", "email", "serial", "slave_refresh", "slave_retry", "slave_expiration", "min_ttl"] Just (PString "NS") -> foldM (flip mandatory) res ["owner", "rclass", "rtype", "dest"] Just (PString _) -> foldM (flip mandatory) res ["owner", "rclass", "rtype", "dest", "ttl"] Just x -> perror $ "Can't use this for the rtype parameter" <+> pretty x