the recipe should now be performing all steps to completely
   install and uninstall deltacloud
---
 deltacloud_recipe/deltacloud_recipe.pp        |  267 ++-----------------
 deltacloud_recipe/deltacloud_stop_services.pp |   32 +++
 deltacloud_recipe/deltacloud_uninstall.pp     |   41 +++
 deltacloud_recipe/files/condor_config.local   |    9 +-
 deltacloud_recipe/files/deltacloud-core       |    4 +-
 deltacloud_recipe/manifests/deltacloud.pp     |  357 ++++++++++++++++++++++++-
 deltacloud_recipe/manifests/postgres.pp       |   27 ++-
 deltacloud_recipe/manifests/rails.pp          |    8 +
 deltacloud_recipe/manifests/selinux.pp        |   11 +
 deltacloud_recipe/manifests/time.pp           |    8 +
 10 files changed, 499 insertions(+), 265 deletions(-)
 create mode 100644 deltacloud_recipe/deltacloud_stop_services.pp
 create mode 100644 deltacloud_recipe/deltacloud_uninstall.pp
 create mode 100644 deltacloud_recipe/manifests/selinux.pp
 create mode 100644 deltacloud_recipe/manifests/time.pp

diff --git a/deltacloud_recipe/deltacloud_recipe.pp 
b/deltacloud_recipe/deltacloud_recipe.pp
index 873d2d8..d7e8765 100644
--- a/deltacloud_recipe/deltacloud_recipe.pp
+++ b/deltacloud_recipe/deltacloud_recipe.pp
@@ -19,262 +19,37 @@
 #--
 
 #
-# deltacloud thincrust appliance
+# deltacloud installation recipe
 #
 
-# Modules used by the appliance
-import "appliance_base"
-import "deltacloud_appliance"
-import "banners"
-import "firewall"
+# Modules used by the recipe
+import "deltacloud_recipe/deltacloud"
 
-# Information about our appliance
-$appliance_name = "Deltacloud Appliance"
-$appliance_version = "0.0.2"
+# setup the deltacloud repositories
+dc::repos{"deltacloud":}
 
-# Configuration
-appliance_base::setup{$appliance_name:}
-appliance_base::enable_updates{$appliance_name:}
-banners::all{$appliance_name:}
-firewall::setup{$appliance_name: status=>"enabled"}
+# install deltacloud components
+dc::package::install{["aggregator", "core"]:
+                        require => Dc::Repos["deltacloud"]}
 
-firewall_open_port{"httpd": port => "80", policy => "tcp"}
+# setup selinux
+dc::selinux{'deltacloud':}
 
-# TODO put most of this recipe into the deltacloud manifest, replace with:
-#
-# deltacloud::package{["dependencies", "core", "client",
-#                      "factory-agent", "factory-console", "iwhd"]:
-#                       ensure => 'installed' }
-# deltacloud::db{"postgres":}
-# deltacloud::service{["condor", "condor_refreshd",
-#                      "httpd", "iwhd",
-#                      "core", "dbomatic", "aggregator"]:
-#                      ensure => 'running',
-#                      require => Deltacloud::Db[postgres]}
-# deltacloud::create_bucket{"deltacloud": require => Deltacloud::Service[iwhd]}
-# deltacloud::create_users{"dcloud":}
-#
-
-# Install gems for deltacloud dependencies and deltacloud core
-$deltacloud_deps=["authlogic", "gnuplot", "scruffy", "compass",
-                  "compass-960-plugin", "simple-navigation", "amazon-ec2",
-                  "typhoeus", "rb-inotify", "right_aws",
-                  "deltacloud-client", "deltacloud-core"]
-package{$deltacloud_deps:
-            provider => 'gem',
-            ensure   => 'installed' , require => Single_exec[builder] }
-
-# XXX hack, builder is failing to install via 'package' above, since it outputs
-# the text 'ERROR' when installing (yet still succeeds to install).
-# /usr/lib/ruby/site_ruby/1.8/puppet/provider/package/gem.rb:104 checks this 
and
-# will report the package as failing to have installed. Temporary workaround 
until
-# this is resolved
-single_exec{"builder": command => "/usr/bin/gem install builder"}
-
-# Image builder / warehouse
-
-# FIXME when image builder and warehouse are pushed to rubygems
-# and/or rpm is available install via that means and remove this download
-standalone_gem { "deltacloud-image-builder-agent-0.0.1.gem":
-                    source => 
"http://projects.morsi.org/deltacloud/deltacloud-image-builder-agent-0.0.1.gem";,
-                    ensure => installed;
-                 "deltacloud-image-builder-console-0.0.1.gem":
-                    source => 
"http://projects.morsi.org/deltacloud/deltacloud-image-builder-console-0.0.1.gem";,
-                    ensure => installed }
-
-download { "iwhd":
-             source => "http://projects.morsi.org/deltacloud/iwhd";,
-             cwd    => '/usr/sbin/',
-             mode   => 755 }
-
-file_with_dir { "conf.js":
-                     dir    => "/etc/iwhd",
-                     source => "puppet:///deltacloud_appliance/iwhd-conf.js",
-                     mode   => 644}
-
-file { "/etc/init.d/iwhd":
-         source => "puppet:///deltacloud_appliance/iwhd.init",
-         mode   => 755 }
-
-service { "iwhd":
-            ensure => running,
-            enable => true,
-            require => [Download[iwhd], File["/etc/iwhd/conf.js"], 
File["/etc/init.d/iwhd"]] }
-
-single_exec{"create-bucket":
-       command => "/usr/bin/curl -X PUT http://localhost:9090/deltacloud";,
-       require => Service[iwhd]
-}
+# setup the firewall
+dc::firewall{'deltacloud':}
 
