[PATCH conductor] BZ788048: Fix permission checking on pools/_images
by Imre Farkas
From: Imre Farkas <ifarkas(a)redhat.com>
https://bugzilla.redhat.com/show_bug.cgi?id=788048
---
src/app/views/pools/_images.html.haml | 33 +++++++++++++++++----------------
1 files changed, 17 insertions(+), 16 deletions(-)
diff --git a/src/app/views/pools/_images.html.haml b/src/app/views/pools/_images.html.haml
index c580d96..cf5513d 100644
--- a/src/app/views/pools/_images.html.haml
+++ b/src/app/views/pools/_images.html.haml
@@ -5,21 +5,22 @@
=image_tag 'flash_error_icon.png', :alt => 'Errors'
=flash[:error]
-else
- - @pool.catalogs.each do |catalog|
- %div.catalog_deployments_and_images
- %h1
- = catalog.name
- = t('.catalog')
- - catalog.deployables.each do |deployable|
- %h2
- = deployable.name
- = t('.deployable')
+ - if check_privilege(Privilege::VIEW, PoolFamily, @pool.pool_family)
+ - @pool.catalogs.each do |catalog|
+ %div.catalog_deployments_and_images
+ %h1
+ = catalog.name
+ = t('.catalog')
+ - catalog.deployables.each do |deployable|
+ %h2
+ = deployable.name
+ = t('.deployable')
- - deployable.fetch_images.compact.each do |image|
- %h3
- = t('.image')
- = "#{image.name} (#{image.uuid})"
+ - deployable.fetch_images.compact.each do |image|
+ %h3
+ = t('.image')
+ = "#{image.name} (#{image.uuid})"
- %ul
- - image.provider_images.each do |provider_image|
- %li= t('.pushed', :uuid => provider_image.uuid, :provider => provider_image.provider_name)
+ %ul
+ - image.provider_images.each do |provider_image|
+ %li= t('.pushed', :uuid => provider_image.uuid, :provider => provider_image.provider_name)
--
1.7.6.5
12 years, 2 months
[PATCH Conductor 1/7] bug 788148: Take environment into account for permission inheritance
by Scott Seago
https://bugzilla.redhat.com/show_bug.cgi?id=788148
Add 'pool family' to permission inheritance for various types. In addition, refactor permission queries to reduce the join complexity:
1) denormalize 'pool family' association into deployments, instances, etc. -- once created it never changes, so this reduces the number of joins for permissions
2) pre-generate a list of roles that include the desired privilege -- this keeps the permission queries from having to join permissions, roles, and privileges tables (all 3 tables) multiple times in a single query. Sometimes two queries are better than one. This resulted in significant speedup in queries where the user was granted permissions via the pool family.
---
src/app/models/catalog.rb | 27 +++++++++++++++
src/app/models/deployable.rb | 34 ++++++++++++++++++-
src/app/models/deployment.rb | 20 ++++++++---
src/app/models/instance.rb | 23 ++++++++-----
src/app/models/permissioned_object.rb | 8 ++--
src/app/models/pool.rb | 19 +++++++++++
src/app/models/provider_account.rb | 7 +---
.../20120227150102_add_pool_family_to_instance.rb | 32 ++++++++++++++++++
8 files changed, 144 insertions(+), 26 deletions(-)
create mode 100644 src/db/migrate/20120227150102_add_pool_family_to_instance.rb
diff --git a/src/app/models/catalog.rb b/src/app/models/catalog.rb
index 3472c59..307c4dd 100644
--- a/src/app/models/catalog.rb
+++ b/src/app/models/catalog.rb
@@ -32,6 +32,7 @@ class Catalog < ActiveRecord::Base
include PermissionedObject
belongs_to :pool
+ belongs_to :pool_family
has_many :catalog_entries, :dependent => :destroy
has_many :deployables, :through => :catalog_entries
has_many :permissions, :as => :permission_object, :dependent => :destroy,
@@ -39,12 +40,34 @@ class Catalog < ActiveRecord::Base
:order => "permissions.id ASC"
before_destroy :destroy_deployables_related_only_to_self
+ before_create :set_pool_family
validates_presence_of :pool
validates_presence_of :name
validates_uniqueness_of :name
validates_length_of :name, :maximum => 1024
+ def object_list
+ super + [pool, pool_family]
+ end
+ class << self
+ alias orig_list_for_user_include list_for_user_include
+ alias orig_list_for_user_conditions list_for_user_conditions
+ end
+
+ def self.list_for_user_include
+ orig_list_for_user_include + [ {:pool => :permissions},
+ {:pool_family => :permissions} ]
+ end
+
+ def self.list_for_user_conditions
+ "(#{orig_list_for_user_conditions}) or
+ (permissions_pools.user_id=:user and
+ permissions_pools.role_id in (:role_ids)) or
+ (permissions_pool_families.user_id=:user and
+ permissions_pool_families.role_id in (:role_ids))"
+ end
+
PRESET_FILTERS_OPTIONS = [
{:title => I18n.t("catalogs.preset_filters.belongs_to_default_pool"), :id => "belongs_to_default_pool", :query => includes(:pool).where("pools.name" => "Default")}
]
@@ -53,6 +76,10 @@ class Catalog < ActiveRecord::Base
deployables.each {|d| d.destroy if d.catalogs.count == 1}
end
+ def set_pool_family
+ self[:pool_family_id] = pool.pool_family_id
+ end
+
private
def self.apply_search_filter(search)
diff --git a/src/app/models/deployable.rb b/src/app/models/deployable.rb
index c77f094..ad537a7 100644
--- a/src/app/models/deployable.rb
+++ b/src/app/models/deployable.rb
@@ -34,9 +34,11 @@ class Deployable < ActiveRecord::Base
:order => "permissions.id ASC"
has_many :catalog_entries, :dependent => :delete_all
has_many :catalogs, :through => :catalog_entries
+ belongs_to :pool_family
belongs_to :owner, :class_name => "User", :foreign_key => "owner_id"
after_create "assign_owner_roles(owner)"
+ before_create :set_pool_family
scope :without_catalog, lambda {
deployable_ids_in_association = CatalogEntry.select(:deployable_id).map(&:deployable_id)
@@ -45,6 +47,30 @@ class Deployable < ActiveRecord::Base
PRESET_FILTERS_OPTIONS = []
+ def object_list
+ super + catalogs + catalogs.collect{|c| c.pool} + [pool_family]
+ end
+ class << self
+ alias orig_list_for_user_include list_for_user_include
+ alias orig_list_for_user_conditions list_for_user_conditions
+ end
+
+ def self.list_for_user_include
+ orig_list_for_user_include + [ {:catalogs => [:permissions,
+ {:pool => :permissions}]},
+ {:pool_family => :permissions} ]
+ end
+
+ def self.list_for_user_conditions
+ "(#{orig_list_for_user_conditions}) or
+ (permissions_catalogs.user_id=:user and
+ permissions_catalogs.role_id in (:role_ids)) or
+ (permissions_pools.user_id=:user and
+ permissions_pools.role_id in (:role_ids)) or
+ (permissions_pool_families.user_id=:user and
+ permissions_pool_families.role_id in (:role_ids))"
+ end
+
def valid_deployable_xml?
begin
deployable_xml = DeployableXML.new(xml)
@@ -133,12 +159,12 @@ class Deployable < ActiveRecord::Base
:assembly => assembly.name,
:uuid => assembly.image_id)
else
- if image.environment != catalogs.first.pool.pool_family.name
+ if image.environment != pool_family.name
deployable_errors << I18n.t("deployables.flash.error.wrong_environment",
:assembly => assembly.name,
:uuid => assembly.image_id,
:wrong_env => image.environment,
- :environment => catalogs.first.pool.pool_family.name)
+ :environment => pool_family.name)
end
images << image
assembly_hash[:build_and_target_uuids] = get_build_and_target_uuids(image)
@@ -186,6 +212,10 @@ class Deployable < ActiveRecord::Base
(latest_build ? latest_build.target_images.collect { |ti| ti.uuid} : nil)]
end
+ def set_pool_family
+ self[:pool_family_id] = catalogs.first.pool.pool_family_id
+ end
+
private
def self.apply_search_filter(search)
diff --git a/src/app/models/deployment.rb b/src/app/models/deployment.rb
index ec66fdb..c0c88b2 100644
--- a/src/app/models/deployment.rb
+++ b/src/app/models/deployment.rb
@@ -42,6 +42,7 @@ class Deployment < ActiveRecord::Base
end
belongs_to :pool
+ belongs_to :pool_family
has_many :instances, :dependent => :destroy
@@ -71,6 +72,8 @@ class Deployment < ActiveRecord::Base
before_create :inject_launch_parameters
before_create :generate_uuid
before_save :replace_special_characters_in_name
+ before_create :set_pool_family
+
USER_MUTABLE_ATTRS = ['name']
STATE_MIXED = "mixed"
@@ -105,7 +108,7 @@ class Deployment < ActiveRecord::Base
end
def object_list
- super << pool
+ super + [pool, pool_family]
end
class << self
alias orig_list_for_user_include list_for_user_include
@@ -113,16 +116,16 @@ class Deployment < ActiveRecord::Base
end
def self.list_for_user_include
- includes = orig_list_for_user_include
- includes << { :pool => {:permissions => {:role => :privileges}}}
- includes
+ orig_list_for_user_include + [ {:pool => :permissions},
+ {:pool_family => :permissions} ]
end
def self.list_for_user_conditions
"(#{orig_list_for_user_conditions}) or
(permissions_pools.user_id=:user and
- privileges_roles.target_type=:target_type and
- privileges_roles.action=:action)"
+ permissions_pools.role_id in (:role_ids)) or
+ (permissions_pool_families.user_id=:user and
+ permissions_pool_families.role_id in (:role_ids))"
end
def get_action_list(user=nil)
@@ -596,4 +599,9 @@ class Deployment < ActiveRecord::Base
def replace_special_characters_in_name
name.gsub!(/[^a-zA-Z0-9]+/, '-')
end
+
+ def set_pool_family
+ self[:pool_family_id] = pool.pool_family_id
+ end
+
end
diff --git a/src/app/models/instance.rb b/src/app/models/instance.rb
index 9027e24..09ec599 100644
--- a/src/app/models/instance.rb
+++ b/src/app/models/instance.rb
@@ -70,6 +70,7 @@ class Instance < ActiveRecord::Base
@@per_page = 15
belongs_to :pool
+ belongs_to :pool_family
belongs_to :provider_account
belongs_to :deployment
@@ -100,6 +101,7 @@ class Instance < ActiveRecord::Base
validates_length_of :name, :maximum => 1024
before_create :generate_uuid
+ before_create :set_pool_family
STATE_NEW = "new"
STATE_PENDING = "pending"
@@ -144,7 +146,7 @@ class Instance < ActiveRecord::Base
USER_MUTABLE_ATTRS = ['name']
def object_list
- super + [pool, deployment]
+ super + [deployment, pool, pool_family]
end
class << self
alias orig_list_for_user_include list_for_user_include
@@ -152,20 +154,19 @@ class Instance < ActiveRecord::Base
end
def self.list_for_user_include
- includes = orig_list_for_user_include
- includes << { :pool => {:permissions => {:role => :privileges}},
- :deployment => {:permissions => {:role => :privileges}}}
- includes
+ orig_list_for_user_include + [ {:deployment => :permissions},
+ {:pool => :permissions},
+ {:pool_family => :permissions} ]
end
def self.list_for_user_conditions
"(#{orig_list_for_user_conditions}) or
(permissions_deployments.user_id=:user and
- privileges_roles.target_type=:target_type and
- privileges_roles.action=:action) or
+ permissions_deployments.role_id in (:role_ids)) or
(permissions_pools.user_id=:user and
- privileges_roles_2.target_type=:target_type and
- privileges_roles_2.action=:action)"
+ permissions_pools.role_id in (:role_ids)) or
+ (permissions_pool_families.user_id=:user and
+ permissions_pool_families.role_id in (:role_ids))"
end
def get_action_list(user=nil)
@@ -511,6 +512,10 @@ class Instance < ActiveRecord::Base
self[:uuid] = UUIDTools::UUID.timestamp_create.to_s
end
+ def set_pool_family
+ self[:pool_family_id] = pool.pool_family_id
+ end
+
def do_operation(user, operation)
@task = self.queue_action(user, operation)
unless @task
diff --git a/src/app/models/permissioned_object.rb b/src/app/models/permissioned_object.rb
index 36a2f25..c534261 100644
--- a/src/app/models/permissioned_object.rb
+++ b/src/app/models/permissioned_object.rb
@@ -59,20 +59,20 @@ module PermissionedObject
self.name.constantize
end
def self.list_for_user_include
- [{:permissions => {:role => :privileges}}]
+ [:permissions]
end
def self.list_for_user_conditions
"permissions.user_id=:user and
- privileges.target_type=:target_type and
- privileges.action=:action"
+ permissions.role_id in (:role_ids)"
end
def self.list_for_user(user, action, target_type=self.default_privilege_target_type)
return where("1=0") if user.nil? or action.nil? or target_type.nil?
if BasePermissionObject.general_permission_scope.has_privilege(user, action, target_type)
scoped
else
+ role_ids = Role.includes(:privileges).where("privileges.target_type" => target_type, "privileges.action" => action).collect {|r| r.id}
include_clause = self.list_for_user_include
- conditions_hash = {:user => user.id, :target_type => target_type.name, :action => action}
+ conditions_hash = {:user => user.id, :target_type => target_type.name, :action => action, :role_ids => role_ids}
conditions_str = self.list_for_user_conditions
includes(include_clause).where(conditions_str, conditions_hash)
end
diff --git a/src/app/models/pool.rb b/src/app/models/pool.rb
index be3d156..3fce49b 100644
--- a/src/app/models/pool.rb
+++ b/src/app/models/pool.rb
@@ -137,6 +137,25 @@ class Pool < ActiveRecord::Base
{:title => I18n.t("pools.preset_filters.with_stopped_instances"), :id => "with_stopped_instances", :query => includes(:deployments => :instances).where("instances.state" => "stopped")}
]
+ def object_list
+ super + [pool_family]
+ end
+ class << self
+ alias orig_list_for_user_include list_for_user_include
+ alias orig_list_for_user_conditions list_for_user_conditions
+ end
+
+ def self.list_for_user_include
+ orig_list_for_user_include + [ {:pool_family => :permissions} ]
+ end
+
+ def self.list_for_user_conditions
+ "(#{orig_list_for_user_conditions}) or
+ (permissions_pool_families.user_id=:user and
+ permissions_pool_families.role_id in (:role_ids))"
+ end
+
+
private
def self.apply_search_filter(search)
diff --git a/src/app/models/provider_account.rb b/src/app/models/provider_account.rb
index eff59f9..1e0ed69 100644
--- a/src/app/models/provider_account.rb
+++ b/src/app/models/provider_account.rb
@@ -115,16 +115,13 @@ class ProviderAccount < ActiveRecord::Base
end
def self.list_for_user_include
- includes = orig_list_for_user_include
- includes << { :provider => {:permissions => {:role => :privileges}}}
- includes
+ orig_list_for_user_include + [{ :provider => :permissions}]
end
def self.list_for_user_conditions
"(#{orig_list_for_user_conditions}) or
(permissions_providers.user_id=:user and
- privileges_roles.target_type=:target_type and
- privileges_roles.action=:action)"
+ permissions_providers.role_id in (:role_ids))"
end
def destroyable?
diff --git a/src/db/migrate/20120227150102_add_pool_family_to_instance.rb b/src/db/migrate/20120227150102_add_pool_family_to_instance.rb
new file mode 100644
index 0000000..00848ba
--- /dev/null
+++ b/src/db/migrate/20120227150102_add_pool_family_to_instance.rb
@@ -0,0 +1,32 @@
+class AddPoolFamilyToInstance < ActiveRecord::Migration
+ def self.up
+ add_column :instances, :pool_family_id, :integer
+ add_column :deployments, :pool_family_id, :integer
+ add_column :catalogs, :pool_family_id, :integer
+ add_column :deployables, :pool_family_id, :integer
+
+ Deployment.all.each do |deployment|
+ deployment.pool_family_id = deployment.pool.pool_family_id
+ deployment.save!
+ end
+ Instance.all.each do |instance|
+ instance.pool_family_id = instance.pool.pool_family_id
+ instance.save!
+ end
+ Catalog.all.each do |catalog|
+ catalog.pool_family_id = catalog.pool.pool_family_id
+ catalog.save!
+ end
+ Deployable.all.each do |deployable|
+ deployable.pool_family_id = deployable.catalogs.first.pool_family_id unless deployable.catalogs.empty?
+ deployable.save!
+ end
+ end
+
+ def self.down
+ remove_column :instances, :pool_family_id
+ remove_column :deployments, :pool_family_id
+ remove_column :catalogs, :pool_family_id
+ remove_column :deployables, :pool_family_id
+ end
+end
--
1.7.6.4
12 years, 2 months
[PATCH configure] BZ 798440 - /etc/aeolus-configure/nodes/* should be not be world readable
by Richard Su
https://bugzilla.redhat.com/show_bug.cgi?id=798440
Also changed permissions of /etc/imagefactory/imagefactory.conf to 0600.
---
contrib/aeolus-configure.spec.in | 1 +
recipes/aeolus/manifests/image-factory.pp | 3 +++
2 files changed, 4 insertions(+), 0 deletions(-)
diff --git a/contrib/aeolus-configure.spec.in b/contrib/aeolus-configure.spec.in
index 60aa246..9fae261 100644
--- a/contrib/aeolus-configure.spec.in
+++ b/contrib/aeolus-configure.spec.in
@@ -58,6 +58,7 @@ Aeolus Configure Puppet Recipe
%attr(0755, root, root) %{_sbindir}/aeolus-configure
%attr(0755, root, root) %{_sbindir}/aeolus-cleanup
%config(noreplace) %{_sysconfdir}/aeolus-configure/*
+%attr(0600, root, root) %{_sysconfdir}/aeolus-configure/nodes/*
%attr(0755, root, root) %{_bindir}/aeolus-check-services
%attr(0755, root, root) %{_sbindir}/aeolus-restart-services
%{aeolushome}
diff --git a/recipes/aeolus/manifests/image-factory.pp b/recipes/aeolus/manifests/image-factory.pp
index 744f9c2..7c2838b 100644
--- a/recipes/aeolus/manifests/image-factory.pp
+++ b/recipes/aeolus/manifests/image-factory.pp
@@ -57,6 +57,9 @@ class aeolus::image-factory inherits aeolus {
hasstatus => true,
require => Package['libvirt']}
+ file { "/etc/imagefactory/imagefactory.conf":
+ mode => 0600 }
+
augeas { 'imagefactory.conf':
incl => '/etc/imagefactory/imagefactory.conf',
lens => 'Json.lns',
--
1.7.7.6
12 years, 2 months
aeolus-configure error
by Russell Builta
Installing the beta bits at a customer site and not sure why I'mg getting this error:
---------------------------------------
[root@cloudforms ~]# aeolus-configure
Launching aeolus configuration recipe...
Could not find class aeolus::conductor for cloudforms.etc on node cloudforms.etc
---------------------------------------
Logs:
/var/log/aeolus-configure/aeolus-configure.log
-------------------------------------
Mon Feb 27 09:39:22 -0500 2012 Puppet (warning): Implicit invocation of 'puppet apply' by passing files (or flags) directly
to 'puppet' is deprecated, and will be removed in the 2.8 series. Please
invoke 'puppet apply' directly in the future.
-------------------------------------
Russell Builta
Red Hat Consultant
Mobile: 703.498.7460
12 years, 2 months
[PATCH conductor] Integrating Mustache.js
by Imre Farkas
This patchset is intended to solve the issue around template duplications for the haml templates and the jQuery templates used by backbone.
Mustache.js claims itself as logic-less template language which means e.g. there is no if statement provided by the language. But there are existing ruby gem and a javascript library, all ready to use.
The first patch contains a template handler for Rails. The mustache templates are used in 2 different ways:
- in rails the template compiled in the usual rails way (almost)
- for javascript the template just needs to be printed out
The template handler distinguishes the 2 mode by whether data is passed through the :mustache key or not.
Another problem with mustache would be the absence of rails helper methods. To solve this issue Petr and Tomas suggested some kind of template handler chaining so we could use erb and mustache together. Real template handler chaining hasn't come to rails yet, but something similar can be achieved. The MustacheTemplate::Handler class first compiles the template as an erb template and evaluate the rails helper methods, then compiles as a mustache template.
The rest of the patchset contains some refactored views.
12 years, 2 months
[PATCH aeolus-conductor 1/2] BZ#795523 Updated tdl.rng to validate OS name
by Martyn Taylor
From: Martyn Taylor <mtaylor(a)redhat.com>
---
src/app/util/template-rng.xml | 49 ++++++++++++++++++++++++++++++++++++++--
1 files changed, 46 insertions(+), 3 deletions(-)
diff --git a/src/app/util/template-rng.xml b/src/app/util/template-rng.xml
index ada49e4..65e1f19 100644
--- a/src/app/util/template-rng.xml
+++ b/src/app/util/template-rng.xml
@@ -1,5 +1,16 @@
<?xml version="1.0"?>
-<!-- A Relax NG schema for the TDL (template description language) format -->
+<!-- A Relax NG schema for the TDL (template description language) format
+
+#### Important Note
+##
+## This Schema is cloned from the upstream project Oz, it is modified to handle extra content validation. Please
+## do not use this schema for generating TDL templates, it is likely to change to coincide project specific requirements.
+## Always use the tdl.rng proper defined in the Oz project.
+##
+## The Oz project can be found here: https://github.com/clalancette/oz
+####
+
+-->
<grammar xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
<start>
<ref name='template'/>
@@ -19,7 +30,39 @@
<element name='os'>
<interleave>
<element name='name'>
- <text/>
+ <choice>
+ <value>Fedora</value>
+ <value>FedoraCore</value>
+ <value>FC</value>
+ <value>RedHatEnterpriseLinux-2.1</value>
+ <value>RHEL-2.1</value>
+ <value>RedHatEnterpriseLinux-3</value>
+ <value>RHEL-3</value>
+ <value>CentOS-3</value>
+ <value>RedHatEnterpriseLinux-4</value>
+ <value>RHEL-4</value>
+ <value>CentOS-4</value>
+ <value>ScientificLinux-4</value>
+ <value>SL-4</value>
+ <value>RedHatEnterpriseLinux-5</value>
+ <value>RHEL-5</value>
+ <value>CentOS-5</value>
+ <value>ScientificLinux-5</value>
+ <value>SL-5</value>
+ <value>RedHatEnterpriseLinux-6</value>
+ <value>RHEL-6</value>
+ <value>CentOS-6</value>
+ <value>ScientificLinux-6</value>
+ <value>SL-6</value>
+ <value>OracleEnterpriseLinux-6</value>
+ <value>OEL-6</value>
+ <value>Ubuntu</value>
+ <value>Windows</value>
+ <value>RedHatLinux</value>
+ <value>RHL</value>
+ <value>OpenSUSE</value>
+ <value>Debian</value>
+ </choice>
</element>
<element name='version'>
<text/>
@@ -233,4 +276,4 @@
<ref name='base64'/>
</define>
-</grammar>
+</grammar>
\ No newline at end of file
--
1.7.6.4
12 years, 2 months
[PATCH aeolus-conductor] BZ#796247 Update Credentials Check to use new DC Client Errors
by Martyn Taylor
From: Martyn Taylor <mtaylor(a)redhat.com>
---
src/app/models/provider_account.rb | 10 ++++++----
1 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/src/app/models/provider_account.rb b/src/app/models/provider_account.rb
index eff59f9..e53b4c6 100644
--- a/src/app/models/provider_account.rb
+++ b/src/app/models/provider_account.rb
@@ -87,10 +87,12 @@ class ProviderAccount < ActiveRecord::Base
def validate_credentials
begin
- unless valid_credentials?
- errors.add(:base, I18N.t('provider_accounts.errors.invalid_credentials'))
- end
- rescue
+ valid_credentials?
+ rescue DeltaCloud::HTTPError::Unauthorized => ue
+ logger.debug("Unauthorized Error Rasied by Deltacloud: #{ue.inspect}")
+ errors.add(:base, I18n.t('provider_accounts.errors.invalid_credentials'))
+ rescue => e
+ logger.error("Error validating credentials: #{e.inspect}")
errors.add(:base, I18n.t('provider_accounts.errors.exception_while_validating'))
end
end
--
1.7.6.4
12 years, 2 months
[PATCH] BZ 796695 enforce provider quota for multi instance deployments
by Tzu-Mainn Chen
---
src/app/models/deployment.rb | 4 ++++
1 files changed, 4 insertions(+), 0 deletions(-)
diff --git a/src/app/models/deployment.rb b/src/app/models/deployment.rb
index ec66fdb..aa4e870 100644
--- a/src/app/models/deployment.rb
+++ b/src/app/models/deployment.rb
@@ -376,6 +376,10 @@ class Deployment < ActiveRecord::Base
deployment_errors = []
deployment_errors << I18n.t('instances.errors.pool_quota_reached') if not pool.quota.can_start?(instances)
deployment_errors << I18n.t('instances.errors.pool_family_quota_reached') if not pool.pool_family.quota.can_start?(instances)
+ pool.pool_family.provider_accounts.each do |account|
+ deployment_errors << I18n.t('instances.errors.provider_account_quota_reached', :account_name => account.name) if not account.quota.can_start?(instances)
+ end
+
if not deployment_errors.empty?
raise Aeolus::Conductor::MultiError::UnlaunchableAssembly.new(I18n.t('deployments.flash.error.not_launched'), deployment_errors)
end
--
1.7.6.5
12 years, 2 months
[ANN conductor] Push to conductor requires update to aeolus-image-rubygem
by Matt Wagner
Hi,
Following Petr's advice from the other day, I wanted to let everybody
know that I pushed changes to aeolus-image-rubygem and Conductor, and my
Conductor changes start using a newly-added
Aeolus::Image::Warehouse::Image ".environment" method. You may get
exceptions relating to images if you don't upgrade aeolus-image-rubygem.
In case anyone's not familiar, you can build an aeolus-image-rubygem RPM
with "rake rpms" run in the aeolus-image-rubygem project. Then you
should be golden.
-- Matt
12 years, 2 months
[PATCH aeolus-cli 1/2] Added Line Number to validation errors
by Martyn Taylor
From: Martyn Taylor <mtaylor(a)redhat.com>
---
lib/aeolus_cli/command/build_command.rb | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/lib/aeolus_cli/command/build_command.rb b/lib/aeolus_cli/command/build_command.rb
index 6945cfa..32b2c73 100644
--- a/lib/aeolus_cli/command/build_command.rb
+++ b/lib/aeolus_cli/command/build_command.rb
@@ -64,7 +64,7 @@ module Aeolus
if errors.length > 0
puts "ERROR: The given Template does not conform to the TDL Schema, see below for specific details:"
errors.each do |error|
- puts "- " + error.message
+ puts "- Line: " + error.line.to_s + " => " + error.message
end
quit(1)
end
--
1.7.6.4
12 years, 2 months