packages feed

propellor 0.1.1 → 0.1.2

raw patch · 5 files changed

+69/−62 lines, 5 files

Files

Propellor.hs view
@@ -1,26 +1,25 @@ -- | Pulls in lots of useful modules for building and using Properties.---+--  -- Propellor enures that the system it's run in satisfies a list of -- properties, taking action as necessary when a property is not yet met. -- -- A simple propellor program example: --------> import Propellor---> import Propellor.CmdLine---> import qualified Propellor.Property.File as File---> import qualified Propellor.Property.Apt as Apt---> ---> main :: IO ()---> main = defaultMain getProperties---> ---> getProperties :: HostName -> Maybe [Property]---> getProperties "example.com" = Just--->    [ Apt.installed ["mydaemon"]--->    , "/etc/mydaemon.conf" `File.containsLine` "secure=1"--->        `onChange` cmdProperty "service" ["mydaemon", "restart"]]--->    ]---> getProperties _ = Nothing+-- > import Propellor+-- > import Propellor.CmdLine+-- > import qualified Propellor.Property.File as File+-- > import qualified Propellor.Property.Apt as Apt+-- > +-- > main :: IO ()+-- > main = defaultMain getProperties+-- > +-- > getProperties :: HostName -> Maybe [Property]+-- > getProperties "example.com" = Just+-- >    [ Apt.installed ["mydaemon"]+-- >    , "/etc/mydaemon.conf" `File.containsLine` "secure=1"+-- >        `onChange` cmdProperty "service" ["mydaemon", "restart"]]+-- >    ]+-- > getProperties _ = Nothing -- -- See config.hs for a more complete example, and clone Propellor's -- git repository for a deployable system using Propellor:@@ -31,12 +30,14 @@ 	, module Propellor.Property 	, module Propellor.Property.Cmd 	, module Propellor.PrivData+	, module Propellor.Engine  	, module X ) where  import Propellor.Types import Propellor.Property+import Propellor.Engine import Propellor.Property.Cmd import Propellor.PrivData 
+ Propellor/Engine.hs view
@@ -0,0 +1,47 @@+module Propellor.Engine where++import System.Console.ANSI+import System.Exit+import System.IO++import Propellor.Types+import Utility.Exception++ensureProperty :: Property -> IO Result+ensureProperty = catchDefaultIO FailedChange . propertySatisfy++ensureProperties :: [Property] -> IO ()+ensureProperties ps = do+	r <- ensureProperties' [Property "overall" $ ensureProperties' ps]+	case r of+		FailedChange -> exitWith (ExitFailure 1)+		_ -> exitWith ExitSuccess++ensureProperties' :: [Property] -> IO Result+ensureProperties' ps = ensure ps NoChange+  where+	ensure [] rs = return rs+	ensure (l:ls) rs = do+		r <- ensureProperty l+		clearFromCursorToLineBeginning+		setCursorColumn 0+		putStr $ propertyDesc l ++ "... "+		case r of+			FailedChange -> do+				setSGR [SetColor Foreground Vivid Red]+				putStrLn "failed"+			NoChange -> do+				setSGR [SetColor Foreground Dull Green]+				putStrLn "unchanged"+			MadeChange -> do+				setSGR [SetColor Foreground Vivid Green]+				putStrLn "done"+		setSGR []+		ensure ls (combineResult r rs)++warningMessage :: String -> IO ()+warningMessage s = do+	setSGR [SetColor Foreground Vivid Red]+	putStrLn $ "** warning: " ++ s+	setSGR []+	hFlush stdout
Propellor/PrivData.hs view
@@ -9,7 +9,7 @@ import Control.Monad  import Propellor.Types-import Propellor.Property+import Propellor.Engine import Utility.Monad import Utility.PartialPrelude import Utility.Exception
Propellor/Property.hs view
@@ -2,13 +2,10 @@  import System.Directory import Control.Monad-import System.Console.ANSI-import System.Exit-import System.IO  import Propellor.Types+import Propellor.Engine import Utility.Monad-import Utility.Exception  makeChange :: IO () -> IO Result makeChange a = a >> return MadeChange@@ -82,42 +79,3 @@ 	( ensureProperty property 	, return NoChange 	)--ensureProperty :: Property -> IO Result-ensureProperty = catchDefaultIO FailedChange . propertySatisfy--ensureProperties :: [Property] -> IO ()-ensureProperties ps = do-	r <- ensureProperties' [propertyList "overall" ps]-	case r of-		FailedChange -> exitWith (ExitFailure 1)-		_ -> exitWith ExitSuccess--ensureProperties' :: [Property] -> IO Result-ensureProperties' ps = ensure ps NoChange-  where-	ensure [] rs = return rs-	ensure (l:ls) rs = do-		r <- ensureProperty l-		clearFromCursorToLineBeginning-		setCursorColumn 0-		putStr $ propertyDesc l ++ "... "-		case r of-			FailedChange -> do-				setSGR [SetColor Foreground Vivid Red]-				putStrLn "failed"-			NoChange -> do-				setSGR [SetColor Foreground Dull Green]-				putStrLn "unchanged"-			MadeChange -> do-				setSGR [SetColor Foreground Vivid Green]-				putStrLn "done"-		setSGR []-		ensure ls (combineResult r rs)--warningMessage :: String -> IO ()-warningMessage s = do-	setSGR [SetColor Foreground Vivid Red]-	putStrLn $ "** warning: " ++ s-	setSGR []-	hFlush stdout
propellor.cabal view
@@ -1,5 +1,5 @@ Name: propellor-Version: 0.1.1+Version: 0.1.2 Cabal-Version: >= 1.6 License: GPL Maintainer: Joey Hess <joey@kitenet.net>@@ -60,6 +60,7 @@     Propellor.Property.User     Propellor.CmdLine     Propellor.PrivData+    Propellor.Engine     Propellor.Types   Other-Modules:     Utility.Applicative