| 
									
										
										
										
											2011-04-28 19:04:44 +02:00
										 |  |  | % 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} | 
					
						
							| 
									
										
										
										
											2011-05-10 16:27:29 +02:00
										 |  |  | \date{2011-04-27} | 
					
						
							| 
									
										
										
										
											2011-04-28 19:04:44 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | \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} |