diff --git a/manifests/site.pp b/manifests/site.pp
index 1793b2fd9c..1ca616e32f 100644
--- a/manifests/site.pp
+++ b/manifests/site.pp
@@ -184,6 +184,12 @@ node "jenkins.openstack.org" {
   include jenkins_master
 }
 
+node "jenkins-dev.openstack.org" {
+  $iptables_public_tcp_ports = [80, 443, 4155]
+  include openstack_server
+  include jenkins_master
+}
+
 node "community.openstack.org" {
   $iptables_public_tcp_ports = [80, 443, 8099, 8080]
   include openstack_server
diff --git a/modules/apt/manifests/key.pp b/modules/apt/manifests/key.pp
new file mode 100644
index 0000000000..7b76834287
--- /dev/null
+++ b/modules/apt/manifests/key.pp
@@ -0,0 +1,28 @@
+define apt::key($keyid, $ensure, $keyserver = "keyserver.ubuntu.com") {
+        case $ensure {
+                present: {
+                        exec { "Import $keyid to apt keystore":
+                                path        => "/bin:/usr/bin",
+                                environment => "HOME=/root",
+                                command     => "gpg --keyserver $keyserver --recv-keys $keyid && gpg --export --armor $keyid | apt-key add -",
+                                user        => "root",
+                                group       => "root",
+                                unless      => "apt-key list | grep $keyid",
+                                logoutput   => on_failure,
+                        }
+                }
+                absent:  {
+                        exec { "Remove $keyid from apt keystore":
+                                path    => "/bin:/usr/bin",
+                                environment => "HOME=/root",
+                                command => "apt-key del $keyid",
+                                user    => "root",
+                                group   => "root",
+                                onlyif  => "apt-key list | grep $keyid",
+                        }
+                }
+                default: {
+                        fail "Invalid 'ensure' value '$ensure' for apt::key"
+                }
+        }
+}
diff --git a/modules/jenkins_master/manifests/init.pp b/modules/jenkins_master/manifests/init.pp
index e0aff2ba86..c32b1ded14 100644
--- a/modules/jenkins_master/manifests/init.pp
+++ b/modules/jenkins_master/manifests/init.pp
@@ -1,8 +1,10 @@
 class jenkins_master {
 
-  #TODO: apache modules: ssl, proxy, rewrite
-  #TODO: wget -q -O - http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key | sudo apt-key add -
-  #TODO: or something like: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys KEYID
+  #This key is at http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key
+  apt::key { "D50582E6":
+    keyid  => "D50582E6",
+    ensure => present,
+  }
 
   file { '/etc/apt/sources.list.d/jenkins.list':
     owner => 'root',
@@ -11,6 +13,7 @@ class jenkins_master {
     ensure => 'present',
     content => "deb http://pkg.jenkins-ci.org/debian binary/",
     replace => 'true',
+    require => Apt::Key['D50582E6'],
   }
 
   file { '/etc/apache2/sites-available/jenkins':
@@ -26,14 +29,58 @@ class jenkins_master {
   file { '/etc/apache2/sites-enabled/jenkins':
     target => '/etc/apache2/sites-available/jenkins',
     ensure => link,
-    require => File['/etc/apache2/sites-available/jenkins'],
+    require => [
+      File['/etc/apache2/sites-available/jenkins'],
+      File['/etc/apache2/mods-enabled/ssl.conf'],
+      File['/etc/apache2/mods-enabled/ssl.load'],
+      File['/etc/apache2/mods-enabled/rewrite.load'],
+      File['/etc/apache2/mods-enabled/proxy.conf'],
+      File['/etc/apache2/mods-enabled/proxy.load'],
+      File['/etc/apache2/mods-enabled/proxy_http.load'],
+    ],
   }
 
   file { '/etc/apache2/sites-enabled/000-default':
-    require => File['/etc/apache2/sites-enabled/jenkins'],
+    require => File['/etc/apache2/sites-available/jenkins'],
     ensure => absent,
   }
 
+  file { '/etc/apache2/mods-enabled/ssl.conf':
+    target => '/etc/apache2/mods-available/ssl.conf',
+    ensure => link,
+    require => Package['apache2'],
+  }
+
+  file { '/etc/apache2/mods-enabled/ssl.load':
+    target => '/etc/apache2/mods-available/ssl.load',
+    ensure => link,
+    require => Package['apache2'],
+  }
+
+  file { '/etc/apache2/mods-enabled/rewrite.load':
+    target => '/etc/apache2/mods-available/rewrite.load',
+    ensure => link,
+    require => Package['apache2'],
+  }
+
+  file { '/etc/apache2/mods-enabled/proxy.conf':
+    target => '/etc/apache2/mods-available/proxy.conf',
+    ensure => link,
+    require => Package['apache2'],
+  }
+
+  file { '/etc/apache2/mods-enabled/proxy.load':
+    target => '/etc/apache2/mods-available/proxy.load',
+    ensure => link,
+    require => Package['apache2'],
+  }
+
+  file { '/etc/apache2/mods-enabled/proxy_http.load':
+    target => '/etc/apache2/mods-available/proxy_http.load',
+    ensure => link,
+    require => Package['apache2'],
+  }
+
   $packages = [
     "jenkins",
     "python-pip",
@@ -43,7 +90,7 @@ class jenkins_master {
 
   package { $packages:
     ensure => "latest",
-    require => File['/etc/apt/sources.list.d/jenkins.list'],
+    require => [File['/etc/apt/sources.list.d/jenkins.list'], Exec["update apt cache"]],
   }
 
   service { "versions":