diff --git a/doc/index.rst b/doc/index.rst
index 68ec7dab..ff31b03e 100644
--- a/doc/index.rst
+++ b/doc/index.rst
@@ -25,6 +25,7 @@ Contents:
systems
jenkins
gerrit
+ puppet
Indices and tables
==================
diff --git a/doc/puppet.rst b/doc/puppet.rst
new file mode 100644
index 00000000..bdf7f6d7
--- /dev/null
+++ b/doc/puppet.rst
@@ -0,0 +1,60 @@
+Puppet Modules
+==============
+
+Much of the OpenStack project infrastructure is deployed and managed using
+puppet.
+The OpenStack CI team manage a number of custom puppet modules outlined in this
+document.
+
+Lodgeit
+-------
+
+The lodgeit module installs and configures lodgeit [1]_ on required servers to
+be used as paste installations. For OpenStack we use a fork of this maintained
+by dcolish [2]_ which contains bug fixes necessary for us to use it.
+
+Puppet will configure lodgeit to use drizzle [3]_ as a database backend,
+nginx [4]_ as a front-end proxy and upstart scripts to run the lodgeit
+instances. It will store and maintain local branch of the the mercurial
+repository for lodgeit in ``/tmp/lodgeit-main``.
+
+To use this module you need to add something similar to the following in the
+main ``site.pp`` manifest:
+
+.. code-block:: ruby
+ :linenos:
+
+ node "paste.openstack.org" {
+ include openstack_server
+ include lodgeit
+ lodgeit::site { "openstack":
+ port => "5000",
+ image => "header-bg2.png"
+ }
+
+ lodgeit::site { "drizzle":
+ port => "5001"
+ }
+ }
+
+In this example we include the lodgeit module which will install all the
+pre-requisites for Lodgeit as well as creating a checkout ready.
+The ``lodgeit::site`` calls create the individual paste sites.
+
+The name in the ``lodgeit::site`` call will be used to determine the URL, path
+and name of the site. So "openstack" will create ``paste.openstack.org``,
+place it in ``/srv/lodgeit/openstack`` and give it an upstart script called
+``openstack-paste``. It will also change the h1 tag to say "Openstack".
+
+The port number given needs to be a unique port which the lodgeit service will
+run on. The puppet script will then configure nginx to proxy to that port.
+
+Finally if an image is given that will be used instead of text inside the h1
+tag of the site. The images need to be stored in the ``modules/lodgeit/files``
+directory.
+
+.. rubric:: Footnotes
+.. [1] `Lodgeit homepage `_
+.. [2] `dcolish's Lodgeit fork `_
+.. [3] `Drizzle homepage `_
+.. [4] `nginx homepage `_