% first presentation about cmtp
\documentclass{beamer}
% \usepackage{german}
\usepackage{graphicx}
\usepackage{beamerthemesplit}
\setbeamercovered{dynamic}
\usepackage[utf8]{inputenc}
\usetheme{Malmoe}
\usecolortheme{crane}

% \usepackage{minted}

% grahpic!
\usepackage[dvips]{epsfig}

\title{cdist configuration management}
\subtitle{History and current status at ETH Zurich}
\author{Nico -telmich- Schottelius}
\date{2011-04-27}

\begin{document}
\frame{\titlepage}
\section[Outline]{}
\frame{\tableofcontents}


\section{Introduction}
\frame
{
  \frametitle{Outline}
   \begin{itemize}
      \item From configuration management
      \item to puppet and existing products
      \item to cdist development, design and status
   \end{itemize}
}

\frame
{
  \frametitle{Why Configuration Management?}
   \begin{itemize}
      \item Needed for automatisation
      \item Removes burden on reinstallation
      \item Helps to scale to a big number of hosts
      \item Has documentation character
   \end{itemize}
}

\frame
{
  \frametitle{Why cdist?}
   \begin{itemize}
      \item Stopped using puppet (mostly due to bugs and non-intuitive configuration)
      \item Cfengine2 is more complicated
      \item Cfengine3 spams into your logfiles
      \item Did not investitage to deep into chef (based on puppet) or bcfg2
   \end{itemize}
}

\section{cdist}
\begin{frame}
   \frametitle{Features}
   \begin{itemize}
\item Simplicity:  There is only one type to extend cdist called type
\item Design:  Type and core cleanly seperated
\item Design:  Sticks completly to the KISS (keep it simple and stupid) paradigma
\item Design:  Meaningful error messages - do not lose time debugging error messages
   \end{itemize}
\end{frame}

\begin{frame}
   \frametitle{Features (2)}
   \begin{itemize}
\item Design:  Consistency in behaviour, naming and documentation
\item Design:  No surprise factor: Only do what is obviously clear, no magic
\item Design:  Define target state, do not focus on methods or scripts
\item Design:  Push architecture: Instantly apply your changes
   \end{itemize}
\end{frame}

\begin{frame}[fragile]
   \frametitle{Features (3)}
   \begin{itemize}
\item Small core: cdist's core is very small - less code, less bugs
\item Fast development: Focus on straightforwardness of type creation is a main development objective
   \end{itemize}
\end{frame}
\begin{frame}[fragile]
   \frametitle{Features (4)}
   \begin{itemize}
\item Requirements, Scalability: No central server needed, cdist operates in push mode and can be run from any computer
\item Requirements, Scalability, Upgrade: cdist only needs to be updated on the master, not on the target hosts
\item Requirements, Security: Uses well-know SSH as transport protocol
\item Requirements, Simplicity:  Requires only shell and SSH server on the target
   \end{itemize}
\end{frame}

\begin{frame}
   \frametitle{Features (5)}
   \begin{itemize}
\item UNIX: Reuse of existing tools like cat, find, mv, ...
\item UNIX, familar environment, documentation: Is available as manpages and HTML
\item UNIX, simplicity, familar environment: cdist is written in POSIX shell
\item UNIX, simplicity, familar environment: cdist is configured in POSIX shell
   \end{itemize}
\end{frame}

\subsection{Installation}
\frame
{
  \frametitle{Installation}
  \begin{center}
  git clone git://git.schottelius.org/cdist
  \end{center}
}

\begin{frame}[fragile]
  \frametitle{Documentation: Manpages}

  \begin{verbatim}
  # Requires asciidoc / a2x
  make man
  \end{verbatim}
\end{frame}

\subsection{Using}
\begin{frame}[fragile]
  \frametitle{Setup PATH and MANPATH}

  \begin{verbatim}
  cd cdist
  eval `./bin/cdist-env`
  echo $PATH
  echo $MANPATH
  \end{verbatim}
\end{frame}

\begin{frame}[fragile]
  \frametitle{Deploying configuration to a host}
  \begin{verbatim}
  # So wird es laufen...
  cdist-deploy-to localhost
  \end{verbatim}
\end{frame}
\begin{frame}[fragile]
  \frametitle{Initial manifest}
  \begin{small}
  \begin{verbatim}
  cat << eof > conf/manifest/init
  __file /etc/cdist-configured

  case "$__target_host" in
     localhost)
         __link /tmp/cdist-testfile          \
            --source /etc/cdist-configured   \ 
            --type symbolic
         __addifnosuchline /tmp/cdist-welcome \
            --line "Welcome to cdist"
      ;;
   esac
   eof
   # Needs to be executable
   chmod u+x conf/manifest/init

  \end{verbatim}
  \end{small}
\end{frame}
\begin{frame}[fragile]
  \frametitle{Now with working initial manifest}
  \begin{verbatim}
  cdist-deploy-to localhost
  \end{verbatim}
\end{frame}

\frame
{
  \frametitle{Combine functionality}
  % \begin{itemize}[<+->]
  \begin{itemize}
     \item Types
     \item conf/type/*
     \item \_\_ prefixed (do not clash with other stuff in \$PATH)
     \item i.e. webserver, mailserver, desktop, ...
  \end{itemize}
}
\begin{frame}[fragile]
   \frametitle{Creating a new type}
   \begin{small}
   \begin{verbatim}
   mkdir conf/type/__my_mailserver
   cat << eof > conf/type/__my_mailserver/manifest
   __package nullmailer --state installed

   require="__package/nullmailer" \
       __file /etc/nullmailer/remotes \
          --source "$__type/files/remotes"
   eof
   chmod u+x conf/type/__my_mailserver/manifest

   mkdir conf/type/__my_mailserver/files
   echo my.fancy.smart.host > \
       conf/type/__my_mailserver/files/remotes
   \end{verbatim}
   \end{small}
\end{frame}

\subsection{Update}
\begin{frame}[fragile]
  \frametitle{Versions}
  \begin{itemize}
     \item x.y: Stable version
     \item master: Development
  \end{itemize}
\end{frame}

\begin{frame}[fragile]
  \frametitle{Checkout and stay on stable version}
  \begin{center}
  git checkout -b 1.6 origin/1.6
  \end{center}
\end{frame}

\begin{frame}[fragile]
  \frametitle{Update to latest}
  \begin{center}
  git pull
  \end{center}
\end{frame}

\frame
{
  \frametitle{End}
  \begin{block}{That's it!}
  Have fun! - More information: http://www.nico.schottelius.org/software/cdist/
  \end{block}
}


\end{document}