-file { "/boxgrinder": ensure => "directory"}
-file { "/boxgrinder/appliances":
-          ensure => "directory",
-          require => File["/boxgrinder"]}
-file { "/boxgrinder/packaged_builders":
-          ensure => "directory",
-          require => File["/boxgrinder"]}
-file { "/root/.boxgrinder": ensure => "directory"}
-file { "/root/.boxgrinder/plugins":
-          ensure => "directory",
-          require => File["/root/.boxgrinder"]}
-file { "/root/.boxgrinder/plugins/local":
-            source => 
"puppet:///deltacloud_appliance/root-boxgrinder-plugins-local",
-            mode   => 644 }
+# setup deltacloud db
+dc::db{"postgres":}
 
-file { "/etc/qpidd.conf":
-            source => "puppet:///deltacloud_appliance/qpidd.conf",
-            mode   => 644 }
+# start deltacloud services
+dc::service::start{["aggregator", "core", 'iwhd', 'image-factory']:}
 
-file { "/etc/imagefactory.yml":
-            source => "puppet:///deltacloud_appliance/imagefactory.yml",
-            mode   => 644 }
-
-# Pulp
-# Configure pulp to fetch from Fedora
-# FIXME the locale issue has been fixed, but this command is timing out
-# indefinetly due to what seems to be a bug in pulp, did not debug extensively
-#single_exec{"pulp_fedora_config":
-#            command => "/usr/bin/pulp-admin -u admin -p admin repo create 
--id=fedora-repo --feed 
yum:http://download.fedora.redhat.com/pub/fedora/linux/updates/13/x86_64/";
-#}
-
-# Configure and start condor-dcloud
-file {"/var/lib/condor/condor_config.local":
-       source => "puppet:///deltacloud_appliance/condor_config.local",
-       notify          => Service[condor]
-}
-service {"condor" :
-       ensure => running,
-       enable => true
-}
-
-# Configure and start postgres
-file { "/var/lib/pgsql/data/pg_hba.conf":
-         source => "puppet:///deltacloud_appliance/pg_hba.conf",
-         require => Postgres::Initialize[init_db] }
-postgres::initialize{'init_db':}
-postgres::start{'start_db': require => File["/var/lib/pgsql/data/pg_hba.conf"]}
-postgres::user{"dcloud":
-                 password => "v23zj59an",
-                 roles    => "CREATEDB",
-                 require  => Postgres::Start[start_db]}
-
-
-# Create deltacloud database
-rails::create::db{"create_deltacloud_database":
-            cwd        => "/usr/share/deltacloud-aggregator",
-            rails_env  => "production",
-            require    => [Postgres::User[dcloud], Package[$deltacloud_deps]]}
-rails::migrate::db{"migrate_deltacloud_database":
-            cwd             => "/usr/share/deltacloud-aggregator",
-            rails_env       => "production",
-            require         => Rails::Create::Db[create_deltacloud_database]}
-
-# install init.d control script for deltacloudd
-file {"/etc/init.d/deltacloud-core":
-      source => "puppet:///deltacloud_appliance/deltacloud-core",
-      mode   => 755
-}
-
-# XXX hack, until the compass stylesheets are precompiled for the aggregator
-# rpm, precompile them here
-single_exec{"precompile_compass_stylesheets":
-     command => "/usr/bin/compass compile -e production --force --trace \
-                --config   /usr/share/deltacloud-aggregator/config/compass.rb  
 \
-                --sass-dir /usr/share/deltacloud-aggregator/app/stylesheets/ \
-                --css-dir  
/usr/share/deltacloud-aggregator/public/stylesheets/compiled",
-     require => [Package[compass], Package[compass-960-plugin]]
-}
-
-# Startup Deltacloud services
-service {"deltacloud-aggregator" :
-       ensure => running,
-       enable => true,
-       require => [Package[$deltacloud_deps], 
Rails::Migrate::Db[migrate_deltacloud_database], Service[condor]]
-}
-service {"deltacloud-condor_refreshd" :
-       ensure => running,
-       enable => true,
-       require => [Package[$deltacloud_deps], 
Rails::Migrate::Db[migrate_deltacloud_database], Service[condor]]
-}
-service {"deltacloud-dbomatic" :
-       ensure => running,
-       enable => true,
-       require => [Package[$deltacloud_deps], 
Rails::Migrate::Db[migrate_deltacloud_database], Service[condor]]
-}
-service{"deltacloud-core":
-       ensure => running,
-       enable => true,
-       require => [Package[$deltacloud_deps], 
File["/etc/init.d/deltacloud-core"]]
-}
-service {"httpd" :
-       ensure => running,
-       enable => true
-}
+# create bucket in image warehouse
+dc::create_bucket{"deltacloud":}
 
 # Create dcuser aggregator web user
