[PATCH aeolus-configure] BZ827562 - Upgrade from CloudForms 1.0 to CloudForms 1.0.1 requires additional data definition not provided by rails migration
by steve linabery
We need a script to stop,start,restart aeolus services so that we
can stop them, insert data required by upgrade path, and restart.
The existing aeolus-services script appears deprecated and is used
nowhere else in the codebase for aeolus-configure or aeolus-conductor,
so we'll refactor it to be useful for this purpose.
---
bin/aeolus-services | 74 +++++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 69 insertions(+), 5 deletions(-)
mode change 100644 => 100755 bin/aeolus-services
diff --git a/bin/aeolus-services b/bin/aeolus-services
old mode 100644
new mode 100755
index 76dbc5d..2becbfd
--- a/bin/aeolus-services
+++ b/bin/aeolus-services
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/usr/bin/env ruby
# Copyright 2011 Red Hat, Inc.
#
@@ -14,7 +14,71 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-puppet /usr/share/aeolus-configure/aeolus_stop_services.pp \
- --modulepath=/usr/share/aeolus-configure/modules/ \
- --logdest=/var/log/aeolus-configure/aeolus-services.log \
- --logdest=console
+if ARGV.include?('-h') || ARGV.include?('--help')
+ puts "Usage: #{$0} stop|start|restart
+Stop, Start, or Restart Aeolus services.
+
+ -h, --help display this help and exit
+
+To show status of aeolus services please use aeolus-check-services.
+"
+ exit
+end
+
+if !['stop','start','restart'].include?(ARGV[0])
+ puts "Usage: #{$0} stop|start|restart
+Stop, Start, or Restart Aeolus services.
+
+To show status of aeolus services please use aeolus-check-services.
+"
+ exit(1)
+end
+
+# ordered as in rc.d
+$services = %w(mongod iwhd postgresql httpd deltacloud-core libvirtd aeolus-conductor conductor-dbomatic imagefactory ntpd)
+
+def perform(action, svcs)
+ action = action.to_s
+ svcs.map do |script|
+ puts "\n#{action.capitalize}ing #{script} ..."
+ cmd = "service #{script} #{action}"
+ out = `#{cmd}`
+ if $?.to_i == 0
+ puts " \e[1;32mSuccess:\e[0m #{out.strip}"
+ else
+ puts " \e[1;31mFAILURE:\e[0m #{out.strip}"
+ end
+ $?.to_i
+ end
+end
+
+def mongod_cleanup_and_restart
+ if perform(:status, ['mongod']) == [1]
+ lockfile = '/var/lib/mongodb/mongod.lock'
+ if File.exists?(lockfile)
+ puts " \e[1;33mremoving\e[0m leftover #{lockfile}"
+ File.delete(lockfile)
+ perform :restart, %w(mongod iwhd)
+ end
+ end
+end
+
+def start
+ perform :start, $services
+ mongod_cleanup_and_restart
+end
+
+def stop
+ perform :stop, $services.reverse
+end
+
+def restart
+ stop
+ start
+end
+
+case ARGV[0]
+ when "start" then start
+ when "stop" then stop
+ when "restart" then restart
+end
--
1.7.6.5
11 years, 10 months
[PATCH aeolus-configure] BZ 806001 aeolus-configure will always create an admin user, need to key of a uuid not name
by steve linabery
This patch series moves us away from using admin/password for web
requests, and instead we create/destroy a temporary aeolus user with
administrative privileges for each puppet run.
We also make a separate, optional profile, admin_configure, which
can be used to create an aeolus user with administrative privileges.
Note that this makes the default profile now set up no 'admin' user
by default, addressing the re-creation of un/pw admin/password which
was the root of the bug in BZ806001.
---
conf/admin_configure | 10 ++++
.../lib/puppet/parser/functions/secure_random.rb | 15 +++++
recipes/aeolus/manifests/conductor.pp | 55 +++++++++++++++-----
recipes/aeolus/manifests/profiles/default.pp | 25 ++++++---
recipes/aeolus/manifests/profiles/ec2.pp | 47 +++++++++++------
recipes/aeolus/manifests/profiles/mock.pp | 36 +++++++++----
recipes/aeolus/manifests/profiles/rhevm.pp | 29 +++++++----
.../aeolus/manifests/profiles/rhevm/instance.pp | 3 +-
recipes/aeolus/manifests/profiles/vsphere.pp | 28 ++++++----
.../aeolus/manifests/profiles/vsphere/instance.pp | 3 +-
10 files changed, 178 insertions(+), 73 deletions(-)
create mode 100644 conf/admin_configure
create mode 100644 recipes/aeolus/lib/puppet/parser/functions/secure_random.rb
diff --git a/conf/admin_configure b/conf/admin_configure
new file mode 100644
index 0000000..00182c7
--- /dev/null
+++ b/conf/admin_configure
@@ -0,0 +1,10 @@
+parameters:
+ enable_https: true
+ admin_login: admin
+ admin_password: password
+ admin_email: root(a)localhost.localdomain
+ admin_first_name: Administrator
+ admin_last_name: ""
+classes:
+- aeolus::conductor
+- aeolus::conductor::default_admin
diff --git a/recipes/aeolus/lib/puppet/parser/functions/secure_random.rb b/recipes/aeolus/lib/puppet/parser/functions/secure_random.rb
new file mode 100644
index 0000000..9ea7ce2
--- /dev/null
+++ b/recipes/aeolus/lib/puppet/parser/functions/secure_random.rb
@@ -0,0 +1,15 @@
+require 'securerandom'
+
+Puppet::Parser::Functions::newfunction(:secure_random,
+ :type => :rvalue,
+ :doc => <<ENDDOC
+Return SecureRandom.hex using the first parameter as the
+number of bytes desired, or 24 bytes by default.
+ENDDOC
+) do |args|
+ if !args[0].nil? && (args[0].responds_to to_i)
+ SecureRandom.hex(args[0])
+ else
+ SecureRandom.hex(24)
+ end
+end
diff --git a/recipes/aeolus/manifests/conductor.pp b/recipes/aeolus/manifests/conductor.pp
index 786c658..670eb58 100644
--- a/recipes/aeolus/manifests/conductor.pp
+++ b/recipes/aeolus/manifests/conductor.pp
@@ -180,23 +180,50 @@ class aeolus::conductor::disabled {
}
# Create a new site admin conductor web user
-define aeolus::conductor::site_admin($email="", $password="", $first_name="", $last_name=""){
+class aeolus::conductor::default_admin {
exec{"create_site_admin_user":
cwd => '/usr/share/aeolus-conductor',
environment => "RAILS_ENV=production",
- command => "/usr/bin/rake dc:create_user[${name},${password},${email},${first_name},${last_name}]",
+ command => "/usr/bin/rake dc:create_user[${admin_login},${admin_password},${admin_email},${admin_first_name},${admin_last_name}]",
logoutput => true,
- unless => "/usr/bin/test `psql conductor aeolus -P tuples_only -c \"select count(*) from users where login = '${name}';\"` = \"1\"",
+ unless => "/usr/bin/test `psql conductor aeolus -P tuples_only -c \"select count(*) from roles, permissions, users where roles.id = permissions.role_id and users.id = permissions.user_id and roles.name = 'base.admin' and users.login = '${admin_login}'\"` = \"1\"",
require => Rails::Seed::Db["seed_aeolus_database"]}
exec{"grant_site_admin_privs":
cwd => '/usr/share/aeolus-conductor',
environment => "RAILS_ENV=production",
- command => "/usr/bin/rake dc:site_admin[${name}]",
+ command => "/usr/bin/rake dc:site_admin[${admin_login}]",
logoutput => true,
- unless => "/usr/bin/test `psql conductor aeolus -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 = 'base.admin' AND users.login = '${name}';\"` = \"1\"",
+ unless => "/usr/bin/test `psql conductor aeolus -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 = 'base.admin' AND users.login = '${admin_login}';\"` = \"1\"",
require => Exec[create_site_admin_user]}
}
+define aeolus::conductor::temp_admin($password=""){
+ exec{"create_temp_admin":
+ cwd => '/usr/share/aeolus-conductor',
+ environment => "RAILS_ENV=production",
+ command => "/usr/bin/rake dc:create_user[${name},${password},'temp-admin(a)localhost.localdomain','temp','admin']",
+ logoutput => true,
+ require => Rails::Seed::Db["seed_aeolus_database"]}
+ exec{"grant_temp_admin_privs":
+ cwd => '/usr/share/aeolus-conductor',
+ environment => "RAILS_ENV=production",
+ command => "/usr/bin/rake dc:site_admin[${name}]",
+ logoutput => true,
+ require => Exec[create_temp_admin]}
+ }
+
+
+define aeolus::conductor::destroy_temp_admin{
+ exec{"destroy_temp_admin":
+ cwd => '/usr/share/aeolus-conductor',
+ environment => "RAILS_ENV=production",
+ command => "/usr/bin/rake dc:destroy_user[${name}]",
+ logoutput => true,
+ require => Rails::Seed::Db["seed_aeolus_database"]
+ }
+}
+
+
# login to the aeolus conductor
define aeolus::conductor::login($password){
web_request{ "$name-conductor-login":
@@ -231,7 +258,7 @@ define aeolus::conductor::logout(){
}
# Create a new provider via the conductor
-define aeolus::conductor::provider($deltacloud_driver="",$url="", $deltacloud_provider=""){
+define aeolus::conductor::provider($deltacloud_driver="",$url="", $deltacloud_provider="", $admin_login=""){
web_request{ "provider-$name":
post => "https://localhost/conductor/providers",
parameters => { 'provider[name]' => $name, 'provider[url]' => $url,
@@ -240,17 +267,17 @@ define aeolus::conductor::provider($deltacloud_driver="",$url="", $deltacloud_pr
returns => '200',
follow => true,
contains => "//img[@alt='Notices']", # in the case of an error, @alt='Warnings'
- use_cookies_at => '/tmp/aeolus-admin',
+ use_cookies_at => "/tmp/aeolus-${admin_login}",
log_to => '/tmp/configure-provider-request.log',
only_log_errors => true,
unless => { 'get' => 'https://localhost/conductor/providers',
'contains' => "//html/body//a[text() = '$name']" },
- require => [Service['aeolus-conductor'], Exec['grant_site_admin_privs'], Exec['deltacloud-core-startup-wait']]
+ require => [Service['aeolus-conductor'], Exec['grant_temp_admin_privs'], Exec['deltacloud-core-startup-wait']]
}
}
# Create a new provider account via the conductor
-define aeolus::conductor::provider::account($provider="", $type="", $username="",$password="", $account_id="",$x509private="", $x509public=""){
+define aeolus::conductor::provider::account($provider="", $type="", $username="",$password="", $account_id="",$x509private="", $x509public="", $admin_login=""){
if $type != "ec2" {
web_request{ "provider-account-$name":
post => "https://localhost/conductor/providers/0/provider_accounts",
@@ -264,7 +291,7 @@ define aeolus::conductor::provider::account($provider="", $type="", $username=""
returns => '200',
#contains => "//table/thead/tr/th[text() = 'Properties for $name']",
follow => true,
- use_cookies_at => '/tmp/aeolus-admin',
+ use_cookies_at => "/tmp/aeolus-${admin_login}",
unless => { 'get' => 'https://localhost/conductor/provider_accounts',
'contains' => "//html/body//a[text() = '$name']" },
require => Service['aeolus-conductor']}
@@ -285,7 +312,7 @@ define aeolus::conductor::provider::account($provider="", $type="", $username=""
returns => '200',
#contains => "//table/thead/tr/th[text() = 'Properties for $name']",
follow => true,
- use_cookies_at => '/tmp/aeolus-admin',
+ use_cookies_at => "/tmp/aeolus-${admin_login}",
unless => { 'get' => 'https://localhost/conductor/provider_accounts',
'contains' => "//html/body//a[text() = '$name']" },
require => Service['aeolus-conductor']
@@ -293,7 +320,7 @@ define aeolus::conductor::provider::account($provider="", $type="", $username=""
}
}
-define aeolus::conductor::hwp($memory='', $cpu='', $storage='', $architecture=''){
+define aeolus::conductor::hwp($memory='', $cpu='', $storage='', $architecture='', $admin_login=''){
web_request{ "hwp-$name":
post => "https://localhost/conductor/hardware_profiles",
parameters => {'hardware_profile[name]' => $name,
@@ -313,7 +340,7 @@ define aeolus::conductor::hwp($memory='', $cpu='', $storage='', $architecture=''
returns => '200',
#verify => '.*Hardware profile added.*',
follow => true,
- use_cookies_at => '/tmp/aeolus-admin',
- require => [Service['aeolus-conductor'], Exec['grant_site_admin_privs']]
+ use_cookies_at => "/tmp/aeolus-${admin_login}",
+ require => [Service['aeolus-conductor'], Exec['grant_temp_admin_privs']]
}
}
diff --git a/recipes/aeolus/manifests/profiles/default.pp b/recipes/aeolus/manifests/profiles/default.pp
index 5bb3119..47e640d 100644
--- a/recipes/aeolus/manifests/profiles/default.pp
+++ b/recipes/aeolus/manifests/profiles/default.pp
@@ -14,25 +14,32 @@
class aeolus::profiles::default {
+ #we will use one random hex string to name the temporary admin user
+ $random = secure_random()
+ $temp_admin_login = "temporary-administrative-user-${random}"
+ #and another random hex string for the temp user's password
+ $temp_admin_password = secure_random()
+
aeolus::create_bucket{"aeolus":}
- aeolus::conductor::site_admin{"admin":
- email => 'root(a)localhost.localdomain',
- password => "password",
- first_name => 'Administrator',
- last_name => ''}
+ aeolus::conductor::temp_admin{$temp_admin_login :
+ password => $temp_admin_password }
- aeolus::conductor::login{"admin": password => "password",
- require => Aeolus::Conductor::Site_admin['admin']}
+ aeolus::conductor::login{$temp_admin_login : password => $temp_admin_password,
+ require => Aeolus::Conductor::Temp_admin[$temp_admin_login]}
aeolus::conductor::hwp{"small-x86_64":
memory => "512",
cpu => "1",
storage => "",
architecture => "x86_64",
- require => Aeolus::Conductor::Login["admin"] }
+ admin_login => $temp_admin_login,
+ require => Aeolus::Conductor::Login[$temp_admin_login] }
- aeolus::conductor::logout{"admin":
+ aeolus::conductor::logout{$temp_admin_login:
require => Aeolus::Conductor::Hwp['small-x86_64']}
+ aeolus::conductor::destroy_temp_admin{$temp_admin_login :
+ require => Aeolus::Conductor::Logout[$temp_admin_login]}
+
}
diff --git a/recipes/aeolus/manifests/profiles/ec2.pp b/recipes/aeolus/manifests/profiles/ec2.pp
index 3f63f70..165a32b 100644
--- a/recipes/aeolus/manifests/profiles/ec2.pp
+++ b/recipes/aeolus/manifests/profiles/ec2.pp
@@ -15,68 +15,83 @@
class aeolus::profiles::ec2 {
include aeolus::deltacloud::ec2
+ #we will use one random hex string to name the temporary admin user
+ $random = secure_random()
+ $temp_admin_login = "temporary-administrative-user-${random}"
+ #and another random hex string for the temp user's password
+ $temp_admin_password = secure_random()
+
aeolus::create_bucket{"aeolus":}
- aeolus::conductor::site_admin{"admin":
- email => 'root(a)localhost.localdomain',
- password => "password",
- first_name => 'Administrator',
- last_name => ''}
+ aeolus::conductor::temp_admin{$temp_admin_login :
+ password => $temp_admin_password }
- aeolus::conductor::login{"admin": password => "password",
- require => Aeolus::Conductor::Site_admin['admin']}
+ aeolus::conductor::login{$temp_admin_login : password => $temp_admin_password,
+ require => Aeolus::Conductor::Temp_admin[$temp_admin_login]}
aeolus::conductor::provider{"ec2-us-east-1":
deltacloud_driver => 'ec2',
deltacloud_provider => 'us-east-1',
url => 'http://localhost:3002/api',
- require => Aeolus::Conductor::Login["admin"] }
+ admin_login => $temp_admin_login,
+ require => Aeolus::Conductor::Login[$temp_admin_login] }
aeolus::conductor::provider{"ec2-us-west-1":
deltacloud_driver => 'ec2',
deltacloud_provider => 'us-west-1',
url => 'http://localhost:3002/api',
- require => Aeolus::Conductor::Login["admin"] }
+ admin_login => $temp_admin_login,
+ require => Aeolus::Conductor::Login[$temp_admin_login] }
aeolus::conductor::provider{"ec2-us-west-2":
deltacloud_driver => 'ec2',
deltacloud_provider => 'us-west-2',
url => 'http://localhost:3002/api',
- require => Aeolus::Conductor::Login["admin"] }
+ admin_login => $temp_admin_login,
+ require => Aeolus::Conductor::Login[$temp_admin_login] }
aeolus::conductor::provider{"ec2-eu-west-1":
deltacloud_driver => 'ec2',
deltacloud_provider => 'eu-west-1',
url => 'http://localhost:3002/api',
- require => Aeolus::Conductor::Login["admin"] }
+ admin_login => $temp_admin_login,
+ require => Aeolus::Conductor::Login[$temp_admin_login] }
aeolus::conductor::provider{"ec2-ap-southeast-1":
deltacloud_driver => 'ec2',
deltacloud_provider => 'ap-southeast-1',
url => 'http://localhost:3002/api',
- require => Aeolus::Conductor::Login["admin"] }
+ admin_login => $temp_admin_login,
+ require => Aeolus::Conductor::Login[$temp_admin_login] }
aeolus::conductor::provider{"ec2-ap-northeast-1":
deltacloud_driver => 'ec2',
deltacloud_provider => 'ap-northeast-1',
url => 'http://localhost:3002/api',
- require => Aeolus::Conductor::Login["admin"] }
+ admin_login => $temp_admin_login,
+ require => Aeolus::Conductor::Login[$temp_admin_login] }
aeolus::conductor::provider{"ec2-sa-east-1":
deltacloud_driver => 'ec2',
deltacloud_provider => 'sa-east-1',
url => 'http://localhost:3002/api',
- require => Aeolus::Conductor::Login["admin"] }
+ admin_login => $temp_admin_login,
+ require => Aeolus::Conductor::Login[$temp_admin_login] }
aeolus::conductor::hwp{"small-x86_64":
memory => "512",
cpu => "1",
storage => "",
architecture => "x86_64",
- require => Aeolus::Conductor::Login["admin"] }
+ admin_login => $temp_admin_login,
+ require => Aeolus::Conductor::Login[$temp_admin_login] }
Aeolus::Conductor::Provider <| |> -> Aeolus::Conductor::Logout <| |>
- aeolus::conductor::logout{"admin":
+ aeolus::conductor::logout{$temp_admin_login:
require => Aeolus::Conductor::Hwp['small-x86_64'] }
+
+ aeolus::conductor::destroy_temp_admin{$temp_admin_login:
+ require => Aeolus::Conductor::Logout[$temp_admin_login]}
+
}
diff --git a/recipes/aeolus/manifests/profiles/mock.pp b/recipes/aeolus/manifests/profiles/mock.pp
index c68829c..b82a6d4 100644
--- a/recipes/aeolus/manifests/profiles/mock.pp
+++ b/recipes/aeolus/manifests/profiles/mock.pp
@@ -14,38 +14,50 @@
class aeolus::profiles::mock {
+ #we will use one random hex string to name the temporary admin user
+ $random = secure_random()
+ $temp_admin_login = "temporary-administrative-user-${random}"
+ #and another random hex string for the temp user's password
+ $temp_admin_password = secure_random()
+
aeolus::create_bucket{"aeolus":}
- aeolus::conductor::site_admin{"admin":
- email => 'root(a)localhost.localdomain',
- password => "password",
- first_name => 'Administrator',
- last_name => ''}
+ aeolus::conductor::temp_admin{$temp_admin_login :
+ password => $temp_admin_password }
- aeolus::conductor::login{"admin": password => "password",
- require => Aeolus::Conductor::Site_admin['admin']}
+ aeolus::conductor::login{$temp_admin_login : password => $temp_admin_password,
+ require => Aeolus::Conductor::Temp_admin[$temp_admin_login]}
aeolus::conductor::provider{"mock":
deltacloud_driver => 'mock',
url => 'http://localhost:3002/api',
- require => Aeolus::Conductor::Login["admin"] }
+ admin_login => $temp_admin_login,
+ require => Aeolus::Conductor::Login[$temp_admin_login] }
+
aeolus::conductor::provider::account{"mock":
provider => 'mock',
type => 'mock',
username => 'mockuser',
password => 'mockpassword',
- require => Aeolus::Conductor::Provider["mock"] }
+ admin_login => $temp_admin_login,
+ require => Aeolus::Conductor::Provider["mock"] }
aeolus::conductor::hwp{"small-x86_64":
memory => "512",
cpu => "1",
storage => "",
architecture => "x86_64",
- require => Aeolus::Conductor::Login["admin"] }
+ admin_login => $temp_admin_login,
+ require => Aeolus::Conductor::Login[$temp_admin_login] }
- aeolus::conductor::logout{"admin":
+ aeolus::conductor::logout{$temp_admin_login :
require => [Aeolus::Conductor::Provider['mock'],
Aeolus::Conductor::Provider::Account['mock'],
- Aeolus::Conductor::Hwp['small-x86_64']] }
+ Aeolus::Conductor::Hwp['small-x86_64']]
+ }
+
+ aeolus::conductor::destroy_temp_admin{$temp_admin_login :
+ require => Aeolus::Conductor::Logout[$temp_admin_login]}
+
}
diff --git a/recipes/aeolus/manifests/profiles/rhevm.pp b/recipes/aeolus/manifests/profiles/rhevm.pp
index 547d7a9..8586944 100644
--- a/recipes/aeolus/manifests/profiles/rhevm.pp
+++ b/recipes/aeolus/manifests/profiles/rhevm.pp
@@ -13,6 +13,13 @@
# limitations under the License.
class aeolus::profiles::rhevm ($instances) {
+
+ #we will use one random hex string to name the temporary admin user
+ $random = secure_random()
+ $temp_admin_login = "temporary-administrative-user-${random}"
+ #and another random hex string for the temp user's password
+ $temp_admin_password = secure_random()
+
create_resources2('aeolus::profiles::rhevm::instance', $instances)
file {"/etc/imagefactory/rhevm.json":
@@ -24,26 +31,28 @@ class aeolus::profiles::rhevm ($instances) {
aeolus::create_bucket{"aeolus":}
- aeolus::conductor::site_admin{"admin":
- email => 'root(a)localhost.localdomain',
- password => "password",
- first_name => 'Administrator',
- last_name => ''}
+ aeolus::conductor::temp_admin{$temp_admin_login :
+ password => $temp_admin_password }
- aeolus::conductor::login{"admin": password => "password",
- require => Aeolus::Conductor::Site_admin['admin']}
+ aeolus::conductor::login{$temp_admin_login : password => $temp_admin_password,
+ require => Aeolus::Conductor::Temp_admin[$temp_admin_login]}
aeolus::conductor::hwp{"small-x86_64":
memory => "512",
cpu => "1",
storage => "",
architecture => "x86_64",
- require => Aeolus::Conductor::Login["admin"] }
+ admin_login => $temp_admin_login,
+ require => Aeolus::Conductor::Login[$temp_admin_login] }
- aeolus::conductor::logout{"admin":
+ aeolus::conductor::logout{$temp_admin_login:
require => Aeolus::Conductor::Hwp['small-x86_64']}
- Aeolus::Conductor::Provider<| |> -> Aeolus::Conductor::Logout["admin"]
+ Aeolus::Conductor::Provider<| |> -> Aeolus::Conductor::Logout[$temp_admin_login]
+
+ aeolus::conductor::destroy_temp_admin{$temp_admin_login :
+ require => Aeolus::Conductor::Logout[$temp_admin_login]}
+
# TODO: create a realm and mappings
}
diff --git a/recipes/aeolus/manifests/profiles/rhevm/instance.pp b/recipes/aeolus/manifests/profiles/rhevm/instance.pp
index 26ba3e9..195909d 100644
--- a/recipes/aeolus/manifests/profiles/rhevm/instance.pp
+++ b/recipes/aeolus/manifests/profiles/rhevm/instance.pp
@@ -43,5 +43,6 @@ define aeolus::profiles::rhevm::instance ( $nfs_server,
deltacloud_driver => "rhevm",
url => "http://localhost:3002/api",
deltacloud_provider => "${deltacloud_api};${deltacloud_data_center}",
- require => Aeolus::Conductor::Login["admin"] }
+ admin_login => $temp_admin_login,
+ require => Aeolus::Conductor::Login[$temp_admin_login] }
}
diff --git a/recipes/aeolus/manifests/profiles/vsphere.pp b/recipes/aeolus/manifests/profiles/vsphere.pp
index dcca15b..db9955e 100644
--- a/recipes/aeolus/manifests/profiles/vsphere.pp
+++ b/recipes/aeolus/manifests/profiles/vsphere.pp
@@ -13,6 +13,13 @@
# limitations under the License.
class aeolus::profiles::vsphere ($instances) {
+
+ #we will use one random hex string to name the temporary admin user
+ $random = secure_random()
+ $temp_admin_login = "temporary-administrative-user-${random}"
+ #and another random hex string for the temp user's password
+ $temp_admin_password = secure_random()
+
create_resources2('aeolus::profiles::vsphere::instance', $instances)
aeolus::create_bucket{"aeolus":}
@@ -24,24 +31,25 @@ class aeolus::profiles::vsphere ($instances) {
mode => 640,
require => Package['aeolus-conductor-daemons'] }
- aeolus::conductor::site_admin{"admin":
- email => 'root(a)localhost.localdomain',
- password => "password",
- first_name => 'Administrator',
- last_name => ''}
+ aeolus::conductor::temp_admin{$temp_admin_login :
+ password => $temp_admin_password }
- aeolus::conductor::login{"admin": password => "password",
- require => Aeolus::Conductor::Site_admin['admin']}
+ aeolus::conductor::login{$temp_admin_login : password => $temp_admin_password,
+ require => Aeolus::Conductor::Temp_admin[$temp_admin_login]}
aeolus::conductor::hwp{"small-x86_64":
memory => "512",
cpu => "1",
storage => "",
architecture => "x86_64",
- require => Aeolus::Conductor::Login["admin"] }
+ admin_login => $temp_admin_login,
+ require => Aeolus::Conductor::Login[$temp_admin_login] }
- aeolus::conductor::logout{"admin":
+ aeolus::conductor::logout{$temp_admin_login:
require => Aeolus::Conductor::Hwp['small-x86_64'] }
- Aeolus::Conductor::Provider<| |> -> Aeolus::Conductor::Logout["admin"]
+ Aeolus::Conductor::Provider<| |> -> Aeolus::Conductor::Logout[$temp_admin_login]
+
+ aeolus::conductor::destroy_temp_admin{$temp_admin_login :
+ require => Aeolus::Conductor::Logout[$temp_admin_login]}
}
diff --git a/recipes/aeolus/manifests/profiles/vsphere/instance.pp b/recipes/aeolus/manifests/profiles/vsphere/instance.pp
index 55ac95f..39a3321 100644
--- a/recipes/aeolus/manifests/profiles/vsphere/instance.pp
+++ b/recipes/aeolus/manifests/profiles/vsphere/instance.pp
@@ -22,6 +22,7 @@ define aeolus::profiles::vsphere::instance ($deltacloud_provider,
deltacloud_driver => "vsphere",
url => "http://localhost:3002/api",
deltacloud_provider => "$deltacloud_provider",
- require => Aeolus::Conductor::Login["admin"],
+ admin_login => $temp_admin_login,
+ require => Aeolus::Conductor::Login[$temp_admin_login],
}
}
--
1.7.6.5
11 years, 10 months
EC2 account credentials "going missing" (kind of)
by Justin Clift
Hi Mike,
Brain dumped this info into IRC, but figured it's better to put in email and
CC the team for useful reference.
Apologies for the formatting, I'm being lazy. ;)
jclift: The other thing which I saw in the "latest" (at the time) rpms the other day, was EC2 account information going missing.
jclift: So, I'd put in working EC2 account credentials for say US West 1, US West 2, and whatever else.
jclift: All the same details, just different EC2 regions.
jclift: However, after the 2nd one is entered (ie US West 2 after putting in US West 1), it would no longer show up.
jclift: The "Accounts" tab for a provider would show "1", indicating it's there.
jclift: But, the list of accounts shown would always be empty.
jclift: Initially thought it was a server side thing... but it doesn't appear to be.
jclift: It _only_ happens for Chrome.
jclift: And even there, it only happens for https.
jclift: Moved the port from https to http (via mucking around with the apache config), and voila... it worked for Chrome.
jclift: Wasn't sure if this is a known bug or not.
jclift: Scrolled down the list of open BZ's for CloudForms, and didn't see anything obvious there.
jclift: Wasn't sure how to describe the problem though, and didn't want to get distracted, so went with building new rpms myself (this is before finding out that it's a Chrome only bug).
jclift: Oh yeah, related data point - it's not caused by a Chrome plugin/extension thing either. Happened with Chrome even with Adblock and similar turned off.
Happy to do a very quick screen recording showing it going wrong, if
anyone's interested.
I just don't want to make the screen recording *publicly available*
though, because it'll have my full account details/credentials in it.
(massive bills from third parties not welcome ;>)
+ Justin
--
Aeolus Community Manager
http://www.aeolusproject.org
11 years, 10 months
[PATCH conductor 1/2] rufus scheduler integration - RM 3273
by Richard Su
https://www.aeolusproject.org/redmine/issues/3273
REST api to turn the rufus scheduler on (:new) and off (:destroy)
and to check its status (:index).
A singleton class JobScheduler encapsulates the rufus scheduler
so that only a single scheduler instance runs at any time.
Only users who have the ROLE view and modify permissions may
control the scheduler.
---
aeolus-conductor.spec.in | 2 +
src/app/controllers/job_scheduler_controller.rb | 45 +++++++++
src/app/views/job_scheduler/destroy.xml.haml | 2 +
src/app/views/job_scheduler/index.xml.haml | 2 +
src/app/views/job_scheduler/new.xml.haml | 2 +
src/config/routes.rb | 2 +
src/lib/job_scheduler.rb | 94 ++++++++++++++++++++
.../controllers/job_scheduler_controller_spec.rb | 84 +++++++++++++++++
8 files changed, 233 insertions(+), 0 deletions(-)
create mode 100644 src/app/controllers/job_scheduler_controller.rb
create mode 100644 src/app/views/job_scheduler/destroy.xml.haml
create mode 100644 src/app/views/job_scheduler/index.xml.haml
create mode 100644 src/app/views/job_scheduler/new.xml.haml
create mode 100644 src/lib/job_scheduler.rb
create mode 100644 src/spec/controllers/job_scheduler_controller_spec.rb
diff --git a/aeolus-conductor.spec.in b/aeolus-conductor.spec.in
index a40d517..6cca32f 100644
--- a/aeolus-conductor.spec.in
+++ b/aeolus-conductor.spec.in
@@ -47,6 +47,7 @@ Requires: rubygem(oauth)
Requires: rubygem(rake)
Requires: rubygem(delayed_job) >= 2.1.4
Requires: rubygem(paranoia)
+Requires: rubygem(rufus-scheduler)
Requires: postgresql
Requires: postgresql-server
Requires: system-logos
@@ -189,6 +190,7 @@ haml="app/views/hardware_profiles app/views/realm_mappings \
app/views/deployables app/views/catalogs \
app/views/provider_types app/views/api/images \
app/views/config_servers app/views/provider_realms \
+ app/views/job_scheduler \
app/views/logs \
app/views/api/hooks \
app/views/api \
diff --git a/src/app/controllers/job_scheduler_controller.rb b/src/app/controllers/job_scheduler_controller.rb
new file mode 100644
index 0000000..b1a2701
--- /dev/null
+++ b/src/app/controllers/job_scheduler_controller.rb
@@ -0,0 +1,45 @@
+#
+# Copyright 2012 Red Hat, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+require 'job_scheduler'
+
+class JobSchedulerController < ApplicationController
+ before_filter :require_user_api
+ respond_to :xml
+ layout :false
+
+ # GET /jobscheduler
+ # GET /jobscheduler.xml
+ def index
+ require_privilege(Privilege::PERM_VIEW)
+ respond_with(JobScheduler.activated?)
+ end
+
+ # GET /jobscheduler/new
+ # GET /jobscheduler/new.xml
+ def new
+ require_privilege(Privilege::PERM_SET)
+ respond_with(JobScheduler.start)
+ end
+
+ # DELETE /jobscheduler/1
+ # DELETE /jobscheduler/1.xml
+ def destroy
+ require_privilege(Privilege::PERM_SET)
+ respond_with(JobScheduler.stop)
+ end
+
+end
diff --git a/src/app/views/job_scheduler/destroy.xml.haml b/src/app/views/job_scheduler/destroy.xml.haml
new file mode 100644
index 0000000..18e796d
--- /dev/null
+++ b/src/app/views/job_scheduler/destroy.xml.haml
@@ -0,0 +1,2 @@
+!!! XML
+%activated=JobScheduler.activated?
\ No newline at end of file
diff --git a/src/app/views/job_scheduler/index.xml.haml b/src/app/views/job_scheduler/index.xml.haml
new file mode 100644
index 0000000..b5c75d6
--- /dev/null
+++ b/src/app/views/job_scheduler/index.xml.haml
@@ -0,0 +1,2 @@
+!!! XML
+%activated=JobScheduler.activated?
diff --git a/src/app/views/job_scheduler/new.xml.haml b/src/app/views/job_scheduler/new.xml.haml
new file mode 100644
index 0000000..18e796d
--- /dev/null
+++ b/src/app/views/job_scheduler/new.xml.haml
@@ -0,0 +1,2 @@
+!!! XML
+%activated=JobScheduler.activated?
\ No newline at end of file
diff --git a/src/config/routes.rb b/src/config/routes.rb
index 265f752..518b013 100644
--- a/src/config/routes.rb
+++ b/src/config/routes.rb
@@ -238,6 +238,8 @@ Conductor::Application.routes.draw do
resources :provider_images
end
+ resources :job_scheduler, :only => [:index, :new, :destroy]
+
get 'api', :controller => 'api/entrypoint', :action => 'index'
namespace :api do
resources :images do
diff --git a/src/lib/job_scheduler.rb b/src/lib/job_scheduler.rb
new file mode 100644
index 0000000..1050ecd
--- /dev/null
+++ b/src/lib/job_scheduler.rb
@@ -0,0 +1,94 @@
+#
+# Copyright 2012 Red Hat, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+require 'curb'
+require 'rufus-scheduler'
+
+class JobScheduler
+
+ @@scheduler = nil
+
+ def self.initialize
+ self.start
+ end
+
+ def self.start
+ if @(a)scheduler.nil?
+ @@scheduler = Rufus::Scheduler::PlainScheduler.start_new
+ schedule_tasks(@@scheduler)
+ end
+ end
+
+ def self.stop
+ if @@scheduler
+ @(a)scheduler.stop
+ @@scheduler = nil
+ end
+ end
+
+ def self.activated?
+ if @@scheduler
+ true
+ else
+ false
+ end
+ end
+
+ def self.status_via_http(login, password, hostname)
+ curl = self.curl_request(login, password)
+ curl.url = job_scheduler_url(hostname, '')
+ curl.http_get
+ curl.body_str.to_s
+ end
+
+ def self.start_via_http(login, password, hostname)
+ curl = self.curl_request(login, password)
+ curl.url = job_scheduler_url(hostname, 'new')
+ curl.http_get
+ curl.body_str.to_s
+ end
+
+ def self.stop_via_http(login, password, hostname)
+ curl = self.curl_request(login, password)
+ curl.url = job_scheduler_url(hostname, '1')
+ curl.http_delete
+ curl.body_str.to_s
+ end
+
+ private
+
+ def self.schedule_tasks(scheduler)
+ scheduler.every("1m") do
+ puts "job scheduler is running"
+ end
+ end
+
+ def self.job_scheduler_url(hostname, suffix)
+ # TODO: is there a better way to generate this url?
+ url = "https://#{hostname}/conductor/#{JobSchedulerController.controller_path}/#{suffix}"
+ end
+
+ def self.curl_request(login, password)
+ curl = Curl::Easy.new
+ curl.username = login
+ curl.password = password
+ curl.headers['HTTP_ACCEPT'] = 'application/xml'
+ curl.headers['CONTENT_TYPE'] = 'application/xml'
+ curl.http_auth_types = :basic
+ return curl
+ end
+
+end
diff --git a/src/spec/controllers/job_scheduler_controller_spec.rb b/src/spec/controllers/job_scheduler_controller_spec.rb
new file mode 100644
index 0000000..75726ec
--- /dev/null
+++ b/src/spec/controllers/job_scheduler_controller_spec.rb
@@ -0,0 +1,84 @@
+#
+# Copyright 2012 Red Hat, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+require 'spec_helper'
+
+describe JobSchedulerController do
+ render_views
+
+ context "when authenticated as admin" do
+
+ before(:each) do
+ @admin_permission = FactoryGirl.create :admin_permission
+ @admin = @admin_permission.user
+ mock_warden(@admin)
+ end
+
+ describe "scheduler controls" do
+
+ it "scheduler status from 'GET index'" do
+ send_and_accept_xml
+ get :index
+ response.should be_success
+ response.body.strip.should == "<activated>false</activated>"
+ end
+
+ it "turn on scheduler by 'GET new'" do
+ send_and_accept_xml
+ get :new
+ response.should be_success
+ response.body.strip.should == "<activated>true</activated>"
+ end
+
+ it "turn off scheduler by 'POST destroy'" do
+ send_and_accept_xml
+ post :destroy, :id => 1
+ response.should be_success
+ response.body.strip.should == "<activated>false</activated>"
+ end
+
+ it "turn scheduler on and then off" do
+ send_and_accept_xml
+ get :index
+ response.should be_success
+ response.body.strip.should == "<activated>false</activated>"
+ get :new
+ response.should be_success
+ response.body.strip.should == "<activated>true</activated>"
+ post :destroy, :id => 1
+ response.should be_success
+ response.body.strip.should == "<activated>false</activated>"
+ end
+ end
+ end
+
+ context "when not authenticated as admin" do
+
+ before(:each) do
+ @non_admin_permission = FactoryGirl.create :pool_user_permission
+ @user = @non_admin_permission.user
+ mock_warden(@user)
+ end
+
+ it "requests should be denied" do
+ send_and_accept_xml
+ get :index
+ response.should_not be_success
+ end
+
+ end
+
+end
--
1.7.7.6
11 years, 10 months
[aeolus-incubator/image-management-engine] cabc92: Updated Template Model
by jason.guiditta
Branch: refs/heads/master
Home: https://github.com/aeolus-incubator/image-management-engine
Commit: cabc92f5ce601aab5d10834df86fc84efe9a73e5
https://github.com/aeolus-incubator/image-management-engine/commit/cabc92...
Author: Martyn Taylor <mtaylor(a)redhat.com>
Date: 2012-06-01 (Fri, 01 Jun 2012)
Changed paths:
M lib/generators/image_management/templates/migrations/create_templates.rb
M spec/factories/image_management/template.rb
M spec/models/target_image_spec.rb
M test/dummy/db/migrate/20120326103723532621_create_templates.rb
M test/dummy/db/schema.rb
Log Message:
-----------
Updated Template Model
Commit: fef952f6217c20cd2c80c58ca39f5e8a24aec910
https://github.com/aeolus-incubator/image-management-engine/commit/fef952...
Author: Martyn Taylor <mtaylor(a)redhat.com>
Date: 2012-06-01 (Fri, 01 Jun 2012)
Changed paths:
M app/models/image_management/base_image.rb
M lib/image_management.rb
A lib/rails_patches/active_record/base.rb
A spec/models/base_spec.rb
Log Message:
-----------
Added patch for ActiveResource to fix mass assign on nested attrs
ActiveRecord::Base does not handle mass assigning on nested
resources that have module namespace. This patch adds a
monkey patch that overrides the ActiveRecord::Base new, create,
update_attributes methods to support class_name on
accepts_attributes_for method. e.g.
accepts_attributes_for :template, :class_name => "ImageManagement::Template"
Commit: f0507293e6f2524587d8a3d07a0e14bf06ed1c41
https://github.com/aeolus-incubator/image-management-engine/commit/f05072...
Author: Martyn Taylor <mtaylor(a)redhat.com>
Date: 2012-06-01 (Fri, 01 Jun 2012)
Changed paths:
M Gemfile
M Gemfile.lock
M app/controllers/image_management/base_images_controller.rb
A app/views/image_management/base_images/_base_image.xml.haml
A app/views/image_management/base_images/_base_image_minimal.xml.haml
A app/views/image_management/base_images/index.xml.haml
A app/views/image_management/base_images/show.xml.haml
A app/views/image_management/templates/_template_minimal.xml.haml
A spec/controllers/base_images_controller_spec.rb
M spec/factories/image_management/base_image.rb
M spec/spec_helper.rb
M test/dummy/Gemfile.lock
Log Message:
-----------
Added Base Image API
Commit: 5c797a111593ca02736400d14ab6140a8e5c5320
https://github.com/aeolus-incubator/image-management-engine/commit/5c797a...
Author: Martyn Taylor <mtaylor(a)redhat.com>
Date: 2012-06-01 (Fri, 01 Jun 2012)
Changed paths:
M app/controllers/image_management/templates_controller.rb
A app/views/image_management/templates/_template.xml.haml
A app/views/image_management/templates/index.xml.haml
A app/views/image_management/templates/show.xml.haml
A spec/controllers/templates_controller_spec.rb
Log Message:
-----------
Added Templates API
Commit: aab84252864dc437d01620363464c2a313b1ffbd
https://github.com/aeolus-incubator/image-management-engine/commit/aab842...
Author: Martyn Taylor <mtaylor(a)redhat.com>
Date: 2012-06-01 (Fri, 01 Jun 2012)
Changed paths:
M app/controllers/image_management/image_versions_controller.rb
M app/models/image_management/image_version.rb
A app/views/image_management/image_versions/_image_version.xml.haml
A app/views/image_management/image_versions/_image_version_minimal.xml.haml
A app/views/image_management/image_versions/index.xml.haml
A app/views/image_management/image_versions/show.xml.haml
A spec/controllers/image_versions_controller_spec.rb
M spec/factories/image_management/image_version.rb
Log Message:
-----------
Added ImageVersions API
Commit: 7cf524a33420727c53fc1de55dab90e905791b52
https://github.com/aeolus-incubator/image-management-engine/commit/7cf524...
Author: Martyn Taylor <mtaylor(a)redhat.com>
Date: 2012-06-01 (Fri, 01 Jun 2012)
Changed paths:
M Gemfile
M Gemfile.lock
M app/controllers/image_management/target_images_controller.rb
M app/models/image_management/target_image.rb
A app/views/image_management/target_images/_target_image.xml.haml
A app/views/image_management/target_images/_target_image_minimal.xml.haml
A app/views/image_management/target_images/index.xml.haml
A app/views/image_management/target_images/show.xml.haml
A spec/controllers/target_images_controller_spec.rb
A spec/factories/image_management/image_factory/target_image.rb
M spec/factories/image_management/image_version.rb
M spec/factories/image_management/target_image.rb
M spec/spec_helper.rb
Log Message:
-----------
Added Target Images API
Commit: c64ba5cdd5e60d5b70f8b8d640f01b94d4fb7a63
https://github.com/aeolus-incubator/image-management-engine/commit/c64ba5...
Author: jguiditta <jason.guiditta(a)gmail.com>
Date: 2012-06-01 (Fri, 01 Jun 2012)
Changed paths:
M Gemfile
M Gemfile.lock
M app/controllers/image_management/base_images_controller.rb
M app/controllers/image_management/image_versions_controller.rb
M app/controllers/image_management/target_images_controller.rb
M app/controllers/image_management/templates_controller.rb
M app/models/image_management/base_image.rb
M app/models/image_management/image_version.rb
M app/models/image_management/target_image.rb
A app/views/image_management/base_images/_base_image.xml.haml
A app/views/image_management/base_images/_base_image_minimal.xml.haml
A app/views/image_management/base_images/index.xml.haml
A app/views/image_management/base_images/show.xml.haml
A app/views/image_management/image_versions/_image_version.xml.haml
A app/views/image_management/image_versions/_image_version_minimal.xml.haml
A app/views/image_management/image_versions/index.xml.haml
A app/views/image_management/image_versions/show.xml.haml
A app/views/image_management/target_images/_target_image.xml.haml
A app/views/image_management/target_images/_target_image_minimal.xml.haml
A app/views/image_management/target_images/index.xml.haml
A app/views/image_management/target_images/show.xml.haml
A app/views/image_management/templates/_template.xml.haml
A app/views/image_management/templates/_template_minimal.xml.haml
A app/views/image_management/templates/index.xml.haml
A app/views/image_management/templates/show.xml.haml
M lib/generators/image_management/templates/migrations/create_templates.rb
M lib/image_management.rb
A lib/rails_patches/active_record/base.rb
A spec/controllers/base_images_controller_spec.rb
A spec/controllers/image_versions_controller_spec.rb
A spec/controllers/target_images_controller_spec.rb
A spec/controllers/templates_controller_spec.rb
M spec/factories/image_management/base_image.rb
A spec/factories/image_management/image_factory/target_image.rb
M spec/factories/image_management/image_version.rb
M spec/factories/image_management/target_image.rb
M spec/factories/image_management/template.rb
A spec/models/base_spec.rb
M spec/models/target_image_spec.rb
M spec/spec_helper.rb
M test/dummy/Gemfile.lock
M test/dummy/db/migrate/20120326103723532621_create_templates.rb
M test/dummy/db/schema.rb
Log Message:
-----------
Merge pull request #8 from mtaylor/create_target_images_api
Create target images api
Compare: https://github.com/aeolus-incubator/image-management-engine/compare/910be...
11 years, 10 months
rubygem-activemodel RPM for RHEL6 in a public repo?
by Mark Lamourine
I'm working on adding RHEL6 specific elements to the Openshift Origin Build Your Own wiki page. I'm stuck trying to install stickshift-common. It wants rubygem-activemodel, but I can't seem to find that RPM anywhere in the public repos.
I have rhel 6 server, rhel-x86_64-server-optional-6 channel and epel repos configured.
I tried the Fedora-ruby repo but that's F16 stuff and doesn't include rubygem-activemodel either.
The only place I can find it is in the private li repo.
Am I missing something?
- Mark
--
Mark Lamourine <markllama(a)redhat.com>
Sr. Software Developer, Cloud Engineering
Red Hat, 314 Littleton Road, Westford MA 01886
Voice: +1 978 392 1093
http://people.redhat.com/~mlamouri
markllama @ irc://irc.freenod.org*lopsa
11 years, 10 months
[PATCH aeolus-image-rubygem 0/2] Katello API client
by Matt Wagner
Howdy,
This is a client for the Katello API that I've been working on.
Aeolus is going to need to be able to fetch system templates from Katello. Those belongs to environments, which belong to organizations, so you end up having to make some nested calls. This got very painful to try to code up manually, so base.rb implements some quick nesting capabilities.
It's worth noting that ActiveResource has a patch adding more robust associations upstream, but it's not in any released version yet, much less the 3.0.10 version that's in Fedora.
I'm not convinced that this belongs in aeolus-image-rubygem; it has litte to do with images. However, aeolus-image-rubygem was a library pulling various API clients into Conductor, and the reason I'm writing the Katello API was to fetch image templates, so it isn't too big of a leap. Let me know if you think this belongs elsewhere.
-- Matt
11 years, 10 months
Updates for the Aeolus "Get It" page, for RHEL/CentOS version?
by Justin Clift
Realised today that our "Get It" page still has instructions on it to enable
the "Optional" repo in RHEL/RHN/equiv.
Going to remove that, as it doesn't seem to be needed.
Did notice one hiccup though, specific to the RHEL6 version. We seem to be
missing the mustache rubygem:
Error: Package: aeolus-conductor-0.9.0-0.20120504193224gita8a4c66.el6_2.noarch (rhel-aeolus-testing)
Requires: rubygem(mustache) >= 0.99.4
You could try using --skip-broken to work around the problem
You could try running: rpm -Va --nofiles --nodigest
The EPEL repo has the requested mustache rubygem rpm in it, which lets installation
proceed.
I'm wondering if we should add the EPEL repo to our install instructions.
i.e. swap the "Optional" repo dependency for the EPEL repo
Anyone know if that would be a good/bad/otherwise thing to do?
Regards and best wishes,
Justin Clift
--
Aeolus Community Manager
http://www.aeolusproject.org
11 years, 10 months