diff --git a/manifests/site.pp b/manifests/site.pp
index 9efba18e85..b887ae6e04 100644
--- a/manifests/site.pp
+++ b/manifests/site.pp
@@ -155,6 +155,12 @@ node "docs.openstack.org" {
   include doc_server
 }
 
+node "devstack-oneiric.template.openstack.org" {
+  include openstack_server
+  include devstack_host
+}
+
+
 #
 # Jenkins slaves:
 #
diff --git a/modules/devstack_host/files/rabbitmq-env.conf b/modules/devstack_host/files/rabbitmq-env.conf
new file mode 100644
index 0000000000..ce9f3c4689
--- /dev/null
+++ b/modules/devstack_host/files/rabbitmq-env.conf
@@ -0,0 +1,4 @@
+# This file is managed by puppet
+# Use localhost in the node name so that we don't need to
+# touch /etc/hosts or use dns
+NODENAME=rabbit@localhost
diff --git a/modules/devstack_host/manifests/init.pp b/modules/devstack_host/manifests/init.pp
new file mode 100644
index 0000000000..6b64f936d7
--- /dev/null
+++ b/modules/devstack_host/manifests/init.pp
@@ -0,0 +1,37 @@
+# A machine ready to run devstack
+class devstack_host {
+
+    package { "mysql-server":
+      ensure => "latest",
+    }
+
+    package { "rabbitmq-server":
+      ensure => "latest",
+      require => File['rabbitmq-env.conf'],
+    }
+
+    file { "/etc/rabbitmq":
+      ensure => "directory",
+    }
+
+    file { 'rabbitmq-env.conf':
+      name => '/etc/rabbitmq/rabbitmq-env.conf',
+      owner => 'root',
+      group => 'root',
+      mode => 444,
+      ensure => 'present',
+      source => [
+         "puppet:///modules/devstack_host/rabbitmq-env.conf",
+       ],
+      require => File['/etc/rabbitmq'],
+    }
+
+    exec { "Set MySQL server root password":
+    	 subscribe => [ Package["mysql-server"]],
+	 refreshonly => true,
+	 unless => "mysqladmin -uroot -psecret status",
+	 path => "/bin:/usr/bin",
+	 command => "mysqladmin -uroot password secret",
+    }
+
+}