Changed providers to use same deltacloud-core instance at port 3002.
New deltacloud classes added to default_configure. Replaced conductor::removed_seed_data class in default_cleanup with deltacloud::disable.
Removed unused provider-specific parameters from deltacloud-core init script.
Disabled admin logout from default profile because it causes rhev and vsphere provider adds to fail.
Original patchset from morazi. --- conf/default_cleanup | 2 +- conf/default_configure | 6 ++- recipes/aeolus/manifests/conductor.pp | 12 ++----- recipes/aeolus/manifests/deltacloud.pp | 48 +++++++++---------------- recipes/aeolus/manifests/init.pp | 3 +- recipes/aeolus/manifests/profiles/default.pp | 17 +++++---- recipes/aeolus/manifests/rhevm.pp | 12 ++----- recipes/aeolus/manifests/vmware.pp | 16 ++------ recipes/aeolus/templates/deltacloud-core | 22 ++++++------ 9 files changed, 53 insertions(+), 85 deletions(-)
diff --git a/conf/default_cleanup b/conf/default_cleanup index d43e906..c17134e 100644 --- a/conf/default_cleanup +++ b/conf/default_cleanup @@ -17,7 +17,7 @@ classes: - aeolus::conductor::disabled - aeolus::iwhd::disabled - aeolus::image-factory::disabled -- aeolus::conductor::remove_seed_data +- aeolus::deltacloud::disabled # Uncomment this to clean up RHEV details #- aeolus::rhevm::disabled # Uncomment to remove vmware diff --git a/conf/default_configure b/conf/default_configure index ce79878..9b570a8 100644 --- a/conf/default_configure +++ b/conf/default_configure @@ -22,7 +22,7 @@ parameters: # rhevm_nfs_server: nfs.server.com # rhevm_nfs_export: /export/export_domain # rhevm_nfs_mount_point: /mnt/rhevm-nfs -# rhevm_deltacloud_port: 3005 +# rhevm_deltacloud_port: 3002 # rhevm_deltacloud_username: username@fqdn # rhevm_deltacloud_password: password # rhevm_deltacloud_powershell_url: https://rhevm.server.com:8543/rhevm-api-powershell @@ -33,12 +33,14 @@ parameters: # vmware_password: password # vmware_datastore: datastore # vmware_network_name: network_name -# vmware_deltacloud_port: 3006 +# vmware_deltacloud_port: 3002 classes: - aeolus::conductor - aeolus::image-factory - aeolus::iwhd - aeolus::profiles::default +- aeolus::deltacloud::core +- aeolus::deltacloud::ec2 # Uncomment this section to include rhev setup #- aeolus::rhevm # diff --git a/recipes/aeolus/manifests/conductor.pp b/recipes/aeolus/manifests/conductor.pp index aded6b3..8eed224 100644 --- a/recipes/aeolus/manifests/conductor.pp +++ b/recipes/aeolus/manifests/conductor.pp @@ -42,7 +42,7 @@ class aeolus::conductor inherits aeolus { } else{ apache::site{"aeolus-conductor": source => 'puppet:///modules/aeolus/aggregator-httpd.conf'} } - + service { ['aeolus-conductor', 'conductor-dbomatic' ]: ensure => 'running', @@ -116,13 +116,6 @@ class aeolus::conductor inherits aeolus { enable => 'true' } }
- -class aeolus::conductor::remove_seed_data { - aeolus::deltacloud::disabled{"mock": } - aeolus::deltacloud::disabled{"ec2-us-east-1": } - aeolus::deltacloud::disabled{"ec2-us-west-1": } -} - class aeolus::conductor::disabled { file {"/var/lib/aeolus-conductor": ensure => absent, @@ -197,6 +190,7 @@ define aeolus::conductor::logout(){ }
# Create a new provider via the conductor +# TODO: Removed dep on grant_site_admin_privs, which might create a timing hole define aeolus::conductor::provider($type="",$url=""){ web_request{ "provider-$name": post => "https://localhost/conductor/providers", @@ -208,7 +202,7 @@ define aeolus::conductor::provider($type="",$url=""){ use_cookies_at => '/tmp/aeolus-admin', unless => { 'get' => 'https://localhost/conductor/providers', 'contains' => "//html/body//a[text() = '$name']" }, - require => [Service['aeolus-conductor'], Exec['grant_site_admin_privs']] + require => [Service['aeolus-conductor']] } }
diff --git a/recipes/aeolus/manifests/deltacloud.pp b/recipes/aeolus/manifests/deltacloud.pp index df01d5a..ce9ad05 100644 --- a/recipes/aeolus/manifests/deltacloud.pp +++ b/recipes/aeolus/manifests/deltacloud.pp @@ -7,6 +7,21 @@ class aeolus::deltacloud::core { package { 'deltacloud-core': ensure => 'installed', provider => $package_provider } + + ### we need to sync time to communicate w/ cloud providers + include ntp::client + + ### Start the aeolus services + file { "/var/log/deltacloud-core": ensure => 'directory' } + file {"/etc/init.d/deltacloud-core": + content => template("aeolus/deltacloud-core"), + mode => 755 } + + service { 'deltacloud-core': + ensure => 'running', + enable => true, + hasstatus => true, + require => [Package['deltacloud-core'], File["/etc/init.d/deltacloud-core", "/var/log/deltacloud-core"]]} }
class aeolus::deltacloud::ec2 { @@ -17,39 +32,10 @@ class aeolus::deltacloud::ec2 { provider => $package_provider } }
- -# install the deltacloud component w/ the specified driver -define aeolus::deltacloud($provider_type="", $endpoint='', $port="3002") { - include aeolus::deltacloud::core - - if $provider_type == "ec2" { - include aeolus::deltacloud::ec2 - } - - ### we need to sync time to communicate w/ cloud providers - include ntp::client - - ### Start the aeolus services - file { "/var/log/deltacloud-${name}": ensure => 'directory' } - file {"/etc/init.d/deltacloud-${name}": - content => template("aeolus/deltacloud-core"), - mode => 755 } - service { "deltacloud-${name}": - ensure => 'running', - enable => true, - require => [Package['deltacloud-core'], - $provider_type ? { "ec2" => Package['rubygem-aws'], default => Package['deltacloud-core'] }, - File["/etc/init.d/deltacloud-${name}", "/var/log/deltacloud-${name}"]] } -} - -define aeolus::deltacloud::disabled() { +class aeolus::deltacloud::disabled { ### Stop the aeolus services - service { "deltacloud-${name}": + service { 'deltacloud-core': ensure => 'stopped', enable => false, hasstatus => true} - file {"/etc/init.d/deltacloud-${name}": - ensure => absent, - require => Service["deltacloud-${name}"]} } - diff --git a/recipes/aeolus/manifests/init.pp b/recipes/aeolus/manifests/init.pp index 4376838..03cc03c 100644 --- a/recipes/aeolus/manifests/init.pp +++ b/recipes/aeolus/manifests/init.pp @@ -41,9 +41,8 @@ class aeolus {
# Create a new provider in aeolus define aeolus::provider($type, $port, $endpoint=""){ - aeolus::deltacloud{$name: provider_type => $type, endpoint => $endpoint, port => $port} aeolus::conductor::provider{$name: type => $type, url => "http://localhost:$%7Bport%7D/api", - require => Aeolus::Deltacloud[$name] } + require => [Service['deltacloud-core'], Aeolus::Conductor::Hwp["hwp1"]] } } diff --git a/recipes/aeolus/manifests/profiles/default.pp b/recipes/aeolus/manifests/profiles/default.pp index 0021bbf..f8790ce 100644 --- a/recipes/aeolus/manifests/profiles/default.pp +++ b/recipes/aeolus/manifests/profiles/default.pp @@ -25,13 +25,13 @@ class aeolus::profiles::default { aeolus::provider{"ec2-us-east-1": type => 'ec2', endpoint => 'us-east-1', - port => 3003, + port => 3002, require => Aeolus::Conductor::Login["admin"] }
aeolus::provider{"ec2-us-west-1": type => 'ec2', endpoint => 'us-west-1', - port => 3004, + port => 3002, require => Aeolus::Conductor::Login["admin"] }
aeolus::conductor::hwp{"hwp1": @@ -48,11 +48,12 @@ class aeolus::profiles::default { architecture => "x86_64", require => Aeolus::Conductor::Login["admin"] }
- aeolus::conductor::logout{"admin": - require => [Aeolus::Provider['mock'], - Aeolus::Conductor::Provider::Account['mockuser'], - Aeolus::Provider['ec2-us-east-1'], - Aeolus::Provider['ec2-us-west-1'], - Aeolus::Conductor::Hwp['hwp1']] } +# Disabling because login is needed by vsphere and rhev +# aeolus::conductor::logout{"admin": +# require => [Aeolus::Provider['mock'], +# Aeolus::Conductor::Provider::Account['mockuser'], +# Aeolus::Provider['ec2-us-east-1'], +# Aeolus::Provider['ec2-us-west-1'], +# Aeolus::Conductor::Hwp['hwp1']] }
} diff --git a/recipes/aeolus/manifests/rhevm.pp b/recipes/aeolus/manifests/rhevm.pp index daa84d2..cc1d051 100644 --- a/recipes/aeolus/manifests/rhevm.pp +++ b/recipes/aeolus/manifests/rhevm.pp @@ -27,15 +27,10 @@ class aeolus::rhevm inherits aeolus { File["/etc/rhevm.json"], File["/etc/iwhd/conf.js"]]}
- aeolus::deltacloud{"rhevm": - provider_type => 'rhevm', - endpoint => "$rhevm_deltacloud_powershell_url", - port => $rhevm_deltacloud_port} - - aeolus::conductor::provider{"rhevm": + aeolus::provider{"rhevm": type => "rhevm", - url => "http://localhost:$%7Brhevm_deltacloud_port%7D/api", - require => Aeolus::Deltacloud["rhevm"]} + port => 3002, + require => Aeolus::Conductor::Login["admin"] }
# TODO: # 1. since we have credentials, create provider account @@ -43,7 +38,6 @@ class aeolus::rhevm inherits aeolus { }
class aeolus::rhevm::disabled { - aeolus::deltacloud::disabled{"rhevm": }
mount {"$rhevm_nfs_mount_point": ensure => unmounted, diff --git a/recipes/aeolus/manifests/vmware.pp b/recipes/aeolus/manifests/vmware.pp index 4772b15..cafb015 100644 --- a/recipes/aeolus/manifests/vmware.pp +++ b/recipes/aeolus/manifests/vmware.pp @@ -4,19 +4,11 @@ class aeolus::vmware inherits aeolus { mode => 755, require => Package['aeolus-conductor-daemons'] }
- aeolus::deltacloud{"vsphere": - provider_type => 'vsphere', - endpoint => "$vmware_api_endpoint", - port => $vmware_deltacloud_port} - - aeolus::conductor::provider{"vsphere": - type => "vsphere", - url => "http://localhost:$%7Bvmware_deltacloud_port%7D/api", - require => [Aeolus::Deltacloud["vsphere"]]} - + aeolus::provider{"vsphere": + type => "vsphere", + port => 3002, + require => [Aeolus::Conductor::Login["admin"]] } }
class aeolus::vmware::disabled { - aeolus::deltacloud::disabled{"vsphere": } - } diff --git a/recipes/aeolus/templates/deltacloud-core b/recipes/aeolus/templates/deltacloud-core index 0f52b65..5f1f888 100644 --- a/recipes/aeolus/templates/deltacloud-core +++ b/recipes/aeolus/templates/deltacloud-core @@ -8,15 +8,15 @@ # Deltacloud Core component. #
-[ -r /etc/sysconfig/deltacloud-<%= name %> ] && . /etc/sysconfig/deltacloud-<%= name %> +[ -r /etc/sysconfig/deltacloud-core ] && . /etc/sysconfig/deltacloud-core
ENV="${ENV:-production}" -DRIVER="${DRIVER:-<%= provider_type %>}" -PORT="${PORT:-<%= port %>}" -LOCKFILE="${LOCKFILE:-/var/lock/subsys/deltacloud-<%= name %> }" -LOGFILE="${LOGFILE:-/var/log/deltacloud-<%= name %>/$DRIVER.log}" -PIDFILE="${THIN_PID:-/var/run/deltacloud-<%= name %>.pid}" -export DELTACLOUD_MOCK_STORAGE=/usr/lib/ruby/gems/1.8/gems/deltacloud-<%= name %>-0.3.0/lib/deltacloud/drivers/mock/data/ +DRIVER="${DRIVER:-ec2}" +PORT="${PORT:-3002}" +LOCKFILE="${LOCKFILE:-/var/lock/subsys/deltacloud-core}" +LOGFILE="${LOGFILE:-/var/log/deltacloud-core/$DRIVER.log}" +PIDFILE="${THIN_PID:-/var/run/deltacloud-core.pid}" +export DELTACLOUD_MOCK_STORAGE=/usr/lib/ruby/gems/1.8/gems/deltacloud-core-0.3.0/lib/deltacloud/drivers/mock/data/
PROG=/usr/bin/deltacloudd
@@ -25,7 +25,7 @@ STARTTIMEOUT=20 . /etc/init.d/functions
start() { - echo -n "Starting deltacloud-<%= name %>: " + echo -n "Starting deltacloud-core: "
if [ -f $LOCKFILE ] || [ -f $PIDFILE ] && checkpid `cat $PIDFILE` ; then echo_success @@ -34,7 +34,7 @@ start() { exit 0 fi
- $PROG -i $DRIVER -e $ENV -p $PORT <%= "--provider #{endpoint}" unless endpoint == "" %> >> $LOGFILE 2>&1 & + $PROG -i $DRIVER -e $ENV -p $PORT >> $LOGFILE 2>&1 & RETVAL=$? echo $! > $PIDFILE if [ $RETVAL -eq 0 ] ; then @@ -59,7 +59,7 @@ start() { }
stop() { - echo -n "Shutting down deltacloud-<%= name %>: " + echo -n "Shutting down deltacloud-core: "
# FIXME! we need to do a killproc -p <pidfile> here to ensure other deltacloud # daemons are not killed as well @@ -95,7 +95,7 @@ case "$1" in RETVAL=$? ;; *) - echo "Usage: deltacloud-<%= name %> {start|stop|restart|status}" + echo "Usage: deltacloud-core {start|stop|restart|status}" exit 1 ;; esac
NACK. Overall looks good, but some things need to be changed before this can make it in.
See comments inline
On 08/26/2011 01:32 PM, Richard Su wrote:
<snip> diff --git a/recipes/aeolus/manifests/conductor.pp b/recipes/aeolus/manifests/conductor.pp index aded6b3..8eed224 100644 --- a/recipes/aeolus/manifests/conductor.pp +++ b/recipes/aeolus/manifests/conductor.pp @@ -42,7 +42,7 @@ class aeolus::conductor inherits aeolus { } else{ apache::site{"aeolus-conductor": source => 'puppet:///modules/aeolus/aggregator-httpd.conf'} } - +
Whitespace change here.
<snip> # Create a new provider via the conductor +# TODO: Removed dep on grant_site_admin_privs, which might create a timing hole define aeolus::conductor::provider($type="",$url=""){ web_request{ "provider-$name": post => "https://localhost/conductor/providers", @@ -208,7 +202,7 @@ define aeolus::conductor::provider($type="",$url=""){ use_cookies_at => '/tmp/aeolus-admin', unless => { 'get' => 'https://localhost/conductor/providers', 'contains' => "//html/body//a[text() = '$name']" }, - require => [Service['aeolus-conductor'], Exec['grant_site_admin_privs']] + require => [Service['aeolus-conductor']] } }
Can you elaborate on this timing hole?
This change will break configure in the sense that it will now be possible for a conductor web request to be issued with out administrative permissions being granted to the 'admin' user (thus the request will fail with 'permission denied' and the provider will not be created
diff --git a/recipes/aeolus/manifests/init.pp b/recipes/aeolus/manifests/init.pp index 4376838..03cc03c 100644 --- a/recipes/aeolus/manifests/init.pp +++ b/recipes/aeolus/manifests/init.pp @@ -41,9 +41,8 @@ class aeolus {
# Create a new provider in aeolus define aeolus::provider($type, $port, $endpoint=""){
- aeolus::deltacloud{$name: provider_type => $type, endpoint => $endpoint, port => $port} aeolus::conductor::provider{$name: type => $type, url => "http://localhost:$%7Bport%7D/api",
require => Aeolus::Deltacloud[$name] }
require => [Service['deltacloud-core'], Aeolus::Conductor::Hwp["hwp1"]] }
Since the call to aeolus::deltacloud is removed, the aeolus::provider wrapper is no longer needed and can be removed as well. Rather we can simply callout to the aeolus::conductor::provider method whereever we are currently calling out to aeolus::provider right now.
Furthermore we should not have the hardcoded 'hwp1' here as that is seed data and belongs in the profiles, not the general purpose aeolus recipe.
} diff --git a/recipes/aeolus/manifests/profiles/default.pp b/recipes/aeolus/manifests/profiles/default.pp
Please also update recipes/aeolus/manifests/profiles/custom.pp
index 0021bbf..f8790ce 100644 --- a/recipes/aeolus/manifests/profiles/default.pp +++ b/recipes/aeolus/manifests/profiles/default.pp @@ -25,13 +25,13 @@ class aeolus::profiles::default { aeolus::provider{"ec2-us-east-1": type => 'ec2', endpoint => 'us-east-1',
port => 3003,
port => 3002, require => Aeolus::Conductor::Login["admin"] }
aeolus::provider{"ec2-us-west-1": type => 'ec2', endpoint => 'us-west-1',
port => 3004,
port => 3002, require => Aeolus::Conductor::Login["admin"] }
These calls can be swapped with
aeolus::conductor::provider{'ec2-us-west-1': url => 'http://localhost:3002/api', type => 'ec2', require => ...}
I'm not sure where endpoint is new specified w/ the single deltacloud-core instance (you remove it in the init script below), perhaps the aeolus::conductor::provider account interface should support it?
aeolus::conductor::hwp{"hwp1":
@@ -48,11 +48,12 @@ class aeolus::profiles::default { architecture => "x86_64", require => Aeolus::Conductor::Login["admin"] }
- aeolus::conductor::logout{"admin":
- require => [Aeolus::Provider['mock'],
Aeolus::Conductor::Provider::Account['mockuser'],
Aeolus::Provider['ec2-us-east-1'],
Aeolus::Provider['ec2-us-west-1'],
Aeolus::Conductor::Hwp['hwp1']] }
+# Disabling because login is needed by vsphere and rhev +# aeolus::conductor::logout{"admin": +# require => [Aeolus::Provider['mock'], +# Aeolus::Conductor::Provider::Account['mockuser'], +# Aeolus::Provider['ec2-us-east-1'], +# Aeolus::Provider['ec2-us-west-1'], +# Aeolus::Conductor::Hwp['hwp1']] }
We can't do this, else the admin session will still be open on disk. The correct solution would be to add the vsphere and rhev dependencies to the logout here.
<snip>
After these changes, the configure spec suite will need to be updated (it is currently fully working) and the interactive installer should be tested for compatibility (it needs to be updated to support rhev parameters anyways, this would be a good place to integrate that in as well if you wanted).
-Mo
aeolus-devel@lists.fedorahosted.org