-----------------------------------------------------------------------------
-- |
-- Module      :  System.LXC
-- Copyright   :  (c) Nickolay Kudasov 2014
-- License     :  BSD-style (see the file LICENSE)
--
-- Maintainer  :  nickolay.kudasov@gmail.com
--
-- Create, control and manage LXC containers through Haskell API.
-- You can get more info about LXC at <https://help.ubuntu.com/lts/serverguide/lxc.html> and <https://linuxcontainers.org>.
--
-- Most of container-related functions (e.g. 'start', 'attach', 'destroy') perform in 'System.LXC.Container.LXC' monad.
-- To run @'System.LXC.Container.LXC' a@ computation you need to specify a container using 'withContainer' function.
-- When working with a single container it might be handy to have an alias like this:
--
-- @
-- let containerName = withContainer (Container "container-name" configPath)
-- @
--
-- You can start using Haskell LXC API bindings similar to a command line tool from GHCi:
--
-- @
-- $ ghci
-- >>> import System.LXC
-- >>> let trusty = withContainer (Container "trusty" Nothing)
-- >>> trusty $ create "download" Nothing Nothing [] ["-d", "ubuntu", "-r", "trusty", "-a", "amd64"]
-- Using image from local cache
-- Unpacking the rootfs
--
-- ---
-- You just created an Ubuntu container (release=trusty, arch=amd64, variant=default)
-- The default username\/password is: ubuntu \/ ubuntu
-- To gain root privileges, please use sudo.
--
-- True
-- >>> trusty $ start False []
-- True
-- >>> trusty state
-- ContainerRunning
-- >>> trusty $ attachRunWait defaultAttachOptions "echo" ["echo", "Hello, world!"]
-- Hello, world!
-- Just ExitSuccess
-- >>> trusty stop
-- True
-- >>> Just trustySnapC <- trusty $ clone (Just "trusty-snap") Nothing [CloneSnapshot] Nothing Nothing Nothing []
-- >>> let trustySnap = withContainer trustySnapC
-- >>> trustySnap $ start False []
-- True
-- >>> trustySnap getInterfaces
-- ["eth0","lo"]
-- >>> trustySnap $ getIPs "eth0" "inet" 0
-- ["10.0.3.135"]
-- >>> trustySnap $ shutdown (-1)
-- True
-- >>> trustySnap state
-- ContainerStopped
-- @
--
-- For more examples, please see @examples\/@ folder.
--
-----------------------------------------------------------------------------
module System.LXC (
  module System.LXC.Container,
  module System.LXC.AttachOptions
) where

import System.LXC.Container
import System.LXC.AttachOptions