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