-dc::site_admin{"dcuser":
-     cwd             => "/usr/share/deltacloud-aggregator",
-     rails_env       => "production",
+dc::site_admin{"admin":
      email           => '[email protected]',
-     password        => 'dcuser',
+     password        => 'password',
      first_name      => 'deltacloud',
-     last_name       => 'user',
-     require         => Rails::Migrate::Db["migrate_deltacloud_database"]}
-
-# Create dcuser system user, setup account
-user{"dcuser":
-      password => "",
-      home     => "/home/dcuser"}
-file{"/etc/gdm/custom.conf":
-     source => "puppet:///deltacloud_appliance/gdm-custom.conf",
-     mode   => 755
-}
-file{"/home/dcuser":
-        ensure  => "directory",
-        require => User[dcuser],
-        owner   => 'dcuser',
-        group   => 'dcuser';
-     ["/home/dcuser/.config/",
-      "/home/dcuser/Desktop"]:
-        ensure  => "directory",
-        require => File["/home/dcuser"],
-        owner   => 'dcuser',
-        group   => 'dcuser';
-     "/home/dcuser/.config/autostart/":
-        ensure  => "directory",
-        require => File["/home/dcuser/.config"],
-        owner   => 'dcuser',
-        group   => 'dcuser';
-}
-file{"/home/dcuser/.config/autostart/deltacloud.desktop":
-     source => "puppet:///deltacloud_appliance/deltacloud.desktop",
-     mode   => 755,
-     require => File["/home/dcuser/.config/autostart"]
-}
-file{"/home/dcuser/Desktop/deltacloud.desktop":
-     source => "puppet:///deltacloud_appliance/deltacloud.desktop",
-     mode   => 755,
-     require => File["/home/dcuser/Desktop"]
-}
-file{"/home/dcuser/background.png":
-     source => "puppet:///deltacloud_appliance/background.png",
-     mode   => 755,
-     require => File["/home/dcuser"]
-}
-single_exec{"set_dcuser_background":
-            command => "/usr/bin/gconftool-2 --type string --set 
/desktop/gnome/background/picture_filename '/home/dcuser/background.png'",
-            user    => 'dcuser',
-            require => [File["/home/dcuser"], 
File["/home/dcuser/background.png"]]
-}
-
-#TODO:  Fix me, find a better way to do this...
-#Issues:
-#  - There isn't a yum repo, just a single file so we can't add repo and use 
normal package syntac
-#  - specifying source to package doesn't seem to make yum do a localinstall 
instead
-#  - package isn't signed (not fixable by us, but makes me sad)
-
-package{"ec2-ami-tools":
-        provider => "rpm",
-       source => 
"http://s3.amazonaws.com/ec2-downloads/ec2-ami-tools.noarch.rpm";,
-       ensure => installed
-}
+     last_name       => 'user'}
diff --git a/deltacloud_recipe/deltacloud_stop_services.pp 
b/deltacloud_recipe/deltacloud_stop_services.pp
new file mode 100644
index 0000000..71cb1bf
--- /dev/null
+++ b/deltacloud_recipe/deltacloud_stop_services.pp
@@ -0,0 +1,32 @@
+#--
+#  Copyright (C) 2010 Red Hat Inc.
+#
+#  This library is free software; you can redistribute it and/or
+#  modify it under the terms of the GNU Lesser General Public
+#  License as published by the Free Software Foundation; either
+#  version 2.1 of the License, or (at your option) any later version.
+#
+#  This library is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+#  Lesser General Public License for more details.
+#
+#  You should have received a copy of the GNU Lesser General Public
+#  License along with this library; if not, write to the Free Software
+#  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA
+#
+# Author: Mohammed Morsi <[email protected]>
+#--
+
+#
+# deltacloud uninstallation recipe
+#
+
+# Modules used by the recipe
+import "deltacloud_recipe/deltacloud"
+
+$services = ["aggregator", "core", 'iwhd', 'image-factory']
+
+# stop deltacloud services
+dc::service{$services:
+            ensure => 'stopped', enable => false}
diff --git a/deltacloud_recipe/deltacloud_uninstall.pp 
b/deltacloud_recipe/deltacloud_uninstall.pp
new file mode 100644
index 0000000..b39d423
--- /dev/null
+++ b/deltacloud_recipe/deltacloud_uninstall.pp
@@ -0,0 +1,41 @@
+#--
+#  Copyright (C) 2010 Red Hat Inc.
+#
+#  This library is free software; you can redistribute it and/or
+#  modify it under the terms of the GNU Lesser General Public
+#  License as published by the Free Software Foundation; either
+#  version 2.1 of the License, or (at your option) any later version.
+#
+#  This library is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+#  Lesser General Public License for more details.
+#
+#  You should have received a copy of the GNU Lesser General Public
+#  License along with this library; if not, write to the Free Software
+#  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA
+#
+# Author: Mohammed Morsi <[email protected]>
+#--
+
+#
+# deltacloud uninstallation recipe
+#
+
+# Modules used by the recipe
+import "deltacloud_recipe/deltacloud"
+
+$packages = ["aggregator", "core"]
+
+# stop deltacloud services
+dc::service::stop{["aggregator", "core", 'iwhd', 'image-factory']:}
+
+# destroy deltacloud db
+dc::db::destroy{"postgres":
+                require => Dc::Service::Stop['aggregator']}
+
+# install deltacloud components
+dc::package::uninstall{$packages:
+                        require => Dc::Db::Destroy['postgres']}
+
+dc::cleanup{"deltacloud": require => Dc::Package::Uninstall[$packages]}
diff --git a/deltacloud_recipe/files/condor_config.local 
b/deltacloud_recipe/files/condor_config.local
index 8e22206..d9d50c5 100644
--- a/deltacloud_recipe/files/condor_config.local
+++ b/deltacloud_recipe/files/condor_config.local
@@ -1,12 +1,15 @@
-CONDOR_HOST = localhost
+CONDOR_HOST = $(FULL_HOSTNAME)
 ALLOW_WRITE = *
 
 DAEMON_LIST = MASTER, SCHEDD, COLLECTOR, NEGOTIATOR, STARTD
 
