% 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}