-GRIDMANAGER_DEBUG = D_FULLDEBUG
 MAX_GRIDMANAGER_LOG = 500000000
 GRIDMANAGER_JOB_PROBE_INTERVAL = 30
 
+GRIDMANAGER_DEBUG = D_FULLDEBUG
+NEGOTIATOR_DEBUG = D_FULLDEBUG
+COLLECTOR_DEBUG = D_FULLDEBUG
+
 DCLOUD_GAHP = $(SBIN)/dcloud_gahp
 
 CLASSAD_LIFETIME = 0
@@ -19,3 +22,5 @@ COLLECTOR_UPDATE_INTERVAL = 900
 EVENT_LOG=$(LOG)/EventLog
 EVENT_LOG_USE_XML=True
 
EVENT_LOG_JOB_AD_INFORMATION_ATTRS=Owner,GlobalJobId,Cmd,JobStartDate,JobCurrentStartDate,JobFinishedHookDone
+
+CLASSAD_USER_LIBS = 
/usr/share/deltacloud-aggregator/classad_plugin/deltacloud_classad_plugin.so
diff --git a/deltacloud_recipe/files/deltacloud-core 
b/deltacloud_recipe/files/deltacloud-core
index efd62d3..3eb0afa 100755
--- a/deltacloud_recipe/files/deltacloud-core
+++ b/deltacloud_recipe/files/deltacloud-core
@@ -12,7 +12,9 @@
 
 ENV="${ENV:-production}"
 DRIVER="${DRIVER:-ec2}"
+PORT="${PORT:-3002}"
 LOCKFILE="${LOCKFILE:-/var/lock/subsys/deltacloud-core }"
+LOGFILE="${LOGFILE:-/var/log/deltacloud-core/$DRIVER.log}"
 
 PROG=/usr/bin/deltacloudd
 
@@ -21,7 +23,7 @@ PROG=/usr/bin/deltacloudd
 start() {
     echo -n "Starting deltacloud-core: "
 
-    $PROG -i $DRIVER -e $ENV&
+    $PROG -i $DRIVER -e $ENV -p $PORT >> $LOGFILE 2>&1 &
     RETVAL=$?
     if [ $RETVAL -eq 0 ] && touch $LOCKFILE ; then
       echo_success
diff --git a/deltacloud_recipe/manifests/deltacloud.pp 
b/deltacloud_recipe/manifests/deltacloud.pp
index 2c0650c..d83b8df 100644
--- a/deltacloud_recipe/manifests/deltacloud.pp
+++ b/deltacloud_recipe/manifests/deltacloud.pp
@@ -1,13 +1,358 @@
 # Deltacloud puppet definitions
 
-define dc::site_admin($cwd="", $rails_env="", $email="", $password="", 
$first_name="", $last_name=""){
+import "firewall"
+
+import "postgres"
+import "rails"
+import "selinux"
+import "time"
+
+# Setup repos which to pull deltacloud components
+define dc::repos(){
+  yumrepo{"${name}_arch":
+            name     => "${name}_arch",
+            baseurl  => 
'http://repos.fedorapeople.org/repos/deltacloud/appliance/fedora-$releasever/$basearch',
+            enabled  => 1, gpgcheck => 0}
+  yumrepo{"${name}_noarch":
+            name     => "${name}_noarch",
+            baseurl  => 
'http://repos.fedorapeople.org/repos/deltacloud/appliance/fedora-$releasever/noarch',
+            enabled  => 1, gpgcheck => 0}
+  yumrepo{"${name}_pulp":
+            name     => "${name}_pulp",
+            baseurl  => 
'http://repos.fedorapeople.org/repos/pulp/pulp/fedora-13/$basearch/',
+            enabled  => 1, gpgcheck => 0}
+}
+
+# Install the deltacloud components
+define dc::package::install(){
+  case $name {
+    'aggregator':  {
+       # specific versions of these two packages are needed and we need to 
pull the third in
+       package { 'python-imgcreate':
+                  provider => 'rpm', ensure => installed,
+                  source   => 
'http://repos.fedorapeople.org/repos/deltacloud/appliance/fedora-13/x86_64/python-imgcreate-031-1.fc12.1.x86_64.rpm'}
+       package { 'livecd-tools':
+                  provider => 'rpm', ensure => installed,
+                  source   => 
'http://repos.fedorapeople.org/repos/deltacloud/appliance/fedora-13/x86_64/livecd-tools-031-1.fc12.1.x86_64.rpm',
+                  require  => Package['python-imgcreate']}
+       package { 'appliance-tools':
+                  provider => 'yum', ensure => installed,
+                  require  => Package["livecd-tools", "python-imgcreate"] }
+
+      # TODO:  Fix me, find a better way to do this...
+      # We need to also install this rpm from amazon
+      package{"ec2-ami-tools":
+              provider => "rpm",
+              source => 
"http://s3.amazonaws.com/ec2-downloads/ec2-ami-tools.noarch.rpm";,
+              ensure => 'installed' }
+
+       package { 'rubygem-deltacloud-client':
+                   provider => 'yum', ensure => 'installed' }
+       package { 'rubygem-deltacloud-image-builder-agent':
+                   provider => 'yum', ensure => 'installed',
+                   require  => Package['appliance-tools', 'livecd-tools', 
'python-imgcreate', 'ec2-ami-tools']}
+       package { 'iwhd':
+                  provider => 'yum', ensure => 'installed' }
+
+
+       package {['deltacloud-aggregator',
+                 'deltacloud-aggregator-daemons',
+                 'deltacloud-aggregator-doc']:
+                 provider => 'yum', ensure => 'installed',
+                 require  => Package['rubygem-deltacloud-client',
+                                     'rubygem-deltacloud-image-builder-agent',
+                                     'iwhd']}
+    }
+
+    'core': {
+      package { 'rubygem-deltacloud-core':
+                  provider => 'yum', ensure => 'installed'}
+      file { "/var/log/deltacloud-core": ensure => 'directory' }
+    }
+  }
+}
+
+# Uninstall the deltacloud components
+define dc::package::uninstall(){
+  case $name {
+    'aggregator':  {
+       package {['deltacloud-aggregator-daemons',
+                 'deltacloud-aggregator-doc']:
+                 provider => 'yum', ensure => 'absent'}
+
+       package {'deltacloud-aggregator':
+                 provider => 'yum', ensure => 'absent',
+                 require  => Package['deltacloud-aggregator-daemons',
+                                     'deltacloud-aggregator-doc'] }
+       package { 'rubygem-deltacloud-client':
+                   provider => 'yum', ensure => 'absent',
+                   require  => Package['deltacloud-aggregator']}
+       package { 'rubygem-deltacloud-image-builder-agent':
+                   provider => 'yum', ensure => 'absent',
+                   require  => Package['deltacloud-aggregator']}
+       package { 'iwhd':
+                   provider => 'yum', ensure => 'absent',
+                   require  => Package['deltacloud-aggregator']}
+
+       package { 'appliance-tools':
+                  provider => 'yum', ensure => absent,
+                  require  => 
Package['rubygem-deltacloud-image-builder-agent']}
+       package { 'livecd-tools':
+                  provider => 'rpm', ensure => absent,
+                  require  => Package['appliance-tools']}
+       package { 'python-imgcreate':
+                  provider => 'rpm', ensure => absent,
+                  require  => Package['appliance-tools', 'livecd-tools']}
+
+    }
+
+    'core': {
+      package{"ec2-ami-tools":
+              provider => "rpm", ensure => 'absent',
+              require  => Package['rubygem-deltacloud-core']}
+      package { 'rubygem-deltacloud-core':
+                  provider => 'yum', ensure => 'absent'}
+    }
+  }
+}
+
+# Setup selinux for deltacloud
+define dc::selinux(){
+  selinux::mode{"permissive":}
+}
+
+# Setup firewall for deltacloud
+define dc::firewall(){
+  firewall::setup{'deltacloud': status=>"enabled"}
+  firewall_open_port{"httpd":   port => "80", policy => "tcp"}
+}
+
+# TODO disable selinux until we're sure everything works w/ it enabled
+
+# Start the deltacloud services
+define dc::service::start(){
+  case $name {
+    'aggregator':  {
+      file {"/var/lib/condor/condor_config.local":
+             source => "puppet:///deltacloud_recipe/condor_config.local",
+             require => Package['deltacloud-aggregator-daemons'] }
+      service { ['condor', 'httpd']:
+        ensure  => 'running',
+        enable  => true,
+        require => File['/var/lib/condor/condor_config.local'] }
+      service { ['deltacloud-aggregator',
+                 'deltacloud-condor_refreshd',
+                 'deltacloud-dbomatic']:
+        ensure    => 'running',
+        enable    => true,
+        hasstatus => true,
+        require => [Package['deltacloud-aggregator-daemons'],
+                    Rails::Migrate::Db[migrate_deltacloud_database],
+                    Service[condor]] }
+    }
+
+    'core':  {
+      time::sync{"deltacloud":} # we need to sync time to communicate w/ cloud 
providers
+      file {"/etc/init.d/deltacloud-core":
+            source => "puppet:///deltacloud_recipe/deltacloud-core",
+            mode   => 755 }
+     service { 'deltacloud-core':
+        ensure  => 'running',
+        enable  => true,
+        require => [Package['rubygem-deltacloud-core'],
+                    File['/etc/init.d/deltacloud-core']] }
+    }
+
+    'iwhd':  {
+      file { "/data":    ensure => 'directory' }
+      file { "/data/db": ensure => 'directory' }
+      service { 'mongod':
+        ensure  => 'running',
+        enable  => true,
+        require => [Package['iwhd'], File["/data/db"]]}
+      service { 'iwhd':
+        ensure  => 'running',
+        enable  => true,
+        require => [Package['iwhd'],
+                    Service[mongod]]}
+    }
+
+    'image-factory':  {
+      dc::configure_boxgrinder{'conf_bxg':}
+      file { "/etc/qpidd.conf":
+                 source => "puppet:///deltacloud_recipe/qpidd.conf",
+                 mode   => 644 }
+      service {'qpidd':
+                 ensure  => 'running',
+                 enable  => true,
+                 require => [File['/etc/qpidd.conf'],
+                             Package['deltacloud-aggregator-daemons']]}
+      file { "/etc/imagefactory.yml":
+                 source => "puppet:///deltacloud_recipe/imagefactory.yml",
+                 mode   => 644 }
+      $requires = [Package['rubygem-deltacloud-image-builder-agent'],
+                   Package['deltacloud-aggregator-daemons'],
+                   File['/etc/imagefactory.yml'],
+                   Service[qpidd],
+                   Rails::Migrate::Db[migrate_deltacloud_database],
+                   Dc::Configure_boxgrinder['conf_bxg']]
+      service { 'imagefactoryd':
+        ensure  => 'running',
+        enable  => true,
+        require => $requires}
+      service { 'deltacloud-image_builder_service':
+        ensure    => 'running',
+        enable    => true,
+        hasstatus => true,
+        require   => $requires}
+    }
+  }
+}
+
+# Stop the deltacloud services
+define dc::service::stop(){
+  case $name {
+    'aggregator':  {
+      service { ['condor', 'httpd']:
+        ensure  => 'stopped',
+        enable  => false,
+        require => Service['deltacloud-aggregator',
+                           'deltacloud-condor_refreshd',
+                           'deltacloud-dbomatic'] }
+      service { ['deltacloud-aggregator',
+                 'deltacloud-condor_refreshd',
+                 'deltacloud-dbomatic']:
+        ensure => 'stopped',
+        enable => false,
+        hasstatus => true }
+    }
+
+    'core':  {
+      service { 'deltacloud-core':
+        ensure  => 'stopped',
+        enable  => false}
+    }
+
+    'iwhd':  {
+      service { 'mongod':
+        ensure  => 'stopped',
+        enable  => false,
+        require => Service[iwhd]}
+      service { 'iwhd':
+        ensure  => 'stopped',
+        enable  => false}
+    }
+
+    'image-factory':  {
+      service {'qpidd':
+                 ensure  => 'stopped',
+                 enable  => false,
+                 require => Service['imagefactoryd', 
'deltacloud-image_builder_service']}
+
+      service { 'imagefactoryd':
+        ensure  => 'stopped',
+        enable  => false}
+
+      service { 'deltacloud-image_builder_service':
+          ensure  => 'stopped',
+          hasstatus => true,
+          enable  => false}
+    }
+  }
+}
+
+# Configure boxgrinder, this should go into the boxgrinder rpms eventually
+define dc::configure_boxgrinder(){
+  file { "/boxgrinder": ensure => "directory"}
+  file { "/boxgrinder/appliances":
+            ensure => "directory",
+            require => File["/boxgrinder"]}
+  file { "/boxgrinder/packaged_builders":
+            ensure => "directory",
+            require => File["/boxgrinder"]}
+  file { "/root/.boxgrinder": ensure => "directory"}
+  file { "/root/.boxgrinder/plugins":
+            ensure => "directory",
+            require => File["/root/.boxgrinder"]}
+  file { "/root/.boxgrinder/plugins/local":
+              source => 
"puppet:///deltacloud_recipe/root-boxgrinder-plugins-local",
+              mode   => 644 }
+}
+
+# Configure pulp to fetch from Fedora
+# TODO uncomment when factory/warehouse uses pulp
+#exec{"pulp_fedora_config":
+#      command => "/usr/bin/pulp-admin -u admin -p admin repo create 
--id=fedora-repo --feed 
yum:http://download.fedora.redhat.com/pub/fedora/linux/updates/13/x86_64/";
+#}
+
+# Create a named bucket in iwhd
+define dc::create_bucket(){
+  package{'curl': ensure => 'installed'}
+  # XXX ugly hack but iwhd might take some time to come up
+  exec{"iwhd_startup_pause":
+              command => "/bin/sleep 2",
+              require => Service[iwhd]}
+  exec{"create-bucket-${name}":
+         command => "/usr/bin/curl -X PUT http://localhost:9090/templates";,
+         require => [Exec['iwhd_startup_pause'], Package[curl]] }
+}
+
+# Initialize and start the deltacloud database
+define dc::db(){
+  # Right now we configure and start postgres, at some point I want
+  # to make the db that gets setup configurable
+  file { "/var/lib/pgsql/data/pg_hba.conf":
+           source => "puppet:///deltacloud_recipe/pg_hba.conf",
+           require => Postgres::Initialize[init_db] }
+  postgres::initialize{'init_db':}
+  postgres::start{'start_db': require => 
File["/var/lib/pgsql/data/pg_hba.conf"]}
+  postgres::user{"dcloud":
+                   password => "v23zj59an",
+                   roles    => "CREATEDB",
+                   require  => Postgres::Start[start_db]}
+
+
+  # Create deltacloud database
+  rails::create::db{"create_deltacloud_database":
+              cwd        => "/usr/share/deltacloud-aggregator",
+              rails_env  => "production",
+              require    => [Postgres::User[dcloud], 
Package['deltacloud-aggregator']]}
+  rails::migrate::db{"migrate_deltacloud_database":
+              cwd             => "/usr/share/deltacloud-aggregator",
+              rails_env       => "production",
+              require         => Rails::Create::Db[create_deltacloud_database]}
+}
+
+# Destroy the deltacloud database
+define dc::db::destroy(){
+  rails::drop::db{"drop_deltacloud_database":
+              cwd        => "/usr/share/deltacloud-aggregator",
+              rails_env  => "production",
+              require    => Service["deltacloud-aggregator",
+                                    "deltacloud-condor_refreshd",
+                                    "deltacloud-dbomatic",
+                                    "deltacloud-image_builder_service"]}
+  postgres::user::remove{"dcloud": require => 
Rails::Drop::Db["drop_deltacloud_database"]}
+}
+
+# Create a new site admin aggregator web user
+define dc::site_admin($email="", $password="", $first_name="", $last_name=""){
   exec{"create_site_admin_user":
-         cwd         => $cwd,
-         environment => "RAILS_ENV=${rails_env}",
-         command     => "/usr/bin/rake dc:create_user[${name}] email=${email} 
password=${password} first_name=${first_name} last_name=${last_name}"}
+         cwd         => '/usr/share/deltacloud-aggregator',
+         environment => "RAILS_ENV=production",
+         command     => "/usr/bin/rake dc:create_user[${name}] email=${email} 
password=${password} first_name=${first_name} last_name=${last_name}",
+         unless      => "/usr/bin/test `psql dcloud dcloud -P tuples_only -c 
\"select count(*) from users where login = '${name}';\"` = \"1\"",
+         require     => Rails::Migrate::Db["migrate_deltacloud_database"]}
   exec{"grant_site_admin_privs":
-         cwd         => $cwd,
-         environment => "RAILS_ENV=${rails_env}",
+         cwd         => '/usr/share/deltacloud-aggregator',
+         environment => "RAILS_ENV=production",
          command     => "/usr/bin/rake dc:site_admin[${name}]",
+         unless      => "/usr/bin/test `psql dcloud dcloud -P tuples_only -c 
\"select count(*) FROM roles INNER JOIN permissions ON (roles.id = 
permissions.role_id) INNER JOIN users ON (permissions.user_id = users.id) where 
roles.name = 'Administrator' AND users.login = '${name}';\"` = \"1\"",
          require     => Exec[create_site_admin_user]}
 }
+
+# Destroy and cleanup deltacloud artifacts
+define dc::cleanup(){
+  exec{"remove_deltacloud_templates": command => "/bin/rm -rf /templates"}
+  exec{"remove_boxgrinder_dir":       command => "/bin/rm -rf /boxgrinder"}
+}
diff --git a/deltacloud_recipe/manifests/postgres.pp 
b/deltacloud_recipe/manifests/postgres.pp
index f0bfdef..6a639b4 100644
--- a/deltacloud_recipe/manifests/postgres.pp
+++ b/deltacloud_recipe/manifests/postgres.pp
@@ -1,31 +1,38 @@
 # Some convenience routines for postgres
 
-file {"/var/deltacloud/": ensure => 'directory' }
+package { ["postgresql", "postgresql-server"]:
+            ensure => "installed", provider => "yum" }
 
 define postgres::initialize(){
   exec{"initialize_postgres":
          command => "/sbin/service postgresql initdb",
-         creates => "/var/deltacloud/initdb",
-         require => File["/var/deltacloud"]}
+         unless => "/usr/bin/test -d /var/lib/pgsql/data/pg_log",
+         require => Package["postgresql-server"]}
 }
 
 define postgres::start{
   service {"postgresql" :
-         ensure => running,
-         enable => true
-  }
+         ensure  => running,
+         enable  => true,
+         require => Exec['initialize_postgres']}
   # XXX ugly hack, postgres takes sometime to startup even though reporting as 
running
   # need to pause for a bit to ensure it is running before we try to access 
the db
   exec{"postgresql_startup_pause":
-              command => "/bin/sleep 5",
+              command => "/bin/sleep 2",
               require => Service[postgresql]
   }
 }
 
 define postgres::user($password="", $roles=""){
   exec{"create_dcloud_postgres_user":
+         unless  => "/usr/bin/test `psql postgres postgres -P tuples_only -c 
\"select count(*) from pg_user where usename='${name}';\"` = \"1\"",
+         command => "/usr/bin/psql postgres postgres -c \
+                     \"CREATE USER ${name} WITH PASSWORD '${password}' 
${roles}\""}
+}
+
+define postgres::user::remove($password="", $roles=""){
+  exec{"remove_dcloud_postgres_user":
+         onlyif  => "/usr/bin/test `psql postgres postgres -P tuples_only -c 
\"select count(*) from pg_user where usename='${name}';\"` = \"1\"",
          command => "/usr/bin/psql postgres postgres -c \
-                     \"CREATE USER ${name} WITH PASSWORD '${password}' 
${roles}\"",
-         creates => "/var/deltacloud/dcloud_postgres_user",
-         require => File["/var/deltacloud"]}
+                     \"DROP USER ${name}\""}
 }
diff --git a/deltacloud_recipe/manifests/rails.pp 
b/deltacloud_recipe/manifests/rails.pp
index 9cb7e19..438a209 100644
--- a/deltacloud_recipe/manifests/rails.pp
+++ b/deltacloud_recipe/manifests/rails.pp
@@ -14,3 +14,11 @@ define rails::migrate::db($cwd="", $rails_env=""){
          environment => "RAILS_ENV=${rails_env}",
          command     => "/usr/bin/rake db:migrate"}
 }
+
+define rails::drop::db($cwd="", $rails_env=""){
+  exec{"drop_rails_database":
+         cwd         => $cwd,
+         onlyif      => "/usr/bin/test -f ${cwd}/Rakefile",
+         environment => "RAILS_ENV=${rails_env}",
+         command     => "/usr/bin/rake db:drop:all"}
+}
diff --git a/deltacloud_recipe/manifests/selinux.pp 
b/deltacloud_recipe/manifests/selinux.pp
new file mode 100644
index 0000000..05a3174
--- /dev/null
+++ b/deltacloud_recipe/manifests/selinux.pp
@@ -0,0 +1,11 @@
+# Some convenience routines for selinux
+
+define selinux::mode(){
+  $mode = $name ? {
+    'permissive'    => '0',
+    'enforcing'     => '1'
+  }
+  exec{"set_selinux_${name}":
+    command  => "/usr/sbin/setenforce ${mode}"
+  }
+}
diff --git a/deltacloud_recipe/manifests/time.pp 
b/deltacloud_recipe/manifests/time.pp
new file mode 100644
index 0000000..c3db854
--- /dev/null
+++ b/deltacloud_recipe/manifests/time.pp
@@ -0,0 +1,8 @@
+# Some convenience routines for system time manipulation
+
+# Sync system time via ntp
+define time::sync(){
+  exec{"sync_time":
+    command  => "/usr/sbin/ntpdate pool.ntp.org"
+  }
+}
-- 
1.7.2.3

_______________________________________________
deltacloud-devel mailing list
[email protected]
https://fedorahosted.org/mailman/listinfo/deltacloud-devel

Reply via email to